@itwin/components-react 4.9.0-dev.1 → 4.9.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 (399) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +2 -3
  3. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  4. package/lib/cjs/components-react/common/DelayedSpinner.js +1 -1
  5. package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
  6. package/lib/cjs/components-react/common/HighlightedText.d.ts +2 -2
  7. package/lib/cjs/components-react/common/HighlightedText.d.ts.map +1 -1
  8. package/lib/cjs/components-react/datepicker/DateField.d.ts +2 -2
  9. package/lib/cjs/components-react/datepicker/DateField.d.ts.map +1 -1
  10. package/lib/cjs/components-react/datepicker/DateField.scss +5 -2
  11. package/lib/cjs/components-react/datepicker/DatePicker.d.ts +2 -2
  12. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  13. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  14. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  15. package/lib/cjs/components-react/datepicker/TimeField.d.ts +2 -2
  16. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  17. package/lib/cjs/components-react/datepicker/TimeField.js +4 -8
  18. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  19. package/lib/cjs/components-react/datepicker/TimeField.scss +6 -3
  20. package/lib/cjs/components-react/editors/BooleanEditor.d.ts +1 -1
  21. package/lib/cjs/components-react/editors/BooleanEditor.js +1 -1
  22. package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
  23. package/lib/cjs/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  24. package/lib/cjs/components-react/editors/CustomNumberEditor.js +1 -1
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  26. package/lib/cjs/components-react/editors/CustomNumberEditor.scss +5 -3
  27. package/lib/cjs/components-react/editors/EditorContainer.d.ts +1 -1
  28. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  29. package/lib/cjs/components-react/editors/EnumEditor.d.ts +1 -1
  30. package/lib/cjs/components-react/editors/EnumEditor.d.ts.map +1 -1
  31. package/lib/cjs/components-react/editors/EnumEditor.js +1 -8
  32. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  33. package/lib/cjs/components-react/editors/EnumEditor.scss +6 -4
  34. package/lib/cjs/components-react/editors/IconEditor.d.ts +1 -1
  35. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  36. package/lib/cjs/components-react/editors/NumericInputEditor.js +1 -1
  37. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  38. package/lib/cjs/components-react/editors/NumericInputEditor.scss +5 -3
  39. package/lib/cjs/components-react/editors/PopupButton.d.ts +2 -2
  40. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  41. package/lib/cjs/components-react/editors/SliderEditor.d.ts.map +1 -1
  42. package/lib/cjs/components-react/editors/SliderEditor.js +2 -5
  43. package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
  44. package/lib/cjs/components-react/editors/TextEditor.d.ts.map +1 -1
  45. package/lib/cjs/components-react/editors/TextEditor.js +1 -1
  46. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  47. package/lib/cjs/components-react/editors/TextEditor.scss +5 -3
  48. package/lib/cjs/components-react/editors/TextareaEditor.d.ts +0 -1
  49. package/lib/cjs/components-react/editors/TextareaEditor.d.ts.map +1 -1
  50. package/lib/cjs/components-react/editors/TextareaEditor.js +3 -4
  51. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  52. package/lib/cjs/components-react/editors/ToggleEditor.d.ts +1 -1
  53. package/lib/cjs/components-react/editors/ToggleEditor.js +1 -1
  54. package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
  55. package/lib/cjs/components-react/editors/ToggleEditor.scss +8 -2
  56. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  57. package/lib/cjs/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  58. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  59. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  60. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +3 -7
  61. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  62. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  63. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  64. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js +1 -73
  65. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  66. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  67. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  68. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js +30 -0
  69. package/lib/cjs/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  70. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  71. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  72. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js +76 -0
  73. package/lib/cjs/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  74. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  75. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  76. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +15 -9
  77. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  78. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  79. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  80. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  81. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +15 -40
  82. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  83. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  84. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  85. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  86. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +43 -6
  87. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  88. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  89. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  90. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  91. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  92. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  93. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  94. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +40 -2
  95. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  96. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  97. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  98. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +151 -44
  99. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  100. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  101. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  102. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js +30 -0
  103. package/lib/cjs/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  104. package/lib/cjs/components-react/filter-builder/Operators.d.ts +24 -19
  105. package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -1
  106. package/lib/cjs/components-react/filter-builder/Operators.js +40 -64
  107. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -1
  108. package/lib/cjs/components-react/filter-builder/Types.d.ts +2 -2
  109. package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -1
  110. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -1
  111. package/lib/cjs/components-react/filtering/FilteringInput.d.ts +1 -1
  112. package/lib/cjs/components-react/filtering/ResultSelector.d.ts +1 -1
  113. package/lib/cjs/components-react/filtering/ResultSelector.scss +1 -1
  114. package/lib/cjs/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  115. package/lib/cjs/components-react/inputs/ParsedInput.scss +4 -1
  116. package/lib/cjs/components-react/properties/LinkHandler.d.ts +1 -1
  117. package/lib/cjs/components-react/properties/LinkHandler.d.ts.map +1 -1
  118. package/lib/cjs/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  119. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  120. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  121. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  122. package/lib/cjs/components-react/properties/renderers/PropertyView.d.ts +1 -1
  123. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  124. package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  125. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  126. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  127. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  128. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  129. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  130. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  131. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  132. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  133. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  134. package/lib/cjs/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  135. package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  136. package/lib/cjs/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  137. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  138. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  139. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  140. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  141. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js +2 -4
  142. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  143. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +17 -0
  144. package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  145. package/lib/cjs/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  146. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  147. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +3 -2
  148. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  149. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  150. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  151. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts +2 -2
  152. package/lib/cjs/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  153. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  154. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  155. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts +1 -1
  156. package/lib/cjs/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  157. package/lib/cjs/components-react/toolbar/Items.d.ts +1 -1
  158. package/lib/cjs/components-react/toolbar/Items.d.ts.map +1 -1
  159. package/lib/cjs/components-react/toolbar/Overflow.d.ts +1 -1
  160. package/lib/cjs/components-react/toolbar/Overflow.d.ts.map +1 -1
  161. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts +1 -1
  162. package/lib/cjs/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  163. package/lib/cjs/components-react/toolbar/PopupItem.d.ts +2 -2
  164. package/lib/cjs/components-react/toolbar/PopupItem.d.ts.map +1 -1
  165. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  166. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  167. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  168. package/lib/cjs/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  169. package/lib/cjs/components-react/toolbar/Toolbar.d.ts +1 -1
  170. package/lib/cjs/components-react/toolbar/Toolbar.d.ts.map +1 -1
  171. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  172. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  173. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  174. package/lib/cjs/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  175. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  176. package/lib/cjs/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  177. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  178. package/lib/cjs/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  179. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  180. package/lib/cjs/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  181. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  182. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  183. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  184. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  185. package/lib/cjs/components-react/tree/controlled/TreeHooks.js +22 -1
  186. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  187. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  188. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  189. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  190. package/lib/cjs/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  191. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  192. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  193. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  194. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  195. package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  196. package/lib/cjs/components-react.d.ts +3 -0
  197. package/lib/cjs/components-react.d.ts.map +1 -1
  198. package/lib/cjs/components-react.js +3 -0
  199. package/lib/cjs/components-react.js.map +1 -1
  200. package/lib/esm/components-react/common/DelayedSpinner.d.ts +2 -3
  201. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  202. package/lib/esm/components-react/common/DelayedSpinner.js +1 -1
  203. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  204. package/lib/esm/components-react/common/HighlightedText.d.ts +2 -2
  205. package/lib/esm/components-react/common/HighlightedText.d.ts.map +1 -1
  206. package/lib/esm/components-react/datepicker/DateField.d.ts +2 -2
  207. package/lib/esm/components-react/datepicker/DateField.d.ts.map +1 -1
  208. package/lib/esm/components-react/datepicker/DateField.scss +5 -2
  209. package/lib/esm/components-react/datepicker/DatePicker.d.ts +2 -2
  210. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  211. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts +1 -1
  212. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  213. package/lib/esm/components-react/datepicker/TimeField.d.ts +2 -2
  214. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  215. package/lib/esm/components-react/datepicker/TimeField.js +4 -5
  216. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  217. package/lib/esm/components-react/datepicker/TimeField.scss +6 -3
  218. package/lib/esm/components-react/editors/BooleanEditor.d.ts +1 -1
  219. package/lib/esm/components-react/editors/BooleanEditor.js +1 -1
  220. package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
  221. package/lib/esm/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  222. package/lib/esm/components-react/editors/CustomNumberEditor.js +1 -1
  223. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  224. package/lib/esm/components-react/editors/CustomNumberEditor.scss +5 -3
  225. package/lib/esm/components-react/editors/EditorContainer.d.ts +1 -1
  226. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +1 -1
  227. package/lib/esm/components-react/editors/EnumEditor.d.ts +1 -1
  228. package/lib/esm/components-react/editors/EnumEditor.d.ts.map +1 -1
  229. package/lib/esm/components-react/editors/EnumEditor.js +1 -8
  230. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  231. package/lib/esm/components-react/editors/EnumEditor.scss +6 -4
  232. package/lib/esm/components-react/editors/IconEditor.d.ts +1 -1
  233. package/lib/esm/components-react/editors/ImageCheckBoxEditor.d.ts +1 -1
  234. package/lib/esm/components-react/editors/NumericInputEditor.js +1 -1
  235. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  236. package/lib/esm/components-react/editors/NumericInputEditor.scss +5 -3
  237. package/lib/esm/components-react/editors/PopupButton.d.ts +2 -2
  238. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  239. package/lib/esm/components-react/editors/SliderEditor.d.ts.map +1 -1
  240. package/lib/esm/components-react/editors/SliderEditor.js +2 -5
  241. package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
  242. package/lib/esm/components-react/editors/TextEditor.d.ts.map +1 -1
  243. package/lib/esm/components-react/editors/TextEditor.js +1 -1
  244. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  245. package/lib/esm/components-react/editors/TextEditor.scss +5 -3
  246. package/lib/esm/components-react/editors/TextareaEditor.d.ts +0 -1
  247. package/lib/esm/components-react/editors/TextareaEditor.d.ts.map +1 -1
  248. package/lib/esm/components-react/editors/TextareaEditor.js +3 -4
  249. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  250. package/lib/esm/components-react/editors/ToggleEditor.d.ts +1 -1
  251. package/lib/esm/components-react/editors/ToggleEditor.js +1 -1
  252. package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
  253. package/lib/esm/components-react/editors/ToggleEditor.scss +8 -2
  254. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts +2 -2
  255. package/lib/esm/components-react/favorite/FavoritePropertyList.d.ts.map +1 -1
  256. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +7 -3
  257. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  258. package/lib/esm/components-react/filter-builder/FilterBuilder.js +4 -8
  259. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  260. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts +0 -36
  261. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  262. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js +0 -71
  263. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  264. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts +24 -0
  265. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.d.ts.map +1 -0
  266. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js +23 -0
  267. package/lib/esm/components-react/filter-builder/FilterBuilderLogicalOperator.js.map +1 -0
  268. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts +31 -0
  269. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.d.ts.map +1 -0
  270. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js +73 -0
  271. package/lib/esm/components-react/filter-builder/FilterBuilderRangeValue.js.map +1 -0
  272. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +4 -3
  273. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  274. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +19 -13
  275. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  276. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +37 -22
  277. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +10 -6
  278. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  279. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +17 -42
  280. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  281. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +25 -59
  282. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +11 -6
  283. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -1
  284. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +41 -5
  285. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  286. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +1 -1
  287. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  288. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -1
  289. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  290. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +4 -4
  291. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  292. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +39 -1
  293. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  294. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +10 -11
  295. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  296. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +149 -42
  297. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  298. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts +20 -0
  299. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.d.ts.map +1 -0
  300. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js +23 -0
  301. package/lib/esm/components-react/filter-builder/FilterBuilderToolbar.js.map +1 -0
  302. package/lib/esm/components-react/filter-builder/Operators.d.ts +24 -19
  303. package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -1
  304. package/lib/esm/components-react/filter-builder/Operators.js +37 -61
  305. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -1
  306. package/lib/esm/components-react/filter-builder/Types.d.ts +2 -2
  307. package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -1
  308. package/lib/esm/components-react/filter-builder/Types.js.map +1 -1
  309. package/lib/esm/components-react/filtering/FilteringInput.d.ts +1 -1
  310. package/lib/esm/components-react/filtering/ResultSelector.d.ts +1 -1
  311. package/lib/esm/components-react/filtering/ResultSelector.scss +1 -1
  312. package/lib/esm/components-react/iconpicker/IconPickerButton.d.ts +1 -1
  313. package/lib/esm/components-react/inputs/ParsedInput.scss +4 -1
  314. package/lib/esm/components-react/properties/LinkHandler.d.ts +1 -1
  315. package/lib/esm/components-react/properties/LinkHandler.d.ts.map +1 -1
  316. package/lib/esm/components-react/properties/renderers/ActionButtonList.d.ts +1 -1
  317. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.d.ts +1 -1
  318. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.d.ts +1 -1
  319. package/lib/esm/components-react/properties/renderers/PropertyRenderer.d.ts +1 -1
  320. package/lib/esm/components-react/properties/renderers/PropertyView.d.ts +1 -1
  321. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts +1 -1
  322. package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.d.ts +1 -1
  323. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.d.ts +1 -1
  324. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts +2 -2
  325. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  326. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts +2 -2
  327. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  328. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts +2 -2
  329. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.d.ts.map +1 -1
  330. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts +2 -2
  331. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.d.ts.map +1 -1
  332. package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.d.ts +1 -1
  333. package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.d.ts +1 -1
  334. package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.d.ts +1 -1
  335. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts +1 -1
  336. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.d.ts.map +1 -1
  337. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts +1 -1
  338. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  339. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js +2 -4
  340. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  341. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +17 -0
  342. package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.d.ts +1 -1
  343. package/lib/esm/components-react/propertygrid/component/PropertyList.d.ts +1 -1
  344. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.d.ts +1 -1
  345. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +3 -2
  346. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts +5 -2
  347. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  348. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts +1 -1
  349. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts +2 -2
  350. package/lib/esm/components-react/selectable-content/SelectableContent.d.ts.map +1 -1
  351. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts +2 -2
  352. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -1
  353. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts +1 -1
  354. package/lib/esm/components-react/toolbar/ItemWrapper.d.ts.map +1 -1
  355. package/lib/esm/components-react/toolbar/Items.d.ts +1 -1
  356. package/lib/esm/components-react/toolbar/Items.d.ts.map +1 -1
  357. package/lib/esm/components-react/toolbar/Overflow.d.ts +1 -1
  358. package/lib/esm/components-react/toolbar/Overflow.d.ts.map +1 -1
  359. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts +1 -1
  360. package/lib/esm/components-react/toolbar/OverflowPanel.d.ts.map +1 -1
  361. package/lib/esm/components-react/toolbar/PopupItem.d.ts +2 -2
  362. package/lib/esm/components-react/toolbar/PopupItem.d.ts.map +1 -1
  363. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts +2 -2
  364. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  365. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts +2 -2
  366. package/lib/esm/components-react/toolbar/PopupItemsPanel.d.ts.map +1 -1
  367. package/lib/esm/components-react/toolbar/Toolbar.d.ts +1 -1
  368. package/lib/esm/components-react/toolbar/Toolbar.d.ts.map +1 -1
  369. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts +1 -1
  370. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  371. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts +1 -1
  372. package/lib/esm/components-react/toolbar/groupPanel/Column.d.ts.map +1 -1
  373. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts +1 -1
  374. package/lib/esm/components-react/toolbar/groupPanel/Columns.d.ts.map +1 -1
  375. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts +1 -1
  376. package/lib/esm/components-react/toolbar/groupPanel/Panel.d.ts.map +1 -1
  377. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts +1 -1
  378. package/lib/esm/components-react/toolbar/groupPanel/Title.d.ts.map +1 -1
  379. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts +1 -1
  380. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.d.ts.map +1 -1
  381. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts +12 -0
  382. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  383. package/lib/esm/components-react/tree/controlled/TreeHooks.js +21 -1
  384. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  385. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts +1 -1
  386. package/lib/esm/components-react/tree/controlled/component/ControlledTree.d.ts.map +1 -1
  387. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts +2 -2
  388. package/lib/esm/components-react/tree/controlled/component/NodeContent.d.ts.map +1 -1
  389. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts +1 -1
  390. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.d.ts.map +1 -1
  391. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +1 -1
  392. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  393. package/lib/esm/components-react/tree/controlled/component/TreeRenderer.d.ts +1 -1
  394. package/lib/esm/components-react.d.ts +3 -0
  395. package/lib/esm/components-react.d.ts.map +1 -1
  396. package/lib/esm/components-react.js +3 -0
  397. package/lib/esm/components-react.js.map +1 -1
  398. package/lib/public/locales/en/UiComponents.json +12 -7
  399. package/package.json +10 -11
@@ -16,75 +16,4 @@ export const PropertyFilterBuilderContext = React.createContext(null);
16
16
  * @internal
17
17
  */
18
18
  export const PropertyFilterBuilderRuleRenderingContext = React.createContext({});
19
- /**
20
- * Context for tracking and storing active rule group in [[PropertyFilterBuilder]].
21
- * Group is considered active if it is focused or hovered.
22
- * @internal
23
- */
24
- export const ActiveRuleGroupContext = React.createContext(null);
25
- /**
26
- * Custom hook that created value for [[ActiveRuleGroupContext]].
27
- * @internal
28
- */
29
- export function useActiveRuleGroupContextProps(rootElementRef) {
30
- const [focusedElement, setFocusedElement] = React.useState();
31
- const [hoveredElement, setHoveredElement] = React.useState();
32
- // This is used to prevent handling onFocus, onBlur, onMouseOver, onMouseOut in the same event cycle.
33
- const focusedTimeout = useSetTimeout();
34
- const hoveredTimeout = useSetTimeout();
35
- const onFocus = (e) => {
36
- e.stopPropagation();
37
- const target = e.currentTarget;
38
- focusedTimeout(() => {
39
- setFocusedElement(target);
40
- });
41
- };
42
- const onBlur = (e) => {
43
- e.stopPropagation();
44
- if (focusedElement !== e.currentTarget ||
45
- (rootElementRef.current &&
46
- rootElementRef.current.contains(e.relatedTarget)))
47
- return;
48
- focusedTimeout(() => {
49
- setFocusedElement(undefined);
50
- });
51
- };
52
- const onMouseOver = (e) => {
53
- const target = e.currentTarget;
54
- e.stopPropagation();
55
- hoveredTimeout(() => {
56
- setHoveredElement(target);
57
- });
58
- };
59
- const onMouseOut = (e) => {
60
- e.stopPropagation();
61
- // istanbul ignore if
62
- if (hoveredElement !== e.currentTarget)
63
- return;
64
- hoveredTimeout(() => {
65
- setHoveredElement(undefined);
66
- });
67
- };
68
- return {
69
- focusedElement,
70
- hoveredElement,
71
- onFocus,
72
- onBlur,
73
- onMouseOver,
74
- onMouseOut,
75
- };
76
- }
77
- function useSetTimeout() {
78
- const timeoutRef = React.useRef();
79
- React.useEffect(() => {
80
- // clear pending timeout on unmount
81
- return () => {
82
- window.clearTimeout(timeoutRef.current);
83
- };
84
- }, []);
85
- return (callback) => {
86
- window.clearTimeout(timeoutRef.current);
87
- timeoutRef.current = window.setTimeout(callback);
88
- };
89
- }
90
19
  //# sourceMappingURL=FilterBuilderContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderContext.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderContext.tsx"],"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 * as React from \"react\";\nimport type { PropertyDescription } from \"@itwin/appui-abstract\";\nimport type { PropertyFilterBuilderActions } from \"./FilterBuilderState\";\nimport type { PropertyFilterBuilderRuleOperatorProps } from \"./FilterBuilderRuleOperator\";\nimport type { PropertyFilterBuilderRuleValueRendererProps } from \"./FilterBuilderRuleValue\";\n\n/**\n * Data structure that describes [[PropertyFilterBuilderContext]] value.\n * @internal\n */\nexport interface PropertyFilterBuilderContextProps {\n /** Actions for modifying [[PropertyFilterBuilder]] state. */\n actions: PropertyFilterBuilderActions;\n /** List of available properties. */\n properties: PropertyDescription[];\n /** Callback to invoke when property is selected in any rule. */\n onRulePropertySelected?: (property: PropertyDescription) => void;\n /** Specifies how deep rule groups can be nested. */\n ruleGroupDepthLimit?: number;\n}\n\n/**\n * Context used to store data for rules and rule groups rendered inside [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport const PropertyFilterBuilderContext =\n React.createContext<PropertyFilterBuilderContextProps>(null!);\n\n/**\n * Data structure that describes [[PropertyFilterBuilderRuleRenderingContext]] value.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRenderingContextProps {\n /** Custom renderer for operator selector in rule. */\n ruleOperatorRenderer?: (\n props: PropertyFilterBuilderRuleOperatorProps\n ) => React.ReactNode;\n /** Custom renderer for value input in rule. */\n ruleValueRenderer?: (\n props: PropertyFilterBuilderRuleValueRendererProps\n ) => React.ReactNode;\n /** Custom renderer for property selector in rule. */\n propertyRenderer?: (name: string) => React.ReactNode;\n /** Specifies that properties selection is disabled. */\n isDisabled?: boolean;\n}\n\n/**\n * Context for rendering rules and rule groups inside [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport const PropertyFilterBuilderRuleRenderingContext =\n React.createContext<PropertyFilterBuilderRuleRenderingContextProps>({});\n\n/**\n * Data structure that describes value of [[ActiveRuleGroupContext]].\n * @internal\n */\nexport interface ActiveRuleGroupContextProps {\n /** Element of currently focused rule group. */\n focusedElement: HTMLElement | undefined;\n /** Element of currently hovered rule group. */\n hoveredElement: HTMLElement | undefined;\n /** Even handler for rule group element 'onFocus' event */\n onFocus: React.FocusEventHandler<HTMLElement>;\n /** Even handler for rule group element 'onBlur' event */\n onBlur: React.FocusEventHandler<HTMLElement>;\n /** Even handler for rule group element 'onMouseOver' event */\n onMouseOver: React.MouseEventHandler<HTMLElement>;\n /** Even handler for rule group element 'onMouseOut' event */\n onMouseOut: React.MouseEventHandler<HTMLElement>;\n}\n\n/**\n * Context for tracking and storing active rule group in [[PropertyFilterBuilder]].\n * Group is considered active if it is focused or hovered.\n * @internal\n */\nexport const ActiveRuleGroupContext =\n React.createContext<ActiveRuleGroupContextProps>(null!);\n\n/**\n * Custom hook that created value for [[ActiveRuleGroupContext]].\n * @internal\n */\nexport function useActiveRuleGroupContextProps(\n rootElementRef: React.RefObject<HTMLElement>\n) {\n const [focusedElement, setFocusedElement] = React.useState<\n HTMLElement | undefined\n >();\n const [hoveredElement, setHoveredElement] = React.useState<\n HTMLElement | undefined\n >();\n\n // This is used to prevent handling onFocus, onBlur, onMouseOver, onMouseOut in the same event cycle.\n const focusedTimeout = useSetTimeout();\n const hoveredTimeout = useSetTimeout();\n\n const onFocus: React.FocusEventHandler<HTMLElement> = (e) => {\n e.stopPropagation();\n const target = e.currentTarget;\n focusedTimeout(() => {\n setFocusedElement(target);\n });\n };\n\n const onBlur: React.FocusEventHandler<HTMLElement> = (e) => {\n e.stopPropagation();\n if (\n focusedElement !== e.currentTarget ||\n (rootElementRef.current &&\n rootElementRef.current.contains(e.relatedTarget))\n )\n return;\n\n focusedTimeout(() => {\n setFocusedElement(undefined);\n });\n };\n\n const onMouseOver: React.MouseEventHandler<HTMLElement> = (e) => {\n const target = e.currentTarget;\n e.stopPropagation();\n hoveredTimeout(() => {\n setHoveredElement(target);\n });\n };\n\n const onMouseOut: React.MouseEventHandler<HTMLElement> = (e) => {\n e.stopPropagation();\n // istanbul ignore if\n if (hoveredElement !== e.currentTarget) return;\n\n hoveredTimeout(() => {\n setHoveredElement(undefined);\n });\n };\n\n return {\n focusedElement,\n hoveredElement,\n onFocus,\n onBlur,\n onMouseOver,\n onMouseOut,\n };\n}\n\nfunction useSetTimeout() {\n const timeoutRef = React.useRef<number>();\n\n React.useEffect(() => {\n // clear pending timeout on unmount\n return () => {\n window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return (callback: () => void) => {\n window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(callback);\n };\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderContext.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderContext.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GACvC,KAAK,CAAC,aAAa,CAAoC,IAAK,CAAC,CAAC;AAqBhE;;;GAGG;AACH,MAAM,CAAC,MAAM,yCAAyC,GACpD,KAAK,CAAC,aAAa,CAAiD,EAAE,CAAC,CAAC","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 } from \"@itwin/appui-abstract\";\nimport type { PropertyFilterBuilderActions } from \"./FilterBuilderState\";\nimport type { PropertyFilterBuilderRuleOperatorProps } from \"./FilterBuilderRuleOperator\";\nimport type { PropertyFilterBuilderRuleValueRendererProps } from \"./FilterBuilderRuleValue\";\n\n/**\n * Data structure that describes [[PropertyFilterBuilderContext]] value.\n * @internal\n */\nexport interface PropertyFilterBuilderContextProps {\n /** Actions for modifying [[PropertyFilterBuilder]] state. */\n actions: PropertyFilterBuilderActions;\n /** List of available properties. */\n properties: PropertyDescription[];\n /** Callback to invoke when property is selected in any rule. */\n onRulePropertySelected?: (property: PropertyDescription) => void;\n /** Specifies how deep rule groups can be nested. */\n ruleGroupDepthLimit?: number;\n}\n\n/**\n * Context used to store data for rules and rule groups rendered inside [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport const PropertyFilterBuilderContext =\n React.createContext<PropertyFilterBuilderContextProps>(null!);\n\n/**\n * Data structure that describes [[PropertyFilterBuilderRuleRenderingContext]] value.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRenderingContextProps {\n /** Custom renderer for operator selector in rule. */\n ruleOperatorRenderer?: (\n props: PropertyFilterBuilderRuleOperatorProps\n ) => React.ReactNode;\n /** Custom renderer for value input in rule. */\n ruleValueRenderer?: (\n props: PropertyFilterBuilderRuleValueRendererProps\n ) => React.ReactNode;\n /** Custom renderer for property selector in rule. */\n propertyRenderer?: (name: string) => React.ReactNode;\n /** Specifies that properties selection is disabled. */\n isDisabled?: boolean;\n}\n\n/**\n * Context for rendering rules and rule groups inside [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport const PropertyFilterBuilderRuleRenderingContext =\n React.createContext<PropertyFilterBuilderRuleRenderingContextProps>({});\n"]}
@@ -0,0 +1,24 @@
1
+ /** @packageDocumentation
2
+ * @module PropertyFilterBuilder
3
+ */
4
+ import React from "react";
5
+ import type { PropertyFilterRuleGroupOperator } from "./Operators";
6
+ /**
7
+ * Props for [[PropertyFilterBuilderLogicalOperator]] component.
8
+ * @beta
9
+ */
10
+ export interface PropertyFilterBuilderLogicalOperatorProps {
11
+ /** Allows toggling of operator by clicking operator text. */
12
+ isDisabled?: boolean;
13
+ /** Operator to combine FilterBuilderRules. Must be either "and" or "or". */
14
+ operator: `${PropertyFilterRuleGroupOperator}`;
15
+ /** Callback that is invoked when operator changes. */
16
+ onOperatorChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;
17
+ /** Classname to specify CSS styling */
18
+ className?: string;
19
+ }
20
+ /** Component to render the operator inside of the filter builder
21
+ * @beta
22
+ */
23
+ export declare const PropertyFilterBuilderLogicalOperator: (props: PropertyFilterBuilderLogicalOperatorProps) => React.JSX.Element;
24
+ //# sourceMappingURL=FilterBuilderLogicalOperator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderLogicalOperator.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderLogicalOperator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,yCAAyC;IACxD,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAC/C,sDAAsD;IACtD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,GAAG,+BAA+B,EAAE,KAAK,IAAI,CAAC;IAC3E,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,oCAAoC,UACxC,yCAAyC,sBAyBjD,CAAC"}
@@ -0,0 +1,23 @@
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
+ /** @packageDocumentation
6
+ * @module PropertyFilterBuilder
7
+ */
8
+ import React from "react";
9
+ import cx from "classnames";
10
+ import { Anchor } from "@itwin/itwinui-react";
11
+ import { UiComponents } from "../UiComponents";
12
+ /** Component to render the operator inside of the filter builder
13
+ * @beta
14
+ */
15
+ export const PropertyFilterBuilderLogicalOperator = (props) => {
16
+ const { isDisabled, operator, onOperatorChange, className } = props;
17
+ const toggle = () => (operator === "and" ? "or" : "and");
18
+ const operatorDisplayText = operator === "and"
19
+ ? UiComponents.translate("filterBuilder.operators.and")
20
+ : UiComponents.translate("filterBuilder.operators.or");
21
+ return (React.createElement("div", { className: cx("fb-logical-operator", className) }, isDisabled ? (React.createElement("span", null, operatorDisplayText)) : (React.createElement(Anchor, { className: "fb-logical-operator-toggle", onClick: () => onOperatorChange(toggle()) }, operatorDisplayText))));
22
+ };
23
+ //# sourceMappingURL=FilterBuilderLogicalOperator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderLogicalOperator.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderLogicalOperator.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkB/C;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,KAAgD,EAChD,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEpE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,mBAAmB,GACvB,QAAQ,KAAK,KAAK;QAChB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,6BAA6B,CAAC;QACvD,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAE3D,OAAO,CACL,6BAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,IACjD,UAAU,CAAC,CAAC,CAAC,CACZ,kCAAO,mBAAmB,CAAQ,CACnC,CAAC,CAAC,CAAC,CACF,oBAAC,MAAM,IACL,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,IAExC,mBAAmB,CACb,CACV,CACG,CACP,CAAC;AACJ,CAAC,CAAC","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 */\nimport React from \"react\";\nimport cx from \"classnames\";\nimport { Anchor } from \"@itwin/itwinui-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport type { PropertyFilterRuleGroupOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderLogicalOperator]] component.\n * @beta\n */\nexport interface PropertyFilterBuilderLogicalOperatorProps {\n /** Allows toggling of operator by clicking operator text. */\n isDisabled?: boolean;\n /** Operator to combine FilterBuilderRules. Must be either \"and\" or \"or\". */\n operator: `${PropertyFilterRuleGroupOperator}`;\n /** Callback that is invoked when operator changes. */\n onOperatorChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;\n /** Classname to specify CSS styling */\n className?: string;\n}\n\n/** Component to render the operator inside of the filter builder\n * @beta\n */\nexport const PropertyFilterBuilderLogicalOperator = (\n props: PropertyFilterBuilderLogicalOperatorProps\n) => {\n const { isDisabled, operator, onOperatorChange, className } = props;\n\n const toggle = () => (operator === \"and\" ? \"or\" : \"and\");\n\n const operatorDisplayText =\n operator === \"and\"\n ? UiComponents.translate(\"filterBuilder.operators.and\")\n : UiComponents.translate(\"filterBuilder.operators.or\");\n\n return (\n <div className={cx(\"fb-logical-operator\", className)}>\n {isDisabled ? (\n <span>{operatorDisplayText}</span>\n ) : (\n <Anchor\n className=\"fb-logical-operator-toggle\"\n onClick={() => onOperatorChange(toggle())}\n >\n {operatorDisplayText}\n </Anchor>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,31 @@
1
+ /** @packageDocumentation
2
+ * @module PropertyFilterBuilder
3
+ */
4
+ import type { PrimitiveValue, PropertyValue } from "@itwin/appui-abstract";
5
+ /**
6
+ * Data structure that describes range value.
7
+ * @beta
8
+ */
9
+ export interface PropertyFilterBuilderRuleRangeValue {
10
+ from: PrimitiveValue;
11
+ to: PrimitiveValue;
12
+ }
13
+ /** @beta */
14
+ export declare namespace PropertyFilterBuilderRuleRangeValue {
15
+ /**
16
+ * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].
17
+ * @beta
18
+ */
19
+ function parse(val?: PropertyValue): PropertyFilterBuilderRuleRangeValue;
20
+ /**
21
+ * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].
22
+ * @beta
23
+ */
24
+ function serialize(val: PropertyFilterBuilderRuleRangeValue): PrimitiveValue;
25
+ /**
26
+ * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.
27
+ * @beta
28
+ */
29
+ function isRangeValid({ from, to, }: PropertyFilterBuilderRuleRangeValue): boolean;
30
+ }
31
+ //# sourceMappingURL=FilterBuilderRangeValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderRangeValue.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRangeValue.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E;;;GAGG;AACH,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,cAAc,CAAC;CACpB;AAED,YAAY;AACZ,yBAAiB,mCAAmC,CAAC;IACnD;;;OAGG;IACH,SAAgB,KAAK,CACnB,GAAG,CAAC,EAAE,aAAa,GAClB,mCAAmC,CAErC;IAED;;;OAGG;IACH,SAAgB,SAAS,CACvB,GAAG,EAAE,mCAAmC,GACvC,cAAc,CAKhB;IAED;;;OAGG;IACH,SAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,EAAE,GACH,EAAE,mCAAmC,WAUrC;CACF"}
@@ -0,0 +1,73 @@
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
+ /** @packageDocumentation
6
+ * @module PropertyFilterBuilder
7
+ */
8
+ import { PropertyValueFormat } from "@itwin/appui-abstract";
9
+ /** @beta */
10
+ export var PropertyFilterBuilderRuleRangeValue;
11
+ (function (PropertyFilterBuilderRuleRangeValue) {
12
+ /**
13
+ * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].
14
+ * @beta
15
+ */
16
+ function parse(val) {
17
+ return parseRangeValue(val);
18
+ }
19
+ PropertyFilterBuilderRuleRangeValue.parse = parse;
20
+ /**
21
+ * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].
22
+ * @beta
23
+ */
24
+ function serialize(val) {
25
+ return {
26
+ valueFormat: PropertyValueFormat.Primitive,
27
+ value: JSON.stringify(val),
28
+ };
29
+ }
30
+ PropertyFilterBuilderRuleRangeValue.serialize = serialize;
31
+ /**
32
+ * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.
33
+ * @beta
34
+ */
35
+ function isRangeValid({ from, to, }) {
36
+ if (isNumericValue(from) && isNumericValue(to)) {
37
+ return from.value < to.value;
38
+ }
39
+ if (isDateValue(from) && isDateValue(to)) {
40
+ return new Date(from.value) < new Date(to.value);
41
+ }
42
+ return false;
43
+ }
44
+ PropertyFilterBuilderRuleRangeValue.isRangeValid = isRangeValid;
45
+ })(PropertyFilterBuilderRuleRangeValue || (PropertyFilterBuilderRuleRangeValue = {}));
46
+ function isNumericValue(value) {
47
+ return typeof value.value === "number";
48
+ }
49
+ function isDateValue(value) {
50
+ return typeof value.value === "string" || value.value instanceof Date;
51
+ }
52
+ function parseRangeValue(val) {
53
+ if (!val ||
54
+ val.valueFormat !== PropertyValueFormat.Primitive ||
55
+ typeof val.value !== "string") {
56
+ return {
57
+ from: { valueFormat: PropertyValueFormat.Primitive },
58
+ to: { valueFormat: PropertyValueFormat.Primitive },
59
+ };
60
+ }
61
+ try {
62
+ const value = JSON.parse(val.value);
63
+ if (value.from !== undefined && value.to !== undefined) {
64
+ return value;
65
+ }
66
+ }
67
+ catch { }
68
+ return {
69
+ from: { valueFormat: PropertyValueFormat.Primitive },
70
+ to: { valueFormat: PropertyValueFormat.Primitive },
71
+ };
72
+ }
73
+ //# sourceMappingURL=FilterBuilderRangeValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterBuilderRangeValue.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRangeValue.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAW5D,YAAY;AACZ,MAAM,KAAW,mCAAmC,CA0CnD;AA1CD,WAAiB,mCAAmC;IAClD;;;OAGG;IACH,SAAgB,KAAK,CACnB,GAAmB;QAEnB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAJe,yCAAK,QAIpB,CAAA;IAED;;;OAGG;IACH,SAAgB,SAAS,CACvB,GAAwC;QAExC,OAAO;YACL,WAAW,EAAE,mBAAmB,CAAC,SAAS;YAC1C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;IAPe,6CAAS,YAOxB,CAAA;IAED;;;OAGG;IACH,SAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,EAAE,GACkC;QACpC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;SAC9B;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;YACxC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;SAClD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAbe,gDAAY,eAa3B,CAAA;AACH,CAAC,EA1CgB,mCAAmC,KAAnC,mCAAmC,QA0CnD;AAED,SAAS,cAAc,CACrB,KAAqB;IAErB,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAClB,KAAqB;IAErB,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CACtB,GAAmB;IAEnB,IACE,CAAC,GAAG;QACJ,GAAG,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS;QACjD,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAC7B;QACA,OAAO;YACL,IAAI,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;YACpD,EAAE,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;SACnD,CAAC;KACH;IAED,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;YACtD,OAAO,KAA4C,CAAC;SACrD;KACF;IAAC,MAAM,GAAE;IAEV,OAAO;QACL,IAAI,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;QACpD,EAAE,EAAE,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE;KACnD,CAAC;AACJ,CAAC","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 { PrimitiveValue, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\n\n/**\n * Data structure that describes range value.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleRangeValue {\n from: PrimitiveValue;\n to: PrimitiveValue;\n}\n\n/** @beta */\nexport namespace PropertyFilterBuilderRuleRangeValue {\n /**\n * Parses [[PropertyFilterBuilderRuleRangeValue]] from [[PropertyValue]].\n * @beta\n */\n export function parse(\n val?: PropertyValue\n ): PropertyFilterBuilderRuleRangeValue {\n return parseRangeValue(val);\n }\n\n /**\n * Serializes [[PropertyFilterBuilderRuleRangeValue]] into [[PrimitiveValue]].\n * @beta\n */\n export function serialize(\n val: PropertyFilterBuilderRuleRangeValue\n ): PrimitiveValue {\n return {\n valueFormat: PropertyValueFormat.Primitive,\n value: JSON.stringify(val),\n };\n }\n\n /**\n * Checks if [[PropertyFilterBuilderRuleRangeValue]] has valid range.\n * @beta\n */\n export function isRangeValid({\n from,\n to,\n }: PropertyFilterBuilderRuleRangeValue) {\n if (isNumericValue(from) && isNumericValue(to)) {\n return from.value < to.value;\n }\n\n if (isDateValue(from) && isDateValue(to)) {\n return new Date(from.value) < new Date(to.value);\n }\n\n return false;\n }\n}\n\nfunction isNumericValue(\n value: PrimitiveValue\n): value is PrimitiveValue & { value: number } {\n return typeof value.value === \"number\";\n}\n\nfunction isDateValue(\n value: PrimitiveValue\n): value is PrimitiveValue & { value: string | Date } {\n return typeof value.value === \"string\" || value.value instanceof Date;\n}\n\nfunction parseRangeValue(\n val?: PropertyValue\n): PropertyFilterBuilderRuleRangeValue {\n if (\n !val ||\n val.valueFormat !== PropertyValueFormat.Primitive ||\n typeof val.value !== \"string\"\n ) {\n return {\n from: { valueFormat: PropertyValueFormat.Primitive },\n to: { valueFormat: PropertyValueFormat.Primitive },\n };\n }\n\n try {\n const value = JSON.parse(val.value);\n if (value.from !== undefined && value.to !== undefined) {\n return value as PropertyFilterBuilderRuleRangeValue;\n }\n } catch {}\n\n return {\n from: { valueFormat: PropertyValueFormat.Primitive },\n to: { valueFormat: PropertyValueFormat.Primitive },\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  /** @packageDocumentation
2
2
  * @module PropertyFilterBuilder
3
3
  */
4
- /// <reference types="react" />
5
4
  import "./FilterBuilderRule.scss";
5
+ import * as React from "react";
6
6
  import type { PropertyFilterBuilderRule } from "./FilterBuilderState";
7
7
  /**
8
8
  * Props for [[PropertyFilterBuilderRuleRenderer]] component.
@@ -13,11 +13,12 @@ export interface PropertyFilterBuilderRuleRendererProps {
13
13
  path: string[];
14
14
  /** Rule to render. */
15
15
  rule: PropertyFilterBuilderRule;
16
- isRemovable?: boolean;
16
+ /** Function to add rule to group */
17
+ onRuleAdded: () => void;
17
18
  }
18
19
  /**
19
20
  * Component that renders single rule in [[PropertyFilterBuilder]] component.
20
21
  * @internal
21
22
  */
22
- export declare function PropertyFilterBuilderRuleRenderer(props: PropertyFilterBuilderRuleRendererProps): JSX.Element;
23
+ export declare function PropertyFilterBuilderRuleRenderer(props: PropertyFilterBuilderRuleRendererProps): React.JSX.Element;
23
24
  //# sourceMappingURL=FilterBuilderRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRule.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAEH,OAAO,0BAA0B,CAAC;AAYlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAItE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,eAiH9C"}
1
+ {"version":3,"file":"FilterBuilderRule.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAOtE;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,yBAAyB,CAAC;IAChC,oCAAoC;IACpC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,qBAoH9C"}
@@ -7,19 +7,20 @@
7
7
  */
8
8
  import "./FilterBuilderRule.scss";
9
9
  import * as React from "react";
10
- import { SvgDelete, SvgStatusError } from "@itwin/itwinui-icons-react";
11
- import { IconButton, InputGrid, StatusMessage } from "@itwin/itwinui-react";
10
+ import { SvgStatusError } from "@itwin/itwinui-icons-react";
11
+ import { Flex, Text } from "@itwin/itwinui-react";
12
12
  import { PropertyFilterBuilderContext, PropertyFilterBuilderRuleRenderingContext, } from "./FilterBuilderContext";
13
- import { PropertyFilterBuilderRuleOperator } from "./FilterBuilderRuleOperator";
13
+ import { PropertyFilterBuilderRuleOperatorRenderer } from "./FilterBuilderRuleOperator";
14
14
  import { PropertyFilterBuilderRuleProperty } from "./FilterBuilderRuleProperty";
15
15
  import { PropertyFilterBuilderRuleValue } from "./FilterBuilderRuleValue";
16
- import { isUnaryPropertyFilterOperator } from "./Operators";
16
+ import { isUnaryPropertyFilterBuilderOperator, } from "./Operators";
17
+ import { PropertyFilterBuilderToolbar } from "./FilterBuilderToolbar";
17
18
  /**
18
19
  * Component that renders single rule in [[PropertyFilterBuilder]] component.
19
20
  * @internal
20
21
  */
21
22
  export function PropertyFilterBuilderRuleRenderer(props) {
22
- const { path, rule, isRemovable } = props;
23
+ const { path, rule, onRuleAdded } = props;
23
24
  const { properties, actions, onRulePropertySelected } = React.useContext(PropertyFilterBuilderContext);
24
25
  const { ruleOperatorRenderer, ruleValueRenderer, propertyRenderer, isDisabled, } = React.useContext(PropertyFilterBuilderRuleRenderingContext);
25
26
  const { property, operator, value } = rule;
@@ -37,6 +38,10 @@ export function PropertyFilterBuilderRuleRenderer(props) {
37
38
  actions.setRuleValue(path, newValue);
38
39
  }, [path, actions]);
39
40
  const removeRule = () => actions.removeItem(path);
41
+ const handleRuleAdded = () => {
42
+ actions.addItem([], "RULE");
43
+ onRuleAdded();
44
+ };
40
45
  const operatorRenderer = React.useCallback((prop) => {
41
46
  if (ruleOperatorRenderer)
42
47
  return ruleOperatorRenderer({
@@ -44,7 +49,7 @@ export function PropertyFilterBuilderRuleRenderer(props) {
44
49
  operator,
45
50
  onChange: onRuleOperatorChange,
46
51
  });
47
- return (React.createElement(PropertyFilterBuilderRuleOperator, { property: prop, onChange: onRuleOperatorChange, operator: operator }));
52
+ return (React.createElement(PropertyFilterBuilderRuleOperatorRenderer, { property: prop, onChange: onRuleOperatorChange, operator: operator }));
48
53
  }, [operator, ruleOperatorRenderer, onRuleOperatorChange]);
49
54
  const valueRenderer = React.useCallback((prop, op) => {
50
55
  if (ruleValueRenderer)
@@ -54,18 +59,19 @@ export function PropertyFilterBuilderRuleRenderer(props) {
54
59
  onChange: onRuleValueChange,
55
60
  operator: op,
56
61
  });
57
- return (React.createElement(PropertyFilterBuilderRuleValue, { property: prop, onChange: onRuleValueChange, value: value }));
62
+ return (React.createElement(PropertyFilterBuilderRuleValue, { property: prop, onChange: onRuleValueChange, value: value, operator: op }));
58
63
  }, [value, ruleValueRenderer, onRuleValueChange]);
59
- return (React.createElement("div", { className: "rule" },
60
- React.createElement("div", { className: "rule-remove-action" }, property || isRemovable ? (React.createElement(IconButton, { onClick: removeRule, styleType: "borderless", size: "small" },
61
- React.createElement(SvgDelete, null))) : null),
62
- React.createElement("div", { className: "rule-condition" },
64
+ return (React.createElement("div", { className: "fb-component-row" },
65
+ React.createElement(Flex, { className: "fb-row-container", gap: "s", alignItems: "flex-start" },
63
66
  React.createElement(PropertyFilterBuilderRuleProperty, { properties: properties, selectedProperty: rule.property, onSelectedPropertyChanged: onSelectedPropertyChanged, propertyRenderer: propertyRenderer, isDisabled: isDisabled }),
64
67
  property !== undefined ? operatorRenderer(property) : null,
65
68
  property !== undefined &&
66
69
  operator !== undefined &&
67
- !isUnaryPropertyFilterOperator(operator) ? (React.createElement(InputGrid, null,
70
+ !isUnaryPropertyFilterBuilderOperator(operator) ? (React.createElement("div", { className: "fb-property-value" },
68
71
  valueRenderer(property, operator),
69
- rule.errorMessage ? (React.createElement(StatusMessage, { startIcon: React.createElement(SvgStatusError, null), status: "negative" }, rule.errorMessage)) : null)) : null)));
72
+ rule.errorMessage ? (React.createElement(Flex, null,
73
+ React.createElement(SvgStatusError, null),
74
+ React.createElement(Text, null, rule.errorMessage))) : null)) : null,
75
+ React.createElement(PropertyFilterBuilderToolbar, { onAddChild: handleRuleAdded, onDelete: removeRule }))));
70
76
  }
71
77
  //# sourceMappingURL=FilterBuilderRule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRule.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"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 \"./FilterBuilderRule.scss\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { SvgDelete, SvgStatusError } from \"@itwin/itwinui-icons-react\";\nimport { IconButton, InputGrid, StatusMessage } from \"@itwin/itwinui-react\";\nimport {\n PropertyFilterBuilderContext,\n PropertyFilterBuilderRuleRenderingContext,\n} from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleOperator } from \"./FilterBuilderRuleOperator\";\nimport { PropertyFilterBuilderRuleProperty } from \"./FilterBuilderRuleProperty\";\nimport { PropertyFilterBuilderRuleValue } from \"./FilterBuilderRuleValue\";\nimport type { PropertyFilterBuilderRule } from \"./FilterBuilderState\";\nimport type { PropertyFilterRuleOperator } from \"./Operators\";\nimport { isUnaryPropertyFilterOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule. */\n path: string[];\n /** Rule to render. */\n rule: PropertyFilterBuilderRule;\n isRemovable?: boolean;\n}\n\n/**\n * Component that renders single rule in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleRenderer(\n props: PropertyFilterBuilderRuleRendererProps\n) {\n const { path, rule, isRemovable } = props;\n const { properties, actions, onRulePropertySelected } = React.useContext(\n PropertyFilterBuilderContext\n );\n const {\n ruleOperatorRenderer,\n ruleValueRenderer,\n propertyRenderer,\n isDisabled,\n } = React.useContext(PropertyFilterBuilderRuleRenderingContext);\n const { property, operator, value } = rule;\n\n const onSelectedPropertyChanged = React.useCallback(\n (newProperty?: PropertyDescription) => {\n actions.setRuleProperty(path, newProperty);\n // invoke 'onRulePropertySelected' when new property is selected. There is no way to deselect property\n // so 'newProperty' will be 'undefined' only if selected property is no longer in 'properties' list.\n if (onRulePropertySelected && newProperty)\n onRulePropertySelected(newProperty);\n },\n [path, onRulePropertySelected, actions]\n );\n\n const onRuleOperatorChange = React.useCallback(\n (newOperator: PropertyFilterRuleOperator) => {\n actions.setRuleOperator(path, newOperator);\n },\n [path, actions]\n );\n\n const onRuleValueChange = React.useCallback(\n (newValue: PropertyValue) => {\n actions.setRuleValue(path, newValue);\n },\n [path, actions]\n );\n\n const removeRule = () => actions.removeItem(path);\n\n const operatorRenderer = React.useCallback(\n (prop: PropertyDescription) => {\n if (ruleOperatorRenderer)\n return ruleOperatorRenderer({\n property: prop,\n operator,\n onChange: onRuleOperatorChange,\n });\n return (\n <PropertyFilterBuilderRuleOperator\n property={prop}\n onChange={onRuleOperatorChange}\n operator={operator}\n />\n );\n },\n [operator, ruleOperatorRenderer, onRuleOperatorChange]\n );\n\n const valueRenderer = React.useCallback(\n (prop: PropertyDescription, op: PropertyFilterRuleOperator) => {\n if (ruleValueRenderer)\n return ruleValueRenderer({\n property: prop,\n value,\n onChange: onRuleValueChange,\n operator: op,\n });\n return (\n <PropertyFilterBuilderRuleValue\n property={prop}\n onChange={onRuleValueChange}\n value={value}\n />\n );\n },\n [value, ruleValueRenderer, onRuleValueChange]\n );\n\n return (\n <div className=\"rule\">\n <div className=\"rule-remove-action\">\n {property || isRemovable ? (\n <IconButton onClick={removeRule} styleType=\"borderless\" size=\"small\">\n <SvgDelete />\n </IconButton>\n ) : null}\n </div>\n <div className=\"rule-condition\">\n <PropertyFilterBuilderRuleProperty\n properties={properties}\n selectedProperty={rule.property}\n onSelectedPropertyChanged={onSelectedPropertyChanged}\n propertyRenderer={propertyRenderer}\n isDisabled={isDisabled}\n />\n {property !== undefined ? operatorRenderer(property) : null}\n {property !== undefined &&\n operator !== undefined &&\n !isUnaryPropertyFilterOperator(operator) ? (\n <InputGrid>\n {valueRenderer(property, operator)}\n {rule.errorMessage ? (\n <StatusMessage startIcon={<SvgStatusError />} status=\"negative\">\n {rule.errorMessage}\n </StatusMessage>\n ) : null}\n </InputGrid>\n ) : null}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderRule.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRule.tsx"],"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 \"./FilterBuilderRule.scss\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { SvgStatusError } from \"@itwin/itwinui-icons-react\";\nimport { Flex, Text } from \"@itwin/itwinui-react\";\nimport {\n PropertyFilterBuilderContext,\n PropertyFilterBuilderRuleRenderingContext,\n} from \"./FilterBuilderContext\";\nimport { PropertyFilterBuilderRuleOperatorRenderer } from \"./FilterBuilderRuleOperator\";\nimport { PropertyFilterBuilderRuleProperty } from \"./FilterBuilderRuleProperty\";\nimport { PropertyFilterBuilderRuleValue } from \"./FilterBuilderRuleValue\";\nimport type { PropertyFilterBuilderRule } from \"./FilterBuilderState\";\nimport {\n isUnaryPropertyFilterBuilderOperator,\n type PropertyFilterBuilderRuleOperator,\n} from \"./Operators\";\nimport { PropertyFilterBuilderToolbar } from \"./FilterBuilderToolbar\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleRenderer]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleRendererProps {\n /** Path from [[PropertyFilterBuilder]] root to this rule. */\n path: string[];\n /** Rule to render. */\n rule: PropertyFilterBuilderRule;\n /** Function to add rule to group */\n onRuleAdded: () => void;\n}\n\n/**\n * Component that renders single rule in [[PropertyFilterBuilder]] component.\n * @internal\n */\nexport function PropertyFilterBuilderRuleRenderer(\n props: PropertyFilterBuilderRuleRendererProps\n) {\n const { path, rule, onRuleAdded } = props;\n const { properties, actions, onRulePropertySelected } = React.useContext(\n PropertyFilterBuilderContext\n );\n const {\n ruleOperatorRenderer,\n ruleValueRenderer,\n propertyRenderer,\n isDisabled,\n } = React.useContext(PropertyFilterBuilderRuleRenderingContext);\n const { property, operator, value } = rule;\n\n const onSelectedPropertyChanged = React.useCallback(\n (newProperty?: PropertyDescription) => {\n actions.setRuleProperty(path, newProperty);\n // invoke 'onRulePropertySelected' when new property is selected. There is no way to deselect property\n // so 'newProperty' will be 'undefined' only if selected property is no longer in 'properties' list.\n if (onRulePropertySelected && newProperty)\n onRulePropertySelected(newProperty);\n },\n [path, onRulePropertySelected, actions]\n );\n\n const onRuleOperatorChange = React.useCallback(\n (newOperator: PropertyFilterBuilderRuleOperator) => {\n actions.setRuleOperator(path, newOperator);\n },\n [path, actions]\n );\n\n const onRuleValueChange = React.useCallback(\n (newValue: PropertyValue) => {\n actions.setRuleValue(path, newValue);\n },\n [path, actions]\n );\n\n const removeRule = () => actions.removeItem(path);\n const handleRuleAdded = () => {\n actions.addItem([], \"RULE\");\n onRuleAdded();\n };\n\n const operatorRenderer = React.useCallback(\n (prop: PropertyDescription) => {\n if (ruleOperatorRenderer)\n return ruleOperatorRenderer({\n property: prop,\n operator,\n onChange: onRuleOperatorChange,\n });\n return (\n <PropertyFilterBuilderRuleOperatorRenderer\n property={prop}\n onChange={onRuleOperatorChange}\n operator={operator}\n />\n );\n },\n [operator, ruleOperatorRenderer, onRuleOperatorChange]\n );\n\n const valueRenderer = React.useCallback(\n (prop: PropertyDescription, op: PropertyFilterBuilderRuleOperator) => {\n if (ruleValueRenderer)\n return ruleValueRenderer({\n property: prop,\n value,\n onChange: onRuleValueChange,\n operator: op,\n });\n return (\n <PropertyFilterBuilderRuleValue\n property={prop}\n onChange={onRuleValueChange}\n value={value}\n operator={op}\n />\n );\n },\n [value, ruleValueRenderer, onRuleValueChange]\n );\n\n return (\n <div className=\"fb-component-row\">\n <Flex className=\"fb-row-container\" gap=\"s\" alignItems=\"flex-start\">\n <PropertyFilterBuilderRuleProperty\n properties={properties}\n selectedProperty={rule.property}\n onSelectedPropertyChanged={onSelectedPropertyChanged}\n propertyRenderer={propertyRenderer}\n isDisabled={isDisabled}\n />\n {property !== undefined ? operatorRenderer(property) : null}\n {property !== undefined &&\n operator !== undefined &&\n !isUnaryPropertyFilterBuilderOperator(operator) ? (\n <div className=\"fb-property-value\">\n {valueRenderer(property, operator)}\n {rule.errorMessage ? (\n <Flex>\n <SvgStatusError />\n <Text>{rule.errorMessage}</Text>\n </Flex>\n ) : null}\n </div>\n ) : null}\n <PropertyFilterBuilderToolbar\n onAddChild={handleRuleAdded}\n onDelete={removeRule}\n />\n </Flex>\n </div>\n );\n}\n"]}
@@ -2,38 +2,53 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
+ .fb-row {
6
+ --background-color: var(--iui-color-background);
7
+ --border-color: var(--iui-color-border);
8
+ --operator-width: 5rem;
9
+ --property-name-width: 25%;
10
+ --condition-width: 10rem;
11
+ --toolbar-width: 6.25rem;
12
+ border: 1px solid var(--iui-color-border);
13
+ display: block;
14
+ position: relative;
5
15
 
6
- .rule {
7
- display: grid;
8
- grid-template-columns: min-content auto;
9
- padding: 3px 0;
16
+ &:not(:last-child) {
17
+ //only show buttons on last row to prevent visual clutter
18
+ .fb-add-rule-button:first-child {
19
+ visibility: hidden;
20
+ }
21
+ }
10
22
 
11
- .rule-condition {
12
- display: grid;
13
- grid-template-columns: minmax(auto, 500px) 150px minmax(auto, 100%);
14
- grid-column-gap: var(--iui-size-m);
15
- width: calc(100% - var(--iui-size-s));
23
+ &:not(:first-child) {
24
+ border-top: none;
16
25
  }
17
26
 
18
- .rule-remove-action {
19
- padding-right: var(--iui-size-s);
20
- visibility: hidden;
27
+ > div {
28
+ background: var(--background-color);
29
+ align-items: stretch;
30
+ overflow: hidden;
21
31
  }
22
32
 
23
- &:focus-within .rule-remove-action,
24
- &:hover .rule-remove-action {
25
- visibility: visible;
33
+ .fb-row-container {
34
+ padding-block: var(--iui-size-s);
35
+ padding-inline: var(--iui-size-m);
36
+ flex: 1;
26
37
  }
27
- }
28
38
 
29
- .rule-group-items > .rule {
30
- padding-bottom: 14px;
39
+ .fb-row-condition {
40
+ width: var(--condition-width);
41
+ }
31
42
 
32
- &:first-child {
33
- padding-top: 14px;
43
+ .fb-property-value {
44
+ flex: 1;
45
+ width: 15rem;
46
+ display: flex;
47
+ flex-direction: column;
34
48
  }
35
49
 
36
- &:only-child {
37
- padding-top: 3px;
50
+ .fb-row-toolbar {
51
+ width: var(--toolbar-width);
52
+ margin-left: auto;
38
53
  }
39
54
  }
@@ -1,10 +1,10 @@
1
1
  /** @packageDocumentation
2
2
  * @module PropertyFilterBuilder
3
3
  */
4
- /// <reference types="react" />
5
4
  import "./FilterBuilderRuleGroup.scss";
5
+ import * as React from "react";
6
6
  import type { PropertyFilterBuilderRuleGroup } from "./FilterBuilderState";
7
- import { PropertyFilterRuleGroupOperator } from "./Operators";
7
+ import type { PropertyFilterRuleGroupOperator } from "./Operators";
8
8
  /**
9
9
  * Props for [[PropertyFilterBuilderRuleGroupRenderer]] component.
10
10
  * @internal
@@ -14,25 +14,29 @@ export interface PropertyFilterBuilderRuleGroupRendererProps {
14
14
  path: string[];
15
15
  /** Rule group to render. */
16
16
  group: PropertyFilterBuilderRuleGroup;
17
+ /** Controls whether the group operator is toggle-able. */
18
+ isGroupOperatorDisabled?: boolean;
17
19
  }
18
20
  /**
19
21
  * Component that renders group of rules in [[PropertyFilterBuilder]] component.
20
22
  * @internal
21
23
  */
22
- export declare function PropertyFilterBuilderRuleGroupRenderer(props: PropertyFilterBuilderRuleGroupRendererProps): JSX.Element;
24
+ export declare function PropertyFilterBuilderRuleGroupRenderer(props: PropertyFilterBuilderRuleGroupRendererProps): React.JSX.Element;
23
25
  /**
24
26
  * Props for [[PropertyFilterBuilderRuleGroupOperator]] component.
25
27
  * @internal
26
28
  */
27
29
  export interface PropertyFilterBuilderRuleGroupOperatorProps {
28
30
  /** Currently selected operator. */
29
- operator: PropertyFilterRuleGroupOperator;
31
+ operator: `${PropertyFilterRuleGroupOperator}`;
30
32
  /** Callback that is invoked when selected operator changes. */
31
- onChange: (operator: PropertyFilterRuleGroupOperator) => void;
33
+ onChange: (operator: `${PropertyFilterRuleGroupOperator}`) => void;
34
+ /** Controls whether the group operator is toggle-able. */
35
+ isGroupOperatorDisabled?: boolean;
32
36
  }
33
37
  /**
34
38
  * Component that renders [[PropertyFilterBuilderRuleGroup]] operator selector.
35
39
  * @internal
36
40
  */
37
- export declare function PropertyFilterBuilderRuleGroupOperator(props: PropertyFilterBuilderRuleGroupOperatorProps): JSX.Element;
41
+ export declare function PropertyFilterBuilderRuleGroupOperator(props: PropertyFilterBuilderRuleGroupOperatorProps): React.JSX.Element;
38
42
  //# sourceMappingURL=FilterBuilderRuleGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAEH,OAAO,+BAA+B,CAAC;AAWvC,OAAO,KAAK,EACV,8BAA8B,EAE/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mEAAmE;IACnE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,8BAA8B,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,eAiGnD;AAED;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,eA8BnD"}
1
+ {"version":3,"file":"FilterBuilderRuleGroup.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleGroup.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,8BAA8B,EAE/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAGnE;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mEAAmE;IACnE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,8BAA8B,CAAC;IACtC,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,qBA0CnD;AAED;;;GAGG;AACH,MAAM,WAAW,2CAA2C;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,GAAG,+BAA+B,EAAE,CAAC;IAC/C,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,+BAA+B,EAAE,KAAK,IAAI,CAAC;IACnE,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,qBAcnD"}