@itwin/components-react 5.19.0 → 5.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/lib/components-react/UiComponents.js +2 -1
  3. package/lib/components-react/UiComponents.js.map +1 -1
  4. package/lib/components-react/common/ImageRenderer.js +1 -1
  5. package/lib/components-react/common/ImageRenderer.js.map +1 -1
  6. package/lib/components-react/common/SubscriptionScheduler.js +1 -1
  7. package/lib/components-react/common/SubscriptionScheduler.js.map +1 -1
  8. package/lib/components-react/common/selection/SelectionHandler.js +20 -2
  9. package/lib/components-react/common/selection/SelectionHandler.js.map +1 -1
  10. package/lib/components-react/converters/BooleanTypeConverter.js +4 -4
  11. package/lib/components-react/converters/BooleanTypeConverter.js.map +1 -1
  12. package/lib/components-react/converters/PointTypeConverter.js +1 -0
  13. package/lib/components-react/converters/PointTypeConverter.js.map +1 -1
  14. package/lib/components-react/converters/TypeConverterManager.js +2 -1
  15. package/lib/components-react/converters/TypeConverterManager.js.map +1 -1
  16. package/lib/components-react/datepicker/IntlFormatter.js +1 -0
  17. package/lib/components-react/datepicker/IntlFormatter.js.map +1 -1
  18. package/lib/components-react/editors/BooleanEditor.js +23 -26
  19. package/lib/components-react/editors/BooleanEditor.js.map +1 -1
  20. package/lib/components-react/editors/CustomNumberEditor.js +92 -97
  21. package/lib/components-react/editors/CustomNumberEditor.js.map +1 -1
  22. package/lib/components-react/editors/DateTimeEditor.js +60 -63
  23. package/lib/components-react/editors/DateTimeEditor.js.map +1 -1
  24. package/lib/components-react/editors/EnumButtonGroupEditor.js +23 -26
  25. package/lib/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  26. package/lib/components-react/editors/EnumEditor.js +30 -33
  27. package/lib/components-react/editors/EnumEditor.js.map +1 -1
  28. package/lib/components-react/editors/IconEditor.js +16 -16
  29. package/lib/components-react/editors/IconEditor.js.map +1 -1
  30. package/lib/components-react/editors/ImageCheckBoxEditor.js +22 -25
  31. package/lib/components-react/editors/ImageCheckBoxEditor.js.map +1 -1
  32. package/lib/components-react/editors/NumericInputEditor.js +26 -29
  33. package/lib/components-react/editors/NumericInputEditor.js.map +1 -1
  34. package/lib/components-react/editors/PopupButton.js +26 -29
  35. package/lib/components-react/editors/PopupButton.js.map +1 -1
  36. package/lib/components-react/editors/PropertyEditorManager.js +2 -4
  37. package/lib/components-react/editors/PropertyEditorManager.js.map +1 -1
  38. package/lib/components-react/editors/SliderEditor.js +65 -68
  39. package/lib/components-react/editors/SliderEditor.js.map +1 -1
  40. package/lib/components-react/editors/TextEditor.js +22 -25
  41. package/lib/components-react/editors/TextEditor.js.map +1 -1
  42. package/lib/components-react/editors/TextareaEditor.js +29 -32
  43. package/lib/components-react/editors/TextareaEditor.js.map +1 -1
  44. package/lib/components-react/editors/ToggleEditor.js +26 -29
  45. package/lib/components-react/editors/ToggleEditor.js.map +1 -1
  46. package/lib/components-react/filter-builder/FilterBuilderState.js +1 -0
  47. package/lib/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  48. package/lib/components-react/filtering/FilteringInput.js +36 -36
  49. package/lib/components-react/filtering/FilteringInput.js.map +1 -1
  50. package/lib/components-react/filtering/ResultSelector.js +50 -50
  51. package/lib/components-react/filtering/ResultSelector.js.map +1 -1
  52. package/lib/components-react/iconpicker/IconPickerButton.js +18 -18
  53. package/lib/components-react/iconpicker/IconPickerButton.js.map +1 -1
  54. package/lib/components-react/properties/ValueRendererManager.js +6 -7
  55. package/lib/components-react/properties/ValueRendererManager.js.map +1 -1
  56. package/lib/components-react/properties/renderers/NonPrimitivePropertyRenderer.js +17 -17
  57. package/lib/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
  58. package/lib/components-react/properties/renderers/PropertyGridColumns.js +4 -3
  59. package/lib/components-react/properties/renderers/PropertyGridColumns.js.map +1 -1
  60. package/lib/components-react/properties/renderers/PropertyView.js +23 -23
  61. package/lib/components-react/properties/renderers/PropertyView.js.map +1 -1
  62. package/lib/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js +6 -9
  63. package/lib/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
  64. package/lib/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js +9 -12
  65. package/lib/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js.map +1 -1
  66. package/lib/components-react/propertygrid/MergingPropertyDataProvider.js +2 -1
  67. package/lib/components-react/propertygrid/MergingPropertyDataProvider.js.map +1 -1
  68. package/lib/components-react/propertygrid/PropertyCategoryRendererManager.js +2 -4
  69. package/lib/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
  70. package/lib/components-react/propertygrid/SimplePropertyDataProvider.js +6 -4
  71. package/lib/components-react/propertygrid/SimplePropertyDataProvider.js.map +1 -1
  72. package/lib/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js +26 -29
  73. package/lib/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  74. package/lib/components-react/propertygrid/component/PropertyCategoryBlock.js +3 -3
  75. package/lib/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  76. package/lib/components-react/propertygrid/component/PropertyGridCommons.js +9 -9
  77. package/lib/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
  78. package/lib/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js +22 -22
  79. package/lib/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js.map +1 -1
  80. package/lib/components-react/propertygrid/component/PropertyList.js +5 -5
  81. package/lib/components-react/propertygrid/component/PropertyList.js.map +1 -1
  82. package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.js +29 -29
  83. package/lib/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  84. package/lib/components-react/propertygrid/dataproviders/FilteringDataProvider.js +12 -14
  85. package/lib/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
  86. package/lib/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js +3 -0
  87. package/lib/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
  88. package/lib/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js +1 -1
  89. package/lib/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  90. package/lib/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js +1 -1
  91. package/lib/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
  92. package/lib/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js +1 -1
  93. package/lib/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
  94. package/lib/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js +1 -3
  95. package/lib/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js.map +1 -1
  96. package/lib/components-react/propertygrid/internal/PropertyGridEventHandler.js +11 -10
  97. package/lib/components-react/propertygrid/internal/PropertyGridEventHandler.js.map +1 -1
  98. package/lib/components-react/propertygrid/internal/PropertyGridModel.js +3 -3
  99. package/lib/components-react/propertygrid/internal/PropertyGridModel.js.map +1 -1
  100. package/lib/components-react/propertygrid/internal/PropertyGridModelSource.js +4 -2
  101. package/lib/components-react/propertygrid/internal/PropertyGridModelSource.js.map +1 -1
  102. package/lib/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js +2 -0
  103. package/lib/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js.map +1 -1
  104. package/lib/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js +2 -0
  105. package/lib/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js.map +1 -1
  106. package/lib/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js +6 -1
  107. package/lib/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
  108. package/lib/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js +10 -7
  109. package/lib/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
  110. package/lib/components-react/propertygrid/internal/flat-items/MutableGridCategory.js +3 -0
  111. package/lib/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
  112. package/lib/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js +8 -8
  113. package/lib/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  114. package/lib/components-react/toolbar/InternalToolbarComponent.js +4 -4
  115. package/lib/components-react/toolbar/InternalToolbarComponent.js.map +1 -1
  116. package/lib/components-react/toolbar/utilities/Direction.js +12 -12
  117. package/lib/components-react/toolbar/utilities/Direction.js.map +1 -1
  118. package/lib/components-react/tree/HighlightingEngine.js +3 -1
  119. package/lib/components-react/tree/HighlightingEngine.js.map +1 -1
  120. package/lib/components-react/tree/SimpleTreeDataProvider.js +1 -0
  121. package/lib/components-react/tree/SimpleTreeDataProvider.js.map +1 -1
  122. package/lib/components-react/tree/controlled/TreeEventDispatcher.js +5 -1
  123. package/lib/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
  124. package/lib/components-react/tree/controlled/TreeEventHandler.js +10 -14
  125. package/lib/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
  126. package/lib/components-react/tree/controlled/TreeModel.js +7 -9
  127. package/lib/components-react/tree/controlled/TreeModel.js.map +1 -1
  128. package/lib/components-react/tree/controlled/TreeModelSource.js +3 -2
  129. package/lib/components-react/tree/controlled/TreeModelSource.js.map +1 -1
  130. package/lib/components-react/tree/controlled/TreeNodeLoader.js +11 -3
  131. package/lib/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  132. package/lib/components-react/tree/controlled/component/TreeRenderer.js +1 -4
  133. package/lib/components-react/tree/controlled/component/TreeRenderer.js.map +1 -1
  134. package/lib/components-react/tree/controlled/internal/SparseTree.js +7 -5
  135. package/lib/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
  136. package/lib/components-react/tree/controlled/internal/TreeModelMutator.js +3 -0
  137. package/lib/components-react/tree/controlled/internal/TreeModelMutator.js.map +1 -1
  138. package/lib/components-react/tree/controlled/internal/TreeSelectionManager.js +56 -51
  139. package/lib/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
  140. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log - @itwin/components-react
2
2
 
3
+ ## 5.20.0
4
+
5
+ ### Patch Changes
6
+
7
+ - @itwin/core-react@5.20.0
8
+
3
9
  ## 5.19.0
4
10
 
5
11
  ### Patch Changes
@@ -13,6 +13,8 @@ import { UiCore } from "@itwin/core-react";
13
13
  * @public
14
14
  */
15
15
  export class UiComponents {
16
+ static _initialized = false;
17
+ static _localization;
16
18
  /**
17
19
  * Registers the localization service namespace for UiComponents. Also initializes UiCore.
18
20
  * @param localization The internationalization service created by the host application.
@@ -65,5 +67,4 @@ export class UiComponents {
65
67
  return `${UiComponents.packageName}.${name}`;
66
68
  }
67
69
  }
68
- UiComponents._initialized = false;
69
70
  //# sourceMappingURL=UiComponents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,YAAY;IAIvB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CACZ,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAC3C,wCAAwC,CACzC,CAAC;YACF,OAAO;QACT,CAAC;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAChD,YAAY,CAAC,qBAAqB,CACnC,CAAC;QAEF,4DAA4D;QAC5D,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAC5C,YAAY,CAAC,qBAAqB,CACnC,CAAC;QACJ,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,4DAA4D;QAC5D,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW;QAC3B,OAAO,YAAY,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CACb,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAC3C,iFAAiF,CAClF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,YAAY,CAAC,aAAa,CAAC,kBAAkB,CAClD,GAAG,YAAY,CAAC,qBAAqB,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,IAAY;QACvC,OAAO,GAAG,YAAY,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;IAC/C,CAAC;;AA1Ec,yBAAY,GAAG,KAAK,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 Common\n */\n\nimport { enablePatches } from \"immer\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Localization } from \"@itwin/core-common\";\nimport { UiCore } from \"@itwin/core-react\";\n\n/**\n * Manages the localization service for the components-react package.\n * @public\n */\nexport class UiComponents {\n private static _initialized = false;\n private static _localization?: Localization;\n\n /**\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\n * @param localization The internationalization service created by the host application.\n */\n public static async initialize(localization: Localization): Promise<void> {\n if (UiComponents._initialized) {\n Logger.logInfo(\n UiComponents.loggerCategory(\"UiComponents\"),\n `UiComponents.initialize already called`\n );\n return;\n }\n\n enablePatches();\n UiComponents._localization = localization;\n await UiComponents._localization.registerNamespace(\n UiComponents.localizationNamespace\n );\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await UiCore.initialize(UiComponents._localization);\n UiComponents._initialized = true;\n }\n\n /** Unregisters the UiComponents localization namespace */\n public static terminate() {\n if (UiComponents._localization)\n UiComponents._localization.unregisterNamespace(\n UiComponents.localizationNamespace\n );\n UiComponents._localization = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiCore.terminate();\n UiComponents._initialized = false;\n }\n\n /** Determines if UiComponents has been initialized */\n public static get initialized(): boolean {\n return UiComponents._initialized;\n }\n\n /** The internationalization service namespace. */\n public static get localizationNamespace(): string {\n return \"UiComponents\";\n }\n\n /** @internal */\n public static get packageName(): string {\n return \"components-react\";\n }\n\n /** Calls localization.getLocalizedString with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\n * @internal\n */\n public static translate(key: string | string[]): string {\n if (!UiComponents._localization) {\n Logger.logError(\n UiComponents.loggerCategory(\"UiComponents\"),\n `translate: UiComponents.initialize has not been called. Returning blank string.`\n );\n return \"\";\n }\n return UiComponents._localization.getLocalizedString(\n `${UiComponents.localizationNamespace}:${String(key)}`\n );\n }\n\n /** @internal */\n public static loggerCategory(name: string): string {\n return `${UiComponents.packageName}.${name}`;\n }\n}\n"]}
1
+ {"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,MAAM,CAAC,aAAa,CAAgB;IAE5C;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CACZ,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAC3C,wCAAwC,CACzC,CAAC;YACF,OAAO;QACT,CAAC;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAChD,YAAY,CAAC,qBAAqB,CACnC,CAAC;QAEF,4DAA4D;QAC5D,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAC5C,YAAY,CAAC,qBAAqB,CACnC,CAAC;QACJ,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,4DAA4D;QAC5D,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW;QAC3B,OAAO,YAAY,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CACb,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAC3C,iFAAiF,CAClF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,YAAY,CAAC,aAAa,CAAC,kBAAkB,CAClD,GAAG,YAAY,CAAC,qBAAqB,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,IAAY;QACvC,OAAO,GAAG,YAAY,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;IAC/C,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 Common\n */\n\nimport { enablePatches } from \"immer\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Localization } from \"@itwin/core-common\";\nimport { UiCore } from \"@itwin/core-react\";\n\n/**\n * Manages the localization service for the components-react package.\n * @public\n */\nexport class UiComponents {\n private static _initialized = false;\n private static _localization?: Localization;\n\n /**\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\n * @param localization The internationalization service created by the host application.\n */\n public static async initialize(localization: Localization): Promise<void> {\n if (UiComponents._initialized) {\n Logger.logInfo(\n UiComponents.loggerCategory(\"UiComponents\"),\n `UiComponents.initialize already called`\n );\n return;\n }\n\n enablePatches();\n UiComponents._localization = localization;\n await UiComponents._localization.registerNamespace(\n UiComponents.localizationNamespace\n );\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n await UiCore.initialize(UiComponents._localization);\n UiComponents._initialized = true;\n }\n\n /** Unregisters the UiComponents localization namespace */\n public static terminate() {\n if (UiComponents._localization)\n UiComponents._localization.unregisterNamespace(\n UiComponents.localizationNamespace\n );\n UiComponents._localization = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiCore.terminate();\n UiComponents._initialized = false;\n }\n\n /** Determines if UiComponents has been initialized */\n public static get initialized(): boolean {\n return UiComponents._initialized;\n }\n\n /** The internationalization service namespace. */\n public static get localizationNamespace(): string {\n return \"UiComponents\";\n }\n\n /** @internal */\n public static get packageName(): string {\n return \"components-react\";\n }\n\n /** Calls localization.getLocalizedString with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\n * @internal\n */\n public static translate(key: string | string[]): string {\n if (!UiComponents._localization) {\n Logger.logError(\n UiComponents.loggerCategory(\"UiComponents\"),\n `translate: UiComponents.initialize has not been called. Returning blank string.`\n );\n return \"\";\n }\n return UiComponents._localization.getLocalizedString(\n `${UiComponents.localizationNamespace}:${String(key)}`\n );\n }\n\n /** @internal */\n public static loggerCategory(name: string): string {\n return `${UiComponents.packageName}.${name}`;\n }\n}\n"]}
@@ -13,6 +13,7 @@ import { UiError } from "@itwin/appui-abstract";
13
13
  * @internal
14
14
  */
15
15
  export class ImageRenderer {
16
+ static _svgCache = new Map();
16
17
  hexToBase64(hexstring) {
17
18
  const match = hexstring.match(/\w{2}/g);
18
19
  if (!match)
@@ -117,5 +118,4 @@ export class ImageRenderer {
117
118
  }
118
119
  }
119
120
  }
120
- ImageRenderer._svgCache = new Map();
121
121
  //# sourceMappingURL=ImageRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageRenderer.js","sourceRoot":"","sources":["../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport type { WebFontIconProps } from \"@itwin/core-react\";\nimport { Icon, WebFontIcon } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents.js\";\nimport type {\n Image,\n ImageFileFormat,\n LoadedBinaryImage,\n LoadedImage,\n} from \"./IImageLoader.js\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/** A class that renders images from data provided by an image loader\n * @internal\n */\nexport class ImageRenderer {\n private static _svgCache: Map<string, string> = new Map();\n\n private hexToBase64(hexstring: string) {\n const match = hexstring.match(/\\w{2}/g);\n if (!match) return \"\";\n\n return window.btoa(\n match\n .map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\")\n );\n }\n\n /** Render raw binary image */\n private renderBinary(data: string, format: ImageFileFormat) {\n // Convert binary to base64\n const dataAsBase64 = this.hexToBase64(data);\n return <img src={`data:image/${format};base64,${dataAsBase64}`} alt=\"\" />;\n }\n\n private isSvg(input: string): boolean {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, \"application/xml\");\n\n const errorNode = doc.querySelector(\"parsererror\");\n if (errorNode) {\n return false;\n }\n\n const rootNode = doc.documentElement.nodeName.toLowerCase();\n return \"svg\" === rootNode;\n }\n\n private convertSvgToDataUri(svg: string) {\n if (!this.isSvg(svg)) {\n return \"\";\n }\n\n const svgAsBase64 = window.btoa(svg);\n return `data:image/svg+xml;base64,${svgAsBase64}`;\n }\n\n /** Render svg string into JSX */\n private renderSvg(svg: string) {\n let svgAsDataUri = ImageRenderer._svgCache.get(svg);\n if (undefined === svgAsDataUri) {\n svgAsDataUri = this.convertSvgToDataUri(svg.trim());\n ImageRenderer._svgCache.set(svg, svgAsDataUri);\n }\n\n return (\n <div>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={svgAsDataUri} />\n </div>\n );\n }\n\n /** Render image from an url */\n private renderUrl(url: string) {\n return <img src={url} alt=\"\" />;\n }\n\n /** Render image as core-react icon */\n private renderCoreIcon(iconName: string) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return <WebFontIcon iconName={iconName} />;\n }\n\n /** Replaces the escaped instances of \"\\:\" with \":\" */\n private normalizeEscapedIconString(escapedIconString: string) {\n return escapedIconString.replace(/\\\\:/g, \":\");\n }\n\n /**\n * Extract class and name from icon name, if the name follows format \"{className}:{fontName}\".\n * className and fontName can be escaped using \\ if : is needed.\n */\n private extractIconClassAndName(\n iconName: string\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ): Pick<WebFontIconProps, \"iconClassName\" | \"iconName\"> {\n const matches = iconName.match(/(\\\\.|[^:])+/g);\n if (!matches || matches.length !== 2)\n return {\n iconClassName: undefined,\n iconName,\n };\n\n return {\n iconClassName: this.normalizeEscapedIconString(matches[0]),\n iconName: this.normalizeEscapedIconString(matches[1]),\n };\n }\n\n /**\n * Render image as provided webfont icon.\n * Defaults to core-react icon if iconName does not contain className.\n */\n private renderWebfontIcon(iconName: string) {\n const iconInfo = this.extractIconClassAndName(iconName);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return <WebFontIcon {...iconInfo} />;\n }\n\n /** Render image from data provided by an image loader */\n public render(loadedImage: Image): React.ReactNode {\n switch (loadedImage.sourceType) {\n case \"binary\":\n const image = loadedImage as LoadedBinaryImage;\n return this.renderBinary(image.value, image.fileFormat);\n\n case \"url\":\n return this.renderUrl((loadedImage as LoadedImage).value);\n\n case \"svg\":\n return this.renderSvg((loadedImage as LoadedImage).value);\n\n case \"core-icon\":\n return this.renderCoreIcon((loadedImage as LoadedImage).value);\n\n case \"webfont-icon\":\n return this.renderWebfontIcon((loadedImage as LoadedImage).value);\n\n default:\n const unhandledSourceType: never = loadedImage.sourceType; // Compile time check that all cases are handled\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n throw new UiError(\n UiComponents.loggerCategory(\"ImageRenderer\"),\n `Can't handle sourceType: \"${String(unhandledSourceType)}\"`\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ImageRenderer.js","sourceRoot":"","sources":["../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport type { WebFontIconProps } from \"@itwin/core-react\";\nimport { Icon, WebFontIcon } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents.js\";\nimport type {\n Image,\n ImageFileFormat,\n LoadedBinaryImage,\n LoadedImage,\n} from \"./IImageLoader.js\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/** A class that renders images from data provided by an image loader\n * @internal\n */\nexport class ImageRenderer {\n private static _svgCache: Map<string, string> = new Map();\n\n private hexToBase64(hexstring: string) {\n const match = hexstring.match(/\\w{2}/g);\n if (!match) return \"\";\n\n return window.btoa(\n match\n .map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\")\n );\n }\n\n /** Render raw binary image */\n private renderBinary(data: string, format: ImageFileFormat) {\n // Convert binary to base64\n const dataAsBase64 = this.hexToBase64(data);\n return <img src={`data:image/${format};base64,${dataAsBase64}`} alt=\"\" />;\n }\n\n private isSvg(input: string): boolean {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, \"application/xml\");\n\n const errorNode = doc.querySelector(\"parsererror\");\n if (errorNode) {\n return false;\n }\n\n const rootNode = doc.documentElement.nodeName.toLowerCase();\n return \"svg\" === rootNode;\n }\n\n private convertSvgToDataUri(svg: string) {\n if (!this.isSvg(svg)) {\n return \"\";\n }\n\n const svgAsBase64 = window.btoa(svg);\n return `data:image/svg+xml;base64,${svgAsBase64}`;\n }\n\n /** Render svg string into JSX */\n private renderSvg(svg: string) {\n let svgAsDataUri = ImageRenderer._svgCache.get(svg);\n if (undefined === svgAsDataUri) {\n svgAsDataUri = this.convertSvgToDataUri(svg.trim());\n ImageRenderer._svgCache.set(svg, svgAsDataUri);\n }\n\n return (\n <div>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={svgAsDataUri} />\n </div>\n );\n }\n\n /** Render image from an url */\n private renderUrl(url: string) {\n return <img src={url} alt=\"\" />;\n }\n\n /** Render image as core-react icon */\n private renderCoreIcon(iconName: string) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return <WebFontIcon iconName={iconName} />;\n }\n\n /** Replaces the escaped instances of \"\\:\" with \":\" */\n private normalizeEscapedIconString(escapedIconString: string) {\n return escapedIconString.replace(/\\\\:/g, \":\");\n }\n\n /**\n * Extract class and name from icon name, if the name follows format \"{className}:{fontName}\".\n * className and fontName can be escaped using \\ if : is needed.\n */\n private extractIconClassAndName(\n iconName: string\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ): Pick<WebFontIconProps, \"iconClassName\" | \"iconName\"> {\n const matches = iconName.match(/(\\\\.|[^:])+/g);\n if (!matches || matches.length !== 2)\n return {\n iconClassName: undefined,\n iconName,\n };\n\n return {\n iconClassName: this.normalizeEscapedIconString(matches[0]),\n iconName: this.normalizeEscapedIconString(matches[1]),\n };\n }\n\n /**\n * Render image as provided webfont icon.\n * Defaults to core-react icon if iconName does not contain className.\n */\n private renderWebfontIcon(iconName: string) {\n const iconInfo = this.extractIconClassAndName(iconName);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return <WebFontIcon {...iconInfo} />;\n }\n\n /** Render image from data provided by an image loader */\n public render(loadedImage: Image): React.ReactNode {\n switch (loadedImage.sourceType) {\n case \"binary\":\n const image = loadedImage as LoadedBinaryImage;\n return this.renderBinary(image.value, image.fileFormat);\n\n case \"url\":\n return this.renderUrl((loadedImage as LoadedImage).value);\n\n case \"svg\":\n return this.renderSvg((loadedImage as LoadedImage).value);\n\n case \"core-icon\":\n return this.renderCoreIcon((loadedImage as LoadedImage).value);\n\n case \"webfont-icon\":\n return this.renderWebfontIcon((loadedImage as LoadedImage).value);\n\n default:\n const unhandledSourceType: never = loadedImage.sourceType; // Compile time check that all cases are handled\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n throw new UiError(\n UiComponents.loggerCategory(\"ImageRenderer\"),\n `Can't handle sourceType: \"${String(unhandledSourceType)}\"`\n );\n }\n }\n}\n"]}
@@ -17,8 +17,8 @@ const MAX_CONCURRENT_SUBSCRIPTIONS = 1;
17
17
  * @internal
18
18
  */
19
19
  export class SubscriptionScheduler {
20
+ _scheduler = new Subject();
20
21
  constructor() {
21
- this._scheduler = new Subject();
22
22
  this._scheduler
23
23
  .pipe(mergeMap((sourceObservable) => sourceObservable.pipe(
24
24
  // connect source observable when scheduler subscribes
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionScheduler.js","sourceRoot":"","sources":["../../../src/components-react/common/SubscriptionScheduler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,EACL,KAAK,EACL,QAAQ,EACR,GAAG,EACH,QAAQ,EACR,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,WAAW,EACX,GAAG,GACJ,MAAM,MAAM,CAAC;AAEd,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IAGhC;QAFQ,eAAU,GAAG,IAAI,OAAO,EAAkB,CAAC;QAGjD,IAAI,CAAC,UAAU;aACZ,IAAI,CACH,QAAQ,CACN,CAAC,gBAAgB,EAAE,EAAE,CACnB,gBAAgB,CAAC,IAAI;QACnB,sDAAsD;QACtD,GAAG,CAAC;YACF,SAAS,EAAE,GAAG,EAAE;gBACd,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;SACF,CAAC;QACF,0GAA0G;QAC1G,4EAA4E;QAC5E,SAAS,CAAC,cAAc,CAAC;QACzB,qDAAqD;QACrD,WAAW,CAAC,aAAa,CAAC;QAC1B,gFAAgF;QAChF,qBAAqB,EAAE,CACxB,EACH,4BAA4B,CAC7B,CACF;YACD,wCAAwC;aACvC,SAAS,EAAE,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACI,oBAAoB,CAAC,MAAqB;QAC/C,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,4GAA4G;YAC5G,MAAM,qBAAqB,GAAG,WAAW,CACvC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EACtC;gBACE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,EAAK;gBACjC,iBAAiB,EAAE,KAAK;aACzB,CACF,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAmC;IAEnC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC5D,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 Common\n */\n\nimport type { Connectable, Observable } from \"rxjs\";\nimport {\n asapScheduler,\n connectable,\n defer,\n EMPTY,\n finalize,\n iif,\n mergeMap,\n observeOn,\n onErrorResumeNextWith,\n queueScheduler,\n Subject,\n subscribeOn,\n tap,\n} from \"rxjs\";\n\nconst MAX_CONCURRENT_SUBSCRIPTIONS = 1;\n\n/**\n * Limits concurrent observable subscriptions to one.\n *\n * Scheduled observables are placed at the end of a queue. Each queued observable is subscribed to and awaited until the\n * completion.\n *\n * To schedule an observable, subscribe to the result of `scheduleSubscription()` call.\n * @internal\n */\nexport class SubscriptionScheduler<T> {\n private _scheduler = new Subject<Connectable<T>>();\n\n constructor() {\n this._scheduler\n .pipe(\n mergeMap(\n (sourceObservable) =>\n sourceObservable.pipe(\n // connect source observable when scheduler subscribes\n tap({\n subscribe: () => {\n sourceObservable.connect();\n },\n }),\n // Guard against stack overflow when a lot of observables are scheduled. Without this operation `mergeMap`\n // will process each observable that is present in the pipeline recursively.\n observeOn(queueScheduler),\n // Delay the connection until another event loop task\n subscribeOn(asapScheduler),\n // Ignore errors in this pipeline without suppressing them for other subscribers\n onErrorResumeNextWith()\n ),\n MAX_CONCURRENT_SUBSCRIPTIONS\n )\n )\n // Start consuming scheduled observables\n .subscribe();\n }\n\n /**\n * Schedules `source` for subscription in the current scheduler.\n *\n * The actual scheduling is performed when the returned observable is subscribed to. To cancel, remove all subscribers\n * from the returned observable.\n *\n * @param source Input observable for which to schedule a subscription.\n * @returns Hot observable which starts emitting `source` values after subscription.\n */\n public scheduleSubscription(source: Observable<T>): Observable<T> {\n return defer(() => {\n let unsubscribed = false;\n // Do not subscribe to source observable if it was unsubscribed from before being processed by the scheduler\n const connectableObservable = connectable(\n iif(() => unsubscribed, EMPTY, source),\n {\n connector: () => new Subject<T>(),\n resetOnDisconnect: false,\n }\n );\n this._scheduler.next(connectableObservable);\n return connectableObservable.pipe(finalize(() => (unsubscribed = true)));\n });\n }\n}\n\n/**\n * Helper function for use as a `pipe()` argument with `rxjs` observables.\n * @internal\n */\nexport function scheduleSubscription<T>(\n scheduler: SubscriptionScheduler<T>\n): (source: Observable<T>) => Observable<T> {\n return (source) => scheduler.scheduleSubscription(source);\n}\n"]}
1
+ {"version":3,"file":"SubscriptionScheduler.js","sourceRoot":"","sources":["../../../src/components-react/common/SubscriptionScheduler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,EACL,KAAK,EACL,QAAQ,EACR,GAAG,EACH,QAAQ,EACR,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,WAAW,EACX,GAAG,GACJ,MAAM,MAAM,CAAC;AAEd,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IACxB,UAAU,GAAG,IAAI,OAAO,EAAkB,CAAC;IAEnD;QACE,IAAI,CAAC,UAAU;aACZ,IAAI,CACH,QAAQ,CACN,CAAC,gBAAgB,EAAE,EAAE,CACnB,gBAAgB,CAAC,IAAI;QACnB,sDAAsD;QACtD,GAAG,CAAC;YACF,SAAS,EAAE,GAAG,EAAE;gBACd,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;SACF,CAAC;QACF,0GAA0G;QAC1G,4EAA4E;QAC5E,SAAS,CAAC,cAAc,CAAC;QACzB,qDAAqD;QACrD,WAAW,CAAC,aAAa,CAAC;QAC1B,gFAAgF;QAChF,qBAAqB,EAAE,CACxB,EACH,4BAA4B,CAC7B,CACF;YACD,wCAAwC;aACvC,SAAS,EAAE,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACI,oBAAoB,CAAC,MAAqB;QAC/C,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,4GAA4G;YAC5G,MAAM,qBAAqB,GAAG,WAAW,CACvC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EACtC;gBACE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,EAAK;gBACjC,iBAAiB,EAAE,KAAK;aACzB,CACF,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC5C,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAmC;IAEnC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC5D,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 Common\n */\n\nimport type { Connectable, Observable } from \"rxjs\";\nimport {\n asapScheduler,\n connectable,\n defer,\n EMPTY,\n finalize,\n iif,\n mergeMap,\n observeOn,\n onErrorResumeNextWith,\n queueScheduler,\n Subject,\n subscribeOn,\n tap,\n} from \"rxjs\";\n\nconst MAX_CONCURRENT_SUBSCRIPTIONS = 1;\n\n/**\n * Limits concurrent observable subscriptions to one.\n *\n * Scheduled observables are placed at the end of a queue. Each queued observable is subscribed to and awaited until the\n * completion.\n *\n * To schedule an observable, subscribe to the result of `scheduleSubscription()` call.\n * @internal\n */\nexport class SubscriptionScheduler<T> {\n private _scheduler = new Subject<Connectable<T>>();\n\n constructor() {\n this._scheduler\n .pipe(\n mergeMap(\n (sourceObservable) =>\n sourceObservable.pipe(\n // connect source observable when scheduler subscribes\n tap({\n subscribe: () => {\n sourceObservable.connect();\n },\n }),\n // Guard against stack overflow when a lot of observables are scheduled. Without this operation `mergeMap`\n // will process each observable that is present in the pipeline recursively.\n observeOn(queueScheduler),\n // Delay the connection until another event loop task\n subscribeOn(asapScheduler),\n // Ignore errors in this pipeline without suppressing them for other subscribers\n onErrorResumeNextWith()\n ),\n MAX_CONCURRENT_SUBSCRIPTIONS\n )\n )\n // Start consuming scheduled observables\n .subscribe();\n }\n\n /**\n * Schedules `source` for subscription in the current scheduler.\n *\n * The actual scheduling is performed when the returned observable is subscribed to. To cancel, remove all subscribers\n * from the returned observable.\n *\n * @param source Input observable for which to schedule a subscription.\n * @returns Hot observable which starts emitting `source` values after subscription.\n */\n public scheduleSubscription(source: Observable<T>): Observable<T> {\n return defer(() => {\n let unsubscribed = false;\n // Do not subscribe to source observable if it was unsubscribed from before being processed by the scheduler\n const connectableObservable = connectable(\n iif(() => unsubscribed, EMPTY, source),\n {\n connector: () => new Subject<T>(),\n resetOnDisconnect: false,\n }\n );\n this._scheduler.next(connectableObservable);\n return connectableObservable.pipe(finalize(() => (unsubscribed = true)));\n });\n }\n}\n\n/**\n * Helper function for use as a `pipe()` argument with `rxjs` observables.\n * @internal\n */\nexport function scheduleSubscription<T>(\n scheduler: SubscriptionScheduler<T>\n): (source: Observable<T>) => Observable<T> {\n return (source) => scheduler.scheduleSubscription(source);\n}\n"]}
@@ -8,9 +8,11 @@
8
8
  import { Rectangle } from "@itwin/core-react/internal";
9
9
  import { hasSelectionModeFlag, SelectionMode, SelectionModeFlags, } from "./SelectionModes.js";
10
10
  class BatchSelectionOperation {
11
+ selections = new Array();
12
+ deselections = new Array();
13
+ shouldReplace;
14
+ _componentSelectionHandler;
11
15
  constructor(componentSelectionHandler, shouldReplace) {
12
- this.selections = new Array();
13
- this.deselections = new Array();
14
16
  this.shouldReplace = shouldReplace;
15
17
  this._componentSelectionHandler = componentSelectionHandler;
16
18
  }
@@ -40,6 +42,13 @@ class BatchSelectionOperation {
40
42
  }
41
43
  /** @internal */
42
44
  export class DragAction {
45
+ _itemSelectionHandlers;
46
+ _componentSelectionHandler;
47
+ _previousRow;
48
+ _previousColumn;
49
+ _firstItemRow;
50
+ _firstItemColumn;
51
+ _firstItemSelected;
43
52
  constructor(componentSelectionHandler, itemSelectionHandlers, firstItem) {
44
53
  this._itemSelectionHandlers = itemSelectionHandlers;
45
54
  this._componentSelectionHandler = componentSelectionHandler;
@@ -117,6 +126,15 @@ export class DragAction {
117
126
  }
118
127
  /** @internal */
119
128
  export class SelectionHandler {
129
+ /** Selection mode. */
130
+ selectionMode;
131
+ onItemsSelectedCallback;
132
+ onItemsDeselectedCallback;
133
+ _currentOperation;
134
+ _lastItem; // keeps track of last item interacted with for shift selection
135
+ _processedItem; // last item interacted with
136
+ _dragAction;
137
+ _componentSelectionHandler; // needed for drag selection
120
138
  constructor(selectionMode, onItemsSelectedCallback, onItemsDeselectedCallback) {
121
139
  this.selectionMode = selectionMode;
122
140
  this.onItemsSelectedCallback = onItemsSelectedCallback;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionHandler.js","sourceRoot":"","sources":["../../../../src/components-react/common/selection/SelectionHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AA0F7B,MAAM,uBAAuB;IAO3B,YACE,yBAAsD,EACtD,aAAsB;QARR,eAAU,GAAG,IAAI,KAAK,EAAQ,CAAC;QAC/B,iBAAY,GAAG,IAAI,KAAK,EAAQ,CAAC;QAS/C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,IAAmB;QAC/B,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CACnD,CAAC;IACJ,CAAC;IAEM,QAAQ,CAAC,IAAmB;QACjC,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CACjD,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAmB,EAAE,KAAa,EAAE,UAAmB;QACtE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/C,CAAC;oBACF,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;wBACf,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC5B,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,OAAO,UAAU;IASrB,YACE,yBAAsD,EACtD,qBAAiE,EACjE,SAAe;QAEf,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QACpD,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IAEM,gBAAgB,CAAC,UAAgB;QAItC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QAC1E,IACE,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY;YACjC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;YACxC,UAAU,CAAC,CAAC,GAAG,CAAC;YAChB,UAAU,CAAC,CAAC,GAAG,CAAC;YAEhB,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAE9C,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CACvC,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,aAAa,EAClB,UAAU,CAAC,CAAC,EACZ,UAAU,CAAC,CAAC,CACb,CAAC;QACF,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CACrC,YAAY,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;YACtC,CAAC,CAAC,YAAY,CAAC,KAAK;YACpB,CAAC,CAAC,aAAa,CAAC,KAAK,EACvB,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;YACxC,CAAC,CAAC,YAAY,CAAC,MAAM;YACrB,CAAC,CAAC,aAAa,CAAC,MAAM,EACxB,YAAY,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;YACpC,CAAC,CAAC,YAAY,CAAC,IAAI;YACnB,CAAC,CAAC,aAAa,CAAC,IAAI,EACtB,YAAY,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG;YAClC,CAAC,CAAC,YAAY,CAAC,GAAG;YAClB,CAAC,CAAC,aAAa,CAAC,GAAG,CACtB,CAAC;QACF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,uGAAuG;QACvG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,OAAO,GACX,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzE,IAAI,OAAO,CAAC,UAAU,EAAE;gBAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;;gBACvD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,MAAM,cAAc,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpD,sFAAsF;gBACtF,IACE,CAAC,cAAc,IAAI,aAAa,CAAC;oBACjC,aAAa,KAAK,cAAc,EAChC,CAAC;oBACD,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,IAAI,WAAW,CAAC,UAAU,EAAE;wBAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;;wBAC/D,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC;QACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACtC,CAAC;IAEO,QAAQ,CACd,qBAAiE,EACjE,IAAU;QAEV,IACE,IAAI,CAAC,YAAY,KAAK,SAAS;YAC/B,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,eAAe,KAAK,SAAS;YAClC,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CACtC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,EACrE,IAAI,CACL,EACD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3D,CAAC;QACD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC5D,KACE,IAAI,MAAM,GAAG,CAAC,EACd,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,MAAM,EAC1C,MAAM,EAAE,EACR,CAAC;gBACD,IACE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CACtC,qBAAqB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EACzC,IAAI,CACL;oBAED,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1B,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,OAAO,gBAAgB;IAY3B,YACE,aAA4B,EAC5B,uBAAuD,EACvD,yBAA2D;QAE3D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,yBAAyB,GAAG,yBAAyB,CAAC;IAC7D,CAAC;IAED,+CAA+C;IAC/C,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,uEAAuE;IAChE,uBAAuB,CAC5B,gBAA6C,EAC7C,WAAyC;QAEzC,MAAM,iBAAiB,GAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;YACpE,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,0FAA0F;gBAC1F,MAAM,aAAa,GACjB,CAAC,oBAAoB,CACnB,IAAI,CAAC,aAAa,EAClB,kBAAkB,CAAC,WAAW,CAC/B;oBACC,CAAC,QAAQ,CAAC;oBACZ,oBAAoB,CAClB,IAAI,CAAC,aAAa,EAClB,kBAAkB,CAAC,iBAAiB,CACrC,CAAC;gBACJ,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,CAClD,gBAAgB,EAChB,aAAa,CACd,CAAC;gBACF,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;YAED,IACE,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC,EACxE,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAC7C,IAAI,CAAC,SAAS,EACd,WAAW,CAAC,IAAI,EAAE,CACnB,CAAC;oBACF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxC,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,WAAW,CAAC,SAAS,EAAE,CAAC;gBAExB,IACE,oBAAoB,CAClB,IAAI,CAAC,aAAa,EAClB,kBAAkB,CAAC,iBAAiB,CACrC;oBACD,CAAC,CACC,oBAAoB,CAClB,IAAI,CAAC,aAAa,EAClB,kBAAkB,CAAC,aAAa,CACjC,IAAI,WAAW,CAAC,UAAU,EAAE,CAC9B,EACD,CAAC;oBACD,gBAAgB,CAAC,WAAW,EAAE,CAAC;gBACjC,CAAC;gBAED,IAAI,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;oBAC7B,WAAW,CAAC,QAAQ,EAAE,CAAC;oBACvB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,MAAM,EAAE,CAAC;oBACrB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YACtC,CAAC;YAED,IAAI,gBAAgB;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjD,CAAC,CAAC;QACF,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAEpC,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBACjC,IAAI,CAAC,uBAAuB,CAC1B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EACjC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CACrC,CAAC;gBACF,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;oBACzC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnC,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,yBAAyB;gBAChC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CACrB,yBAAsD,EACtD,KAAiD,EACjD,SAAe;QAEf,IACE,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC;YAEzE,OAAO;QAET,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAC/B,yBAAyB,EACzB,KAAK,EACL,SAAS,CACV,CAAC;QACF,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,UAAgB;QACtC,IACE,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC;YAEzE,OAAO;QAET,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,0BAA0B;YAAE,OAAO;QAElE,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;QAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEvE,IACE,gBAAgB,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC1C,gBAAgB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,iBAAiB;gBACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,CAClD,IAAI,CAAC,0BAA0B,EAC/B,KAAK,CACN,CAAC;YACJ,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC/D,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAC7C,gBAAgB,CAAC,UAAU,EAC3B,gBAAgB,CAAC,YAAY,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,kBAAkB;QACvB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;QAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport { Rectangle } from \"@itwin/core-react/internal\";\nimport {\n hasSelectionModeFlag,\n SelectionMode,\n SelectionModeFlags,\n} from \"./SelectionModes.js\";\n\n/** Prototype for a Selection Changed handler\n * @public\n */\nexport declare type OnSelectionChanged = (\n shiftDown?: boolean,\n ctrlDown?: boolean\n) => void;\n\n/**\n * Contains single item specific methods required by selection handler.\n * @internal\n */\nexport interface SingleSelectionHandler<TItem> {\n /**\n * Callback for before an item is selected.\n */\n preselect: () => void;\n\n /**\n * Selects the item.\n */\n select: () => void;\n\n /**\n * Deselects the item.\n */\n deselect: () => void;\n\n /**\n * Returns true if item is selected.\n */\n isSelected: () => boolean;\n\n /**\n * Returns the item.\n */\n item: () => TItem;\n}\n\n/**\n * Contains multi-selection methods required by selection handler.\n * @internal\n */\nexport interface MultiSelectionHandler<TItem> {\n /**\n * Shift selects between two items.\n * Returns items that were selected.\n */\n selectBetween: (item1: TItem, item2: TItem) => TItem[];\n\n /**\n * Updates selection.\n * @param selections Items to be added to selection.\n * @param deselections Items to be removed from selection.\n */\n updateSelection: (selections: TItem[], deselections: TItem[]) => void;\n\n /**\n * Deselects all items.\n */\n deselectAll: () => void;\n\n /**\n * Returns true if items are equal.\n */\n areEqual: (item1: TItem, item2: TItem) => boolean;\n}\n\n/**\n * Called after items were selected.\n * @param items Items that were selected.\n * @param replace Should replace current selection.\n * @public\n */\nexport declare type OnItemsSelectedCallback<TItem> = (\n items: TItem[],\n replace: boolean\n) => void | boolean;\n\n/**\n * Called after items were deselected.\n * @param items Items that were deselected.\n * @public\n */\nexport declare type OnItemsDeselectedCallback<Item> = (\n items: Item[]\n) => void | boolean;\n\nclass BatchSelectionOperation<Item> {\n public readonly selections = new Array<Item>();\n public readonly deselections = new Array<Item>();\n public readonly shouldReplace: boolean;\n\n private _componentSelectionHandler: MultiSelectionHandler<Item>;\n\n public constructor(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n shouldReplace: boolean\n ) {\n this.shouldReplace = shouldReplace;\n this._componentSelectionHandler = componentSelectionHandler;\n }\n\n public select(node: Item | Item[]) {\n this.addNodes(\n node,\n this.selections,\n this.shouldReplace ? undefined : this.deselections\n );\n }\n\n public deselect(node: Item | Item[]) {\n this.addNodes(\n node,\n this.deselections,\n this.shouldReplace ? undefined : this.selections\n );\n }\n\n private addNodes(node: Item | Item[], addTo: Item[], removeFrom?: Item[]) {\n if (Array.isArray(node)) {\n for (const n of node) {\n if (removeFrom) {\n const index = removeFrom.findIndex((x) =>\n this._componentSelectionHandler.areEqual(x, n)\n );\n if (index > -1) {\n removeFrom.splice(index, 1);\n continue;\n }\n }\n addTo.push(n);\n }\n } else {\n this.addNodes([node], addTo, removeFrom);\n }\n }\n}\n\n/** @internal */\nexport class DragAction<Item> {\n private _itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>;\n private _componentSelectionHandler: MultiSelectionHandler<Item>;\n private _previousRow: number;\n private _previousColumn: number;\n private _firstItemRow: number;\n private _firstItemColumn: number;\n private _firstItemSelected: boolean;\n\n public constructor(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>,\n firstItem: Item\n ) {\n this._itemSelectionHandlers = itemSelectionHandlers;\n this._componentSelectionHandler = componentSelectionHandler;\n const itemPos = this.findItem(this._itemSelectionHandlers, firstItem);\n this._previousRow = itemPos.y;\n this._previousColumn = itemPos.x;\n this._firstItemRow = itemPos.y;\n this._firstItemColumn = itemPos.x;\n this._firstItemSelected = false;\n }\n\n public updateDragAction(latestItem: Item): {\n selections: Item[];\n deselections: Item[];\n } {\n const currentPos = this.findItem(this._itemSelectionHandlers, latestItem);\n if (\n (currentPos.y === this._previousRow &&\n currentPos.x === this._previousColumn) ||\n currentPos.x < 0 ||\n currentPos.y < 0\n )\n return { selections: [], deselections: [] };\n\n const currentRange = Rectangle.createXYXY(\n this._firstItemColumn,\n this._firstItemRow,\n currentPos.x,\n currentPos.y\n );\n const previousRange = Rectangle.createXYXY(\n this._firstItemColumn,\n this._firstItemRow,\n this._previousColumn,\n this._previousRow\n );\n const wholeRange = Rectangle.createXYXY(\n currentRange.right > previousRange.right\n ? currentRange.right\n : previousRange.right,\n currentRange.bottom > previousRange.bottom\n ? currentRange.bottom\n : previousRange.bottom,\n currentRange.left < previousRange.left\n ? currentRange.left\n : previousRange.left,\n currentRange.top < previousRange.top\n ? currentRange.top\n : previousRange.top\n );\n const selections = [];\n const deselections = [];\n\n // have to select first item separately since it is will always be in both previous and current ranges.\n if (!this._firstItemSelected) {\n const handler =\n this._itemSelectionHandlers[this._firstItemRow][this._firstItemColumn];\n if (handler.isSelected()) deselections.push(handler.item());\n else selections.push(handler.item());\n this._firstItemSelected = true;\n }\n\n for (let r = wholeRange.top; r <= wholeRange.bottom; r++) {\n for (let c = wholeRange.left; c <= wholeRange.right; c++) {\n const insidePrevious = previousRange.containsXY(c, r);\n const insideCurrent = currentRange.containsXY(c, r);\n // If item is in only one of the ranges that means it's selection needs to be toggled.\n if (\n (insidePrevious || insideCurrent) &&\n insideCurrent !== insidePrevious\n ) {\n const itemHandler = this._itemSelectionHandlers[r][c];\n if (itemHandler.isSelected()) deselections.push(itemHandler.item());\n else selections.push(itemHandler.item());\n }\n }\n }\n\n this._previousRow = currentPos.y;\n this._previousColumn = currentPos.x;\n return { selections, deselections };\n }\n\n private findItem(\n itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>,\n item: Item\n ): { x: number; y: number } {\n if (\n this._previousRow !== undefined &&\n this._previousRow !== -1 &&\n this._previousColumn !== undefined &&\n this._previousColumn !== -1 &&\n this._componentSelectionHandler.areEqual(\n itemSelectionHandlers[this._previousRow][this._previousColumn].item(),\n item\n )\n ) {\n return { y: this._previousRow, x: this._previousColumn };\n }\n for (let row = 0; row < itemSelectionHandlers.length; row++) {\n for (\n let column = 0;\n column < itemSelectionHandlers[row].length;\n column++\n ) {\n if (\n this._componentSelectionHandler.areEqual(\n itemSelectionHandlers[row][column].item(),\n item\n )\n )\n return { x: column, y: row };\n }\n }\n return { x: -1, y: -1 };\n }\n}\n\n/** @internal */\nexport class SelectionHandler<Item> {\n /** Selection mode. */\n public selectionMode: SelectionMode;\n public onItemsSelectedCallback?: OnItemsSelectedCallback<Item>;\n public onItemsDeselectedCallback?: OnItemsDeselectedCallback<Item>;\n\n private _currentOperation?: BatchSelectionOperation<Item>;\n private _lastItem?: Item; // keeps track of last item interacted with for shift selection\n private _processedItem?: Item; // last item interacted with\n private _dragAction?: DragAction<Item>;\n private _componentSelectionHandler?: MultiSelectionHandler<Item>; // needed for drag selection\n\n constructor(\n selectionMode: SelectionMode,\n onItemsSelectedCallback?: OnItemsSelectedCallback<Item>,\n onItemsDeselectedCallback?: OnItemsDeselectedCallback<Item>\n ) {\n this.selectionMode = selectionMode;\n this.onItemsSelectedCallback = onItemsSelectedCallback;\n this.onItemsDeselectedCallback = onItemsDeselectedCallback;\n }\n\n /** Get the onSelectionChange processed item */\n public get processedItem(): Item | undefined {\n return this._processedItem;\n }\n\n /** Creates a function that should be called when selection changes. */\n public createSelectionFunction(\n componentHandler: MultiSelectionHandler<Item>,\n itemHandler: SingleSelectionHandler<Item>\n ): OnSelectionChanged {\n const onSelectionChange: OnSelectionChanged = (shiftDown, ctrlDown) => {\n this._processedItem = itemHandler.item();\n\n if (this.selectionMode === SelectionMode.None) {\n return;\n }\n\n let operationCreated = false;\n let shiftSelected = false;\n if (!this._currentOperation) {\n // will replace selection if it is limited to one or keys are enabled but ctrl is not down\n const shouldReplace =\n (hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.KeysEnabled\n ) &&\n !ctrlDown) ||\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.SelectionLimitOne\n );\n this._currentOperation = new BatchSelectionOperation<Item>(\n componentHandler,\n shouldReplace\n );\n operationCreated = true;\n }\n\n if (\n hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.KeysEnabled)\n ) {\n if (!ctrlDown) componentHandler.deselectAll();\n if (shiftDown && this._lastItem !== undefined) {\n const selected = componentHandler.selectBetween(\n this._lastItem,\n itemHandler.item()\n );\n this._currentOperation.select(selected);\n shiftSelected = true;\n }\n }\n\n if (!shiftSelected) {\n itemHandler.preselect();\n\n if (\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.SelectionLimitOne\n ) &&\n !(\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.ToggleEnabled\n ) && itemHandler.isSelected()\n )\n ) {\n componentHandler.deselectAll();\n }\n\n if (itemHandler.isSelected()) {\n itemHandler.deselect();\n this._currentOperation.deselect(itemHandler.item());\n } else {\n itemHandler.select();\n this._currentOperation.select(itemHandler.item());\n }\n this._lastItem = itemHandler.item();\n }\n\n if (operationCreated) this.completeOperation();\n };\n return onSelectionChange.bind(this);\n }\n\n private completeOperation(): void {\n if (!this._currentOperation) return;\n\n if (0 !== this._currentOperation.selections.length) {\n if (this.onItemsSelectedCallback) {\n this.onItemsSelectedCallback(\n this._currentOperation.selections,\n this._currentOperation.shouldReplace\n );\n if (this._currentOperation.shouldReplace) {\n this._currentOperation = undefined;\n return;\n }\n }\n }\n if (0 !== this._currentOperation.deselections.length) {\n if (this.onItemsDeselectedCallback)\n this.onItemsDeselectedCallback(this._currentOperation.deselections);\n }\n this._currentOperation = undefined;\n }\n\n /**\n * Creates drag action.\n * @param componentSelectionHandler Component selection handler.\n * @param items Ordered item selection handlers separated into arrays by rows.\n * @param firstItem Item on which drag action was started.\n */\n public createDragAction(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n items: Array<Array<SingleSelectionHandler<Item>>>,\n firstItem: Item\n ): void {\n if (\n !hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.DragEnabled)\n )\n return;\n\n this._dragAction = new DragAction(\n componentSelectionHandler,\n items,\n firstItem\n );\n this._componentSelectionHandler = componentSelectionHandler;\n }\n\n /**\n * Updates existing drag action.\n * @param latestItem Latest item in drag action.\n */\n public updateDragAction(latestItem: Item): void {\n if (\n !hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.DragEnabled)\n )\n return;\n\n if (!this._dragAction || !this._componentSelectionHandler) return;\n\n this._lastItem = latestItem;\n const selectionChanges = this._dragAction.updateDragAction(latestItem);\n\n if (\n selectionChanges.deselections.length !== 0 ||\n selectionChanges.selections.length !== 0\n ) {\n if (!this._currentOperation)\n this._currentOperation = new BatchSelectionOperation(\n this._componentSelectionHandler,\n false\n );\n this._currentOperation.select(selectionChanges.selections);\n this._currentOperation.deselect(selectionChanges.deselections);\n this._componentSelectionHandler.updateSelection(\n selectionChanges.selections,\n selectionChanges.deselections\n );\n }\n }\n\n /**\n * Completes drag action.\n */\n public completeDragAction() {\n this._dragAction = undefined;\n this._componentSelectionHandler = undefined;\n this.completeOperation();\n }\n}\n"]}
1
+ {"version":3,"file":"SelectionHandler.js","sourceRoot":"","sources":["../../../../src/components-react/common/selection/SelectionHandler.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 Common\n */\n\nimport { Rectangle } from \"@itwin/core-react/internal\";\nimport {\n hasSelectionModeFlag,\n SelectionMode,\n SelectionModeFlags,\n} from \"./SelectionModes.js\";\n\n/** Prototype for a Selection Changed handler\n * @public\n */\nexport declare type OnSelectionChanged = (\n shiftDown?: boolean,\n ctrlDown?: boolean\n) => void;\n\n/**\n * Contains single item specific methods required by selection handler.\n * @internal\n */\nexport interface SingleSelectionHandler<TItem> {\n /**\n * Callback for before an item is selected.\n */\n preselect: () => void;\n\n /**\n * Selects the item.\n */\n select: () => void;\n\n /**\n * Deselects the item.\n */\n deselect: () => void;\n\n /**\n * Returns true if item is selected.\n */\n isSelected: () => boolean;\n\n /**\n * Returns the item.\n */\n item: () => TItem;\n}\n\n/**\n * Contains multi-selection methods required by selection handler.\n * @internal\n */\nexport interface MultiSelectionHandler<TItem> {\n /**\n * Shift selects between two items.\n * Returns items that were selected.\n */\n selectBetween: (item1: TItem, item2: TItem) => TItem[];\n\n /**\n * Updates selection.\n * @param selections Items to be added to selection.\n * @param deselections Items to be removed from selection.\n */\n updateSelection: (selections: TItem[], deselections: TItem[]) => void;\n\n /**\n * Deselects all items.\n */\n deselectAll: () => void;\n\n /**\n * Returns true if items are equal.\n */\n areEqual: (item1: TItem, item2: TItem) => boolean;\n}\n\n/**\n * Called after items were selected.\n * @param items Items that were selected.\n * @param replace Should replace current selection.\n * @public\n */\nexport declare type OnItemsSelectedCallback<TItem> = (\n items: TItem[],\n replace: boolean\n) => void | boolean;\n\n/**\n * Called after items were deselected.\n * @param items Items that were deselected.\n * @public\n */\nexport declare type OnItemsDeselectedCallback<Item> = (\n items: Item[]\n) => void | boolean;\n\nclass BatchSelectionOperation<Item> {\n public readonly selections = new Array<Item>();\n public readonly deselections = new Array<Item>();\n public readonly shouldReplace: boolean;\n\n private _componentSelectionHandler: MultiSelectionHandler<Item>;\n\n public constructor(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n shouldReplace: boolean\n ) {\n this.shouldReplace = shouldReplace;\n this._componentSelectionHandler = componentSelectionHandler;\n }\n\n public select(node: Item | Item[]) {\n this.addNodes(\n node,\n this.selections,\n this.shouldReplace ? undefined : this.deselections\n );\n }\n\n public deselect(node: Item | Item[]) {\n this.addNodes(\n node,\n this.deselections,\n this.shouldReplace ? undefined : this.selections\n );\n }\n\n private addNodes(node: Item | Item[], addTo: Item[], removeFrom?: Item[]) {\n if (Array.isArray(node)) {\n for (const n of node) {\n if (removeFrom) {\n const index = removeFrom.findIndex((x) =>\n this._componentSelectionHandler.areEqual(x, n)\n );\n if (index > -1) {\n removeFrom.splice(index, 1);\n continue;\n }\n }\n addTo.push(n);\n }\n } else {\n this.addNodes([node], addTo, removeFrom);\n }\n }\n}\n\n/** @internal */\nexport class DragAction<Item> {\n private _itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>;\n private _componentSelectionHandler: MultiSelectionHandler<Item>;\n private _previousRow: number;\n private _previousColumn: number;\n private _firstItemRow: number;\n private _firstItemColumn: number;\n private _firstItemSelected: boolean;\n\n public constructor(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>,\n firstItem: Item\n ) {\n this._itemSelectionHandlers = itemSelectionHandlers;\n this._componentSelectionHandler = componentSelectionHandler;\n const itemPos = this.findItem(this._itemSelectionHandlers, firstItem);\n this._previousRow = itemPos.y;\n this._previousColumn = itemPos.x;\n this._firstItemRow = itemPos.y;\n this._firstItemColumn = itemPos.x;\n this._firstItemSelected = false;\n }\n\n public updateDragAction(latestItem: Item): {\n selections: Item[];\n deselections: Item[];\n } {\n const currentPos = this.findItem(this._itemSelectionHandlers, latestItem);\n if (\n (currentPos.y === this._previousRow &&\n currentPos.x === this._previousColumn) ||\n currentPos.x < 0 ||\n currentPos.y < 0\n )\n return { selections: [], deselections: [] };\n\n const currentRange = Rectangle.createXYXY(\n this._firstItemColumn,\n this._firstItemRow,\n currentPos.x,\n currentPos.y\n );\n const previousRange = Rectangle.createXYXY(\n this._firstItemColumn,\n this._firstItemRow,\n this._previousColumn,\n this._previousRow\n );\n const wholeRange = Rectangle.createXYXY(\n currentRange.right > previousRange.right\n ? currentRange.right\n : previousRange.right,\n currentRange.bottom > previousRange.bottom\n ? currentRange.bottom\n : previousRange.bottom,\n currentRange.left < previousRange.left\n ? currentRange.left\n : previousRange.left,\n currentRange.top < previousRange.top\n ? currentRange.top\n : previousRange.top\n );\n const selections = [];\n const deselections = [];\n\n // have to select first item separately since it is will always be in both previous and current ranges.\n if (!this._firstItemSelected) {\n const handler =\n this._itemSelectionHandlers[this._firstItemRow][this._firstItemColumn];\n if (handler.isSelected()) deselections.push(handler.item());\n else selections.push(handler.item());\n this._firstItemSelected = true;\n }\n\n for (let r = wholeRange.top; r <= wholeRange.bottom; r++) {\n for (let c = wholeRange.left; c <= wholeRange.right; c++) {\n const insidePrevious = previousRange.containsXY(c, r);\n const insideCurrent = currentRange.containsXY(c, r);\n // If item is in only one of the ranges that means it's selection needs to be toggled.\n if (\n (insidePrevious || insideCurrent) &&\n insideCurrent !== insidePrevious\n ) {\n const itemHandler = this._itemSelectionHandlers[r][c];\n if (itemHandler.isSelected()) deselections.push(itemHandler.item());\n else selections.push(itemHandler.item());\n }\n }\n }\n\n this._previousRow = currentPos.y;\n this._previousColumn = currentPos.x;\n return { selections, deselections };\n }\n\n private findItem(\n itemSelectionHandlers: Array<Array<SingleSelectionHandler<Item>>>,\n item: Item\n ): { x: number; y: number } {\n if (\n this._previousRow !== undefined &&\n this._previousRow !== -1 &&\n this._previousColumn !== undefined &&\n this._previousColumn !== -1 &&\n this._componentSelectionHandler.areEqual(\n itemSelectionHandlers[this._previousRow][this._previousColumn].item(),\n item\n )\n ) {\n return { y: this._previousRow, x: this._previousColumn };\n }\n for (let row = 0; row < itemSelectionHandlers.length; row++) {\n for (\n let column = 0;\n column < itemSelectionHandlers[row].length;\n column++\n ) {\n if (\n this._componentSelectionHandler.areEqual(\n itemSelectionHandlers[row][column].item(),\n item\n )\n )\n return { x: column, y: row };\n }\n }\n return { x: -1, y: -1 };\n }\n}\n\n/** @internal */\nexport class SelectionHandler<Item> {\n /** Selection mode. */\n public selectionMode: SelectionMode;\n public onItemsSelectedCallback?: OnItemsSelectedCallback<Item>;\n public onItemsDeselectedCallback?: OnItemsDeselectedCallback<Item>;\n\n private _currentOperation?: BatchSelectionOperation<Item>;\n private _lastItem?: Item; // keeps track of last item interacted with for shift selection\n private _processedItem?: Item; // last item interacted with\n private _dragAction?: DragAction<Item>;\n private _componentSelectionHandler?: MultiSelectionHandler<Item>; // needed for drag selection\n\n constructor(\n selectionMode: SelectionMode,\n onItemsSelectedCallback?: OnItemsSelectedCallback<Item>,\n onItemsDeselectedCallback?: OnItemsDeselectedCallback<Item>\n ) {\n this.selectionMode = selectionMode;\n this.onItemsSelectedCallback = onItemsSelectedCallback;\n this.onItemsDeselectedCallback = onItemsDeselectedCallback;\n }\n\n /** Get the onSelectionChange processed item */\n public get processedItem(): Item | undefined {\n return this._processedItem;\n }\n\n /** Creates a function that should be called when selection changes. */\n public createSelectionFunction(\n componentHandler: MultiSelectionHandler<Item>,\n itemHandler: SingleSelectionHandler<Item>\n ): OnSelectionChanged {\n const onSelectionChange: OnSelectionChanged = (shiftDown, ctrlDown) => {\n this._processedItem = itemHandler.item();\n\n if (this.selectionMode === SelectionMode.None) {\n return;\n }\n\n let operationCreated = false;\n let shiftSelected = false;\n if (!this._currentOperation) {\n // will replace selection if it is limited to one or keys are enabled but ctrl is not down\n const shouldReplace =\n (hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.KeysEnabled\n ) &&\n !ctrlDown) ||\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.SelectionLimitOne\n );\n this._currentOperation = new BatchSelectionOperation<Item>(\n componentHandler,\n shouldReplace\n );\n operationCreated = true;\n }\n\n if (\n hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.KeysEnabled)\n ) {\n if (!ctrlDown) componentHandler.deselectAll();\n if (shiftDown && this._lastItem !== undefined) {\n const selected = componentHandler.selectBetween(\n this._lastItem,\n itemHandler.item()\n );\n this._currentOperation.select(selected);\n shiftSelected = true;\n }\n }\n\n if (!shiftSelected) {\n itemHandler.preselect();\n\n if (\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.SelectionLimitOne\n ) &&\n !(\n hasSelectionModeFlag(\n this.selectionMode,\n SelectionModeFlags.ToggleEnabled\n ) && itemHandler.isSelected()\n )\n ) {\n componentHandler.deselectAll();\n }\n\n if (itemHandler.isSelected()) {\n itemHandler.deselect();\n this._currentOperation.deselect(itemHandler.item());\n } else {\n itemHandler.select();\n this._currentOperation.select(itemHandler.item());\n }\n this._lastItem = itemHandler.item();\n }\n\n if (operationCreated) this.completeOperation();\n };\n return onSelectionChange.bind(this);\n }\n\n private completeOperation(): void {\n if (!this._currentOperation) return;\n\n if (0 !== this._currentOperation.selections.length) {\n if (this.onItemsSelectedCallback) {\n this.onItemsSelectedCallback(\n this._currentOperation.selections,\n this._currentOperation.shouldReplace\n );\n if (this._currentOperation.shouldReplace) {\n this._currentOperation = undefined;\n return;\n }\n }\n }\n if (0 !== this._currentOperation.deselections.length) {\n if (this.onItemsDeselectedCallback)\n this.onItemsDeselectedCallback(this._currentOperation.deselections);\n }\n this._currentOperation = undefined;\n }\n\n /**\n * Creates drag action.\n * @param componentSelectionHandler Component selection handler.\n * @param items Ordered item selection handlers separated into arrays by rows.\n * @param firstItem Item on which drag action was started.\n */\n public createDragAction(\n componentSelectionHandler: MultiSelectionHandler<Item>,\n items: Array<Array<SingleSelectionHandler<Item>>>,\n firstItem: Item\n ): void {\n if (\n !hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.DragEnabled)\n )\n return;\n\n this._dragAction = new DragAction(\n componentSelectionHandler,\n items,\n firstItem\n );\n this._componentSelectionHandler = componentSelectionHandler;\n }\n\n /**\n * Updates existing drag action.\n * @param latestItem Latest item in drag action.\n */\n public updateDragAction(latestItem: Item): void {\n if (\n !hasSelectionModeFlag(this.selectionMode, SelectionModeFlags.DragEnabled)\n )\n return;\n\n if (!this._dragAction || !this._componentSelectionHandler) return;\n\n this._lastItem = latestItem;\n const selectionChanges = this._dragAction.updateDragAction(latestItem);\n\n if (\n selectionChanges.deselections.length !== 0 ||\n selectionChanges.selections.length !== 0\n ) {\n if (!this._currentOperation)\n this._currentOperation = new BatchSelectionOperation(\n this._componentSelectionHandler,\n false\n );\n this._currentOperation.select(selectionChanges.selections);\n this._currentOperation.deselect(selectionChanges.deselections);\n this._componentSelectionHandler.updateSelection(\n selectionChanges.selections,\n selectionChanges.deselections\n );\n }\n }\n\n /**\n * Completes drag action.\n */\n public completeDragAction() {\n this._dragAction = undefined;\n this._componentSelectionHandler = undefined;\n this.completeOperation();\n }\n}\n"]}
@@ -11,6 +11,10 @@ import { TypeConverter } from "./TypeConverter.js";
11
11
  * @public
12
12
  */
13
13
  export class BooleanTypeConverter extends TypeConverter {
14
+ /** @internal */
15
+ static sl10nTrue = "";
16
+ /** @internal */
17
+ static sl10nFalse = "";
14
18
  /** @internal */
15
19
  static getLocalizedTrueFalse() {
16
20
  if (!BooleanTypeConverter.sl10nTrue)
@@ -48,8 +52,4 @@ export class BooleanTypeConverter extends TypeConverter {
48
52
  return true;
49
53
  }
50
54
  }
51
- /** @internal */
52
- BooleanTypeConverter.sl10nTrue = "";
53
- /** @internal */
54
- BooleanTypeConverter.sl10nFalse = "";
55
55
  //# sourceMappingURL=BooleanTypeConverter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BooleanTypeConverter.js","sourceRoot":"","sources":["../../../src/components-react/converters/BooleanTypeConverter.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAMrD,gBAAgB;IACT,MAAM,CAAC,qBAAqB;QACjC,IAAI,CAAC,oBAAoB,CAAC,SAAS;YACjC,oBAAoB,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,oBAAoB,CAAC,UAAU;YAClC,oBAAoB,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;IAEe,eAAe,CAAC,KAA0B;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAEnC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;QAE7C,IACE,KAAK,KAAK,oBAAoB,CAAC,SAAS;YACxC,KAAK,KAAK,oBAAoB,CAAC,UAAU;YAEzC,OAAO,KAAK,CAAC;QAEf,OAAO,KAAK;YACV,CAAC,CAAC,oBAAoB,CAAC,SAAS;YAChC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC;IACtC,CAAC;IAEe,iBAAiB,CAAC,KAAa;QAC7C,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;QAE7C,MAAM,YAAY,GAChB,CAAC;YACD,KAAK;iBACF,iBAAiB,EAAE;iBACnB,aAAa,CAAC,oBAAoB,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACvE,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,WAAW,CAChB,CAAqB,EACrB,CAAqB,EACrB,WAAqB;QAErB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAoB,aAAa;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;;AApDD,gBAAgB;AACF,8BAAS,GAAW,EAAE,CAAC;AACrC,gBAAgB;AACF,+BAAU,GAAW,EAAE,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 TypeConverters\n */\n\nimport type { Primitives } from \"@itwin/appui-abstract\";\nimport { UiComponents } from \"../UiComponents.js\";\nimport { TypeConverter } from \"./TypeConverter.js\";\n\n/** Boolean Type Converter.\n * @public\n */\nexport class BooleanTypeConverter extends TypeConverter {\n /** @internal */\n public static sl10nTrue: string = \"\";\n /** @internal */\n public static sl10nFalse: string = \"\";\n\n /** @internal */\n public static getLocalizedTrueFalse() {\n if (!BooleanTypeConverter.sl10nTrue)\n BooleanTypeConverter.sl10nTrue = UiComponents.translate(\"general.true\");\n if (!BooleanTypeConverter.sl10nFalse)\n BooleanTypeConverter.sl10nFalse = UiComponents.translate(\"general.false\");\n }\n\n public override convertToString(value?: Primitives.Boolean) {\n if (value === undefined) return \"\";\n\n BooleanTypeConverter.getLocalizedTrueFalse();\n\n if (\n value === BooleanTypeConverter.sl10nTrue ||\n value === BooleanTypeConverter.sl10nFalse\n )\n return value;\n\n return value\n ? BooleanTypeConverter.sl10nTrue\n : BooleanTypeConverter.sl10nFalse;\n }\n\n public override convertFromString(value: string) {\n BooleanTypeConverter.getLocalizedTrueFalse();\n\n const booleanValue =\n 0 ===\n value\n .toLocaleLowerCase()\n .localeCompare(BooleanTypeConverter.sl10nTrue.toLocaleLowerCase());\n return booleanValue;\n }\n\n public sortCompare(\n a: Primitives.Boolean,\n b: Primitives.Boolean,\n _ignoreCase?: boolean\n ): number {\n if (!!a === !!b) return 0;\n if (!!a && !b) return 1;\n return -1;\n }\n\n public override get isBooleanType(): boolean {\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"BooleanTypeConverter.js","sourceRoot":"","sources":["../../../src/components-react/converters/BooleanTypeConverter.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,gBAAgB;IACT,MAAM,CAAC,SAAS,GAAW,EAAE,CAAC;IACrC,gBAAgB;IACT,MAAM,CAAC,UAAU,GAAW,EAAE,CAAC;IAEtC,gBAAgB;IACT,MAAM,CAAC,qBAAqB;QACjC,IAAI,CAAC,oBAAoB,CAAC,SAAS;YACjC,oBAAoB,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,oBAAoB,CAAC,UAAU;YAClC,oBAAoB,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;IAEe,eAAe,CAAC,KAA0B;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAEnC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;QAE7C,IACE,KAAK,KAAK,oBAAoB,CAAC,SAAS;YACxC,KAAK,KAAK,oBAAoB,CAAC,UAAU;YAEzC,OAAO,KAAK,CAAC;QAEf,OAAO,KAAK;YACV,CAAC,CAAC,oBAAoB,CAAC,SAAS;YAChC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC;IACtC,CAAC;IAEe,iBAAiB,CAAC,KAAa;QAC7C,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;QAE7C,MAAM,YAAY,GAChB,CAAC;YACD,KAAK;iBACF,iBAAiB,EAAE;iBACnB,aAAa,CAAC,oBAAoB,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACvE,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,WAAW,CAChB,CAAqB,EACrB,CAAqB,EACrB,WAAqB;QAErB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAoB,aAAa;QAC/B,OAAO,IAAI,CAAC;IACd,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 TypeConverters\n */\n\nimport type { Primitives } from \"@itwin/appui-abstract\";\nimport { UiComponents } from \"../UiComponents.js\";\nimport { TypeConverter } from \"./TypeConverter.js\";\n\n/** Boolean Type Converter.\n * @public\n */\nexport class BooleanTypeConverter extends TypeConverter {\n /** @internal */\n public static sl10nTrue: string = \"\";\n /** @internal */\n public static sl10nFalse: string = \"\";\n\n /** @internal */\n public static getLocalizedTrueFalse() {\n if (!BooleanTypeConverter.sl10nTrue)\n BooleanTypeConverter.sl10nTrue = UiComponents.translate(\"general.true\");\n if (!BooleanTypeConverter.sl10nFalse)\n BooleanTypeConverter.sl10nFalse = UiComponents.translate(\"general.false\");\n }\n\n public override convertToString(value?: Primitives.Boolean) {\n if (value === undefined) return \"\";\n\n BooleanTypeConverter.getLocalizedTrueFalse();\n\n if (\n value === BooleanTypeConverter.sl10nTrue ||\n value === BooleanTypeConverter.sl10nFalse\n )\n return value;\n\n return value\n ? BooleanTypeConverter.sl10nTrue\n : BooleanTypeConverter.sl10nFalse;\n }\n\n public override convertFromString(value: string) {\n BooleanTypeConverter.getLocalizedTrueFalse();\n\n const booleanValue =\n 0 ===\n value\n .toLocaleLowerCase()\n .localeCompare(BooleanTypeConverter.sl10nTrue.toLocaleLowerCase());\n return booleanValue;\n }\n\n public sortCompare(\n a: Primitives.Boolean,\n b: Primitives.Boolean,\n _ignoreCase?: boolean\n ): number {\n if (!!a === !!b) return 0;\n if (!!a && !b) return 1;\n return -1;\n }\n\n public override get isBooleanType(): boolean {\n return true;\n }\n}\n"]}
@@ -14,6 +14,7 @@ import { isPromiseLike } from "../common/UseAsyncValue.js";
14
14
  * @public
15
15
  */
16
16
  export class BasePointTypeConverter extends TypeConverter {
17
+ componentConverterName;
17
18
  constructor(componentConverterName = StandardTypeNames.Double) {
18
19
  super();
19
20
  this.componentConverterName = componentConverterName;
@@ -1 +1 @@
1
- {"version":3,"file":"PointTypeConverter.js","sourceRoot":"","sources":["../../../src/components-react/converters/PointTypeConverter.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 TypeConverters\n */\n\nimport type { Primitives } from \"@itwin/appui-abstract\";\nimport { StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { TypeConverter } from \"./TypeConverter.js\";\nimport { TypeConverterManager } from \"./TypeConverterManager.js\";\nimport type { ConvertedPrimitives } from \"./valuetypes/ConvertedTypes.js\";\nimport { isPromiseLike } from \"../common/UseAsyncValue.js\";\n\n/**\n * Point type converter.\n * @public\n */\nexport abstract class BasePointTypeConverter extends TypeConverter {\n public componentConverterName: string;\n\n public constructor(\n componentConverterName: string = StandardTypeNames.Double\n ) {\n super();\n this.componentConverterName = componentConverterName;\n }\n\n private formatValue(value: number | string): string | Promise<string> {\n if (typeof value === \"string\") value = parseFloat(value);\n return TypeConverterManager.getConverter(\n this.componentConverterName\n ).convertToString(value);\n }\n\n public override convertToString(\n value?: Primitives.Point\n ): string | Promise<string> {\n if (!value) return \"\";\n\n let components = new Array<string | Promise<string>>();\n if (Array.isArray(value)) {\n if (value.length === 0) return \"\";\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n components = (value as Array<string | number>).map(\n (c): string | Promise<string> => this.formatValue(c)\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n components = [this.formatValue(value.x), this.formatValue(value.y)];\n if (undefined !== (value as any).z)\n components.push(this.formatValue((value as any).z));\n }\n const hasAsyncComponents = components.some(isPromiseLike);\n if (hasAsyncComponents) {\n return Promise.all(\n components.map(async (c) => (isPromiseLike(c) ? c : Promise.resolve(c)))\n ).then((c) => c.join(\", \"));\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return components.join(\", \");\n }\n\n public override convertFromString(value: string) {\n return this.constructPoint(value.split(\",\"));\n }\n protected abstract constructPoint(\n _values: Primitives.Point\n ): ConvertedPrimitives.Point | undefined;\n\n protected abstract getVectorLength(\n point: Primitives.Point\n ): number | undefined;\n\n public sortCompare(\n a: Primitives.Point,\n b: Primitives.Point,\n _ignoreCase?: boolean\n ): number {\n const aLength = this.getVectorLength(a);\n const bLength = this.getVectorLength(b);\n\n if (aLength === bLength) return 0;\n if (aLength === undefined) return -1;\n if (bLength === undefined) return 1;\n\n return aLength - bLength;\n }\n}\n\n/**\n * Point2d type converter.\n * @public\n */\nexport class Point2dTypeConverter extends BasePointTypeConverter {\n public constructor(componentConverterName?: string) {\n super(componentConverterName);\n }\n\n protected getVectorLength(point: Primitives.Point): number | undefined {\n const derivedPoint = this.constructPoint(point);\n\n if (derivedPoint === undefined) return undefined;\n\n return Math.sqrt(Math.pow(derivedPoint.x, 2) + Math.pow(derivedPoint.y, 2));\n }\n\n protected constructPoint(\n values: Primitives.Point\n ): ConvertedPrimitives.Point2d | undefined {\n if (Array.isArray(values)) {\n if (values.length !== 2 || isNaN(+values[0]) || isNaN(+values[1]))\n return undefined;\n return { x: +values[0], y: +values[1] };\n }\n return values;\n }\n}\n\n/**\n * Point3d type converter.\n * @public\n */\nexport class Point3dTypeConverter extends BasePointTypeConverter {\n public constructor(componentConverterName?: string) {\n super(componentConverterName);\n }\n\n protected getVectorLength(point: Primitives.Point): number | undefined {\n const derivedPoint = this.constructPoint(point);\n\n if (derivedPoint === undefined) return undefined;\n\n return Math.sqrt(\n Math.pow(derivedPoint.x, 2) +\n Math.pow(derivedPoint.y, 2) +\n Math.pow(derivedPoint.z, 2)\n );\n }\n\n protected constructPoint(\n values: Primitives.Point\n ): ConvertedPrimitives.Point3d | undefined {\n if (Array.isArray(values)) {\n if (\n values.length !== 3 ||\n isNaN(+values[0]) ||\n isNaN(+values[1]) ||\n isNaN(+values[2])\n )\n return undefined;\n return { x: +values[0], y: +values[1], z: +values[2] };\n }\n const z = (values as any).z;\n return { ...values, z: z ? z : 0 };\n }\n}\n"]}
1
+ {"version":3,"file":"PointTypeConverter.js","sourceRoot":"","sources":["../../../src/components-react/converters/PointTypeConverter.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 TypeConverters\n */\n\nimport type { Primitives } from \"@itwin/appui-abstract\";\nimport { StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { TypeConverter } from \"./TypeConverter.js\";\nimport { TypeConverterManager } from \"./TypeConverterManager.js\";\nimport type { ConvertedPrimitives } from \"./valuetypes/ConvertedTypes.js\";\nimport { isPromiseLike } from \"../common/UseAsyncValue.js\";\n\n/**\n * Point type converter.\n * @public\n */\nexport abstract class BasePointTypeConverter extends TypeConverter {\n public componentConverterName: string;\n\n public constructor(\n componentConverterName: string = StandardTypeNames.Double\n ) {\n super();\n this.componentConverterName = componentConverterName;\n }\n\n private formatValue(value: number | string): string | Promise<string> {\n if (typeof value === \"string\") value = parseFloat(value);\n return TypeConverterManager.getConverter(\n this.componentConverterName\n ).convertToString(value);\n }\n\n public override convertToString(\n value?: Primitives.Point\n ): string | Promise<string> {\n if (!value) return \"\";\n\n let components = new Array<string | Promise<string>>();\n if (Array.isArray(value)) {\n if (value.length === 0) return \"\";\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n components = (value as Array<string | number>).map(\n (c): string | Promise<string> => this.formatValue(c)\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n components = [this.formatValue(value.x), this.formatValue(value.y)];\n if (undefined !== (value as any).z)\n components.push(this.formatValue((value as any).z));\n }\n const hasAsyncComponents = components.some(isPromiseLike);\n if (hasAsyncComponents) {\n return Promise.all(\n components.map(async (c) => (isPromiseLike(c) ? c : Promise.resolve(c)))\n ).then((c) => c.join(\", \"));\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return components.join(\", \");\n }\n\n public override convertFromString(value: string) {\n return this.constructPoint(value.split(\",\"));\n }\n protected abstract constructPoint(\n _values: Primitives.Point\n ): ConvertedPrimitives.Point | undefined;\n\n protected abstract getVectorLength(\n point: Primitives.Point\n ): number | undefined;\n\n public sortCompare(\n a: Primitives.Point,\n b: Primitives.Point,\n _ignoreCase?: boolean\n ): number {\n const aLength = this.getVectorLength(a);\n const bLength = this.getVectorLength(b);\n\n if (aLength === bLength) return 0;\n if (aLength === undefined) return -1;\n if (bLength === undefined) return 1;\n\n return aLength - bLength;\n }\n}\n\n/**\n * Point2d type converter.\n * @public\n */\nexport class Point2dTypeConverter extends BasePointTypeConverter {\n public constructor(componentConverterName?: string) {\n super(componentConverterName);\n }\n\n protected getVectorLength(point: Primitives.Point): number | undefined {\n const derivedPoint = this.constructPoint(point);\n\n if (derivedPoint === undefined) return undefined;\n\n return Math.sqrt(Math.pow(derivedPoint.x, 2) + Math.pow(derivedPoint.y, 2));\n }\n\n protected constructPoint(\n values: Primitives.Point\n ): ConvertedPrimitives.Point2d | undefined {\n if (Array.isArray(values)) {\n if (values.length !== 2 || isNaN(+values[0]) || isNaN(+values[1]))\n return undefined;\n return { x: +values[0], y: +values[1] };\n }\n return values;\n }\n}\n\n/**\n * Point3d type converter.\n * @public\n */\nexport class Point3dTypeConverter extends BasePointTypeConverter {\n public constructor(componentConverterName?: string) {\n super(componentConverterName);\n }\n\n protected getVectorLength(point: Primitives.Point): number | undefined {\n const derivedPoint = this.constructPoint(point);\n\n if (derivedPoint === undefined) return undefined;\n\n return Math.sqrt(\n Math.pow(derivedPoint.x, 2) +\n Math.pow(derivedPoint.y, 2) +\n Math.pow(derivedPoint.z, 2)\n );\n }\n\n protected constructPoint(\n values: Primitives.Point\n ): ConvertedPrimitives.Point3d | undefined {\n if (Array.isArray(values)) {\n if (\n values.length !== 3 ||\n isNaN(+values[0]) ||\n isNaN(+values[1]) ||\n isNaN(+values[2])\n )\n return undefined;\n return { x: +values[0], y: +values[1], z: +values[2] };\n }\n const z = (values as any).z;\n return { ...values, z: z ? z : 0 };\n }\n}\n"]}
@@ -11,6 +11,8 @@ import { StringTypeConverter } from "./StringTypeConverter.js";
11
11
  * @public
12
12
  */
13
13
  export class TypeConverterManager {
14
+ static _converters = {};
15
+ static _defaultTypeConverter;
14
16
  static getFullConverterName(typename, converterName) {
15
17
  let fullConverterName = typename;
16
18
  if (converterName)
@@ -42,5 +44,4 @@ export class TypeConverterManager {
42
44
  return TypeConverterManager._defaultTypeConverter;
43
45
  }
44
46
  }
45
- TypeConverterManager._converters = {};
46
47
  //# sourceMappingURL=TypeConverterManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TypeConverterManager.js","sourceRoot":"","sources":["../../../src/components-react/converters/TypeConverterManager.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAIvB,MAAM,CAAC,oBAAoB,CACjC,QAAgB,EAChB,aAAsB;QAEtB,IAAI,iBAAiB,GAAG,QAAQ,CAAC;QACjC,IAAI,aAAa;YAAE,iBAAiB,IAAI,IAAI,aAAa,EAAE,CAAC;QAC5D,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAC7B,QAAgB,EAChB,SAAkC,EAClC,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvE,MAAM,eAAe,GACnB,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YACvE,MAAM,KAAK,CACT,uDAAuD,QAAQ,4BAA4B,eAAe,GAAG,CAC9G,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC;IACjE,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvE,OAAO,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,YAAY,CACxB,QAAgB,EAChB,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC;YACpE,OAAO,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAE7D,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;YAChD,oBAAoB,CAAC,qBAAqB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,CAAC;;AAhEc,gCAAW,GAAuC,EAAE,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 TypeConverters\n */\n\nimport type { TypeConverter } from \"./TypeConverter.js\";\nimport { StringTypeConverter } from \"./StringTypeConverter.js\";\n\n/**\n * Manages Type Converters. Type Converters are registered with and obtained from the manager.\n * @public\n */\nexport class TypeConverterManager {\n private static _converters: { [index: string]: TypeConverter } = {};\n private static _defaultTypeConverter: TypeConverter;\n\n private static getFullConverterName(\n typename: string,\n converterName?: string\n ): string {\n let fullConverterName = typename;\n if (converterName) fullConverterName += `:${converterName}`;\n return fullConverterName;\n }\n\n public static registerConverter(\n typename: string,\n converter: new () => TypeConverter,\n converterName?: string\n ): void {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName)) {\n const nameOfConverter =\n TypeConverterManager._converters[fullConverterName].constructor.name;\n throw Error(\n `TypeConverterManager.registerConverter error: type '${typename}' already registered to '${nameOfConverter}'`\n );\n }\n\n const instance = new converter();\n TypeConverterManager._converters[fullConverterName] = instance;\n }\n\n public static unregisterConverter(\n typename: string,\n converterName?: string\n ): void {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName)) {\n delete TypeConverterManager._converters[fullConverterName];\n }\n }\n\n public static getConverter(\n typename: string,\n converterName?: string\n ): TypeConverter {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName))\n return TypeConverterManager._converters[fullConverterName];\n\n if (!TypeConverterManager._defaultTypeConverter) {\n TypeConverterManager._defaultTypeConverter = new StringTypeConverter();\n }\n return TypeConverterManager._defaultTypeConverter;\n }\n}\n"]}
1
+ {"version":3,"file":"TypeConverterManager.js","sourceRoot":"","sources":["../../../src/components-react/converters/TypeConverterManager.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAC,WAAW,GAAuC,EAAE,CAAC;IAC5D,MAAM,CAAC,qBAAqB,CAAgB;IAE5C,MAAM,CAAC,oBAAoB,CACjC,QAAgB,EAChB,aAAsB;QAEtB,IAAI,iBAAiB,GAAG,QAAQ,CAAC;QACjC,IAAI,aAAa;YAAE,iBAAiB,IAAI,IAAI,aAAa,EAAE,CAAC;QAC5D,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAC7B,QAAgB,EAChB,SAAkC,EAClC,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvE,MAAM,eAAe,GACnB,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YACvE,MAAM,KAAK,CACT,uDAAuD,QAAQ,4BAA4B,eAAe,GAAG,CAC9G,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC;IACjE,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvE,OAAO,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,YAAY,CACxB,QAAgB,EAChB,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,oBAAoB,CACjE,QAAQ,EACR,aAAa,CACd,CAAC;QAEF,IAAI,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC;YACpE,OAAO,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAE7D,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;YAChD,oBAAoB,CAAC,qBAAqB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,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 TypeConverters\n */\n\nimport type { TypeConverter } from \"./TypeConverter.js\";\nimport { StringTypeConverter } from \"./StringTypeConverter.js\";\n\n/**\n * Manages Type Converters. Type Converters are registered with and obtained from the manager.\n * @public\n */\nexport class TypeConverterManager {\n private static _converters: { [index: string]: TypeConverter } = {};\n private static _defaultTypeConverter: TypeConverter;\n\n private static getFullConverterName(\n typename: string,\n converterName?: string\n ): string {\n let fullConverterName = typename;\n if (converterName) fullConverterName += `:${converterName}`;\n return fullConverterName;\n }\n\n public static registerConverter(\n typename: string,\n converter: new () => TypeConverter,\n converterName?: string\n ): void {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName)) {\n const nameOfConverter =\n TypeConverterManager._converters[fullConverterName].constructor.name;\n throw Error(\n `TypeConverterManager.registerConverter error: type '${typename}' already registered to '${nameOfConverter}'`\n );\n }\n\n const instance = new converter();\n TypeConverterManager._converters[fullConverterName] = instance;\n }\n\n public static unregisterConverter(\n typename: string,\n converterName?: string\n ): void {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName)) {\n delete TypeConverterManager._converters[fullConverterName];\n }\n }\n\n public static getConverter(\n typename: string,\n converterName?: string\n ): TypeConverter {\n const fullConverterName = TypeConverterManager.getFullConverterName(\n typename,\n converterName\n );\n\n if (TypeConverterManager._converters.hasOwnProperty(fullConverterName))\n return TypeConverterManager._converters[fullConverterName];\n\n if (!TypeConverterManager._defaultTypeConverter) {\n TypeConverterManager._defaultTypeConverter = new StringTypeConverter();\n }\n return TypeConverterManager._defaultTypeConverter;\n }\n}\n"]}
@@ -15,6 +15,7 @@
15
15
  * @deprecated in 4.11.0. Use {@link https://itwinui.bentley.com/docs/datepicker iTwinUI date picker} instead.
16
16
  */
17
17
  export class IntlFormatter {
18
+ _intlFormatter;
18
19
  constructor(_intlFormatter) {
19
20
  this._intlFormatter = _intlFormatter;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IntlFormatter.js","sourceRoot":"","sources":["../../../src/components-react/datepicker/IntlFormatter.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAIH;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACxB,YAAoB,cAAoC;QAApC,mBAAc,GAAd,cAAc,CAAsB;IAAG,CAAC;IAE5D,IAAW,SAAS;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,+DAA+D;YAC/D,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;gBACvD,OAAO,EAAE,OAAO,CAAC,+BAA+B;gBAChD,IAAI,EAAE,SAAS,CAAC,0BAA0B;gBAC1C,KAAK,EAAE,SAAS,CAAC,qDAAqD;gBACtE,GAAG,EAAE,SAAS,CAAC,0BAA0B;gBACzC,IAAI,EAAE,SAAS,CAAC,0BAA0B;gBAC1C,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,SAAS,CAAC,0BAA0B;gBAC5C,MAAM,EAAE,SAAS,CAAC,0BAA0B,CAAC,qBAAqB;gBAClE,4BAA4B;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,WAAW,CAAC,GAAS;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CAKF","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 Date\n */\n\nimport type { DateFormatter } from \"@itwin/appui-abstract\";\n\n/**\n * A basic class that allows user to provide an Intl.DateTimeFormat\n * that can be used to format the date and time display. If no format is\n * specified a default format will be used. This default implementation does not\n * support parsing, so when used by [[DatePickerPopup]] the edit field will be readonly. If\n * a parseData function is implemented then the edit field will be editable.\n * @alpha\n * @deprecated in 4.11.0. Use {@link https://itwinui.bentley.com/docs/datepicker iTwinUI date picker} instead.\n */\nexport class IntlFormatter implements DateFormatter {\n constructor(private _intlFormatter?: Intl.DateTimeFormat) {}\n\n public get formatter(): Intl.DateTimeFormat {\n if (!this._intlFormatter) {\n // https://tc39.es/ecma402/#sec-intl-datetimeformat-constructor\n this._intlFormatter = new Intl.DateTimeFormat(undefined, {\n weekday: \"short\" /* \"narrow\", \"short\", \"long\" */,\n year: \"numeric\" /* \"2-digit\", \"numeric\" */,\n month: \"2-digit\" /* \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" */,\n day: \"2-digit\" /* \"2-digit\", \"numeric\" */,\n hour: \"numeric\" /* \"2-digit\", \"numeric\" */,\n hour12: true,\n minute: \"numeric\" /* \"2-digit\", \"numeric\" */,\n second: \"numeric\" /* \"2-digit\", \"numeric\" */ /* \"short\", \"long\" */,\n /* timeZoneName:\t\"short\", */\n });\n }\n return this._intlFormatter;\n }\n\n public formateDate(day: Date) {\n return this.formatter.format(day);\n }\n\n // The default implementation does not currently support parsing. If a derived class supports parsing then the\n // parseDate function must be implemented.\n // parseDate(dateString: string): Date|undefined {}\n}\n"]}
1
+ {"version":3,"file":"IntlFormatter.js","sourceRoot":"","sources":["../../../src/components-react/datepicker/IntlFormatter.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAIH;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,cAAoC;QAApC,mBAAc,GAAd,cAAc,CAAsB;IAAG,CAAC;IAE5D,IAAW,SAAS;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,+DAA+D;YAC/D,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;gBACvD,OAAO,EAAE,OAAO,CAAC,+BAA+B;gBAChD,IAAI,EAAE,SAAS,CAAC,0BAA0B;gBAC1C,KAAK,EAAE,SAAS,CAAC,qDAAqD;gBACtE,GAAG,EAAE,SAAS,CAAC,0BAA0B;gBACzC,IAAI,EAAE,SAAS,CAAC,0BAA0B;gBAC1C,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,SAAS,CAAC,0BAA0B;gBAC5C,MAAM,EAAE,SAAS,CAAC,0BAA0B,CAAC,qBAAqB;gBAClE,4BAA4B;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,WAAW,CAAC,GAAS;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CAKF","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 Date\n */\n\nimport type { DateFormatter } from \"@itwin/appui-abstract\";\n\n/**\n * A basic class that allows user to provide an Intl.DateTimeFormat\n * that can be used to format the date and time display. If no format is\n * specified a default format will be used. This default implementation does not\n * support parsing, so when used by [[DatePickerPopup]] the edit field will be readonly. If\n * a parseData function is implemented then the edit field will be editable.\n * @alpha\n * @deprecated in 4.11.0. Use {@link https://itwinui.bentley.com/docs/datepicker iTwinUI date picker} instead.\n */\nexport class IntlFormatter implements DateFormatter {\n constructor(private _intlFormatter?: Intl.DateTimeFormat) {}\n\n public get formatter(): Intl.DateTimeFormat {\n if (!this._intlFormatter) {\n // https://tc39.es/ecma402/#sec-intl-datetimeformat-constructor\n this._intlFormatter = new Intl.DateTimeFormat(undefined, {\n weekday: \"short\" /* \"narrow\", \"short\", \"long\" */,\n year: \"numeric\" /* \"2-digit\", \"numeric\" */,\n month: \"2-digit\" /* \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" */,\n day: \"2-digit\" /* \"2-digit\", \"numeric\" */,\n hour: \"numeric\" /* \"2-digit\", \"numeric\" */,\n hour12: true,\n minute: \"numeric\" /* \"2-digit\", \"numeric\" */,\n second: \"numeric\" /* \"2-digit\", \"numeric\" */ /* \"short\", \"long\" */,\n /* timeZoneName:\t\"short\", */\n });\n }\n return this._intlFormatter;\n }\n\n public formateDate(day: Date) {\n return this.formatter.format(day);\n }\n\n // The default implementation does not currently support parsing. If a derived class supports parsing then the\n // parseDate function must be implemented.\n // parseDate(dateString: string): Date|undefined {}\n}\n"]}
@@ -15,32 +15,11 @@ import { PropertyEditorBase } from "./PropertyEditorManager.js";
15
15
  * @public
16
16
  */
17
17
  export class BooleanEditor extends React.PureComponent {
18
- constructor() {
19
- super(...arguments);
20
- this._isMounted = false;
21
- this._inputElement = React.createRef();
22
- this.state = {
23
- checkboxValue: false,
24
- };
25
- this._updateCheckboxValue = (e) => {
26
- if (this._isMounted) {
27
- const checkboxValue = !!e.target.checked;
28
- this.setState({
29
- checkboxValue,
30
- }, () => {
31
- if (this.props.propertyRecord && this.props.onCommit) {
32
- const propertyValue = this.getPropertyValueSync();
33
- if (propertyValue !== undefined) {
34
- this.props.onCommit({
35
- propertyRecord: this.props.propertyRecord,
36
- newValue: propertyValue,
37
- });
38
- }
39
- }
40
- });
41
- }
42
- };
43
- }
18
+ _isMounted = false;
19
+ _inputElement = React.createRef();
20
+ state = {
21
+ checkboxValue: false,
22
+ };
44
23
  async getPropertyValue() {
45
24
  return this.getPropertyValueSync();
46
25
  }
@@ -62,6 +41,24 @@ export class BooleanEditor extends React.PureComponent {
62
41
  get hasFocus() {
63
42
  return document.activeElement === this._inputElement.current;
64
43
  }
44
+ _updateCheckboxValue = (e) => {
45
+ if (this._isMounted) {
46
+ const checkboxValue = !!e.target.checked;
47
+ this.setState({
48
+ checkboxValue,
49
+ }, () => {
50
+ if (this.props.propertyRecord && this.props.onCommit) {
51
+ const propertyValue = this.getPropertyValueSync();
52
+ if (propertyValue !== undefined) {
53
+ this.props.onCommit({
54
+ propertyRecord: this.props.propertyRecord,
55
+ newValue: propertyValue,
56
+ });
57
+ }
58
+ }
59
+ });
60
+ }
61
+ };
65
62
  componentDidMount() {
66
63
  this._isMounted = true;
67
64
  this.setStateFromProps();
@@ -1 +1 @@
1
- {"version":3,"file":"BooleanEditor.js","sourceRoot":"","sources":["../../../src/components-react/editors/BooleanEditor.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,sBAAsB,CAAC;AAC9B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE;;GAEG;AACH,MAAM,OAAO,aACX,SAAQ,KAAK,CAAC,aAAsD;IADtE;;QAIU,eAAU,GAAG,KAAK,CAAC;QACnB,kBAAa,GAAG,KAAK,CAAC,SAAS,EAAoB,CAAC;QAEnC,UAAK,GAAiC;YAC7D,aAAa,EAAE,KAAK;SACrB,CAAC;QA6BM,yBAAoB,GAAG,CAAC,CAAsC,EAAE,EAAE;YACxE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAEzC,IAAI,CAAC,QAAQ,CACX;oBACE,aAAa;iBACd,EACD,GAAG,EAAE;oBACH,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACrD,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAClD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;4BAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gCAClB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;gCACzC,QAAQ,EAAE,aAAa;6BACxB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IA6DJ,CAAC;IA7GQ,KAAK,CAAC,gBAAgB;QAC3B,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACrC,CAAC;IAEO,oBAAoB;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACzC,IAAI,aAAwC,CAAC;QAE7C,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS,EAAE,CAAC;YACzE,aAAa,GAAG;gBACd,WAAW,EAAE,mBAAmB,CAAC,SAAS;gBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;gBAC/B,YAAY,EAAE,EAAE;aACjB,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC/D,CAAC;IAyBe,iBAAiB;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEe,oBAAoB;QAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACA,kBAAkB,CAAC,SAA8B;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;YAC3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IACE,cAAc;YACd,cAAc,CAAC,KAAK,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS,EAClE,CAAC;YACD,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,aAAa,GAAG,cAAyB,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,UAAU;YACjB,IAAI,CAAC,QAAQ,CAAC;gBACZ,aAAa;aACd,CAAC,CAAC;IACP,CAAC;IAEe,MAAM;QACpB,MAAM,SAAS,GAAG,UAAU,CAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAEzC,OAAO,CACL,oBAAC,QAAQ,IACP,GAAG,EAAE,IAAI,CAAC,aAAa,EACvB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EACzB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EACnC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC9B,QAAQ,EACN,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU;gBACrC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU,iBAE3B,4BAA4B,GAC9B,CACb,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3D,IAAoB,oBAAoB;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,oBAAC,aAAa,OAAG,CAAC;IAC3B,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyEditors\n */\n\nimport \"./BooleanEditor.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport type { PropertyEditorProps, TypeEditor } from \"./EditorContainer.js\";\nimport { PropertyEditorBase } from \"./PropertyEditorManager.js\";\n\n/** @internal */\ninterface BooleanEditorState {\n checkboxValue: boolean;\n}\n\n/** BooleanEditor React component that is a property editor with checkbox input\n * @public\n */\nexport class BooleanEditor\n extends React.PureComponent<PropertyEditorProps, BooleanEditorState>\n implements TypeEditor\n{\n private _isMounted = false;\n private _inputElement = React.createRef<HTMLInputElement>();\n\n public override readonly state: Readonly<BooleanEditorState> = {\n checkboxValue: false,\n };\n\n public async getPropertyValue(): Promise<PropertyValue | undefined> {\n return this.getPropertyValueSync();\n }\n\n private getPropertyValueSync(): PropertyValue | undefined {\n const record = this.props.propertyRecord;\n let propertyValue: PropertyValue | undefined;\n\n if (record && record.value.valueFormat === PropertyValueFormat.Primitive) {\n propertyValue = {\n valueFormat: PropertyValueFormat.Primitive,\n value: this.state.checkboxValue,\n displayValue: \"\",\n };\n }\n\n return propertyValue;\n }\n\n public get htmlElement(): HTMLElement | null {\n return this._inputElement.current;\n }\n\n public get hasFocus(): boolean {\n return document.activeElement === this._inputElement.current;\n }\n\n private _updateCheckboxValue = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (this._isMounted) {\n const checkboxValue = !!e.target.checked;\n\n this.setState(\n {\n checkboxValue,\n },\n () => {\n if (this.props.propertyRecord && this.props.onCommit) {\n const propertyValue = this.getPropertyValueSync();\n if (propertyValue !== undefined) {\n this.props.onCommit({\n propertyRecord: this.props.propertyRecord,\n newValue: propertyValue,\n });\n }\n }\n }\n );\n }\n };\n\n public override componentDidMount() {\n this._isMounted = true;\n this.setStateFromProps();\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n }\n\n /** @internal */\n public override componentDidUpdate(prevProps: PropertyEditorProps) {\n if (this.props.propertyRecord !== prevProps.propertyRecord) {\n this.setStateFromProps();\n }\n }\n\n private setStateFromProps() {\n const { propertyRecord } = this.props;\n let checkboxValue = false;\n\n if (\n propertyRecord &&\n propertyRecord.value.valueFormat === PropertyValueFormat.Primitive\n ) {\n const primitiveValue = propertyRecord.value.value;\n checkboxValue = primitiveValue as boolean;\n }\n\n if (this._isMounted)\n this.setState({\n checkboxValue,\n });\n }\n\n public override render() {\n const className = classnames(\n \"components-cell-editor\",\n \"components-boolean-editor\",\n this.props.className\n );\n const checked = this.state.checkboxValue;\n\n return (\n <Checkbox\n ref={this._inputElement}\n onBlur={this.props.onBlur}\n className={className}\n style={this.props.style}\n checked={checked}\n onChange={this._updateCheckboxValue}\n autoFocus={this.props.setFocus} // eslint-disable-line jsx-a11y/no-autofocus\n disabled={\n this.props.propertyRecord?.isDisabled ||\n this.props.propertyRecord?.isReadonly\n }\n data-testid=\"components-checkbox-editor\"\n ></Checkbox>\n );\n }\n}\n\n/** Boolean Property Editor registered for the \"bool\" and \"boolean\" type names.\n * It uses the [[BooleanEditor]] React component.\n * @public\n */\nexport class BooleanPropertyEditor extends PropertyEditorBase {\n public override get containerHandlesBlur(): boolean {\n return false;\n }\n\n public get reactNode(): React.ReactNode {\n return <BooleanEditor />;\n }\n}\n"]}
1
+ {"version":3,"file":"BooleanEditor.js","sourceRoot":"","sources":["../../../src/components-react/editors/BooleanEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyEditors\n */\n\nimport \"./BooleanEditor.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport type { PropertyEditorProps, TypeEditor } from \"./EditorContainer.js\";\nimport { PropertyEditorBase } from \"./PropertyEditorManager.js\";\n\n/** @internal */\ninterface BooleanEditorState {\n checkboxValue: boolean;\n}\n\n/** BooleanEditor React component that is a property editor with checkbox input\n * @public\n */\nexport class BooleanEditor\n extends React.PureComponent<PropertyEditorProps, BooleanEditorState>\n implements TypeEditor\n{\n private _isMounted = false;\n private _inputElement = React.createRef<HTMLInputElement>();\n\n public override readonly state: Readonly<BooleanEditorState> = {\n checkboxValue: false,\n };\n\n public async getPropertyValue(): Promise<PropertyValue | undefined> {\n return this.getPropertyValueSync();\n }\n\n private getPropertyValueSync(): PropertyValue | undefined {\n const record = this.props.propertyRecord;\n let propertyValue: PropertyValue | undefined;\n\n if (record && record.value.valueFormat === PropertyValueFormat.Primitive) {\n propertyValue = {\n valueFormat: PropertyValueFormat.Primitive,\n value: this.state.checkboxValue,\n displayValue: \"\",\n };\n }\n\n return propertyValue;\n }\n\n public get htmlElement(): HTMLElement | null {\n return this._inputElement.current;\n }\n\n public get hasFocus(): boolean {\n return document.activeElement === this._inputElement.current;\n }\n\n private _updateCheckboxValue = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (this._isMounted) {\n const checkboxValue = !!e.target.checked;\n\n this.setState(\n {\n checkboxValue,\n },\n () => {\n if (this.props.propertyRecord && this.props.onCommit) {\n const propertyValue = this.getPropertyValueSync();\n if (propertyValue !== undefined) {\n this.props.onCommit({\n propertyRecord: this.props.propertyRecord,\n newValue: propertyValue,\n });\n }\n }\n }\n );\n }\n };\n\n public override componentDidMount() {\n this._isMounted = true;\n this.setStateFromProps();\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n }\n\n /** @internal */\n public override componentDidUpdate(prevProps: PropertyEditorProps) {\n if (this.props.propertyRecord !== prevProps.propertyRecord) {\n this.setStateFromProps();\n }\n }\n\n private setStateFromProps() {\n const { propertyRecord } = this.props;\n let checkboxValue = false;\n\n if (\n propertyRecord &&\n propertyRecord.value.valueFormat === PropertyValueFormat.Primitive\n ) {\n const primitiveValue = propertyRecord.value.value;\n checkboxValue = primitiveValue as boolean;\n }\n\n if (this._isMounted)\n this.setState({\n checkboxValue,\n });\n }\n\n public override render() {\n const className = classnames(\n \"components-cell-editor\",\n \"components-boolean-editor\",\n this.props.className\n );\n const checked = this.state.checkboxValue;\n\n return (\n <Checkbox\n ref={this._inputElement}\n onBlur={this.props.onBlur}\n className={className}\n style={this.props.style}\n checked={checked}\n onChange={this._updateCheckboxValue}\n autoFocus={this.props.setFocus} // eslint-disable-line jsx-a11y/no-autofocus\n disabled={\n this.props.propertyRecord?.isDisabled ||\n this.props.propertyRecord?.isReadonly\n }\n data-testid=\"components-checkbox-editor\"\n ></Checkbox>\n );\n }\n}\n\n/** Boolean Property Editor registered for the \"bool\" and \"boolean\" type names.\n * It uses the [[BooleanEditor]] React component.\n * @public\n */\nexport class BooleanPropertyEditor extends PropertyEditorBase {\n public override get containerHandlesBlur(): boolean {\n return false;\n }\n\n public get reactNode(): React.ReactNode {\n return <BooleanEditor />;\n }\n}\n"]}