@itwin/components-react 4.6.4 → 4.7.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 (160) hide show
  1. package/CHANGELOG.md +26 -4
  2. package/lib/cjs/components-react/UiComponents.d.ts.map +1 -1
  3. package/lib/cjs/components-react/UiComponents.js +3 -2
  4. package/lib/cjs/components-react/UiComponents.js.map +1 -1
  5. package/lib/cjs/components-react/common/ImageRenderer.d.ts.map +1 -1
  6. package/lib/cjs/components-react/common/ImageRenderer.js +2 -3
  7. package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
  8. package/lib/cjs/components-react/common/UseAsyncValue.d.ts.map +1 -1
  9. package/lib/cjs/components-react/common/UseAsyncValue.js +7 -17
  10. package/lib/cjs/components-react/common/UseAsyncValue.js.map +1 -1
  11. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  12. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js +2 -1
  13. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  14. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.d.ts.map +1 -1
  15. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js +22 -16
  16. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  17. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  18. package/lib/cjs/components-react/datepicker/DatePicker.js +6 -6
  19. package/lib/cjs/components-react/datepicker/DatePicker.js.map +1 -1
  20. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js +1 -1
  21. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  22. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  23. package/lib/cjs/components-react/datepicker/TimeField.js +19 -22
  24. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  26. package/lib/cjs/components-react/editors/CustomNumberEditor.js +3 -2
  27. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  28. package/lib/cjs/components-react/editors/EditorContainer.d.ts.map +1 -1
  29. package/lib/cjs/components-react/editors/EditorContainer.js +4 -3
  30. package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
  31. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +0 -1
  32. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts.map +1 -1
  33. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js +1 -2
  34. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  35. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  36. package/lib/cjs/components-react/editors/PopupButton.js +4 -3
  37. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  38. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  39. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +1 -0
  40. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  41. package/lib/cjs/components-react/filtering/FilteringInput.d.ts.map +1 -1
  42. package/lib/cjs/components-react/filtering/FilteringInput.js +2 -2
  43. package/lib/cjs/components-react/filtering/FilteringInput.js.map +1 -1
  44. package/lib/cjs/components-react/filtering/ResultSelector.js +2 -2
  45. package/lib/cjs/components-react/filtering/ResultSelector.js.map +1 -1
  46. package/lib/cjs/components-react/inputs/ParsedInput.d.ts.map +1 -1
  47. package/lib/cjs/components-react/inputs/ParsedInput.js +3 -3
  48. package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
  49. package/lib/cjs/components-react/properties/renderers/value/Common.d.ts +4 -0
  50. package/lib/cjs/components-react/properties/renderers/value/Common.d.ts.map +1 -0
  51. package/lib/cjs/components-react/properties/renderers/value/Common.js +12 -0
  52. package/lib/cjs/components-react/properties/renderers/value/Common.js.map +1 -0
  53. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  54. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.js +2 -8
  55. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
  56. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.d.ts.map +1 -1
  57. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js +2 -5
  58. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  59. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  60. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js +2 -8
  61. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
  62. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.d.ts.map +1 -1
  63. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js +1 -1
  64. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  65. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.d.ts.map +1 -1
  66. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js +1 -1
  67. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
  68. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.d.ts.map +1 -1
  69. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js +1 -1
  70. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
  71. package/lib/cjs/components-react/tree/controlled/TreeEventDispatcher.d.ts.map +1 -1
  72. package/lib/cjs/components-react/tree/controlled/TreeEventDispatcher.js +10 -2
  73. package/lib/cjs/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
  74. package/lib/cjs/components-react/tree/controlled/TreeEventHandler.d.ts +2 -0
  75. package/lib/cjs/components-react/tree/controlled/TreeEventHandler.d.ts.map +1 -1
  76. package/lib/cjs/components-react/tree/controlled/TreeEventHandler.js +2 -0
  77. package/lib/cjs/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
  78. package/lib/cjs/components-react/tree/controlled/TreeEvents.d.ts +2 -0
  79. package/lib/cjs/components-react/tree/controlled/TreeEvents.d.ts.map +1 -1
  80. package/lib/cjs/components-react/tree/controlled/TreeEvents.js.map +1 -1
  81. package/lib/esm/components-react/UiComponents.d.ts.map +1 -1
  82. package/lib/esm/components-react/UiComponents.js +3 -2
  83. package/lib/esm/components-react/UiComponents.js.map +1 -1
  84. package/lib/esm/components-react/common/ImageRenderer.d.ts.map +1 -1
  85. package/lib/esm/components-react/common/ImageRenderer.js +2 -3
  86. package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
  87. package/lib/esm/components-react/common/UseAsyncValue.d.ts.map +1 -1
  88. package/lib/esm/components-react/common/UseAsyncValue.js +9 -19
  89. package/lib/esm/components-react/common/UseAsyncValue.js.map +1 -1
  90. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  91. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js +3 -2
  92. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  93. package/lib/esm/components-react/common/UseDebouncedAsyncValue.d.ts.map +1 -1
  94. package/lib/esm/components-react/common/UseDebouncedAsyncValue.js +23 -17
  95. package/lib/esm/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  96. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  97. package/lib/esm/components-react/datepicker/DatePicker.js +6 -6
  98. package/lib/esm/components-react/datepicker/DatePicker.js.map +1 -1
  99. package/lib/esm/components-react/datepicker/DatePickerPopupButton.js +2 -2
  100. package/lib/esm/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  101. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  102. package/lib/esm/components-react/datepicker/TimeField.js +19 -22
  103. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  104. package/lib/esm/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  105. package/lib/esm/components-react/editors/CustomNumberEditor.js +4 -3
  106. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  107. package/lib/esm/components-react/editors/EditorContainer.d.ts.map +1 -1
  108. package/lib/esm/components-react/editors/EditorContainer.js +5 -4
  109. package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
  110. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +0 -1
  111. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts.map +1 -1
  112. package/lib/esm/components-react/editors/EnumButtonGroupEditor.js +2 -3
  113. package/lib/esm/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  114. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  115. package/lib/esm/components-react/editors/PopupButton.js +5 -4
  116. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  117. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  118. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +1 -0
  119. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  120. package/lib/esm/components-react/filtering/FilteringInput.d.ts.map +1 -1
  121. package/lib/esm/components-react/filtering/FilteringInput.js +2 -2
  122. package/lib/esm/components-react/filtering/FilteringInput.js.map +1 -1
  123. package/lib/esm/components-react/filtering/ResultSelector.js +2 -2
  124. package/lib/esm/components-react/filtering/ResultSelector.js.map +1 -1
  125. package/lib/esm/components-react/inputs/ParsedInput.d.ts.map +1 -1
  126. package/lib/esm/components-react/inputs/ParsedInput.js +3 -3
  127. package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
  128. package/lib/esm/components-react/properties/renderers/value/Common.d.ts +4 -0
  129. package/lib/esm/components-react/properties/renderers/value/Common.d.ts.map +1 -0
  130. package/lib/esm/components-react/properties/renderers/value/Common.js +8 -0
  131. package/lib/esm/components-react/properties/renderers/value/Common.js.map +1 -0
  132. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.d.ts.map +1 -1
  133. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.js +1 -7
  134. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
  135. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.d.ts.map +1 -1
  136. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js +2 -5
  137. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  138. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.d.ts.map +1 -1
  139. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js +1 -7
  140. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
  141. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.d.ts.map +1 -1
  142. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js +1 -1
  143. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  144. package/lib/esm/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.d.ts.map +1 -1
  145. package/lib/esm/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js +1 -1
  146. package/lib/esm/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
  147. package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.d.ts.map +1 -1
  148. package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js +1 -1
  149. package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
  150. package/lib/esm/components-react/tree/controlled/TreeEventDispatcher.d.ts.map +1 -1
  151. package/lib/esm/components-react/tree/controlled/TreeEventDispatcher.js +10 -2
  152. package/lib/esm/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
  153. package/lib/esm/components-react/tree/controlled/TreeEventHandler.d.ts +2 -0
  154. package/lib/esm/components-react/tree/controlled/TreeEventHandler.d.ts.map +1 -1
  155. package/lib/esm/components-react/tree/controlled/TreeEventHandler.js +2 -0
  156. package/lib/esm/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
  157. package/lib/esm/components-react/tree/controlled/TreeEvents.d.ts +2 -0
  158. package/lib/esm/components-react/tree/controlled/TreeEvents.d.ts.map +1 -1
  159. package/lib/esm/components-react/tree/controlled/TreeEvents.js.map +1 -1
  160. package/package.json +7 -6
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertRecordToString = void 0;
4
+ const TypeConverterManager_1 = require("../../../converters/TypeConverterManager");
5
+ /** @internal */
6
+ function convertRecordToString(record) {
7
+ const primitive = record.value;
8
+ return (primitive.displayValue ||
9
+ TypeConverterManager_1.TypeConverterManager.getConverter(record.property.typename, record.property.converter?.name).convertPropertyToString(record.property, primitive.value));
10
+ }
11
+ exports.convertRecordToString = convertRecordToString;
12
+ //# sourceMappingURL=Common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/Common.ts"],"names":[],"mappings":";;;AAKA,mFAAgF;AAEhF,gBAAgB;AAChB,SAAgB,qBAAqB,CACnC,MAAsB;IAEtB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAuB,CAAC;IACjD,OAAO,CACL,SAAS,CAAC,YAAY;QACtB,2CAAoB,CAAC,YAAY,CAC/B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EACxB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAChC,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAC5D,CAAC;AACJ,CAAC;AAXD,sDAWC","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 *--------------------------------------------------------------------------------------------*/\nimport type { PrimitiveValue, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { TypeConverterManager } from \"../../../converters/TypeConverterManager\";\n\n/** @internal */\nexport function convertRecordToString(\n record: PropertyRecord\n): string | Promise<string> {\n const primitive = record.value as PrimitiveValue;\n return (\n primitive.displayValue ||\n TypeConverterManager.getConverter(\n record.property.typename,\n record.property.converter?.name\n ).convertPropertyToString(record.property, primitive.value)\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DoublePropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/DoublePropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,qBAAa,2BAA4B,YAAW,sBAAsB;IACxE,uDAAuD;IAChD,SAAS,CAAC,MAAM,EAAE,cAAc;IAOvC,iEAAiE;IAC1D,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B;CAUzC"}
1
+ {"version":3,"file":"DoublePropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/DoublePropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,qBAAa,2BAA4B,YAAW,sBAAsB;IACxE,uDAAuD;IAChD,SAAS,CAAC,MAAM,EAAE,cAAc;IAOvC,iEAAiE;IAC1D,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B;CAUzC"}
@@ -33,8 +33,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.DoublePropertyValueRenderer = void 0;
34
34
  const React = __importStar(require("react"));
35
35
  const appui_abstract_1 = require("@itwin/appui-abstract");
36
- const TypeConverterManager_1 = require("../../../converters/TypeConverterManager");
37
36
  const PrimitivePropertyValueRenderer_1 = require("./PrimitivePropertyValueRenderer");
37
+ const Common_1 = require("./Common");
38
38
  /** Default Double Property Renderer
39
39
  * @public
40
40
  */
@@ -46,14 +46,8 @@ class DoublePropertyValueRenderer {
46
46
  }
47
47
  /** Method that returns a JSX representation of PropertyRecord */
48
48
  render(record, context) {
49
- return (React.createElement(PrimitivePropertyValueRenderer_1.PrimitivePropertyValueRendererImpl, { record: record, context: context, stringValueCalculator: convertRecordToString }));
49
+ return (React.createElement(PrimitivePropertyValueRenderer_1.PrimitivePropertyValueRendererImpl, { record: record, context: context, stringValueCalculator: Common_1.convertRecordToString }));
50
50
  }
51
51
  }
52
52
  exports.DoublePropertyValueRenderer = DoublePropertyValueRenderer;
53
- function convertRecordToString(record) {
54
- const primitive = record.value;
55
- if (primitive.displayValue)
56
- return primitive.displayValue;
57
- return TypeConverterManager_1.TypeConverterManager.getConverter(record.property.typename, record.property.converter?.name).convertPropertyToString(record.property, primitive.value);
58
- }
59
53
  //# sourceMappingURL=DoublePropertyValueRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DoublePropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/DoublePropertyValueRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA+E;AAC/E,mFAAgF;AAKhF,qFAAsF;AAEtF;;GAEG;AACH,MAAa,2BAA2B;IACtC,uDAAuD;IAChD,SAAS,CAAC,MAAsB;QACrC,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,kCAAiB,CAAC,MAAM,CACtD,CAAC;IACJ,CAAC;IAED,iEAAiE;IAC1D,MAAM,CACX,MAAsB,EACtB,OAAsC;QAEtC,OAAO,CACL,oBAAC,mEAAkC,IACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,qBAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAtBD,kEAsBC;AAED,SAAS,qBAAqB,CAC5B,MAAsB;IAEtB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAuB,CAAC;IACjD,IAAI,SAAS,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC,YAAY,CAAC;IAC1D,OAAO,2CAAoB,CAAC,YAAY,CACtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EACxB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAChC,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9D,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 Properties\n */\n\nimport * as React from \"react\";\nimport type { PrimitiveValue, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { TypeConverterManager } from \"../../../converters/TypeConverterManager\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { PrimitivePropertyValueRendererImpl } from \"./PrimitivePropertyValueRenderer\";\n\n/** Default Double Property Renderer\n * @public\n */\nexport class DoublePropertyValueRenderer implements IPropertyValueRenderer {\n /** Checks if the renderer can handle given property */\n public canRender(record: PropertyRecord) {\n return (\n record.value.valueFormat === PropertyValueFormat.Primitive &&\n record.property.typename === StandardTypeNames.Double\n );\n }\n\n /** Method that returns a JSX representation of PropertyRecord */\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ) {\n return (\n <PrimitivePropertyValueRendererImpl\n record={record}\n context={context}\n stringValueCalculator={convertRecordToString}\n />\n );\n }\n}\n\nfunction convertRecordToString(\n record: PropertyRecord\n): string | Promise<string> {\n const primitive = record.value as PrimitiveValue;\n if (primitive.displayValue) return primitive.displayValue;\n return TypeConverterManager.getConverter(\n record.property.typename,\n record.property.converter?.name\n ).convertPropertyToString(record.property, primitive.value);\n}\n"]}
1
+ {"version":3,"file":"DoublePropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/DoublePropertyValueRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA+E;AAK/E,qFAAsF;AACtF,qCAAiD;AAEjD;;GAEG;AACH,MAAa,2BAA2B;IACtC,uDAAuD;IAChD,SAAS,CAAC,MAAsB;QACrC,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,kCAAiB,CAAC,MAAM,CACtD,CAAC;IACJ,CAAC;IAED,iEAAiE;IAC1D,MAAM,CACX,MAAsB,EACtB,OAAsC;QAEtC,OAAO,CACL,oBAAC,mEAAkC,IACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,8BAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAtBD,kEAsBC","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 Properties\n */\n\nimport * as React from \"react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { PrimitivePropertyValueRendererImpl } from \"./PrimitivePropertyValueRenderer\";\nimport { convertRecordToString } from \"./Common\";\n\n/** Default Double Property Renderer\n * @public\n */\nexport class DoublePropertyValueRenderer implements IPropertyValueRenderer {\n /** Checks if the renderer can handle given property */\n public canRender(record: PropertyRecord) {\n return (\n record.value.valueFormat === PropertyValueFormat.Primitive &&\n record.property.typename === StandardTypeNames.Double\n );\n }\n\n /** Method that returns a JSX representation of PropertyRecord */\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ) {\n return (\n <PrimitivePropertyValueRendererImpl\n record={record}\n context={context}\n stringValueCalculator={convertRecordToString}\n />\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MultilineTextPropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5E,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAIpC,gBAAgB;AAChB,qBAAa,kCACX,YAAW,sBAAsB;IAE1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAI1C,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B,GACrC,KAAK,CAAC,SAAS;CAQnB;AA6BD,UAAU,0BAA0B;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,cAAc;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAqDtE,CAAC"}
1
+ {"version":3,"file":"MultilineTextPropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAKpC,gBAAgB;AAChB,qBAAa,kCACX,YAAW,sBAAsB;IAE1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAI1C,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B,GACrC,KAAK,CAAC,SAAS;CAQnB;AA6BD,UAAU,0BAA0B;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,cAAc;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAqDtE,CAAC"}
@@ -39,10 +39,10 @@ const React = __importStar(require("react"));
39
39
  const react_1 = require("react");
40
40
  const core_bentley_1 = require("@itwin/core-bentley");
41
41
  const appui_abstract_1 = require("@itwin/appui-abstract");
42
- const TypeConverterManager_1 = require("../../../converters/TypeConverterManager");
43
42
  const UiComponents_1 = require("../../../UiComponents");
44
43
  const PrimitivePropertyValueRenderer_1 = require("./PrimitivePropertyValueRenderer");
45
44
  const classnames_1 = __importDefault(require("classnames"));
45
+ const Common_1 = require("./Common");
46
46
  /** @internal */
47
47
  class MultilineTextPropertyValueRenderer {
48
48
  canRender(record) {
@@ -54,7 +54,7 @@ class MultilineTextPropertyValueRenderer {
54
54
  }
55
55
  exports.MultilineTextPropertyValueRenderer = MultilineTextPropertyValueRenderer;
56
56
  const MultilineTextPropertyValueRendererImpl = (props) => {
57
- const { stringValue, element } = (0, PrimitivePropertyValueRenderer_1.useRenderedStringValue)(props.record, convertRecordToString, props.context);
57
+ const { stringValue, element } = (0, PrimitivePropertyValueRenderer_1.useRenderedStringValue)(props.record, Common_1.convertRecordToString, props.context);
58
58
  return (React.createElement(exports.MultilineTextRenderer, { style: props.context?.style, stringValue: stringValue, isExpanded: props.context?.isExpanded, onExpansionToggled: props.context?.onExpansionToggled, onHeightChanged: props.context?.onHeightChanged }, element));
59
59
  };
60
60
  /** @internal */
@@ -86,7 +86,4 @@ const MultilineTextRenderer = (props) => {
86
86
  contentOverflows && !props.isExpanded && (React.createElement("button", { className: "expand-toggle", onClick: handleExpansionToggleClick }, UiComponents_1.UiComponents.translate("property.expand")))));
87
87
  };
88
88
  exports.MultilineTextRenderer = MultilineTextRenderer;
89
- function convertRecordToString(record) {
90
- return TypeConverterManager_1.TypeConverterManager.getConverter(appui_abstract_1.StandardTypeNames.Text).convertPropertyToString(record.property, record.value.value);
91
- }
92
89
  //# sourceMappingURL=MultilineTextPropertyValueRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultilineTextPropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module Properties\n */\n\nimport * as React from \"react\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport type { PrimitiveValue, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { TypeConverterManager } from \"../../../converters/TypeConverterManager\";\nimport { UiComponents } from \"../../../UiComponents\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { useRenderedStringValue } from \"./PrimitivePropertyValueRenderer\";\nimport classnames from \"classnames\";\n\n/** @internal */\nexport class MultilineTextPropertyValueRenderer\n implements IPropertyValueRenderer\n{\n public canRender(record: PropertyRecord): boolean {\n return record.value.valueFormat === PropertyValueFormat.Primitive;\n }\n\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ): React.ReactNode {\n return (\n <MultilineTextPropertyValueRendererImpl\n record={record}\n context={context}\n />\n );\n }\n}\n\ninterface MultilineTextPropertyValueRendererImplProps {\n record: PropertyRecord;\n context?: PropertyValueRendererContext;\n children?: never;\n}\n\nconst MultilineTextPropertyValueRendererImpl: React.FC<\n MultilineTextPropertyValueRendererImplProps\n> = (props) => {\n const { stringValue, element } = useRenderedStringValue(\n props.record,\n convertRecordToString,\n props.context\n );\n return (\n <MultilineTextRenderer\n style={props.context?.style}\n stringValue={stringValue}\n isExpanded={props.context?.isExpanded}\n onExpansionToggled={props.context?.onExpansionToggled}\n onHeightChanged={props.context?.onHeightChanged}\n >\n {element}\n </MultilineTextRenderer>\n );\n};\n\ninterface MultilineTextRendererProps {\n stringValue?: string;\n isExpanded?: boolean;\n onExpansionToggled?: () => void;\n onHeightChanged?: (newHeight: number) => void;\n style?: React.CSSProperties;\n /** Content */\n children?: React.ReactNode;\n}\n\n/** @internal */\nexport const MultilineTextRenderer: React.FC<MultilineTextRendererProps> = (\n props\n) => {\n const spanRef = useRef<HTMLSpanElement>(null);\n const divRef = useRef<HTMLDivElement>(null);\n const previousHeightRef = useRef(0);\n const [contentOverflows, setContentOverflows] = useState<boolean>(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n assert(divRef.current !== null && spanRef.current !== null);\n\n setContentOverflows(\n spanRef.current.clientWidth < spanRef.current.scrollWidth\n );\n\n const currentHeight = Math.max(divRef.current.offsetHeight, 27);\n if (currentHeight !== previousHeightRef.current) {\n props.onHeightChanged?.(currentHeight);\n previousHeightRef.current = currentHeight;\n }\n });\n\n const handleExpansionToggleClick = (event: React.MouseEvent) => {\n props.onExpansionToggled?.();\n event.stopPropagation();\n };\n\n // In order to always trigger onMouseLeave event on PropertyView, collapse button must remain mounted at all times.\n // https://github.com/facebook/react/issues/6807\n return (\n <div ref={divRef} className=\"multiline\">\n <span\n ref={spanRef}\n className={classnames(\"content\", { expanded: props.isExpanded })}\n style={props.style}\n title={props.isExpanded ? undefined : props.stringValue}\n >\n {props.children}\n <button\n className=\"expand-toggle\"\n style={{ display: props.isExpanded ? \"inline-block\" : \"none\" }}\n onClick={handleExpansionToggleClick}\n >\n {UiComponents.translate(\"property.collapse\")}\n </button>\n </span>\n {contentOverflows && !props.isExpanded && (\n <button className=\"expand-toggle\" onClick={handleExpansionToggleClick}>\n {UiComponents.translate(\"property.expand\")}\n </button>\n )}\n </div>\n );\n};\n\nfunction convertRecordToString(\n record: PropertyRecord\n): string | Promise<string> {\n return TypeConverterManager.getConverter(\n StandardTypeNames.Text\n ).convertPropertyToString(\n record.property,\n (record.value as PrimitiveValue).value\n );\n}\n"]}
1
+ {"version":3,"file":"MultilineTextPropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module Properties\n */\n\nimport * as React from \"react\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { UiComponents } from \"../../../UiComponents\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { useRenderedStringValue } from \"./PrimitivePropertyValueRenderer\";\nimport classnames from \"classnames\";\nimport { convertRecordToString } from \"./Common\";\n\n/** @internal */\nexport class MultilineTextPropertyValueRenderer\n implements IPropertyValueRenderer\n{\n public canRender(record: PropertyRecord): boolean {\n return record.value.valueFormat === PropertyValueFormat.Primitive;\n }\n\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ): React.ReactNode {\n return (\n <MultilineTextPropertyValueRendererImpl\n record={record}\n context={context}\n />\n );\n }\n}\n\ninterface MultilineTextPropertyValueRendererImplProps {\n record: PropertyRecord;\n context?: PropertyValueRendererContext;\n children?: never;\n}\n\nconst MultilineTextPropertyValueRendererImpl: React.FC<\n MultilineTextPropertyValueRendererImplProps\n> = (props) => {\n const { stringValue, element } = useRenderedStringValue(\n props.record,\n convertRecordToString,\n props.context\n );\n return (\n <MultilineTextRenderer\n style={props.context?.style}\n stringValue={stringValue}\n isExpanded={props.context?.isExpanded}\n onExpansionToggled={props.context?.onExpansionToggled}\n onHeightChanged={props.context?.onHeightChanged}\n >\n {element}\n </MultilineTextRenderer>\n );\n};\n\ninterface MultilineTextRendererProps {\n stringValue?: string;\n isExpanded?: boolean;\n onExpansionToggled?: () => void;\n onHeightChanged?: (newHeight: number) => void;\n style?: React.CSSProperties;\n /** Content */\n children?: React.ReactNode;\n}\n\n/** @internal */\nexport const MultilineTextRenderer: React.FC<MultilineTextRendererProps> = (\n props\n) => {\n const spanRef = useRef<HTMLSpanElement>(null);\n const divRef = useRef<HTMLDivElement>(null);\n const previousHeightRef = useRef(0);\n const [contentOverflows, setContentOverflows] = useState<boolean>(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(() => {\n assert(divRef.current !== null && spanRef.current !== null);\n\n setContentOverflows(\n spanRef.current.clientWidth < spanRef.current.scrollWidth\n );\n\n const currentHeight = Math.max(divRef.current.offsetHeight, 27);\n if (currentHeight !== previousHeightRef.current) {\n props.onHeightChanged?.(currentHeight);\n previousHeightRef.current = currentHeight;\n }\n });\n\n const handleExpansionToggleClick = (event: React.MouseEvent) => {\n props.onExpansionToggled?.();\n event.stopPropagation();\n };\n\n // In order to always trigger onMouseLeave event on PropertyView, collapse button must remain mounted at all times.\n // https://github.com/facebook/react/issues/6807\n return (\n <div ref={divRef} className=\"multiline\">\n <span\n ref={spanRef}\n className={classnames(\"content\", { expanded: props.isExpanded })}\n style={props.style}\n title={props.isExpanded ? undefined : props.stringValue}\n >\n {props.children}\n <button\n className=\"expand-toggle\"\n style={{ display: props.isExpanded ? \"inline-block\" : \"none\" }}\n onClick={handleExpansionToggleClick}\n >\n {UiComponents.translate(\"property.collapse\")}\n </button>\n </span>\n {contentOverflows && !props.isExpanded && (\n <button className=\"expand-toggle\" onClick={handleExpansionToggleClick}>\n {UiComponents.translate(\"property.expand\")}\n </button>\n )}\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationPropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/NavigationPropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,qBAAa,+BAAgC,YAAW,sBAAsB;IAC5E,uDAAuD;IAChD,SAAS,CAAC,MAAM,EAAE,cAAc;IAOvC,iEAAiE;IAC1D,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B;CAUzC"}
1
+ {"version":3,"file":"NavigationPropertyValueRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/NavigationPropertyValueRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,qBAAa,+BAAgC,YAAW,sBAAsB;IAC5E,uDAAuD;IAChD,SAAS,CAAC,MAAM,EAAE,cAAc;IAOvC,iEAAiE;IAC1D,MAAM,CACX,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,4BAA4B;CAUzC"}
@@ -33,8 +33,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.NavigationPropertyValueRenderer = void 0;
34
34
  const React = __importStar(require("react"));
35
35
  const appui_abstract_1 = require("@itwin/appui-abstract");
36
- const TypeConverterManager_1 = require("../../../converters/TypeConverterManager");
37
36
  const PrimitivePropertyValueRenderer_1 = require("./PrimitivePropertyValueRenderer");
37
+ const Common_1 = require("./Common");
38
38
  /** Default Navigation Property Renderer
39
39
  * @public
40
40
  */
@@ -46,14 +46,8 @@ class NavigationPropertyValueRenderer {
46
46
  }
47
47
  /** Method that returns a JSX representation of PropertyRecord */
48
48
  render(record, context) {
49
- return (React.createElement(PrimitivePropertyValueRenderer_1.PrimitivePropertyValueRendererImpl, { record: record, context: context, stringValueCalculator: convertRecordToString }));
49
+ return (React.createElement(PrimitivePropertyValueRenderer_1.PrimitivePropertyValueRendererImpl, { record: record, context: context, stringValueCalculator: Common_1.convertRecordToString }));
50
50
  }
51
51
  }
52
52
  exports.NavigationPropertyValueRenderer = NavigationPropertyValueRenderer;
53
- function convertRecordToString(record) {
54
- const primitive = record.value;
55
- if (primitive.displayValue)
56
- return primitive.displayValue;
57
- return TypeConverterManager_1.TypeConverterManager.getConverter(record.property.typename, record.property.converter?.name).convertPropertyToString(record.property, primitive.value);
58
- }
59
53
  //# sourceMappingURL=NavigationPropertyValueRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationPropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/NavigationPropertyValueRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA+E;AAC/E,mFAAgF;AAKhF,qFAAsF;AAEtF;;GAEG;AACH,MAAa,+BAA+B;IAC1C,uDAAuD;IAChD,SAAS,CAAC,MAAsB;QACrC,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,kCAAiB,CAAC,UAAU,CAC1D,CAAC;IACJ,CAAC;IAED,iEAAiE;IAC1D,MAAM,CACX,MAAsB,EACtB,OAAsC;QAEtC,OAAO,CACL,oBAAC,mEAAkC,IACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,qBAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAtBD,0EAsBC;AAED,SAAS,qBAAqB,CAC5B,MAAsB;IAEtB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAuB,CAAC;IACjD,IAAI,SAAS,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC,YAAY,CAAC;IAC1D,OAAO,2CAAoB,CAAC,YAAY,CACtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EACxB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAChC,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9D,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 Properties\n */\n\nimport * as React from \"react\";\nimport type { PrimitiveValue, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { TypeConverterManager } from \"../../../converters/TypeConverterManager\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { PrimitivePropertyValueRendererImpl } from \"./PrimitivePropertyValueRenderer\";\n\n/** Default Navigation Property Renderer\n * @public\n */\nexport class NavigationPropertyValueRenderer implements IPropertyValueRenderer {\n /** Checks if the renderer can handle given property */\n public canRender(record: PropertyRecord) {\n return (\n record.value.valueFormat === PropertyValueFormat.Primitive &&\n record.property.typename === StandardTypeNames.Navigation\n );\n }\n\n /** Method that returns a JSX representation of PropertyRecord */\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ) {\n return (\n <PrimitivePropertyValueRendererImpl\n record={record}\n context={context}\n stringValueCalculator={convertRecordToString}\n />\n );\n }\n}\n\nfunction convertRecordToString(\n record: PropertyRecord\n): string | Promise<string> {\n const primitive = record.value as PrimitiveValue;\n if (primitive.displayValue) return primitive.displayValue;\n return TypeConverterManager.getConverter(\n record.property.typename,\n record.property.converter?.name\n ).convertPropertyToString(record.property, primitive.value);\n}\n"]}
1
+ {"version":3,"file":"NavigationPropertyValueRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/properties/renderers/value/NavigationPropertyValueRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA+E;AAK/E,qFAAsF;AACtF,qCAAiD;AAEjD;;GAEG;AACH,MAAa,+BAA+B;IAC1C,uDAAuD;IAChD,SAAS,CAAC,MAAsB;QACrC,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,kCAAiB,CAAC,UAAU,CAC1D,CAAC;IACJ,CAAC;IAED,iEAAiE;IAC1D,MAAM,CACX,MAAsB,EACtB,OAAsC;QAEtC,OAAO,CACL,oBAAC,mEAAkC,IACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,8BAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAtBD,0EAsBC","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 Properties\n */\n\nimport * as React from \"react\";\nimport type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport type {\n IPropertyValueRenderer,\n PropertyValueRendererContext,\n} from \"../../ValueRendererManager\";\nimport { PrimitivePropertyValueRendererImpl } from \"./PrimitivePropertyValueRenderer\";\nimport { convertRecordToString } from \"./Common\";\n\n/** Default Navigation Property Renderer\n * @public\n */\nexport class NavigationPropertyValueRenderer implements IPropertyValueRenderer {\n /** Checks if the renderer can handle given property */\n public canRender(record: PropertyRecord) {\n return (\n record.value.valueFormat === PropertyValueFormat.Primitive &&\n record.property.typename === StandardTypeNames.Navigation\n );\n }\n\n /** Method that returns a JSX representation of PropertyRecord */\n public render(\n record: PropertyRecord,\n context?: PropertyValueRendererContext\n ) {\n return (\n <PrimitivePropertyValueRendererImpl\n record={record}\n context={context}\n stringValueCalculator={convertRecordToString}\n />\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayValuePropertyDataFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,8BAA8B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,8BAA8B;IAClF,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,mBAAmB,CAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,wBAAwB,CAAC;CAkBrC"}
1
+ {"version":3,"file":"DisplayValuePropertyDataFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,8BAA8B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,8BAA8B;IAClF,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,mBAAmB,CAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,wBAAwB,CAAC;CAkBrC"}
@@ -19,7 +19,7 @@ class DisplayValuePropertyDataFilterer extends PropertyDataFiltererBase_1.Proper
19
19
  constructor(filterText = "") {
20
20
  super();
21
21
  this._filterText = "";
22
- this._filterText = filterText;
22
+ this._filterText = filterText.toLowerCase().trim();
23
23
  }
24
24
  get filterText() {
25
25
  return this._filterText;
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayValuePropertyDataFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,0DAA4D;AAC5D,+EAA4E;AAE5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,gCAAiC,SAAQ,yDAA8B;IAGlF,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,IAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAElC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,KAAK,CAAC;SACpC,CAAC;IACJ,CAAC;CACF;AA3CD,4EA2CC","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 type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyRecordDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * Property data filterer which matches on Primitive Property Record display value text.\n * @public\n */\nexport class DisplayValuePropertyDataFilterer extends PropertyRecordDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText;\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async recordMatchesFilter(\n node: PropertyRecord\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n if (node.value.valueFormat !== PropertyValueFormat.Primitive)\n return { matchesFilter: false };\n\n const displayValue = node.value.displayValue?.toLowerCase() ?? \"\";\n const matchesCount = countMatchesInString(displayValue, this.filterText);\n\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n matchesCount,\n filteredTypes: [FilteredType.Value],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"DisplayValuePropertyDataFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,0DAA4D;AAC5D,+EAA4E;AAE5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,gCAAiC,SAAQ,yDAA8B;IAGlF,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,IAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,oCAAmB,CAAC,SAAS;YAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAElC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,KAAK,CAAC;SACpC,CAAC;IACJ,CAAC;CACF;AA5CD,4EA4CC","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 type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyRecordDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * Property data filterer which matches on Primitive Property Record display value text.\n * @public\n */\nexport class DisplayValuePropertyDataFilterer extends PropertyRecordDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText.toLowerCase().trim();\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async recordMatchesFilter(\n node: PropertyRecord\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n if (node.value.valueFormat !== PropertyValueFormat.Primitive)\n return { matchesFilter: false };\n\n const displayValue = node.value.displayValue?.toLowerCase() ?? \"\";\n const matchesCount = countMatchesInString(displayValue, this.filterText);\n\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n matchesCount,\n filteredTypes: [FilteredType.Value],\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LabelPropertyDataFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,8BAA8B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,8BAA8B;IAC3E,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,mBAAmB,CAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,wBAAwB,CAAC;CAerC"}
1
+ {"version":3,"file":"LabelPropertyDataFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,8BAA8B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,8BAA8B;IAC3E,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,mBAAmB,CAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,wBAAwB,CAAC;CAerC"}
@@ -18,7 +18,7 @@ class LabelPropertyDataFilterer extends PropertyDataFiltererBase_1.PropertyRecor
18
18
  constructor(filterText = "") {
19
19
  super();
20
20
  this._filterText = "";
21
- this._filterText = filterText;
21
+ this._filterText = filterText.toLowerCase().trim();
22
22
  }
23
23
  get filterText() {
24
24
  return this._filterText;
@@ -1 +1 @@
1
- {"version":3,"file":"LabelPropertyDataFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,+EAA4E;AAE5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,yDAA8B;IAG3E,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,IAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,6BAA6B,EAAE,IAAI;YACnC,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,KAAK,CAAC;SACpC,CAAC;IACJ,CAAC;CACF;AAxCD,8DAwCC","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 type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyRecordDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * PropertyData filter which matches on any record type label and includes descendant nodes on match\n * @public\n */\nexport class LabelPropertyDataFilterer extends PropertyRecordDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText;\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async recordMatchesFilter(\n node: PropertyRecord\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n const displayLabel = node.property.displayLabel.toLowerCase();\n const matchesCount = countMatchesInString(displayLabel, this.filterText);\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n shouldForceIncludeDescendants: true,\n matchesCount,\n filteredTypes: [FilteredType.Label],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"LabelPropertyDataFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,+EAA4E;AAE5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,yDAA8B;IAG3E,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,IAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,6BAA6B,EAAE,IAAI;YACnC,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,KAAK,CAAC;SACpC,CAAC;IACJ,CAAC;CACF;AAzCD,8DAyCC","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 type { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyRecordDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * PropertyData filter which matches on any record type label and includes descendant nodes on match\n * @public\n */\nexport class LabelPropertyDataFilterer extends PropertyRecordDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText.toLowerCase().trim();\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async recordMatchesFilter(\n node: PropertyRecord\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n const displayLabel = node.property.displayLabel.toLowerCase();\n const matchesCount = countMatchesInString(displayLabel, this.filterText);\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n shouldForceIncludeDescendants: true,\n matchesCount,\n filteredTypes: [FilteredType.Label],\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCategoryLabelFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,gCAAgC;IACjF,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,qBAAqB,CAChC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,wBAAwB,CAAC;CAgBrC"}
1
+ {"version":3,"file":"PropertyCategoryLabelFilterer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAEL,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,gCAAgC;IACjF,OAAO,CAAC,WAAW,CAAc;gBAEd,UAAU,GAAE,MAAW;IAK1C,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAMlC;IAED,IAAW,QAAQ,YAElB;IAEY,qBAAqB,CAChC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,wBAAwB,CAAC;CAgBrC"}
@@ -18,7 +18,7 @@ class PropertyCategoryLabelFilterer extends PropertyDataFiltererBase_1.PropertyC
18
18
  constructor(filterText = "") {
19
19
  super();
20
20
  this._filterText = "";
21
- this._filterText = filterText;
21
+ this._filterText = filterText.toLowerCase().trim();
22
22
  }
23
23
  get filterText() {
24
24
  return this._filterText;
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCategoryLabelFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,+EAA4E;AAG5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,6BAA8B,SAAQ,2DAAgC;IAGjF,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,IAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,6BAA6B,EAAE,IAAI;YACnC,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,QAAQ,CAAC;SACvC,CAAC;IACJ,CAAC;CACF;AAzCD,sEAyCC","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 { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyCategory } from \"../../PropertyDataProvider\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyCategoryDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * PropertyData filterer which matches on PropertyCategory's label.\n * @public\n */\nexport class PropertyCategoryLabelFilterer extends PropertyCategoryDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText;\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async categoryMatchesFilter(\n node: PropertyCategory\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n const displayLabel = node.label.toLowerCase();\n const matchesCount = countMatchesInString(displayLabel, this.filterText);\n\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n shouldForceIncludeDescendants: true,\n matchesCount,\n filteredTypes: [FilteredType.Category],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"PropertyCategoryLabelFilterer.js","sourceRoot":"","sources":["../../../../../../src/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,+EAA4E;AAG5E,yEAGoC;AAEpC;;;GAGG;AACH,MAAa,6BAA8B,SAAQ,2DAAgC;IAGjF,YAAmB,aAAqB,EAAE;QACxC,KAAK,EAAE,CAAC;QAHF,gBAAW,GAAW,EAAE,CAAC;QAI/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SACnC;IACH,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,IAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAExD,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;YAC7B,6BAA6B,EAAE,IAAI;YACnC,YAAY;YACZ,aAAa,EAAE,CAAC,uCAAY,CAAC,QAAQ,CAAC;SACvC,CAAC;IACJ,CAAC;CACF;AA1CD,sEA0CC","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 { countMatchesInString } from \"../../../common/countMatchesInString\";\nimport type { PropertyCategory } from \"../../PropertyDataProvider\";\nimport type { PropertyDataFilterResult } from \"./PropertyDataFiltererBase\";\nimport {\n FilteredType,\n PropertyCategoryDataFiltererBase,\n} from \"./PropertyDataFiltererBase\";\n\n/**\n * PropertyData filterer which matches on PropertyCategory's label.\n * @public\n */\nexport class PropertyCategoryLabelFilterer extends PropertyCategoryDataFiltererBase {\n private _filterText: string = \"\";\n\n public constructor(filterText: string = \"\") {\n super();\n this._filterText = filterText.toLowerCase().trim();\n }\n\n public get filterText(): string {\n return this._filterText;\n }\n\n public set filterText(value: string) {\n const lowerValue = value.toLowerCase().trim();\n if (lowerValue !== this.filterText) {\n this._filterText = lowerValue;\n this.onFilterChanged.raiseEvent();\n }\n }\n\n public get isActive() {\n return this.filterText !== \"\";\n }\n\n public async categoryMatchesFilter(\n node: PropertyCategory\n ): Promise<PropertyDataFilterResult> {\n if (!this.isActive) return { matchesFilter: true };\n\n const displayLabel = node.label.toLowerCase();\n const matchesCount = countMatchesInString(displayLabel, this.filterText);\n\n if (matchesCount === 0) return { matchesFilter: false };\n\n return {\n matchesFilter: true,\n shouldExpandNodeParents: true,\n shouldForceIncludeDescendants: true,\n matchesCount,\n filteredTypes: [FilteredType.Category],\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAsBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAU3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,iBAAiB,CAKrB;gBAGF,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,gBAAgB;IAmFlC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;IAsC7D,cAAc,CAAC,MAAM,EAAE,MAAM;IAM7B,eAAe,CAAC,MAAM,EAAE,MAAM;IAM9B,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IAYvC,eAAe,CAAC,MAAM,EAAE,MAAM;IAI9B,eAAe,CAAC,MAAM,EAAE,MAAM;IAI9B,qBAAqB,CAAC,MAAM,EAAE,MAAM;IAapC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAI/C,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAIpD,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAE,mBAAmB;IA4B5B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAexC"}
1
+ {"version":3,"file":"TreeEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAsBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAU3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAAyB;IAEjD,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,iBAAiB,CAKrB;gBAGF,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,eAAe,EAC3B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,gBAAgB;IAmFlC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;IAsC7D,cAAc,CAAC,MAAM,EAAE,MAAM;IAM7B,eAAe,CAAC,MAAM,EAAE,MAAM;IAM9B,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IAuBvC,eAAe,CAAC,MAAM,EAAE,MAAM;IAI9B,eAAe,CAAC,MAAM,EAAE,MAAM;IAI9B,qBAAqB,CAAC,MAAM,EAAE,MAAM;IAapC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAI/C,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAIpD,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAE,mBAAmB;IA4B5B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAexC"}
@@ -97,8 +97,16 @@ class TreeEventDispatcher {
97
97
  }
98
98
  onNodeClicked(nodeId, event) {
99
99
  const node = this._getVisibleNodes().getModel().getNode(nodeId);
100
- const isNodeSelected = node ? node.isSelected : false;
101
- this._selectionManager.onNodeClicked(nodeId, event);
100
+ const isNodeSelected = node && node.isSelected;
101
+ if (event.detail === 2 &&
102
+ this._treeEvents.onNodeDoubleClick !== undefined) {
103
+ this._treeEvents.onNodeDoubleClick({ nodeId });
104
+ // trigger onNodeClicked as to not lose highlight of the node when double clicking.
105
+ !isNodeSelected && this._selectionManager.onNodeClicked(nodeId, event);
106
+ }
107
+ else {
108
+ this._selectionManager.onNodeClicked(nodeId, event);
109
+ }
102
110
  // if clicked node was already selected fire delayed click event
103
111
  if (isNodeSelected && this._treeEvents.onDelayedNodeClick !== undefined) {
104
112
  this._treeEvents.onDelayedNodeClick({ nodeId });
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEventDispatcher.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventDispatcher.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 } from \"rxjs\";\nimport {\n asapScheduler,\n concat,\n concatAll,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n finalize,\n from,\n map,\n merge,\n mergeAll,\n of,\n shareReplay,\n subscribeOn,\n toArray,\n} from \"rxjs\";\nimport type { CheckBoxState } from \"@itwin/core-react\";\nimport type { SelectionMode } from \"../../common/selection/SelectionModes\";\nimport type { TreeNodeItem } from \"../TreeDataProvider\";\nimport type {\n IndividualSelection,\n RangeSelection,\n} from \"./internal/TreeSelectionManager\";\nimport {\n isRangeSelection,\n TreeSelectionManager,\n} from \"./internal/TreeSelectionManager\";\nimport type { TreeActions } from \"./TreeActions\";\nimport type { TreeEvents } from \"./TreeEvents\";\nimport type {\n TreeModelNode,\n TreeModelNodePlaceholder,\n VisibleTreeNodes,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { ITreeNodeLoader } from \"./TreeNodeLoader\";\nimport { toRxjsObservable } from \"./Observable\";\n\n/**\n * Default event dispatcher that emits tree events according performed actions.\n * It converts low level tree events into TreeEvents.\n * @internal\n */\nexport class TreeEventDispatcher implements TreeActions {\n private _treeEvents: TreeEvents;\n private _nodeLoader: ITreeNodeLoader;\n private _getVisibleNodes: () => VisibleTreeNodes;\n\n private _selectionManager: TreeSelectionManager;\n\n private _activeSelections = new Set<\n Observable<{\n selectedNodeItems: TreeNodeItem[];\n deselectedNodeItems?: TreeNodeItem[];\n }>\n >();\n\n constructor(\n treeEvents: TreeEvents,\n nodeLoader: ITreeNodeLoader,\n selectionMode: SelectionMode,\n getVisibleNodes: () => VisibleTreeNodes\n ) {\n this._treeEvents = treeEvents;\n this._nodeLoader = nodeLoader;\n this._getVisibleNodes = getVisibleNodes;\n\n this._selectionManager = new TreeSelectionManager(\n selectionMode,\n this._getVisibleNodes\n );\n\n this._selectionManager.onDragSelection.addListener(\n ({ selectionChanges }) => {\n const modifications = selectionChanges.pipe(\n map(({ selectedNodes, deselectedNodes }) =>\n this.collectSelectionChanges(selectedNodes, []).pipe(\n concatMap(({ selectedNodeItems }) => from(selectedNodeItems)),\n toArray(),\n map((collectedIds) => ({\n selectedNodeItems: collectedIds,\n deselectedNodeItems: this.collectNodeItems(deselectedNodes),\n }))\n )\n ),\n concatAll(),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionModified !== undefined)\n this._treeEvents.onSelectionModified({ modifications });\n }\n );\n\n this._selectionManager.onSelectionChanged.addListener(\n ({ selectedNodes, deselectedNodes }) => {\n const modifications = merge(\n defer(() => {\n this._activeSelections.add(modifications);\n return EMPTY;\n }),\n this.collectSelectionChanges(selectedNodes, deselectedNodes)\n ).pipe(\n finalize(() => {\n this._activeSelections.delete(modifications);\n }),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionModified !== undefined)\n this._treeEvents.onSelectionModified({ modifications });\n }\n );\n\n this._selectionManager.onSelectionReplaced.addListener(\n ({ selectedNodeIds }) => {\n const replacements = merge(\n defer(() => {\n this._activeSelections.add(replacements);\n return EMPTY;\n }),\n this.collectSelectionChanges(selectedNodeIds, [])\n ).pipe(\n finalize(() => {\n this._activeSelections.delete(replacements);\n }),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionReplaced !== undefined)\n this._treeEvents.onSelectionReplaced({ replacements });\n }\n );\n }\n\n public onNodeCheckboxClicked(nodeId: string, newState: CheckBoxState) {\n const visibleNodes = this._getVisibleNodes();\n const clickedNode = visibleNodes.getModel().getNode(nodeId);\n if (clickedNode === undefined) return;\n\n const immediateStateChanges = [{ nodeItem: clickedNode.item, newState }];\n if (clickedNode.isSelected) {\n for (const node of visibleNodes) {\n if (\n isTreeModelNode(node) &&\n node.id !== clickedNode.id &&\n node.isSelected &&\n node.checkbox.state !== newState\n ) {\n immediateStateChanges.push({ nodeItem: node.item, newState });\n }\n }\n }\n\n const stateChanges = concat(\n of(immediateStateChanges),\n from(this._activeSelections).pipe(\n mergeAll(),\n map(({ selectedNodeItems }) =>\n selectedNodeItems.map((item) => ({ nodeItem: item, newState }))\n )\n )\n ).pipe(\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onCheckboxStateChanged !== undefined)\n this._treeEvents.onCheckboxStateChanged({ stateChanges });\n }\n\n public onNodeExpanded(nodeId: string) {\n /* istanbul ignore else */\n if (this._treeEvents.onNodeExpanded !== undefined)\n this._treeEvents.onNodeExpanded({ nodeId });\n }\n\n public onNodeCollapsed(nodeId: string) {\n /* istanbul ignore else */\n if (this._treeEvents.onNodeCollapsed !== undefined)\n this._treeEvents.onNodeCollapsed({ nodeId });\n }\n\n public onNodeClicked(\n nodeId: string,\n event: React.MouseEvent<Element, MouseEvent>\n ) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n const isNodeSelected = node ? node.isSelected : false;\n this._selectionManager.onNodeClicked(nodeId, event);\n\n // if clicked node was already selected fire delayed click event\n if (isNodeSelected && this._treeEvents.onDelayedNodeClick !== undefined) {\n this._treeEvents.onDelayedNodeClick({ nodeId });\n }\n }\n\n public onNodeMouseDown(nodeId: string) {\n this._selectionManager.onNodeMouseDown(nodeId);\n }\n\n public onNodeMouseMove(nodeId: string) {\n this._selectionManager.onNodeMouseMove(nodeId);\n }\n\n public onNodeEditorActivated(nodeId: string) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n const isNodeSelected = node ? node.isSelected : false;\n\n // if node was already selected, fire onNodeEditorActivated event\n if (\n isNodeSelected &&\n this._treeEvents.onNodeEditorActivated !== undefined\n ) {\n this._treeEvents.onNodeEditorActivated({ nodeId });\n }\n }\n\n public onTreeKeyDown(event: React.KeyboardEvent): void {\n this._selectionManager.onTreeKeyDown(event, this);\n }\n\n public onTreeKeyUp(event: React.KeyboardEvent): void {\n this._selectionManager.onTreeKeyUp(event, this);\n }\n\n private collectSelectionChanges(\n selection: IndividualSelection | RangeSelection,\n deselection: IndividualSelection\n ): Observable<{\n selectedNodeItems: TreeNodeItem[];\n deselectedNodeItems: TreeNodeItem[];\n }> {\n const deselectedItems = this.collectNodeItems(deselection);\n if (isRangeSelection(selection)) {\n return this.collectNodesBetween(selection.from, selection.to).pipe(\n map((selectedNodeItems, index) => {\n return {\n selectedNodeItems,\n deselectedNodeItems: index === 0 ? deselectedItems : [],\n };\n })\n );\n }\n\n const selectedItems = this.collectNodeItems(selection);\n return of({\n selectedNodeItems: selectedItems,\n deselectedNodeItems: deselectedItems,\n });\n }\n\n private collectNodesBetween(\n nodeId1: string,\n nodeId2: string\n ): Observable<TreeNodeItem[]> {\n const [readyNodes, nodesToLoad] =\n TreeEventDispatcher.groupNodesByLoadingState(\n this.iterateNodesBetween(nodeId1, nodeId2)\n );\n\n const loadedSelectedNodes = from(\n nodesToLoad.map((node) => {\n const parentNode = node.parentId\n ? this._getVisibleNodes().getModel().getNode(node.parentId)\n : this._getVisibleNodes().getModel().getRootNode();\n return parentNode\n ? toRxjsObservable(\n this._nodeLoader.loadNode(parentNode, node.childIndex)\n )\n : /* istanbul ignore next */ EMPTY;\n })\n ).pipe(\n // We have requested multiple nodes that may belong to the same page.\n // When the page loads we only want to process the loaded nodes once.\n // Making assumption that loaded nodes from the same page will be emitted without interruptions.\n // Maybe we could simplify this to `this._nodeLoader.loadNodes(nodesToLoad)`?\n mergeAll(),\n distinctUntilChanged()\n );\n\n return concat(\n of(\n readyNodes\n .filter((node) => !node.isSelectionDisabled)\n .map((node) => node.item)\n ),\n loadedSelectedNodes.pipe(\n map(({ loadedNodes }) =>\n loadedNodes.filter((item) => !item.isSelectionDisabled)\n )\n )\n ).pipe(\n filter((nodeItems) => nodeItems.length > 0),\n // Give enough time for multiple subscribers to subscribe before any emissions begin\n subscribeOn(asapScheduler)\n );\n }\n\n private *iterateNodesBetween(\n nodeId1: string,\n nodeId2: string\n ): Iterable<TreeModelNode | TreeModelNodePlaceholder> {\n let firstNodeFound = false;\n for (const node of this._getVisibleNodes()) {\n if (firstNodeFound) {\n yield node;\n }\n\n if (isTreeModelNode(node)) {\n if (nodeId1 === nodeId2 && node.id === nodeId1) {\n yield node;\n return;\n }\n\n if (node.id === nodeId1 || node.id === nodeId2) {\n if (firstNodeFound) {\n return;\n }\n\n firstNodeFound = true;\n yield node;\n }\n }\n }\n }\n\n private collectNodeItems(nodeIds: string[]): TreeNodeItem[] {\n const items: TreeNodeItem[] = [];\n for (const nodeId of nodeIds) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n // istanbul ignore else\n if (node !== undefined && !node.isSelectionDisabled) {\n items.push(node.item);\n }\n }\n return items;\n }\n\n private static groupNodesByLoadingState(\n nodes: Iterable<TreeModelNode | TreeModelNodePlaceholder>\n ): [TreeModelNode[], TreeModelNodePlaceholder[]] {\n const loadedNodeItems: TreeModelNode[] = [];\n const nodesToLoad: TreeModelNodePlaceholder[] = [];\n for (const node of nodes) {\n if (isTreeModelNode(node)) {\n loadedNodeItems.push(node);\n } else {\n nodesToLoad.push(node);\n }\n }\n\n return [loadedNodeItems, nodesToLoad];\n }\n}\n"]}
1
+ {"version":3,"file":"TreeEventDispatcher.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventDispatcher.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 } from \"rxjs\";\nimport {\n asapScheduler,\n concat,\n concatAll,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n finalize,\n from,\n map,\n merge,\n mergeAll,\n of,\n shareReplay,\n subscribeOn,\n toArray,\n} from \"rxjs\";\nimport type { CheckBoxState } from \"@itwin/core-react\";\nimport type { SelectionMode } from \"../../common/selection/SelectionModes\";\nimport type { TreeNodeItem } from \"../TreeDataProvider\";\nimport type {\n IndividualSelection,\n RangeSelection,\n} from \"./internal/TreeSelectionManager\";\nimport {\n isRangeSelection,\n TreeSelectionManager,\n} from \"./internal/TreeSelectionManager\";\nimport type { TreeActions } from \"./TreeActions\";\nimport type { TreeEvents } from \"./TreeEvents\";\nimport type {\n TreeModelNode,\n TreeModelNodePlaceholder,\n VisibleTreeNodes,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { ITreeNodeLoader } from \"./TreeNodeLoader\";\nimport { toRxjsObservable } from \"./Observable\";\n\n/**\n * Default event dispatcher that emits tree events according performed actions.\n * It converts low level tree events into TreeEvents.\n * @internal\n */\nexport class TreeEventDispatcher implements TreeActions {\n private _treeEvents: TreeEvents;\n private _nodeLoader: ITreeNodeLoader;\n private _getVisibleNodes: () => VisibleTreeNodes;\n\n private _selectionManager: TreeSelectionManager;\n\n private _activeSelections = new Set<\n Observable<{\n selectedNodeItems: TreeNodeItem[];\n deselectedNodeItems?: TreeNodeItem[];\n }>\n >();\n\n constructor(\n treeEvents: TreeEvents,\n nodeLoader: ITreeNodeLoader,\n selectionMode: SelectionMode,\n getVisibleNodes: () => VisibleTreeNodes\n ) {\n this._treeEvents = treeEvents;\n this._nodeLoader = nodeLoader;\n this._getVisibleNodes = getVisibleNodes;\n\n this._selectionManager = new TreeSelectionManager(\n selectionMode,\n this._getVisibleNodes\n );\n\n this._selectionManager.onDragSelection.addListener(\n ({ selectionChanges }) => {\n const modifications = selectionChanges.pipe(\n map(({ selectedNodes, deselectedNodes }) =>\n this.collectSelectionChanges(selectedNodes, []).pipe(\n concatMap(({ selectedNodeItems }) => from(selectedNodeItems)),\n toArray(),\n map((collectedIds) => ({\n selectedNodeItems: collectedIds,\n deselectedNodeItems: this.collectNodeItems(deselectedNodes),\n }))\n )\n ),\n concatAll(),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionModified !== undefined)\n this._treeEvents.onSelectionModified({ modifications });\n }\n );\n\n this._selectionManager.onSelectionChanged.addListener(\n ({ selectedNodes, deselectedNodes }) => {\n const modifications = merge(\n defer(() => {\n this._activeSelections.add(modifications);\n return EMPTY;\n }),\n this.collectSelectionChanges(selectedNodes, deselectedNodes)\n ).pipe(\n finalize(() => {\n this._activeSelections.delete(modifications);\n }),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionModified !== undefined)\n this._treeEvents.onSelectionModified({ modifications });\n }\n );\n\n this._selectionManager.onSelectionReplaced.addListener(\n ({ selectedNodeIds }) => {\n const replacements = merge(\n defer(() => {\n this._activeSelections.add(replacements);\n return EMPTY;\n }),\n this.collectSelectionChanges(selectedNodeIds, [])\n ).pipe(\n finalize(() => {\n this._activeSelections.delete(replacements);\n }),\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onSelectionReplaced !== undefined)\n this._treeEvents.onSelectionReplaced({ replacements });\n }\n );\n }\n\n public onNodeCheckboxClicked(nodeId: string, newState: CheckBoxState) {\n const visibleNodes = this._getVisibleNodes();\n const clickedNode = visibleNodes.getModel().getNode(nodeId);\n if (clickedNode === undefined) return;\n\n const immediateStateChanges = [{ nodeItem: clickedNode.item, newState }];\n if (clickedNode.isSelected) {\n for (const node of visibleNodes) {\n if (\n isTreeModelNode(node) &&\n node.id !== clickedNode.id &&\n node.isSelected &&\n node.checkbox.state !== newState\n ) {\n immediateStateChanges.push({ nodeItem: node.item, newState });\n }\n }\n }\n\n const stateChanges = concat(\n of(immediateStateChanges),\n from(this._activeSelections).pipe(\n mergeAll(),\n map(({ selectedNodeItems }) =>\n selectedNodeItems.map((item) => ({ nodeItem: item, newState }))\n )\n )\n ).pipe(\n shareReplay({\n refCount: true,\n })\n );\n\n /* istanbul ignore else */\n if (this._treeEvents.onCheckboxStateChanged !== undefined)\n this._treeEvents.onCheckboxStateChanged({ stateChanges });\n }\n\n public onNodeExpanded(nodeId: string) {\n /* istanbul ignore else */\n if (this._treeEvents.onNodeExpanded !== undefined)\n this._treeEvents.onNodeExpanded({ nodeId });\n }\n\n public onNodeCollapsed(nodeId: string) {\n /* istanbul ignore else */\n if (this._treeEvents.onNodeCollapsed !== undefined)\n this._treeEvents.onNodeCollapsed({ nodeId });\n }\n\n public onNodeClicked(\n nodeId: string,\n event: React.MouseEvent<Element, MouseEvent>\n ) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n const isNodeSelected = node && node.isSelected;\n\n if (\n event.detail === 2 &&\n this._treeEvents.onNodeDoubleClick !== undefined\n ) {\n this._treeEvents.onNodeDoubleClick({ nodeId });\n\n // trigger onNodeClicked as to not lose highlight of the node when double clicking.\n !isNodeSelected && this._selectionManager.onNodeClicked(nodeId, event);\n } else {\n this._selectionManager.onNodeClicked(nodeId, event);\n }\n\n // if clicked node was already selected fire delayed click event\n if (isNodeSelected && this._treeEvents.onDelayedNodeClick !== undefined) {\n this._treeEvents.onDelayedNodeClick({ nodeId });\n }\n }\n\n public onNodeMouseDown(nodeId: string) {\n this._selectionManager.onNodeMouseDown(nodeId);\n }\n\n public onNodeMouseMove(nodeId: string) {\n this._selectionManager.onNodeMouseMove(nodeId);\n }\n\n public onNodeEditorActivated(nodeId: string) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n const isNodeSelected = node ? node.isSelected : false;\n\n // if node was already selected, fire onNodeEditorActivated event\n if (\n isNodeSelected &&\n this._treeEvents.onNodeEditorActivated !== undefined\n ) {\n this._treeEvents.onNodeEditorActivated({ nodeId });\n }\n }\n\n public onTreeKeyDown(event: React.KeyboardEvent): void {\n this._selectionManager.onTreeKeyDown(event, this);\n }\n\n public onTreeKeyUp(event: React.KeyboardEvent): void {\n this._selectionManager.onTreeKeyUp(event, this);\n }\n\n private collectSelectionChanges(\n selection: IndividualSelection | RangeSelection,\n deselection: IndividualSelection\n ): Observable<{\n selectedNodeItems: TreeNodeItem[];\n deselectedNodeItems: TreeNodeItem[];\n }> {\n const deselectedItems = this.collectNodeItems(deselection);\n if (isRangeSelection(selection)) {\n return this.collectNodesBetween(selection.from, selection.to).pipe(\n map((selectedNodeItems, index) => {\n return {\n selectedNodeItems,\n deselectedNodeItems: index === 0 ? deselectedItems : [],\n };\n })\n );\n }\n\n const selectedItems = this.collectNodeItems(selection);\n return of({\n selectedNodeItems: selectedItems,\n deselectedNodeItems: deselectedItems,\n });\n }\n\n private collectNodesBetween(\n nodeId1: string,\n nodeId2: string\n ): Observable<TreeNodeItem[]> {\n const [readyNodes, nodesToLoad] =\n TreeEventDispatcher.groupNodesByLoadingState(\n this.iterateNodesBetween(nodeId1, nodeId2)\n );\n\n const loadedSelectedNodes = from(\n nodesToLoad.map((node) => {\n const parentNode = node.parentId\n ? this._getVisibleNodes().getModel().getNode(node.parentId)\n : this._getVisibleNodes().getModel().getRootNode();\n return parentNode\n ? toRxjsObservable(\n this._nodeLoader.loadNode(parentNode, node.childIndex)\n )\n : /* istanbul ignore next */ EMPTY;\n })\n ).pipe(\n // We have requested multiple nodes that may belong to the same page.\n // When the page loads we only want to process the loaded nodes once.\n // Making assumption that loaded nodes from the same page will be emitted without interruptions.\n // Maybe we could simplify this to `this._nodeLoader.loadNodes(nodesToLoad)`?\n mergeAll(),\n distinctUntilChanged()\n );\n\n return concat(\n of(\n readyNodes\n .filter((node) => !node.isSelectionDisabled)\n .map((node) => node.item)\n ),\n loadedSelectedNodes.pipe(\n map(({ loadedNodes }) =>\n loadedNodes.filter((item) => !item.isSelectionDisabled)\n )\n )\n ).pipe(\n filter((nodeItems) => nodeItems.length > 0),\n // Give enough time for multiple subscribers to subscribe before any emissions begin\n subscribeOn(asapScheduler)\n );\n }\n\n private *iterateNodesBetween(\n nodeId1: string,\n nodeId2: string\n ): Iterable<TreeModelNode | TreeModelNodePlaceholder> {\n let firstNodeFound = false;\n for (const node of this._getVisibleNodes()) {\n if (firstNodeFound) {\n yield node;\n }\n\n if (isTreeModelNode(node)) {\n if (nodeId1 === nodeId2 && node.id === nodeId1) {\n yield node;\n return;\n }\n\n if (node.id === nodeId1 || node.id === nodeId2) {\n if (firstNodeFound) {\n return;\n }\n\n firstNodeFound = true;\n yield node;\n }\n }\n }\n }\n\n private collectNodeItems(nodeIds: string[]): TreeNodeItem[] {\n const items: TreeNodeItem[] = [];\n for (const nodeId of nodeIds) {\n const node = this._getVisibleNodes().getModel().getNode(nodeId);\n // istanbul ignore else\n if (node !== undefined && !node.isSelectionDisabled) {\n items.push(node.item);\n }\n }\n return items;\n }\n\n private static groupNodesByLoadingState(\n nodes: Iterable<TreeModelNode | TreeModelNodePlaceholder>\n ): [TreeModelNode[], TreeModelNodePlaceholder[]] {\n const loadedNodeItems: TreeModelNode[] = [];\n const nodesToLoad: TreeModelNodePlaceholder[] = [];\n for (const node of nodes) {\n if (isTreeModelNode(node)) {\n loadedNodeItems.push(node);\n } else {\n nodesToLoad.push(node);\n }\n }\n\n return [loadedNodeItems, nodesToLoad];\n }\n}\n"]}
@@ -54,6 +54,8 @@ export declare class TreeEventHandler implements TreeEvents, IDisposable {
54
54
  onCheckboxStateChanged({ stateChanges, }: TreeCheckboxStateChangeEventArgs): Subscription | undefined;
55
55
  /** Activates node editing if editing parameters are supplied and node is editable. */
56
56
  onDelayedNodeClick({ nodeId }: TreeNodeEventArgs): void;
57
+ /** This method is declared here to be overridden by classes that extend TreeEventHandler */
58
+ onNodeDoubleClick(_: TreeNodeEventArgs): void;
57
59
  /** Activates node editing if editing parameters are supplied and node is editable. */
58
60
  onNodeEditorActivated({ nodeId }: TreeNodeEventArgs): void;
59
61
  /** Activates node editing if editing parameters are supplied and node is editable. */
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEventHandler.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventHandler.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,iBAAiB,EACjB,kCAAkC,EAClC,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,aAAa,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,WAAW,EAAE,eAAe,CAAC;IAC7B,+DAA+D;IAC/D,UAAU,EAAE,eAAe,CAAC;IAC5B,0FAA0F;IAC1F,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,wCAAwC;IACxC,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,UAAU,EAAE,WAAW;IAC9D,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,kBAAkB,CAAuB;gBAErC,MAAM,EAAE,sBAAsB;IAS1C,mCAAmC;IAC5B,OAAO;IAId,IAAW,WAAW,oBAErB;IAED,gDAAgD;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAMnD,qBAAqB;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAIpD,kHAAkH;IAC3G,mBAAmB,CAAC,EACzB,aAAa,GACd,EAAE,kCAAkC,GAAG,YAAY,GAAG,SAAS;IAahE,gIAAgI;IACzH,mBAAmB,CAAC,EACzB,YAAY,GACb,EAAE,iCAAiC,GAAG,YAAY,GAAG,SAAS;IAkB/D,qCAAqC;IAC9B,sBAAsB,CAAC,EAC5B,YAAY,GACb,EAAE,gCAAgC,GAAG,YAAY,GAAG,SAAS;IAM9D,sFAAsF;IAC/E,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAIvD,sFAAsF;IAC/E,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAI1D,sFAAsF;IACtF,OAAO,CAAC,cAAc;CAQvB"}
1
+ {"version":3,"file":"TreeEventHandler.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventHandler.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,iBAAiB,EACjB,kCAAkC,EAClC,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,aAAa,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,WAAW,EAAE,eAAe,CAAC;IAC7B,+DAA+D;IAC/D,UAAU,EAAE,eAAe,CAAC;IAC5B,0FAA0F;IAC1F,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,wCAAwC;IACxC,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,UAAU,EAAE,WAAW;IAC9D,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,kBAAkB,CAAuB;gBAErC,MAAM,EAAE,sBAAsB;IAS1C,mCAAmC;IAC5B,OAAO;IAId,IAAW,WAAW,oBAErB;IAED,gDAAgD;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAMnD,qBAAqB;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAIpD,kHAAkH;IAC3G,mBAAmB,CAAC,EACzB,aAAa,GACd,EAAE,kCAAkC,GAAG,YAAY,GAAG,SAAS;IAahE,gIAAgI;IACzH,mBAAmB,CAAC,EACzB,YAAY,GACb,EAAE,iCAAiC,GAAG,YAAY,GAAG,SAAS;IAkB/D,qCAAqC;IAC9B,sBAAsB,CAAC,EAC5B,YAAY,GACb,EAAE,gCAAgC,GAAG,YAAY,GAAG,SAAS;IAM9D,sFAAsF;IAC/E,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAIvD,4FAA4F;IACrF,iBAAiB,CAAC,CAAC,EAAE,iBAAiB;IAE7C,sFAAsF;IAC/E,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB;IAI1D,sFAAsF;IACtF,OAAO,CAAC,cAAc;CAQvB"}
@@ -73,6 +73,8 @@ class TreeEventHandler {
73
73
  onDelayedNodeClick({ nodeId }) {
74
74
  this.activateEditor(nodeId);
75
75
  }
76
+ /** This method is declared here to be overridden by classes that extend TreeEventHandler */
77
+ onNodeDoubleClick(_) { }
76
78
  /** Activates node editing if editing parameters are supplied and node is editable. */
77
79
  onNodeEditorActivated({ nodeId }) {
78
80
  this.activateEditor(nodeId);
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEventHandler.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventHandler.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 { Subject, takeUntil } from \"rxjs\";\nimport type { IDisposable } from \"@itwin/core-bentley\";\nimport { TreeModelMutator } from \"./internal/TreeModelMutator\";\nimport type { Subscription } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n TreeCheckboxStateChangeEventArgs,\n TreeEvents,\n TreeNodeEventArgs,\n TreeSelectionModificationEventArgs,\n TreeSelectionReplacementEventArgs,\n} from \"./TreeEvents\";\nimport type { TreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\nimport type { ITreeNodeLoader } from \"./TreeNodeLoader\";\n\n/**\n * Params used for tree node editing.\n * @public\n */\nexport interface TreeEditingParams {\n /** Callback that is called when node is updated. */\n onNodeUpdated: (node: TreeModelNode, newValue: string) => void;\n}\n\n/**\n * Data structure that describes tree event handler params.\n * @public\n */\nexport interface TreeEventHandlerParams {\n /** Model source used to modify tree model while handling events. */\n modelSource: TreeModelSource;\n /** Node loader used to load children when node is expanded. */\n nodeLoader: ITreeNodeLoader;\n /** Specifies whether children should be disposed when parent node is collapsed or not. */\n collapsedChildrenDisposalEnabled?: boolean;\n /** Parameters used for node editing. */\n editingParams?: TreeEditingParams;\n}\n\n/**\n * Default tree event handler.\n * @public\n */\nexport class TreeEventHandler implements TreeEvents, IDisposable {\n private _modelMutator: TreeModelMutator;\n private _editingParams?: TreeEditingParams;\n\n private _disposed = new Subject<void>();\n private _selectionReplaced = new Subject<void>();\n\n constructor(params: TreeEventHandlerParams) {\n this._modelMutator = new TreeModelMutator(\n params.modelSource,\n params.nodeLoader,\n !!params.collapsedChildrenDisposalEnabled\n );\n this._editingParams = params.editingParams;\n }\n\n /** Disposes tree event handler. */\n public dispose() {\n this._disposed.next();\n }\n\n public get modelSource() {\n return this._modelMutator.modelSource;\n }\n\n /** Expands node and starts loading children. */\n public onNodeExpanded({ nodeId }: TreeNodeEventArgs) {\n toRxjsObservable(this._modelMutator.expandNode(nodeId))\n .pipe(takeUntil(this._disposed))\n .subscribe();\n }\n\n /** Collapses node */\n public onNodeCollapsed({ nodeId }: TreeNodeEventArgs) {\n this._modelMutator.collapseNode(nodeId);\n }\n\n /** Selects and deselects nodes until event is handled, handler is disposed or selection replaced event occurs. */\n public onSelectionModified({\n modifications,\n }: TreeSelectionModificationEventArgs): Subscription | undefined {\n return toRxjsObservable(modifications)\n .pipe(takeUntil(this._disposed), takeUntil(this._selectionReplaced))\n .subscribe({\n next: ({ selectedNodeItems, deselectedNodeItems }) => {\n this._modelMutator.modifySelection(\n selectedNodeItems,\n deselectedNodeItems\n );\n },\n });\n }\n\n /** Replaces currently selected nodes until event is handled, handler is disposed or another selection replaced event occurs. */\n public onSelectionReplaced({\n replacements,\n }: TreeSelectionReplacementEventArgs): Subscription | undefined {\n this._selectionReplaced.next();\n\n let firstEmission = true;\n return toRxjsObservable(replacements)\n .pipe(takeUntil(this._disposed), takeUntil(this._selectionReplaced))\n .subscribe({\n next: ({ selectedNodeItems }) => {\n if (firstEmission) {\n firstEmission = false;\n this._modelMutator.replaceSelection(selectedNodeItems);\n }\n\n this._modelMutator.modifySelection(selectedNodeItems, []);\n },\n });\n }\n\n /** Changes nodes checkbox states. */\n public onCheckboxStateChanged({\n stateChanges,\n }: TreeCheckboxStateChangeEventArgs): Subscription | undefined {\n return stateChanges.subscribe((changes) =>\n this._modelMutator.setCheckboxStates(changes)\n );\n }\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n public onDelayedNodeClick({ nodeId }: TreeNodeEventArgs) {\n this.activateEditor(nodeId);\n }\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n public onNodeEditorActivated({ nodeId }: TreeNodeEventArgs) {\n this.activateEditor(nodeId);\n }\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n private activateEditor(nodeId: string) {\n if (this._editingParams === undefined) return;\n\n this._modelMutator.activateEditing(\n nodeId,\n this._editingParams.onNodeUpdated\n );\n }\n}\n"]}
1
+ {"version":3,"file":"TreeEventHandler.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEventHandler.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 { Subject, takeUntil } from \"rxjs\";\nimport type { IDisposable } from \"@itwin/core-bentley\";\nimport { TreeModelMutator } from \"./internal/TreeModelMutator\";\nimport type { Subscription } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n TreeCheckboxStateChangeEventArgs,\n TreeEvents,\n TreeNodeEventArgs,\n TreeSelectionModificationEventArgs,\n TreeSelectionReplacementEventArgs,\n} from \"./TreeEvents\";\nimport type { TreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\nimport type { ITreeNodeLoader } from \"./TreeNodeLoader\";\n\n/**\n * Params used for tree node editing.\n * @public\n */\nexport interface TreeEditingParams {\n /** Callback that is called when node is updated. */\n onNodeUpdated: (node: TreeModelNode, newValue: string) => void;\n}\n\n/**\n * Data structure that describes tree event handler params.\n * @public\n */\nexport interface TreeEventHandlerParams {\n /** Model source used to modify tree model while handling events. */\n modelSource: TreeModelSource;\n /** Node loader used to load children when node is expanded. */\n nodeLoader: ITreeNodeLoader;\n /** Specifies whether children should be disposed when parent node is collapsed or not. */\n collapsedChildrenDisposalEnabled?: boolean;\n /** Parameters used for node editing. */\n editingParams?: TreeEditingParams;\n}\n\n/**\n * Default tree event handler.\n * @public\n */\nexport class TreeEventHandler implements TreeEvents, IDisposable {\n private _modelMutator: TreeModelMutator;\n private _editingParams?: TreeEditingParams;\n\n private _disposed = new Subject<void>();\n private _selectionReplaced = new Subject<void>();\n\n constructor(params: TreeEventHandlerParams) {\n this._modelMutator = new TreeModelMutator(\n params.modelSource,\n params.nodeLoader,\n !!params.collapsedChildrenDisposalEnabled\n );\n this._editingParams = params.editingParams;\n }\n\n /** Disposes tree event handler. */\n public dispose() {\n this._disposed.next();\n }\n\n public get modelSource() {\n return this._modelMutator.modelSource;\n }\n\n /** Expands node and starts loading children. */\n public onNodeExpanded({ nodeId }: TreeNodeEventArgs) {\n toRxjsObservable(this._modelMutator.expandNode(nodeId))\n .pipe(takeUntil(this._disposed))\n .subscribe();\n }\n\n /** Collapses node */\n public onNodeCollapsed({ nodeId }: TreeNodeEventArgs) {\n this._modelMutator.collapseNode(nodeId);\n }\n\n /** Selects and deselects nodes until event is handled, handler is disposed or selection replaced event occurs. */\n public onSelectionModified({\n modifications,\n }: TreeSelectionModificationEventArgs): Subscription | undefined {\n return toRxjsObservable(modifications)\n .pipe(takeUntil(this._disposed), takeUntil(this._selectionReplaced))\n .subscribe({\n next: ({ selectedNodeItems, deselectedNodeItems }) => {\n this._modelMutator.modifySelection(\n selectedNodeItems,\n deselectedNodeItems\n );\n },\n });\n }\n\n /** Replaces currently selected nodes until event is handled, handler is disposed or another selection replaced event occurs. */\n public onSelectionReplaced({\n replacements,\n }: TreeSelectionReplacementEventArgs): Subscription | undefined {\n this._selectionReplaced.next();\n\n let firstEmission = true;\n return toRxjsObservable(replacements)\n .pipe(takeUntil(this._disposed), takeUntil(this._selectionReplaced))\n .subscribe({\n next: ({ selectedNodeItems }) => {\n if (firstEmission) {\n firstEmission = false;\n this._modelMutator.replaceSelection(selectedNodeItems);\n }\n\n this._modelMutator.modifySelection(selectedNodeItems, []);\n },\n });\n }\n\n /** Changes nodes checkbox states. */\n public onCheckboxStateChanged({\n stateChanges,\n }: TreeCheckboxStateChangeEventArgs): Subscription | undefined {\n return stateChanges.subscribe((changes) =>\n this._modelMutator.setCheckboxStates(changes)\n );\n }\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n public onDelayedNodeClick({ nodeId }: TreeNodeEventArgs) {\n this.activateEditor(nodeId);\n }\n\n /** This method is declared here to be overridden by classes that extend TreeEventHandler */\n public onNodeDoubleClick(_: TreeNodeEventArgs) {}\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n public onNodeEditorActivated({ nodeId }: TreeNodeEventArgs) {\n this.activateEditor(nodeId);\n }\n\n /** Activates node editing if editing parameters are supplied and node is editable. */\n private activateEditor(nodeId: string) {\n if (this._editingParams === undefined) return;\n\n this._modelMutator.activateEditing(\n nodeId,\n this._editingParams.onNodeUpdated\n );\n }\n}\n"]}
@@ -25,6 +25,8 @@ export interface TreeEvents {
25
25
  onNodeCollapsed?(event: TreeNodeEventArgs): void;
26
26
  /** Called when selected tree node is clicked. */
27
27
  onDelayedNodeClick?(event: TreeNodeEventArgs): void;
28
+ /** Called when a tree node is double-clicked */
29
+ onNodeDoubleClick?(event: TreeNodeEventArgs): void;
28
30
  /** Called when selected tree node editor is activated. */
29
31
  onNodeEditorActivated?(event: TreeNodeEventArgs): void;
30
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEvents.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEvents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,cAAc,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChD,0CAA0C;IAC1C,eAAe,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEjD,iDAAiD;IACjD,kBAAkB,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpD,0DAA0D;IAC1D,qBAAqB,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEvD;;;OAGG;IACH,mBAAmB,CAAC,CAClB,KAAK,EAAE,kCAAkC,GACxC,YAAY,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,CAClB,KAAK,EAAE,iCAAiC,GACvC,YAAY,GAAG,SAAS,CAAC;IAE5B;;;OAGG;IACH,sBAAsB,CAAC,CACrB,KAAK,EAAE,gCAAgC,GACtC,YAAY,GAAG,SAAS,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kCAAkC;IACjD;;;OAGG;IACH,aAAa,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,6CAA6C;IAC7C,mBAAmB,EAAE,YAAY,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAC;QAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,QAAQ,EAAE,YAAY,CAAC;IACvB,iCAAiC;IACjC,QAAQ,EAAE,aAAa,CAAC;CACzB"}
1
+ {"version":3,"file":"TreeEvents.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEvents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,cAAc,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChD,0CAA0C;IAC1C,eAAe,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpD,gDAAgD;IAChD,iBAAiB,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnD,0DAA0D;IAC1D,qBAAqB,CAAC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvD;;;OAGG;IACH,mBAAmB,CAAC,CAClB,KAAK,EAAE,kCAAkC,GACxC,YAAY,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,CAClB,KAAK,EAAE,iCAAiC,GACvC,YAAY,GAAG,SAAS,CAAC;IAE5B;;;OAGG;IACH,sBAAsB,CAAC,CACrB,KAAK,EAAE,gCAAgC,GACtC,YAAY,GAAG,SAAS,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kCAAkC;IACjD;;;OAGG;IACH,aAAa,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,6CAA6C;IAC7C,mBAAmB,EAAE,YAAY,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAC;QAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,YAAY,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,QAAQ,EAAE,YAAY,CAAC;IACvB,iCAAiC;IACjC,QAAQ,EAAE,aAAa,CAAC;CACzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEvents.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEvents.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG","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 { CheckBoxState } from \"@itwin/core-react\";\nimport type { TreeNodeItem } from \"../TreeDataProvider\";\nimport type { Observable, Subscription } from \"./Observable\";\n\n/**\n * Tree events that can occur while interacting with tree.\n *\n * **Note:** Selection and checkbox state change events payload is an Observable.\n * Observable is a stream of data over time (e.g. in case of selection replaced event\n * it is a stream of selected node items arrays). To access data inside stream `subscribe()` method\n * should be called. This method accepts any subset of 'next', 'error' and 'complete' callbacks.\n * Once subscribe is called observable will start emitting data and calls 'next' callback each time new\n * data is emitted. If some selected nodes are not loaded yet they will be loaded and observable will\n * emit loaded node items. When all selected node items are emitted observable completes and calls\n * 'complete' callback if supplied.\n *\n * @public\n */\nexport interface TreeEvents {\n /** Called when tree node is expanded. */\n onNodeExpanded?(event: TreeNodeEventArgs): void;\n /** Called when tree node is collapsed. */\n onNodeCollapsed?(event: TreeNodeEventArgs): void;\n\n /** Called when selected tree node is clicked. */\n onDelayedNodeClick?(event: TreeNodeEventArgs): void;\n /** Called when selected tree node editor is activated. */\n onNodeEditorActivated?(event: TreeNodeEventArgs): void;\n\n /**\n * Called when tree selection is modified.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onSelectionModified?(\n event: TreeSelectionModificationEventArgs\n ): Subscription | undefined;\n /**\n * Called when tree selection is replaced.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onSelectionReplaced?(\n event: TreeSelectionReplacementEventArgs\n ): Subscription | undefined;\n\n /**\n * Called when checkbox states for nodes are changed.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onCheckboxStateChanged?(\n event: TreeCheckboxStateChangeEventArgs\n ): Subscription | undefined;\n}\n\n/**\n * Data structure that describes tree node event payload.\n * @public\n */\nexport interface TreeNodeEventArgs {\n /** Id of node that is affected by event. */\n nodeId: string;\n}\n\n/**\n * Data structure that describes tree selection modification event payload.\n * @public\n */\nexport interface TreeSelectionModificationEventArgs {\n /**\n * An observable that emits tree selection changes.\n * It starts emitting values when '.subscribe()' is called.\n */\n modifications: Observable<TreeSelectionChange>;\n}\n\n/**\n * Data structure that describes tree selection change.\n * @public\n */\nexport interface TreeSelectionChange {\n /** Tree node items that where selected. */\n selectedNodeItems: TreeNodeItem[];\n /** Tree node items that where deselected. */\n deselectedNodeItems: TreeNodeItem[];\n}\n\n/**\n * Data structure that describes tree selection replacement event payload.\n * @public\n */\nexport interface TreeSelectionReplacementEventArgs {\n /**\n * An observable that emits tree selection replacements containing selected tree node items.\n * It starts emitting values when '.subscribe()' is called.\n */\n replacements: Observable<{ selectedNodeItems: TreeNodeItem[] }>;\n}\n\n/**\n * Data structure that describes tree checkbox state change event payload.\n * @public\n */\nexport interface TreeCheckboxStateChangeEventArgs {\n /**\n * An observable that emits checkbox state changes.\n * It starts emitting values when '.subscribe()' is called.\n */\n stateChanges: Observable<CheckboxStateChange[]>;\n}\n\n/**\n * Data structure that describes checkbox state change.\n * @public\n */\nexport interface CheckboxStateChange {\n /** Tree node item that was affected by checkbox state change. */\n nodeItem: TreeNodeItem;\n /** New state of the checkbox. */\n newState: CheckBoxState;\n}\n"]}
1
+ {"version":3,"file":"TreeEvents.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeEvents.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG","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 { CheckBoxState } from \"@itwin/core-react\";\nimport type { TreeNodeItem } from \"../TreeDataProvider\";\nimport type { Observable, Subscription } from \"./Observable\";\n\n/**\n * Tree events that can occur while interacting with tree.\n *\n * **Note:** Selection and checkbox state change events payload is an Observable.\n * Observable is a stream of data over time (e.g. in case of selection replaced event\n * it is a stream of selected node items arrays). To access data inside stream `subscribe()` method\n * should be called. This method accepts any subset of 'next', 'error' and 'complete' callbacks.\n * Once subscribe is called observable will start emitting data and calls 'next' callback each time new\n * data is emitted. If some selected nodes are not loaded yet they will be loaded and observable will\n * emit loaded node items. When all selected node items are emitted observable completes and calls\n * 'complete' callback if supplied.\n *\n * @public\n */\nexport interface TreeEvents {\n /** Called when tree node is expanded. */\n onNodeExpanded?(event: TreeNodeEventArgs): void;\n /** Called when tree node is collapsed. */\n onNodeCollapsed?(event: TreeNodeEventArgs): void;\n /** Called when selected tree node is clicked. */\n onDelayedNodeClick?(event: TreeNodeEventArgs): void;\n /** Called when a tree node is double-clicked */\n onNodeDoubleClick?(event: TreeNodeEventArgs): void;\n /** Called when selected tree node editor is activated. */\n onNodeEditorActivated?(event: TreeNodeEventArgs): void;\n /**\n * Called when tree selection is modified.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onSelectionModified?(\n event: TreeSelectionModificationEventArgs\n ): Subscription | undefined;\n /**\n * Called when tree selection is replaced.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onSelectionReplaced?(\n event: TreeSelectionReplacementEventArgs\n ): Subscription | undefined;\n\n /**\n * Called when checkbox states for nodes are changed.\n * If Subscription is returned it can be used to stop event handling by calling `unsubscribe()`.\n */\n onCheckboxStateChanged?(\n event: TreeCheckboxStateChangeEventArgs\n ): Subscription | undefined;\n}\n\n/**\n * Data structure that describes tree node event payload.\n * @public\n */\nexport interface TreeNodeEventArgs {\n /** Id of node that is affected by event. */\n nodeId: string;\n}\n\n/**\n * Data structure that describes tree selection modification event payload.\n * @public\n */\nexport interface TreeSelectionModificationEventArgs {\n /**\n * An observable that emits tree selection changes.\n * It starts emitting values when '.subscribe()' is called.\n */\n modifications: Observable<TreeSelectionChange>;\n}\n\n/**\n * Data structure that describes tree selection change.\n * @public\n */\nexport interface TreeSelectionChange {\n /** Tree node items that where selected. */\n selectedNodeItems: TreeNodeItem[];\n /** Tree node items that where deselected. */\n deselectedNodeItems: TreeNodeItem[];\n}\n\n/**\n * Data structure that describes tree selection replacement event payload.\n * @public\n */\nexport interface TreeSelectionReplacementEventArgs {\n /**\n * An observable that emits tree selection replacements containing selected tree node items.\n * It starts emitting values when '.subscribe()' is called.\n */\n replacements: Observable<{ selectedNodeItems: TreeNodeItem[] }>;\n}\n\n/**\n * Data structure that describes tree checkbox state change event payload.\n * @public\n */\nexport interface TreeCheckboxStateChangeEventArgs {\n /**\n * An observable that emits checkbox state changes.\n * It starts emitting values when '.subscribe()' is called.\n */\n stateChanges: Observable<CheckboxStateChange[]>;\n}\n\n/**\n * Data structure that describes checkbox state change.\n * @public\n */\nexport interface CheckboxStateChange {\n /** Tree node item that was affected by checkbox state change. */\n nodeItem: TreeNodeItem;\n /** New state of the checkbox. */\n newState: CheckBoxState;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAe;IAE5C;;;OAGG;WACiB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzE,0DAA0D;WAC5C,SAAS;IAWvB,sDAAsD;IACtD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED;;OAEG;IACH,WAAkB,YAAY,IAAI,YAAY,CAO7C;IAED,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;IAED,gBAAgB;IAChB,WAAkB,WAAW,IAAI,MAAM,CAEtC;IAED;;OAEG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAavD,gBAAgB;WACF,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;CAM/C"}
1
+ {"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAe;IAE5C;;;OAGG;WACiB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzE,0DAA0D;WAC5C,SAAS;IAWvB,sDAAsD;IACtD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED;;OAEG;IACH,WAAkB,YAAY,IAAI,YAAY,CAO7C;IAED,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;IAED,gBAAgB;IAChB,WAAkB,WAAW,IAAI,MAAM,CAEtC;IAED;;OAEG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAavD,gBAAgB;WACF,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;CAM/C"}