@itwin/components-react 4.8.1 → 4.9.0-dev.1

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 (144) hide show
  1. package/CHANGELOG.md +6 -6
  2. package/lib/cjs/components-react/UiComponents.d.ts.map +1 -1
  3. package/lib/cjs/components-react/UiComponents.js +1 -0
  4. package/lib/cjs/components-react/UiComponents.js.map +1 -1
  5. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +3 -2
  6. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  7. package/lib/cjs/components-react/common/DelayedSpinner.js +1 -1
  8. package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
  9. package/lib/cjs/components-react/common/ImageRenderer.d.ts.map +1 -1
  10. package/lib/cjs/components-react/common/ImageRenderer.js +3 -4
  11. package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
  12. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  13. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  14. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  15. package/lib/cjs/components-react/datepicker/DateField.scss +2 -5
  16. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  17. package/lib/cjs/components-react/datepicker/TimeField.js +8 -4
  18. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  19. package/lib/cjs/components-react/datepicker/TimeField.scss +3 -6
  20. package/lib/cjs/components-react/editors/BooleanEditor.js +1 -1
  21. package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
  22. package/lib/cjs/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  23. package/lib/cjs/components-react/editors/CustomNumberEditor.js +1 -1
  24. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.scss +3 -5
  26. package/lib/cjs/components-react/editors/EnumEditor.d.ts.map +1 -1
  27. package/lib/cjs/components-react/editors/EnumEditor.js +8 -1
  28. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  29. package/lib/cjs/components-react/editors/EnumEditor.scss +4 -6
  30. package/lib/cjs/components-react/editors/NumericInputEditor.js +1 -1
  31. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  32. package/lib/cjs/components-react/editors/NumericInputEditor.scss +3 -5
  33. package/lib/cjs/components-react/editors/SliderEditor.d.ts.map +1 -1
  34. package/lib/cjs/components-react/editors/SliderEditor.js +5 -2
  35. package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
  36. package/lib/cjs/components-react/editors/TextEditor.d.ts.map +1 -1
  37. package/lib/cjs/components-react/editors/TextEditor.js +1 -1
  38. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  39. package/lib/cjs/components-react/editors/TextEditor.scss +3 -5
  40. package/lib/cjs/components-react/editors/TextareaEditor.d.ts +1 -0
  41. package/lib/cjs/components-react/editors/TextareaEditor.d.ts.map +1 -1
  42. package/lib/cjs/components-react/editors/TextareaEditor.js +4 -3
  43. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  44. package/lib/cjs/components-react/editors/ToggleEditor.js +1 -1
  45. package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
  46. package/lib/cjs/components-react/editors/ToggleEditor.scss +2 -8
  47. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  48. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +3 -5
  49. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  50. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  51. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  52. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +2 -2
  53. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  54. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +1 -1
  55. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  56. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  57. package/lib/cjs/components-react/filtering/ResultSelector.scss +1 -1
  58. package/lib/cjs/components-react/inputs/ParsedInput.scss +1 -4
  59. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  60. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js +4 -2
  61. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  62. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +0 -17
  63. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +2 -3
  64. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  65. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +42 -10
  66. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  67. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  68. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  69. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js +22 -1
  70. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  71. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  72. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  73. package/lib/esm/components-react/UiComponents.d.ts.map +1 -1
  74. package/lib/esm/components-react/UiComponents.js +1 -0
  75. package/lib/esm/components-react/UiComponents.js.map +1 -1
  76. package/lib/esm/components-react/common/DelayedSpinner.d.ts +3 -2
  77. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  78. package/lib/esm/components-react/common/DelayedSpinner.js +1 -1
  79. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  80. package/lib/esm/components-react/common/ImageRenderer.d.ts.map +1 -1
  81. package/lib/esm/components-react/common/ImageRenderer.js +3 -4
  82. package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
  83. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  84. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  85. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  86. package/lib/esm/components-react/datepicker/DateField.scss +2 -5
  87. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  88. package/lib/esm/components-react/datepicker/TimeField.js +5 -4
  89. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  90. package/lib/esm/components-react/datepicker/TimeField.scss +3 -6
  91. package/lib/esm/components-react/editors/BooleanEditor.js +1 -1
  92. package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
  93. package/lib/esm/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  94. package/lib/esm/components-react/editors/CustomNumberEditor.js +1 -1
  95. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  96. package/lib/esm/components-react/editors/CustomNumberEditor.scss +3 -5
  97. package/lib/esm/components-react/editors/EnumEditor.d.ts.map +1 -1
  98. package/lib/esm/components-react/editors/EnumEditor.js +8 -1
  99. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  100. package/lib/esm/components-react/editors/EnumEditor.scss +4 -6
  101. package/lib/esm/components-react/editors/NumericInputEditor.js +1 -1
  102. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  103. package/lib/esm/components-react/editors/NumericInputEditor.scss +3 -5
  104. package/lib/esm/components-react/editors/SliderEditor.d.ts.map +1 -1
  105. package/lib/esm/components-react/editors/SliderEditor.js +5 -2
  106. package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
  107. package/lib/esm/components-react/editors/TextEditor.d.ts.map +1 -1
  108. package/lib/esm/components-react/editors/TextEditor.js +1 -1
  109. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  110. package/lib/esm/components-react/editors/TextEditor.scss +3 -5
  111. package/lib/esm/components-react/editors/TextareaEditor.d.ts +1 -0
  112. package/lib/esm/components-react/editors/TextareaEditor.d.ts.map +1 -1
  113. package/lib/esm/components-react/editors/TextareaEditor.js +4 -3
  114. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  115. package/lib/esm/components-react/editors/ToggleEditor.js +1 -1
  116. package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
  117. package/lib/esm/components-react/editors/ToggleEditor.scss +2 -8
  118. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  119. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +4 -6
  120. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  121. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  122. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  123. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +2 -2
  124. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  125. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +1 -1
  126. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  127. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  128. package/lib/esm/components-react/filtering/ResultSelector.scss +1 -1
  129. package/lib/esm/components-react/inputs/ParsedInput.scss +1 -4
  130. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  131. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js +4 -2
  132. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  133. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +0 -17
  134. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +2 -3
  135. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  136. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +21 -9
  137. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  138. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  139. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  140. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js +20 -0
  141. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  142. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  143. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  144. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleProperty.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleProperty.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmB/C;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAA6C;IAE7C,MAAM,EACJ,gBAAgB,EAChB,UAAU,EACV,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CACH,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,IAAI;QACjB,KAAK,EAAE,QAAQ,CAAC,YAAY;QAC5B,KAAK,EAAE,QAAQ,CAAC,IAAI;KACrB,CAAC,CAAC,EACL,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,CAAC,IAAY,EAAE,EAAE;QACf,yBAAyB,CACvB,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CACtD,CAAC;IACJ,CAAC,EACD,CAAC,UAAU,EAAE,yBAAyB,CAAC,CACxC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAC7C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAK,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAA,CACvD,CAAC;QACF,IAAI,CAAA,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,IAAI,OAAK,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAA;YAC1D,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAGpC,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;QACnC,OAAO,CACL,oBAAC,QAAQ,IAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,IAC9C,gBAAgB;YACf,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,KAAK,CACb,CACZ,CAAC;IACJ,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,eAAe;QAC5B,oBAAC,QAAQ,IACP,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,EAC7B,UAAU,EAAE;gBACV,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC;gBACnE,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,OAAO;aACd,EACD,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,IAAI,GAC1B,CACE,CACP,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 * as React from \"react\";\nimport type { PropertyDescription } from \"@itwin/appui-abstract\";\nimport type { ComboBoxProps, SelectOption } from \"@itwin/itwinui-react\";\nimport { ComboBox, MenuItem } from \"@itwin/itwinui-react\";\nimport { UiComponents } from \"../UiComponents\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleProperty]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRulePropertyProps {\n /** List of available properties. */\n properties: PropertyDescription[];\n /** Currently selected property. */\n selectedProperty?: PropertyDescription;\n /** Callback that is invoked when selected property changes. */\n onSelectedPropertyChanged: (property?: PropertyDescription) => void;\n /** Custom renderer for property item inside selector. */\n propertyRenderer?: (name: string) => React.ReactNode;\n /** Specifies whether selector should be disabled or not. */\n isDisabled?: boolean;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleRenderer]] property selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleProperty(\n props: PropertyFilterBuilderRulePropertyProps\n) {\n const {\n selectedProperty,\n properties,\n onSelectedPropertyChanged,\n propertyRenderer,\n isDisabled,\n } = props;\n\n const selectOptions = React.useMemo<SelectOption<string>[]>(\n () =>\n properties.map((property) => ({\n id: property.name,\n label: property.displayLabel,\n value: property.name,\n })),\n [properties]\n );\n\n const onPropertyChanged = React.useCallback(\n (name: string) => {\n onSelectedPropertyChanged(\n properties.find((property) => property.name === name)\n );\n },\n [properties, onSelectedPropertyChanged]\n );\n\n React.useEffect(() => {\n const currentSelectedProperty = properties.find(\n (property) => property.name === selectedProperty?.name\n );\n if (currentSelectedProperty?.name !== selectedProperty?.name)\n onSelectedPropertyChanged(currentSelectedProperty);\n }, [properties, selectedProperty, onSelectedPropertyChanged]);\n\n const itemRenderer = React.useCallback<\n Required<ComboBoxProps<string>>[\"itemRenderer\"]\n >(\n (selectOption, { isSelected, id }) => {\n return (\n <MenuItem key={id} id={id} isSelected={isSelected}>\n {propertyRenderer\n ? propertyRenderer(selectOption.value)\n : selectOption.label}\n </MenuItem>\n );\n },\n [propertyRenderer]\n );\n\n return (\n <div className=\"rule-property\">\n <ComboBox\n options={selectOptions}\n onChange={onPropertyChanged}\n value={selectedProperty?.name}\n inputProps={{\n placeholder: UiComponents.translate(\"filterBuilder.chooseProperty\"),\n disabled: isDisabled,\n size: \"small\",\n }}\n itemRenderer={itemRenderer}\n enableVirtualization={true}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderRuleProperty.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleProperty.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAqB/C;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAA6C;IAE7C,MAAM,EACJ,gBAAgB,EAChB,UAAU,EACV,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CACH,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,IAAI;QACjB,KAAK,EAAE,QAAQ,CAAC,YAAY;QAC5B,KAAK,EAAE,QAAQ,CAAC,IAAI;KACrB,CAAC,CAAC,EACL,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,CAAC,IAAY,EAAE,EAAE;QACf,yBAAyB,CACvB,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CACtD,CAAC;IACJ,CAAC,EACD,CAAC,UAAU,EAAE,yBAAyB,CAAC,CACxC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAC7C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAK,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAA,CACvD,CAAC;QACF,IAAI,CAAA,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,IAAI,OAAK,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,CAAA;YAC1D,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAGpC,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;QACnC,OAAO,CACL,oBAAC,QAAQ,IAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,IAC9C,gBAAgB;YACf,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,KAAK,CACb,CACZ,CAAC;IACJ,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,eAAe;QAC5B,oBAAC,QAAQ,IACP,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,EAC7B,UAAU,EAAE;gBACV,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC;gBACnE,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,OAAO;aACd,EACD,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,IAAI,GAC1B,CACE,CACP,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 * as React from \"react\";\nimport type { PropertyDescription } from \"@itwin/appui-abstract\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport { ComboBox, MenuItem } from \"@itwin/itwinui-react\";\nimport { UiComponents } from \"../UiComponents\";\n\ntype ComboBoxProps<T> = React.ComponentPropsWithoutRef<typeof ComboBox<T>>;\n\n/**\n * Props for [[PropertyFilterBuilderRuleProperty]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRulePropertyProps {\n /** List of available properties. */\n properties: PropertyDescription[];\n /** Currently selected property. */\n selectedProperty?: PropertyDescription;\n /** Callback that is invoked when selected property changes. */\n onSelectedPropertyChanged: (property?: PropertyDescription) => void;\n /** Custom renderer for property item inside selector. */\n propertyRenderer?: (name: string) => React.ReactNode;\n /** Specifies whether selector should be disabled or not. */\n isDisabled?: boolean;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleRenderer]] property selector.\n * @internal\n */\nexport function PropertyFilterBuilderRuleProperty(\n props: PropertyFilterBuilderRulePropertyProps\n) {\n const {\n selectedProperty,\n properties,\n onSelectedPropertyChanged,\n propertyRenderer,\n isDisabled,\n } = props;\n\n const selectOptions = React.useMemo<SelectOption<string>[]>(\n () =>\n properties.map((property) => ({\n id: property.name,\n label: property.displayLabel,\n value: property.name,\n })),\n [properties]\n );\n\n const onPropertyChanged = React.useCallback(\n (name: string) => {\n onSelectedPropertyChanged(\n properties.find((property) => property.name === name)\n );\n },\n [properties, onSelectedPropertyChanged]\n );\n\n React.useEffect(() => {\n const currentSelectedProperty = properties.find(\n (property) => property.name === selectedProperty?.name\n );\n if (currentSelectedProperty?.name !== selectedProperty?.name)\n onSelectedPropertyChanged(currentSelectedProperty);\n }, [properties, selectedProperty, onSelectedPropertyChanged]);\n\n const itemRenderer = React.useCallback<\n Required<ComboBoxProps<string>>[\"itemRenderer\"]\n >(\n (selectOption, { isSelected, id }) => {\n return (\n <MenuItem key={id} id={id} isSelected={isSelected}>\n {propertyRenderer\n ? propertyRenderer(selectOption.value)\n : selectOption.label}\n </MenuItem>\n );\n },\n [propertyRenderer]\n );\n\n return (\n <div className=\"rule-property\">\n <ComboBox\n options={selectOptions}\n onChange={onPropertyChanged}\n value={selectedProperty?.name}\n inputProps={{\n placeholder: UiComponents.translate(\"filterBuilder.chooseProperty\"),\n disabled: isDisabled,\n size: \"small\",\n }}\n itemRenderer={itemRenderer}\n enableVirtualization={true}\n />\n </div>\n );\n}\n"]}
@@ -51,7 +51,7 @@
51
51
  border-radius: 2px;
52
52
  }
53
53
 
54
- /* Overriding iui-button defaults */
54
+ /* Overriding iTwinUI button defaults */
55
55
  .components-result-selector-button,
56
56
  .components-result-selector-button:active,
57
57
  .components-result-selector-button:focus,
@@ -7,6 +7,7 @@
7
7
 
8
8
  .components-parsed-input {
9
9
  width: auto;
10
+ padding: $uicore-iui-input-padding;
10
11
 
11
12
  &.components-parsed-input-has-error {
12
13
  color: var(--iui-color-text-negative);
@@ -17,8 +18,4 @@
17
18
  color: var(--iui-color-text);
18
19
  opacity: 0.65;
19
20
  }
20
-
21
- &.iui-input {
22
- padding: $uicore-iui-input-padding;
23
- }
24
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCategoryBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/PropertyCategoryBlock.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,iCAAiC;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,uCAAuC;IACvC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,cAAc;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;gBACxE,KAAK,EAAE,0BAA0B;IAI7C,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa,CAEnB;IAEF,gBAAgB;IACA,MAAM;CA6BvB"}
1
+ {"version":3,"file":"PropertyCategoryBlock.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/PropertyCategoryBlock.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,iCAAiC;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,uCAAuC;IACvC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,cAAc;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;gBACxE,KAAK,EAAE,0BAA0B;IAI7C,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa,CAEnB;IAEF,gBAAgB;IACA,MAAM;CA+BvB"}
@@ -26,13 +26,15 @@ export class PropertyCategoryBlock extends React.Component {
26
26
  /** @internal */
27
27
  render() {
28
28
  var _a;
29
- const { highlight, category, children, onExpansionToggled, ...props } = this.props;
29
+ const { highlight, category, children, onExpansionToggled, ...other } = this.props;
30
30
  const activeMatchIndex = this.props.category.name ===
31
31
  ((_a = highlight === null || highlight === void 0 ? void 0 : highlight.activeHighlight) === null || _a === void 0 ? void 0 : _a.highlightedItemIdentifier)
32
32
  ? highlight.activeHighlight.highlightIndex
33
33
  : undefined;
34
34
  const label = highlight ? (React.createElement(HighlightedText, { text: category.label, activeMatchIndex: activeMatchIndex, searchText: highlight.highlightedText })) : (category.label);
35
- return (React.createElement(ExpandableBlock, { isExpanded: category.expand, onToggle: this._handleToggle, title: label, size: "small", ...props }, category.expand && children));
35
+ return (React.createElement(ExpandableBlock.Wrapper, { isExpanded: category.expand, onToggle: this._handleToggle, size: "small", ...other },
36
+ React.createElement(ExpandableBlock.Trigger, { label: label }),
37
+ React.createElement(ExpandableBlock.Content, { className: "components-expandable-content" }, category.expand && children)));
36
38
  }
37
39
  }
38
40
  //# sourceMappingURL=PropertyCategoryBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCategoryBlock.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/PropertyCategoryBlock.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAmB/D;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK,CAAC,SAAqC;IACpF,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;QAQP,kBAAa,GAAG,CAAC,YAAqB,EAAQ,EAAE;YACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC;IATF,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB;YAC/B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAMD,gBAAgB;IACA,MAAM;;QACpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,KAAK,EAAE,GACnE,IAAI,CAAC,KAAK,CAAC;QACb,MAAM,gBAAgB,GACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;aACxB,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,eAAe,0CAAE,yBAAyB,CAAA;YACnD,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,cAAc;YAC1C,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CACxB,oBAAC,eAAe,IACd,IAAI,EAAE,QAAQ,CAAC,KAAK,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,SAAS,CAAC,eAAe,GACrC,CACH,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,KAAK,CACf,CAAC;QACF,OAAO,CACL,oBAAC,eAAe,IACd,UAAU,EAAE,QAAQ,CAAC,MAAM,EAC3B,QAAQ,EAAE,IAAI,CAAC,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,KACR,KAAK,IAER,QAAQ,CAAC,MAAM,IAAI,QAAQ,CACZ,CACnB,CAAC;IACJ,CAAC;CACF","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 PropertyGrid\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { ExpandableBlock } from \"@itwin/itwinui-react\";\nimport { HighlightedText } from \"../../common/HighlightedText\";\nimport type { HighlightingComponentProps } from \"../../common/HighlightingComponentProps\";\nimport type { PropertyCategory } from \"../PropertyDataProvider\";\n\n/**\n * Properties for the [[PropertyCategoryBlock]] React component\n * @public\n */\nexport interface PropertyCategoryBlockProps extends CommonProps {\n /** Category of the properties */\n category: PropertyCategory;\n /** Callback to when PropertyCategoryBlock gets expended or collapsed */\n onExpansionToggled?: (categoryName: string) => void;\n /** Properties used for highlighting */\n highlight?: HighlightingComponentProps;\n /** Content */\n children?: React.ReactNode;\n}\n\n/**\n * PropertyCategoryBlock React component\n * @public\n */\nexport class PropertyCategoryBlock extends React.Component<PropertyCategoryBlockProps> {\n constructor(props: PropertyCategoryBlockProps) {\n super(props);\n }\n\n private toggleExpansion() {\n if (this.props.onExpansionToggled)\n this.props.onExpansionToggled(this.props.category.name);\n }\n\n private _handleToggle = (_isExpanding: boolean): void => {\n this.toggleExpansion();\n };\n\n /** @internal */\n public override render() {\n const { highlight, category, children, onExpansionToggled, ...props } =\n this.props;\n const activeMatchIndex =\n this.props.category.name ===\n highlight?.activeHighlight?.highlightedItemIdentifier\n ? highlight.activeHighlight.highlightIndex\n : undefined;\n const label = highlight ? (\n <HighlightedText\n text={category.label}\n activeMatchIndex={activeMatchIndex}\n searchText={highlight.highlightedText}\n />\n ) : (\n category.label\n );\n return (\n <ExpandableBlock\n isExpanded={category.expand}\n onToggle={this._handleToggle}\n title={label}\n size=\"small\"\n {...props}\n >\n {category.expand && children}\n </ExpandableBlock>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"PropertyCategoryBlock.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/PropertyCategoryBlock.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAmB/D;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK,CAAC,SAAqC;IACpF,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;QAQP,kBAAa,GAAG,CAAC,YAAqB,EAAQ,EAAE;YACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC;IATF,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB;YAC/B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAMD,gBAAgB;IACA,MAAM;;QACpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,KAAK,EAAE,GACnE,IAAI,CAAC,KAAK,CAAC;QACb,MAAM,gBAAgB,GACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;aACxB,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,eAAe,0CAAE,yBAAyB,CAAA;YACnD,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,cAAc;YAC1C,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CACxB,oBAAC,eAAe,IACd,IAAI,EAAE,QAAQ,CAAC,KAAK,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,SAAS,CAAC,eAAe,GACrC,CACH,CAAC,CAAC,CAAC,CACF,QAAQ,CAAC,KAAK,CACf,CAAC;QACF,OAAO,CACL,oBAAC,eAAe,CAAC,OAAO,IACtB,UAAU,EAAE,QAAQ,CAAC,MAAM,EAC3B,QAAQ,EAAE,IAAI,CAAC,aAAa,EAC5B,IAAI,EAAC,OAAO,KACR,KAAK;YAET,oBAAC,eAAe,CAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI;YACzC,oBAAC,eAAe,CAAC,OAAO,IAAC,SAAS,EAAC,+BAA+B,IAC/D,QAAQ,CAAC,MAAM,IAAI,QAAQ,CACJ,CACF,CAC3B,CAAC;IACJ,CAAC;CACF","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 PropertyGrid\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { ExpandableBlock } from \"@itwin/itwinui-react\";\nimport { HighlightedText } from \"../../common/HighlightedText\";\nimport type { HighlightingComponentProps } from \"../../common/HighlightingComponentProps\";\nimport type { PropertyCategory } from \"../PropertyDataProvider\";\n\n/**\n * Properties for the [[PropertyCategoryBlock]] React component\n * @public\n */\nexport interface PropertyCategoryBlockProps extends CommonProps {\n /** Category of the properties */\n category: PropertyCategory;\n /** Callback to when PropertyCategoryBlock gets expended or collapsed */\n onExpansionToggled?: (categoryName: string) => void;\n /** Properties used for highlighting */\n highlight?: HighlightingComponentProps;\n /** Content */\n children?: React.ReactNode;\n}\n\n/**\n * PropertyCategoryBlock React component\n * @public\n */\nexport class PropertyCategoryBlock extends React.Component<PropertyCategoryBlockProps> {\n constructor(props: PropertyCategoryBlockProps) {\n super(props);\n }\n\n private toggleExpansion() {\n if (this.props.onExpansionToggled)\n this.props.onExpansionToggled(this.props.category.name);\n }\n\n private _handleToggle = (_isExpanding: boolean): void => {\n this.toggleExpansion();\n };\n\n /** @internal */\n public override render() {\n const { highlight, category, children, onExpansionToggled, ...other } =\n this.props;\n const activeMatchIndex =\n this.props.category.name ===\n highlight?.activeHighlight?.highlightedItemIdentifier\n ? highlight.activeHighlight.highlightIndex\n : undefined;\n const label = highlight ? (\n <HighlightedText\n text={category.label}\n activeMatchIndex={activeMatchIndex}\n searchText={highlight.highlightedText}\n />\n ) : (\n category.label\n );\n return (\n <ExpandableBlock.Wrapper\n isExpanded={category.expand}\n onToggle={this._handleToggle}\n size=\"small\"\n {...other}\n >\n <ExpandableBlock.Trigger label={label} />\n <ExpandableBlock.Content className=\"components-expandable-content\">\n {category.expand && children}\n </ExpandableBlock.Content>\n </ExpandableBlock.Wrapper>\n );\n }\n}\n"]}
@@ -2,7 +2,6 @@
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
- @import "~@itwin/core-react/lib/cjs/core-react/expandable/list";
6
5
  @import "~@itwin/core-react/lib/cjs/core-react/scrollbar";
7
6
 
8
7
  .components-property-grid-loader {
@@ -12,22 +11,6 @@
12
11
  top: calc(50% - 24px);
13
12
  }
14
13
 
15
- .components-property-grid {
16
- .property-categories {
17
- @include uicore-expandable-blocks-list;
18
-
19
- display: grid;
20
- grid-row-gap: 6px;
21
- padding: 3px;
22
- }
23
-
24
- padding-top: 6px;
25
- padding-bottom: 6px;
26
-
27
- user-select: none;
28
- color: var(--iui-color-text);
29
- }
30
-
31
14
  .components-property-grid-wrapper {
32
15
  width: 100%;
33
16
  height: 100%;
@@ -2,7 +2,6 @@
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
- @import "~@itwin/core-react/lib/cjs/core-react/expandable/list";
6
5
  @import "~@itwin/core-react/lib/cjs/core-react/scrollbar";
7
6
 
8
7
  .components-virtualized-property-grid-loader {
@@ -82,7 +81,7 @@
82
81
  .virtualized-grid-node-category {
83
82
  padding-top: 4px;
84
83
 
85
- .iui-expandable-content {
84
+ .components-expandable-content {
86
85
  // We are rendering virtualized content below the expandable block
87
86
  display: none;
88
87
  }
@@ -91,7 +90,7 @@
91
90
  .virtualized-grid-node-custom-category {
92
91
  padding-top: 4px;
93
92
 
94
- .iui-expandable-content > div {
93
+ .components-expandable-content > div {
95
94
  padding: 0 4px 4px 4px;
96
95
  }
97
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":";AAgBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EACV,uBAAuB,EACvB,iCAAiC,EAClC,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,4CACf,SAAQ,uBAAuB;IAC/B,uDAAuD;IACvD,YAAY,EAAE,qBAAqB,CAAC;IACpC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,iCAAiC,CAAC;IAC9C,iHAAiH;IACjH,+BAA+B,CAAC,EAAE,+BAA+B,CAAC;IAClE,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,4CAA4C,eAuBpD"}
1
+ {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":";AAeA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EACV,uBAAuB,EACvB,iCAAiC,EAClC,MAAM,uBAAuB,CAAC;AAI/B;;GAEG;AACH,MAAM,WAAW,4CACf,SAAQ,uBAAuB;IAC/B,uDAAuD;IACvD,YAAY,EAAE,qBAAqB,CAAC;IACpC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,iCAAiC,CAAC;IAC9C,iHAAiH;IACjH,+BAA+B,CAAC,EAAE,+BAA+B,CAAC;IAClE,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,4CAA4C,eAoBpD"}
@@ -5,25 +5,37 @@
5
5
  /** @packageDocumentation
6
6
  * @module PropertyGrid
7
7
  */
8
- import React from "react";
9
- import { DelayedSpinner } from "../../common/DelayedSpinner";
10
- import { usePropertyGridEventHandler, usePropertyGridModel, usePropertyGridModelSource, } from "../internal/PropertyGridHooks";
8
+ import React, { useEffect, useState } from "react";
9
+ import { usePropertyGridEventHandler, usePropertyGridModel, useTrackedPropertyGridModelSource, } from "../internal/PropertyGridHooks";
11
10
  import { VirtualizedPropertyGrid } from "./VirtualizedPropertyGrid";
11
+ import { ProgressRadial } from "@itwin/itwinui-react";
12
12
  /**
13
13
  * [[VirtualizedPropertyGrid]] React Component which takes a data provider and
14
14
  * sets up default implementations for [[IPropertyGridModelSource]] and [[IPropertyGridEventHandler]]
15
15
  * @public
16
16
  */
17
17
  export function VirtualizedPropertyGridWithDataProvider(props) {
18
- const modelSource = usePropertyGridModelSource({
18
+ const { modelSource, inProgress } = useTrackedPropertyGridModelSource({
19
19
  dataProvider: props.dataProvider,
20
20
  });
21
21
  const model = usePropertyGridModel({ modelSource });
22
22
  const eventHandler = usePropertyGridEventHandler({ modelSource });
23
- if (!model) {
24
- return (React.createElement("div", { className: "components-virtualized-property-grid-loader" },
25
- React.createElement(DelayedSpinner, { size: "large" })));
26
- }
27
- return (React.createElement(VirtualizedPropertyGrid, { ...props, model: model, eventHandler: eventHandler }));
23
+ return (React.createElement(DelayedLoaderRenderer, { shouldRenderLoader: inProgress || !model }, model && (React.createElement(VirtualizedPropertyGrid, { ...props, model: model, eventHandler: eventHandler }))));
24
+ }
25
+ function DelayedLoaderRenderer({ children, shouldRenderLoader, }) {
26
+ const [showSpinner, setShowSpinner] = useState(shouldRenderLoader);
27
+ useEffect(() => {
28
+ if (!shouldRenderLoader) {
29
+ setShowSpinner(shouldRenderLoader);
30
+ return;
31
+ }
32
+ // only set a timeout when shouldRenderLoader is set to `true`
33
+ const timeout = setTimeout(() => {
34
+ setShowSpinner(shouldRenderLoader);
35
+ }, 250);
36
+ return () => clearTimeout(timeout);
37
+ }, [shouldRenderLoader]);
38
+ return !showSpinner ? (React.createElement(React.Fragment, null, children)) : (React.createElement("div", { className: "components-virtualized-property-grid-loader" },
39
+ React.createElement(ProgressRadial, { indeterminate: true, size: "large" })));
28
40
  }
29
41
  //# sourceMappingURL=VirtualizedPropertyGridWithDataProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAmBpE;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CACrD,KAAmD;IAEnD,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC7C,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,2BAA2B,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,CACL,6BAAK,SAAS,EAAC,6CAA6C;YAC1D,oBAAC,cAAc,IAAC,IAAI,EAAC,OAAO,GAAG,CAC3B,CACP,CAAC;KACH;IAED,OAAO,CACL,oBAAC,uBAAuB,OAClB,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,GAC1B,CACH,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\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport React from \"react\";\nimport { DelayedSpinner } from \"../../common/DelayedSpinner\";\nimport {\n usePropertyGridEventHandler,\n usePropertyGridModel,\n usePropertyGridModelSource,\n} from \"../internal/PropertyGridHooks\";\nimport type { PropertyCategoryRendererManager } from \"../PropertyCategoryRendererManager\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport type {\n CommonPropertyGridProps,\n PropertyGridContentHighlightProps,\n} from \"./PropertyGridCommons\";\nimport { VirtualizedPropertyGrid } from \"./VirtualizedPropertyGrid\";\n\n/** Properties for [[VirtualizedPropertyGridWithDataProvider]] React component\n * @public\n */\nexport interface VirtualizedPropertyGridWithDataProviderProps\n extends CommonPropertyGridProps {\n /** Property data provider used by the property grid */\n dataProvider: IPropertyDataProvider;\n /** Properties for highlighting property data in the grid. */\n highlight?: PropertyGridContentHighlightProps;\n /** Custom property category renderer manager. Defaults to [[PropertyCategoryRendererManager.defaultManager]]. */\n propertyCategoryRendererManager?: PropertyCategoryRendererManager;\n /** Width of the property grid component. */\n width: number;\n /** Height of the property grid component. */\n height: number;\n}\n\n/**\n * [[VirtualizedPropertyGrid]] React Component which takes a data provider and\n * sets up default implementations for [[IPropertyGridModelSource]] and [[IPropertyGridEventHandler]]\n * @public\n */\nexport function VirtualizedPropertyGridWithDataProvider(\n props: VirtualizedPropertyGridWithDataProviderProps\n) {\n const modelSource = usePropertyGridModelSource({\n dataProvider: props.dataProvider,\n });\n const model = usePropertyGridModel({ modelSource });\n const eventHandler = usePropertyGridEventHandler({ modelSource });\n\n if (!model) {\n return (\n <div className=\"components-virtualized-property-grid-loader\">\n <DelayedSpinner size=\"large\" />\n </div>\n );\n }\n\n return (\n <VirtualizedPropertyGrid\n {...props}\n model={model}\n eventHandler={eventHandler}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,iCAAiC,GAClC,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmBtD;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CACrD,KAAmD;IAEnD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iCAAiC,CAAC;QACpE,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,2BAA2B,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,OAAO,CACL,oBAAC,qBAAqB,IAAC,kBAAkB,EAAE,UAAU,IAAI,CAAC,KAAK,IAC5D,KAAK,IAAI,CACR,oBAAC,uBAAuB,OAClB,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,GAC1B,CACH,CACqB,CACzB,CAAC;AACJ,CAAC;AAMD,SAAS,qBAAqB,CAAC,EAC7B,QAAQ,EACR,kBAAkB,GACkC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE;YACvB,cAAc,CAAC,kBAAkB,CAAC,CAAC;YACnC,OAAO;SACR;QAED,8DAA8D;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,0CAAG,QAAQ,CAAI,CAChB,CAAC,CAAC,CAAC,CACF,6BAAK,SAAS,EAAC,6CAA6C;QAC1D,oBAAC,cAAc,IAAC,aAAa,QAAC,IAAI,EAAE,OAAO,GAAI,CAC3C,CACP,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\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n usePropertyGridEventHandler,\n usePropertyGridModel,\n useTrackedPropertyGridModelSource,\n} from \"../internal/PropertyGridHooks\";\nimport type { PropertyCategoryRendererManager } from \"../PropertyCategoryRendererManager\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport type {\n CommonPropertyGridProps,\n PropertyGridContentHighlightProps,\n} from \"./PropertyGridCommons\";\nimport { VirtualizedPropertyGrid } from \"./VirtualizedPropertyGrid\";\nimport { ProgressRadial } from \"@itwin/itwinui-react\";\n\n/** Properties for [[VirtualizedPropertyGridWithDataProvider]] React component\n * @public\n */\nexport interface VirtualizedPropertyGridWithDataProviderProps\n extends CommonPropertyGridProps {\n /** Property data provider used by the property grid */\n dataProvider: IPropertyDataProvider;\n /** Properties for highlighting property data in the grid. */\n highlight?: PropertyGridContentHighlightProps;\n /** Custom property category renderer manager. Defaults to [[PropertyCategoryRendererManager.defaultManager]]. */\n propertyCategoryRendererManager?: PropertyCategoryRendererManager;\n /** Width of the property grid component. */\n width: number;\n /** Height of the property grid component. */\n height: number;\n}\n\n/**\n * [[VirtualizedPropertyGrid]] React Component which takes a data provider and\n * sets up default implementations for [[IPropertyGridModelSource]] and [[IPropertyGridEventHandler]]\n * @public\n */\nexport function VirtualizedPropertyGridWithDataProvider(\n props: VirtualizedPropertyGridWithDataProviderProps\n) {\n const { modelSource, inProgress } = useTrackedPropertyGridModelSource({\n dataProvider: props.dataProvider,\n });\n\n const model = usePropertyGridModel({ modelSource });\n const eventHandler = usePropertyGridEventHandler({ modelSource });\n\n return (\n <DelayedLoaderRenderer shouldRenderLoader={inProgress || !model}>\n {model && (\n <VirtualizedPropertyGrid\n {...props}\n model={model}\n eventHandler={eventHandler}\n />\n )}\n </DelayedLoaderRenderer>\n );\n}\n\ninterface DelayedLoaderRendererProps {\n shouldRenderLoader: boolean;\n}\n\nfunction DelayedLoaderRenderer({\n children,\n shouldRenderLoader,\n}: React.PropsWithChildren<DelayedLoaderRendererProps>) {\n const [showSpinner, setShowSpinner] = useState(shouldRenderLoader);\n useEffect(() => {\n if (!shouldRenderLoader) {\n setShowSpinner(shouldRenderLoader);\n return;\n }\n\n // only set a timeout when shouldRenderLoader is set to `true`\n const timeout = setTimeout(() => {\n setShowSpinner(shouldRenderLoader);\n }, 250);\n\n return () => clearTimeout(timeout);\n }, [shouldRenderLoader]);\n\n return !showSpinner ? (\n <>{children}</>\n ) : (\n <div className=\"components-virtualized-property-grid-loader\">\n <ProgressRadial indeterminate size={\"large\"} />\n </div>\n );\n}\n"]}
@@ -21,10 +21,22 @@ export declare function usePropertyData(props: {
21
21
  * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.
22
22
  * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
23
23
  * @public
24
+ * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.
24
25
  */
25
26
  export declare function usePropertyGridModelSource(props: {
26
27
  dataProvider: IPropertyDataProvider;
27
28
  }): PropertyGridModelSource;
29
+ /**
30
+ * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.
31
+ * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
32
+ * @public
33
+ */
34
+ export declare function useTrackedPropertyGridModelSource(props: {
35
+ dataProvider: IPropertyDataProvider;
36
+ }): {
37
+ modelSource: PropertyGridModelSource;
38
+ inProgress: boolean;
39
+ };
28
40
  /**
29
41
  * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource
30
42
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyGridHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAkBA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,qBAAqB,CAAC;CACrC,2BAgBA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,WAAW,EAAE,wBAAwB,CAAC;CACvC,4BAKA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,wBAAwB,CAAC;CACvC,kCAaA"}
1
+ {"version":3,"file":"PropertyGridHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAkBA;AAED;;;;;GAKG;AAEH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,qBAAqB,CAAC;CACrC,2BAgBA;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAgBA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,WAAW,EAAE,wBAAwB,CAAC;CACvC,4BAKA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,wBAAwB,CAAC;CACvC,kCAaA"}
@@ -32,7 +32,9 @@ export function usePropertyData(props) {
32
32
  * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.
33
33
  * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
34
34
  * @public
35
+ * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.
35
36
  */
37
+ // istanbul ignore next: 'useTrackedPropertyGridModelSource' is almost identical.
36
38
  export function usePropertyGridModelSource(props) {
37
39
  const { value: propertyData } = usePropertyData(props);
38
40
  const { dataProvider } = { ...props };
@@ -46,6 +48,24 @@ export function usePropertyGridModelSource(props) {
46
48
  }, [modelSource, propertyData]);
47
49
  return modelSource;
48
50
  }
51
+ /**
52
+ * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.
53
+ * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
54
+ * @public
55
+ */
56
+ export function useTrackedPropertyGridModelSource(props) {
57
+ const { value: propertyData, inProgress } = usePropertyData(props);
58
+ const { dataProvider } = { ...props };
59
+ // Model source needs to be recreated if data provider changes
60
+ const modelSource = useMemo(() => new PropertyGridModelSource(new MutableGridItemFactory()),
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
62
+ [dataProvider]);
63
+ useEffect(() => {
64
+ if (propertyData)
65
+ modelSource.setPropertyData(propertyData);
66
+ }, [modelSource, propertyData]);
67
+ return { modelSource, inProgress };
68
+ }
49
69
  /**
50
70
  * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource
51
71
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyGridHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAE/B;IACC,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE;YACjD,mBAAmB,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,yGAAyG;IACzG,OAAO,sBAAsB,CAC3B,WAAW,CACT,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;IAClC,uDAAuD;IACvD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B,CACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAE1C;IACC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAEtC,8DAA8D;IAC9D,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,sBAAsB,EAAE,CAAC;IAC/D,uDAAuD;IACvD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY;YAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAE3C;IACC,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,EACrD,CAAC,KAAK,CAAC,WAAW,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAEpC;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,YAAY,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,KAAK,CAAC;AACf,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 PropertyGrid\n */\n\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\";\nimport { useDebouncedAsyncValue } from \"../../common/UseDebouncedAsyncValue\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport { MutableGridItemFactory } from \"./flat-items/MutableGridItemFactory\";\nimport { PropertyGridEventHandler } from \"./PropertyGridEventHandler\";\nimport type { IPropertyGridModel } from \"./PropertyGridModel\";\nimport type { IPropertyGridModelSource } from \"./PropertyGridModelSource\";\nimport { PropertyGridModelSource } from \"./PropertyGridModelSource\";\n\n/**\n * Custom hook that gets [[PropertyData]] from given [[IPropertyDataProvider]] and subscribes to further data changes.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyData(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { dataProvider } = props;\n\n const [forcedUpdate, triggerForcedUpdate] = useReducer(() => ({}), {});\n useEffect(() => {\n return dataProvider.onDataChanged.addListener(() => {\n triggerForcedUpdate();\n });\n }, [dataProvider]);\n\n // forcedUpdate is added to dependency list to re-memo getData promise when onDataChanged emits an event.\n return useDebouncedAsyncValue(\n useCallback(\n async () => dataProvider.getData(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider, forcedUpdate]\n )\n );\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return modelSource;\n}\n\n/**\n * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource\n * @public\n */\nexport function usePropertyGridEventHandler(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n return useMemo(\n () => new PropertyGridEventHandler(props.modelSource),\n [props.modelSource]\n );\n}\n\n/**\n * Custom hook that automatically listens and retrieves latest model from model source\n * @public\n */\nexport function usePropertyGridModel(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n const { modelSource } = { ...props };\n const [model, setModel] = useState<IPropertyGridModel>();\n\n useEffect(() => {\n const modelChanged = () => {\n setModel(modelSource.getModel());\n };\n modelChanged();\n return modelSource.onModelChanged.addListener(modelChanged);\n }, [modelSource]);\n\n return model;\n}\n"]}
1
+ {"version":3,"file":"PropertyGridHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.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 PropertyGrid\n */\n\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\";\nimport { useDebouncedAsyncValue } from \"../../common/UseDebouncedAsyncValue\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport { MutableGridItemFactory } from \"./flat-items/MutableGridItemFactory\";\nimport { PropertyGridEventHandler } from \"./PropertyGridEventHandler\";\nimport type { IPropertyGridModel } from \"./PropertyGridModel\";\nimport type { IPropertyGridModelSource } from \"./PropertyGridModelSource\";\nimport { PropertyGridModelSource } from \"./PropertyGridModelSource\";\n\n/**\n * Custom hook that gets [[PropertyData]] from given [[IPropertyDataProvider]] and subscribes to further data changes.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyData(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { dataProvider } = props;\n\n const [forcedUpdate, triggerForcedUpdate] = useReducer(() => ({}), {});\n useEffect(() => {\n return dataProvider.onDataChanged.addListener(() => {\n triggerForcedUpdate();\n });\n }, [dataProvider]);\n\n // forcedUpdate is added to dependency list to re-memo getData promise when onDataChanged emits an event.\n return useDebouncedAsyncValue(\n useCallback(\n async () => dataProvider.getData(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider, forcedUpdate]\n )\n );\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.\n */\n// istanbul ignore next: 'useTrackedPropertyGridModelSource' is almost identical.\nexport function usePropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return modelSource;\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function useTrackedPropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData, inProgress } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return { modelSource, inProgress };\n}\n\n/**\n * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource\n * @public\n */\nexport function usePropertyGridEventHandler(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n return useMemo(\n () => new PropertyGridEventHandler(props.modelSource),\n [props.modelSource]\n );\n}\n\n/**\n * Custom hook that automatically listens and retrieves latest model from model source\n * @public\n */\nexport function usePropertyGridModel(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n const { modelSource } = { ...props };\n const [model, setModel] = useState<IPropertyGridModel>();\n\n useEffect(() => {\n const modelChanged = () => {\n setModel(modelSource.getModel());\n };\n modelChanged();\n return modelSource.onModelChanged.addListener(modelChanged);\n }, [modelSource]);\n\n return model;\n}\n"]}
@@ -307,6 +307,7 @@ export class TreeDataSource {
307
307
  this._dataProvider = await this._dataProvider;
308
308
  return this.getChildren(this._dataProvider, parent);
309
309
  }
310
+ // eslint-disable-next-line deprecation/deprecation
310
311
  throw new UiError(UiComponents.loggerCategory(this), "Unsupported TreeDataProvider.");
311
312
  }
312
313
  getChildren(rawProvider, parent) {
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.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 Tree\n */\n\nimport type { Observable as RxjsObservable } from \"rxjs\";\nimport {\n concatAll,\n concatMap,\n defer,\n finalize,\n from,\n map,\n of,\n share,\n toArray,\n} from \"rxjs\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport {\n scheduleSubscription,\n SubscriptionScheduler,\n} from \"../../common/SubscriptionScheduler\";\nimport { UiComponents } from \"../../UiComponents\";\nimport type {\n ImmediatelyLoadedTreeNodeItem,\n TreeDataProvider,\n TreeDataProviderRaw,\n TreeNodeItem,\n} from \"../TreeDataProvider\";\nimport {\n isTreeDataProviderInterface,\n isTreeDataProviderMethod,\n isTreeDataProviderPromise,\n isTreeDataProviderRaw,\n} from \"../TreeDataProvider\";\nimport type { Observable } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n MutableTreeModel,\n TreeModelNode,\n TreeModelNodeInput,\n TreeModelRootNode,\n TreeNodeItemData,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\n\n/**\n * Data structure that describes node load result\n * @public\n */\nexport interface TreeNodeLoadResult {\n loadedNodes: TreeNodeItem[];\n}\n\n/**\n * Tree node loader which is used to load tree nodes.\n * @public\n */\nexport interface ITreeNodeLoader {\n /**\n * Loads node at specified place in tree.\n * @param parentId specifies tree branch\n * @param childIndex specifies offset in the branch.\n */\n loadNode(\n parentId: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult>;\n}\n\n/**\n * Tree node loader which uses `TreeDataProvider` to load nodes.\n * @public\n */\nexport interface ITreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n> extends ITreeNodeLoader {\n /** Returns `TreeDataProvider` used to load nodes. */\n readonly dataProvider: TDataProvider;\n}\n\n/**\n * Abstract node loader implementation which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\n private _treeModelSource: TreeModelSource;\n private _loadScheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n protected constructor(modelSource: TreeModelSource) {\n this._treeModelSource = modelSource;\n }\n\n public get modelSource() {\n return this._treeModelSource;\n }\n\n /** Do not override this method. @see `load` */\n public loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\n scheduleSubscription(this._loadScheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n })\n );\n }\n\n /**\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\n * in the hierarchy, etc.)\n */\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\n }\n\n /** An abstract method to load a node at the specific index for the specified parent. */\n protected abstract load(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<LoadedNodeHierarchy>;\n}\n\n/**\n * Abstract node loader with tree data provider which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n >\n extends AbstractTreeNodeLoader\n implements ITreeNodeLoaderWithProvider<TDataProvider>\n{\n private _dataProvider: TDataProvider;\n\n protected constructor(\n modelSource: TreeModelSource,\n dataProvider: TDataProvider\n ) {\n super(modelSource);\n this._dataProvider = dataProvider;\n }\n\n public get dataProvider() {\n return this._dataProvider;\n }\n}\n\n/**\n * Default tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class TreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _activeRequests = new Map<\n string | undefined,\n RxjsObservable<TreeNodeLoadResult>\n >();\n private _scheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n }\n\n /**\n * Schedules to load children of node and returns an Observable.\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n _childIndex?: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const activeRequest = this._activeRequests.get(parentId);\n if (activeRequest) {\n return activeRequest;\n }\n\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n 0,\n 0,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => this._activeRequests.delete(parentId))\n );\n this._activeRequests.set(parentId, newRequest);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Default paged tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class PagedTreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _pageSize: number;\n private _activePageRequests: Map<\n string | undefined,\n Map<number, RxjsObservable<TreeNodeLoadResult>>\n >;\n private _scheduler: SubscriptionScheduler<LoadedNodeHierarchy>;\n\n constructor(\n dataProvider: TDataProvider,\n modelSource: TreeModelSource,\n pageSize: number\n ) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n this._pageSize = pageSize;\n this._activePageRequests = new Map();\n this._scheduler = new SubscriptionScheduler();\n }\n\n /** Returns page size used by tree node loader. */\n public get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * Schedules to load one page of node children and returns an Observable.\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const parentPageRequests =\n this._activePageRequests.get(parentId) ??\n new Map<number, RxjsObservable<TreeNodeLoadResult>>();\n const page = Math.trunc(childIndex / this._pageSize);\n const activeRequest = parentPageRequests.get(page);\n if (activeRequest) {\n return activeRequest;\n }\n\n const startIndex = page * this._pageSize;\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n startIndex,\n this._pageSize,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => {\n parentPageRequests.delete(page);\n if (parentPageRequests.size === 0) {\n this._activePageRequests.delete(parentId);\n }\n })\n );\n\n parentPageRequests.set(page, newRequest);\n this._activePageRequests.set(parentId, parentPageRequests);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Data structure that describes hierarchy loaded for parent node.\n * @public\n */\nexport interface LoadedNodeHierarchy {\n /** Node id of the parent node for loaded hierarchy. */\n parentId: string | undefined;\n /** Hierarchy items offset in parent node children array. */\n offset: number;\n /** Loaded hierarchy items. */\n hierarchyItems: LoadedNodeHierarchyItem[];\n /** Number of children parent node has. */\n numChildren?: number;\n}\n\n/**\n * Data structure that describes one loaded hierarchy item.\n * @public\n */\nexport interface LoadedNodeHierarchyItem {\n /** Loaded tree node item. */\n item: TreeNodeItemData;\n /** Children of loaded tree node item. */\n children?: LoadedNodeHierarchyItem[];\n /** Number of children tree node item has. */\n numChildren?: number;\n}\n\nfunction requestLoadedHierarchy(\n parentItem: TreeNodeItem | undefined,\n dataSource: TreeDataSource,\n start: number,\n take: number,\n requestNumChildren: boolean\n) {\n const parentId = parentItem && parentItem.id;\n return dataSource\n .requestItems(parentItem, start, take, requestNumChildren)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((hierarchyItems) => ({\n parentId,\n offset: start,\n hierarchyItems,\n numChildren,\n }))\n )\n )\n );\n}\n\nfunction loadHierarchy(\n rootItems: TreeNodeItemData[],\n dataSource: TreeDataSource,\n take: number\n): RxjsObservable<LoadedNodeHierarchyItem[]> {\n return from(rootItems).pipe(\n concatMap((item) => {\n if (!item.autoExpand || item.children) {\n return of(convertToLoadedNodeHierarchyItem(item));\n }\n\n return dataSource\n .requestItems(item, 0, take, true)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((children) => ({ item, children, numChildren }))\n )\n )\n );\n }),\n toArray()\n );\n}\n\nfunction convertToLoadedNodeHierarchyItem(\n item: TreeNodeItemData\n): LoadedNodeHierarchyItem {\n return {\n item,\n children: item.children\n ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child))\n : undefined,\n numChildren: item.children ? item.children.length : undefined,\n };\n}\n\nfunction collectTreeNodeItems(\n hierarchyItems: LoadedNodeHierarchyItem[],\n result: TreeNodeItem[] = []\n) {\n for (const hierarchyItem of hierarchyItems) {\n result.push(hierarchyItem.item);\n if (hierarchyItem.children)\n collectTreeNodeItems(hierarchyItem.children, result);\n }\n\n return result;\n}\n\n/** @internal */\nexport function handleLoadedNodeHierarchy(\n modelSource: TreeModelSource,\n loadedHierarchy: LoadedNodeHierarchy\n) {\n modelSource.modifyModel((model) => {\n if (loadedHierarchy.parentId !== undefined) {\n // Make sure the model sill contains the parent node\n /* istanbul ignore if */\n if (model.getNode(loadedHierarchy.parentId) === undefined) return;\n }\n\n updateChildren(\n model,\n loadedHierarchy.parentId,\n loadedHierarchy.hierarchyItems,\n loadedHierarchy.offset,\n loadedHierarchy.numChildren\n );\n if (loadedHierarchy.parentId !== undefined) {\n const parentNode = model.getNode(loadedHierarchy.parentId);\n /* istanbul ignore else */\n if (\n parentNode &&\n parentNode.isLoading &&\n parentNode.numChildren !== undefined\n ) {\n parentNode.isLoading = false;\n }\n }\n });\n}\n\nfunction updateChildren(\n model: MutableTreeModel,\n parentId: string | undefined,\n hierarchyItems: LoadedNodeHierarchyItem[],\n startIndex: number,\n numChildren?: number\n) {\n // numChildren set to undefined indicates that this is not the first request for children\n if (numChildren !== undefined) {\n model.setNumChildren(parentId, numChildren);\n }\n\n // if children array is undefined do not add children as they should be disposed\n if (model.getChildren(parentId) === undefined) {\n return;\n }\n\n let offset = startIndex;\n for (const hierarchyItem of hierarchyItems) {\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\n const existingNode = model.getNode(hierarchyItem.item.id);\n\n // if same item exists in the same position and is expanded update it without removing it's subtree\n if (\n !existingNode ||\n !existingNode.isExpanded ||\n model.getChildOffset(parentId, existingNode.id) !== offset ||\n nodeInput.numChildren === 0\n ) {\n model.setChildren(parentId, [nodeInput], offset);\n } else {\n existingNode.label = nodeInput.label;\n existingNode.description = nodeInput.description ?? \"\";\n existingNode.item = nodeInput.item;\n }\n\n if (hierarchyItem.children) {\n updateChildren(\n model,\n hierarchyItem.item.id,\n hierarchyItem.children,\n 0,\n hierarchyItem.numChildren\n );\n }\n offset++;\n }\n}\n\nfunction convertToTreeModelNodeInput(\n item: TreeNodeItemData\n): TreeModelNodeInput {\n let numChildren: number | undefined;\n if (item.children) {\n numChildren = item.children.length;\n } else if (!item.hasChildren) {\n numChildren = 0;\n }\n\n return {\n description: item.description,\n isExpanded: !!item.autoExpand,\n id: item.id,\n item,\n label: item.label,\n isLoading: false,\n numChildren,\n isSelected: false,\n };\n}\n\ninterface TreeDataSourceResult {\n loadedItems: TreeNodeItemData[];\n numChildren?: number;\n}\n\n/**\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\n *\n * @internal\n */\nexport class TreeDataSource {\n private _dataProvider: TreeDataProvider;\n\n constructor(dataProvider: TreeDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n public requestItems(\n parent: TreeNodeItem | undefined,\n firstItemIndex: number,\n numItems: number,\n requestNumChildren: boolean\n ): RxjsObservable<TreeDataSourceResult> {\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\n return defer(async () => {\n if (isTreeDataProviderInterface(this._dataProvider)) {\n const dataProvider = this._dataProvider;\n return from(\n requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined]\n ).pipe(\n concatMap(async (numChildren) => {\n const pageOptions =\n numItems !== 0\n ? { size: numItems, start: firstItemIndex }\n : undefined;\n return {\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\n numChildren,\n };\n })\n );\n }\n\n return from(this.getItems(parent)).pipe(\n map((loadedItems) => ({\n loadedItems:\n numItems !== 0\n ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems)\n : loadedItems,\n numChildren: loadedItems.length,\n }))\n );\n }).pipe(\n concatAll(),\n share({\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: true,\n })\n );\n }\n\n private async getItems(\n parent: TreeNodeItem | undefined\n ): Promise<TreeNodeItemData[]> {\n if (isTreeDataProviderRaw(this._dataProvider)) {\n return this.getChildren(this._dataProvider, parent);\n }\n\n if (isTreeDataProviderMethod(this._dataProvider)) {\n return this._dataProvider(parent);\n }\n\n if (isTreeDataProviderPromise(this._dataProvider)) {\n this._dataProvider = await this._dataProvider;\n return this.getChildren(this._dataProvider, parent);\n }\n\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"Unsupported TreeDataProvider.\"\n );\n }\n\n private getChildren(\n rawProvider: TreeDataProviderRaw,\n parent: TreeNodeItem | undefined\n ): TreeNodeItemData[] {\n if (parent === undefined) return rawProvider;\n\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\n }\n}\n"]}
1
+ {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.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 Tree\n */\n\nimport type { Observable as RxjsObservable } from \"rxjs\";\nimport {\n concatAll,\n concatMap,\n defer,\n finalize,\n from,\n map,\n of,\n share,\n toArray,\n} from \"rxjs\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport {\n scheduleSubscription,\n SubscriptionScheduler,\n} from \"../../common/SubscriptionScheduler\";\nimport { UiComponents } from \"../../UiComponents\";\nimport type {\n ImmediatelyLoadedTreeNodeItem,\n TreeDataProvider,\n TreeDataProviderRaw,\n TreeNodeItem,\n} from \"../TreeDataProvider\";\nimport {\n isTreeDataProviderInterface,\n isTreeDataProviderMethod,\n isTreeDataProviderPromise,\n isTreeDataProviderRaw,\n} from \"../TreeDataProvider\";\nimport type { Observable } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n MutableTreeModel,\n TreeModelNode,\n TreeModelNodeInput,\n TreeModelRootNode,\n TreeNodeItemData,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\n\n/**\n * Data structure that describes node load result\n * @public\n */\nexport interface TreeNodeLoadResult {\n loadedNodes: TreeNodeItem[];\n}\n\n/**\n * Tree node loader which is used to load tree nodes.\n * @public\n */\nexport interface ITreeNodeLoader {\n /**\n * Loads node at specified place in tree.\n * @param parentId specifies tree branch\n * @param childIndex specifies offset in the branch.\n */\n loadNode(\n parentId: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult>;\n}\n\n/**\n * Tree node loader which uses `TreeDataProvider` to load nodes.\n * @public\n */\nexport interface ITreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n> extends ITreeNodeLoader {\n /** Returns `TreeDataProvider` used to load nodes. */\n readonly dataProvider: TDataProvider;\n}\n\n/**\n * Abstract node loader implementation which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\n private _treeModelSource: TreeModelSource;\n private _loadScheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n protected constructor(modelSource: TreeModelSource) {\n this._treeModelSource = modelSource;\n }\n\n public get modelSource() {\n return this._treeModelSource;\n }\n\n /** Do not override this method. @see `load` */\n public loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\n scheduleSubscription(this._loadScheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n })\n );\n }\n\n /**\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\n * in the hierarchy, etc.)\n */\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\n }\n\n /** An abstract method to load a node at the specific index for the specified parent. */\n protected abstract load(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<LoadedNodeHierarchy>;\n}\n\n/**\n * Abstract node loader with tree data provider which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n >\n extends AbstractTreeNodeLoader\n implements ITreeNodeLoaderWithProvider<TDataProvider>\n{\n private _dataProvider: TDataProvider;\n\n protected constructor(\n modelSource: TreeModelSource,\n dataProvider: TDataProvider\n ) {\n super(modelSource);\n this._dataProvider = dataProvider;\n }\n\n public get dataProvider() {\n return this._dataProvider;\n }\n}\n\n/**\n * Default tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class TreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _activeRequests = new Map<\n string | undefined,\n RxjsObservable<TreeNodeLoadResult>\n >();\n private _scheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n }\n\n /**\n * Schedules to load children of node and returns an Observable.\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n _childIndex?: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const activeRequest = this._activeRequests.get(parentId);\n if (activeRequest) {\n return activeRequest;\n }\n\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n 0,\n 0,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => this._activeRequests.delete(parentId))\n );\n this._activeRequests.set(parentId, newRequest);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Default paged tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class PagedTreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _pageSize: number;\n private _activePageRequests: Map<\n string | undefined,\n Map<number, RxjsObservable<TreeNodeLoadResult>>\n >;\n private _scheduler: SubscriptionScheduler<LoadedNodeHierarchy>;\n\n constructor(\n dataProvider: TDataProvider,\n modelSource: TreeModelSource,\n pageSize: number\n ) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n this._pageSize = pageSize;\n this._activePageRequests = new Map();\n this._scheduler = new SubscriptionScheduler();\n }\n\n /** Returns page size used by tree node loader. */\n public get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * Schedules to load one page of node children and returns an Observable.\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const parentPageRequests =\n this._activePageRequests.get(parentId) ??\n new Map<number, RxjsObservable<TreeNodeLoadResult>>();\n const page = Math.trunc(childIndex / this._pageSize);\n const activeRequest = parentPageRequests.get(page);\n if (activeRequest) {\n return activeRequest;\n }\n\n const startIndex = page * this._pageSize;\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n startIndex,\n this._pageSize,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => {\n parentPageRequests.delete(page);\n if (parentPageRequests.size === 0) {\n this._activePageRequests.delete(parentId);\n }\n })\n );\n\n parentPageRequests.set(page, newRequest);\n this._activePageRequests.set(parentId, parentPageRequests);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Data structure that describes hierarchy loaded for parent node.\n * @public\n */\nexport interface LoadedNodeHierarchy {\n /** Node id of the parent node for loaded hierarchy. */\n parentId: string | undefined;\n /** Hierarchy items offset in parent node children array. */\n offset: number;\n /** Loaded hierarchy items. */\n hierarchyItems: LoadedNodeHierarchyItem[];\n /** Number of children parent node has. */\n numChildren?: number;\n}\n\n/**\n * Data structure that describes one loaded hierarchy item.\n * @public\n */\nexport interface LoadedNodeHierarchyItem {\n /** Loaded tree node item. */\n item: TreeNodeItemData;\n /** Children of loaded tree node item. */\n children?: LoadedNodeHierarchyItem[];\n /** Number of children tree node item has. */\n numChildren?: number;\n}\n\nfunction requestLoadedHierarchy(\n parentItem: TreeNodeItem | undefined,\n dataSource: TreeDataSource,\n start: number,\n take: number,\n requestNumChildren: boolean\n) {\n const parentId = parentItem && parentItem.id;\n return dataSource\n .requestItems(parentItem, start, take, requestNumChildren)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((hierarchyItems) => ({\n parentId,\n offset: start,\n hierarchyItems,\n numChildren,\n }))\n )\n )\n );\n}\n\nfunction loadHierarchy(\n rootItems: TreeNodeItemData[],\n dataSource: TreeDataSource,\n take: number\n): RxjsObservable<LoadedNodeHierarchyItem[]> {\n return from(rootItems).pipe(\n concatMap((item) => {\n if (!item.autoExpand || item.children) {\n return of(convertToLoadedNodeHierarchyItem(item));\n }\n\n return dataSource\n .requestItems(item, 0, take, true)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((children) => ({ item, children, numChildren }))\n )\n )\n );\n }),\n toArray()\n );\n}\n\nfunction convertToLoadedNodeHierarchyItem(\n item: TreeNodeItemData\n): LoadedNodeHierarchyItem {\n return {\n item,\n children: item.children\n ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child))\n : undefined,\n numChildren: item.children ? item.children.length : undefined,\n };\n}\n\nfunction collectTreeNodeItems(\n hierarchyItems: LoadedNodeHierarchyItem[],\n result: TreeNodeItem[] = []\n) {\n for (const hierarchyItem of hierarchyItems) {\n result.push(hierarchyItem.item);\n if (hierarchyItem.children)\n collectTreeNodeItems(hierarchyItem.children, result);\n }\n\n return result;\n}\n\n/** @internal */\nexport function handleLoadedNodeHierarchy(\n modelSource: TreeModelSource,\n loadedHierarchy: LoadedNodeHierarchy\n) {\n modelSource.modifyModel((model) => {\n if (loadedHierarchy.parentId !== undefined) {\n // Make sure the model sill contains the parent node\n /* istanbul ignore if */\n if (model.getNode(loadedHierarchy.parentId) === undefined) return;\n }\n\n updateChildren(\n model,\n loadedHierarchy.parentId,\n loadedHierarchy.hierarchyItems,\n loadedHierarchy.offset,\n loadedHierarchy.numChildren\n );\n if (loadedHierarchy.parentId !== undefined) {\n const parentNode = model.getNode(loadedHierarchy.parentId);\n /* istanbul ignore else */\n if (\n parentNode &&\n parentNode.isLoading &&\n parentNode.numChildren !== undefined\n ) {\n parentNode.isLoading = false;\n }\n }\n });\n}\n\nfunction updateChildren(\n model: MutableTreeModel,\n parentId: string | undefined,\n hierarchyItems: LoadedNodeHierarchyItem[],\n startIndex: number,\n numChildren?: number\n) {\n // numChildren set to undefined indicates that this is not the first request for children\n if (numChildren !== undefined) {\n model.setNumChildren(parentId, numChildren);\n }\n\n // if children array is undefined do not add children as they should be disposed\n if (model.getChildren(parentId) === undefined) {\n return;\n }\n\n let offset = startIndex;\n for (const hierarchyItem of hierarchyItems) {\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\n const existingNode = model.getNode(hierarchyItem.item.id);\n\n // if same item exists in the same position and is expanded update it without removing it's subtree\n if (\n !existingNode ||\n !existingNode.isExpanded ||\n model.getChildOffset(parentId, existingNode.id) !== offset ||\n nodeInput.numChildren === 0\n ) {\n model.setChildren(parentId, [nodeInput], offset);\n } else {\n existingNode.label = nodeInput.label;\n existingNode.description = nodeInput.description ?? \"\";\n existingNode.item = nodeInput.item;\n }\n\n if (hierarchyItem.children) {\n updateChildren(\n model,\n hierarchyItem.item.id,\n hierarchyItem.children,\n 0,\n hierarchyItem.numChildren\n );\n }\n offset++;\n }\n}\n\nfunction convertToTreeModelNodeInput(\n item: TreeNodeItemData\n): TreeModelNodeInput {\n let numChildren: number | undefined;\n if (item.children) {\n numChildren = item.children.length;\n } else if (!item.hasChildren) {\n numChildren = 0;\n }\n\n return {\n description: item.description,\n isExpanded: !!item.autoExpand,\n id: item.id,\n item,\n label: item.label,\n isLoading: false,\n numChildren,\n isSelected: false,\n };\n}\n\ninterface TreeDataSourceResult {\n loadedItems: TreeNodeItemData[];\n numChildren?: number;\n}\n\n/**\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\n *\n * @internal\n */\nexport class TreeDataSource {\n private _dataProvider: TreeDataProvider;\n\n constructor(dataProvider: TreeDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n public requestItems(\n parent: TreeNodeItem | undefined,\n firstItemIndex: number,\n numItems: number,\n requestNumChildren: boolean\n ): RxjsObservable<TreeDataSourceResult> {\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\n return defer(async () => {\n if (isTreeDataProviderInterface(this._dataProvider)) {\n const dataProvider = this._dataProvider;\n return from(\n requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined]\n ).pipe(\n concatMap(async (numChildren) => {\n const pageOptions =\n numItems !== 0\n ? { size: numItems, start: firstItemIndex }\n : undefined;\n return {\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\n numChildren,\n };\n })\n );\n }\n\n return from(this.getItems(parent)).pipe(\n map((loadedItems) => ({\n loadedItems:\n numItems !== 0\n ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems)\n : loadedItems,\n numChildren: loadedItems.length,\n }))\n );\n }).pipe(\n concatAll(),\n share({\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: true,\n })\n );\n }\n\n private async getItems(\n parent: TreeNodeItem | undefined\n ): Promise<TreeNodeItemData[]> {\n if (isTreeDataProviderRaw(this._dataProvider)) {\n return this.getChildren(this._dataProvider, parent);\n }\n\n if (isTreeDataProviderMethod(this._dataProvider)) {\n return this._dataProvider(parent);\n }\n\n if (isTreeDataProviderPromise(this._dataProvider)) {\n this._dataProvider = await this._dataProvider;\n return this.getChildren(this._dataProvider, parent);\n }\n // eslint-disable-next-line deprecation/deprecation\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"Unsupported TreeDataProvider.\"\n );\n }\n\n private getChildren(\n rawProvider: TreeDataProviderRaw,\n parent: TreeNodeItem | undefined\n ): TreeNodeItemData[] {\n if (parent === undefined) return rawProvider;\n\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/components-react",
3
- "version": "4.8.1",
3
+ "version": "4.9.0-dev.1",
4
4
  "description": "iTwin.js UI complex components",
5
5
  "main": "lib/cjs/components-react.js",
6
6
  "module": "lib/esm/components-react.js",
@@ -24,7 +24,7 @@
24
24
  "peerDependencies": {
25
25
  "@itwin/appui-abstract": "^3.7.0 || ^4.0.0",
26
26
  "@itwin/core-bentley": "^3.7.0 || ^4.0.0",
27
- "@itwin/core-react": "^4.8.1",
27
+ "@itwin/core-react": "^4.9.0-dev.1",
28
28
  "react": "^17.0.0 || ^18.0.0",
29
29
  "react-dom": "^17.0.0 || ^18.0.0"
30
30
  },
@@ -39,7 +39,7 @@
39
39
  "@itwin/core-common": "^3.7.0",
40
40
  "@itwin/core-geometry": "^3.7.0",
41
41
  "@itwin/core-i18n": "^3.7.0",
42
- "@itwin/core-react": "4.8.1",
42
+ "@itwin/core-react": "4.9.0-dev.1",
43
43
  "@itwin/eslint-plugin": "^4.0.0-dev.45",
44
44
  "@testing-library/dom": "^8.11.2",
45
45
  "@testing-library/react": "^12.0.0",
@@ -82,7 +82,8 @@
82
82
  "sinon-chai": "^3.2.0",
83
83
  "ts-node": "^10.8.2",
84
84
  "typemoq": "^2.1.0",
85
- "typescript": "~5.0.2"
85
+ "typescript": "~5.0.2",
86
+ "upath": "^2.0.1"
86
87
  },
87
88
  "//dependencies": [
88
89
  "NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API",
@@ -90,9 +91,9 @@
90
91
  ],
91
92
  "dependencies": {
92
93
  "@bentley/icons-generic": "^1.0.34",
93
- "@itwin/itwinui-variables": "^2.0.0",
94
- "@itwin/itwinui-icons-react": "^2.1.0",
95
- "@itwin/itwinui-react": "^2.11.11",
94
+ "@itwin/itwinui-variables": "^3.0.0",
95
+ "@itwin/itwinui-icons-react": "^2.8.0",
96
+ "@itwin/itwinui-react": "^3.2.4",
96
97
  "@types/shortid": "~0.0.29",
97
98
  "classnames": "2.3.1",
98
99
  "immer": "9.0.6",