@itwin/grouping-mapping-widget 0.16.0 → 0.17.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 (241) hide show
  1. package/lib/cjs/decorators/BboxDimensionsDecorator.js +14 -17
  2. package/lib/cjs/decorators/BboxDimensionsDecorator.js.map +1 -1
  3. package/lib/cjs/formula/FormulaDataTypeResolver.js +1 -2
  4. package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -1
  5. package/lib/cjs/formula/FormulaFunctionProvider.js +2 -3
  6. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  7. package/lib/cjs/test/GroupingMappingCustomUI.test.js +1 -2
  8. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  9. package/lib/cjs/test/PropertyFieldsHelpers.js +4 -7
  10. package/lib/cjs/test/PropertyFieldsHelpers.js.map +1 -1
  11. package/lib/cjs/test/QueryBuilder.test.js +3 -4
  12. package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
  13. package/lib/cjs/widget/GroupingMappingWidget.d.ts +2 -2
  14. package/lib/cjs/widget/GroupingMappingWidget.js +1 -3
  15. package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -1
  16. package/lib/cjs/widget/components/ActionPanel.scss +2 -3
  17. package/lib/cjs/widget/components/BlockingOverlay.scss +4 -5
  18. package/lib/cjs/widget/components/CalculatedPropertyAction.js +3 -4
  19. package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -1
  20. package/lib/cjs/widget/components/CalculatedPropertyAction.scss +1 -2
  21. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js +6 -8
  22. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
  23. package/lib/cjs/widget/components/CalculatedPropertyActionWithVisuals.scss +1 -2
  24. package/lib/cjs/widget/components/ConfirmMappingsImport.js +4 -5
  25. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  26. package/lib/cjs/widget/components/ConfirmMappingsImport.scss +7 -8
  27. package/lib/cjs/widget/components/CustomCalculationAction.js +10 -14
  28. package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -1
  29. package/lib/cjs/widget/components/CustomCalculationAction.scss +1 -2
  30. package/lib/cjs/widget/components/DeleteModal.js +1 -1
  31. package/lib/cjs/widget/components/DeleteModal.js.map +1 -1
  32. package/lib/cjs/widget/components/DeleteModal.scss +1 -2
  33. package/lib/cjs/widget/components/GroupAction.js +5 -7
  34. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  35. package/lib/cjs/widget/components/GroupAction.scss +0 -1
  36. package/lib/cjs/widget/components/GroupColorLegend.scss +0 -1
  37. package/lib/cjs/widget/components/GroupColorToggle.d.ts +2 -2
  38. package/lib/cjs/widget/components/GroupColorToggle.js.map +1 -1
  39. package/lib/cjs/widget/components/GroupDetails.js +1 -1
  40. package/lib/cjs/widget/components/GroupDetails.js.map +1 -1
  41. package/lib/cjs/widget/components/GroupDetailsStep.scss +1 -2
  42. package/lib/cjs/widget/components/GroupMenuActions.scss +1 -2
  43. package/lib/cjs/widget/components/GroupPropertyAction.js +5 -6
  44. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  45. package/lib/cjs/widget/components/GroupPropertyAction.scss +13 -16
  46. package/lib/cjs/widget/components/GroupPropertyUtils.js +2 -3
  47. package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
  48. package/lib/cjs/widget/components/Grouping.js +3 -4
  49. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  50. package/lib/cjs/widget/components/Grouping.scss +9 -11
  51. package/lib/cjs/widget/components/GroupingMapping.js +16 -20
  52. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  53. package/lib/cjs/widget/components/GroupingMapping.scss +2 -3
  54. package/lib/cjs/widget/components/GroupingMappingContext.js +9 -13
  55. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -1
  56. package/lib/cjs/widget/components/GroupingMappingRouter.js +5 -5
  57. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -1
  58. package/lib/cjs/widget/components/GroupsAddButton.scss +1 -2
  59. package/lib/cjs/widget/components/GroupsVisualization.js +1 -1
  60. package/lib/cjs/widget/components/GroupsVisualization.js.map +1 -1
  61. package/lib/cjs/widget/components/GroupsVisualization.scss +3 -3
  62. package/lib/cjs/widget/components/GroupsVisualizationActions.scss +0 -1
  63. package/lib/cjs/widget/components/HorizontalTile.js +4 -1
  64. package/lib/cjs/widget/components/HorizontalTile.js.map +1 -1
  65. package/lib/cjs/widget/components/HorizontalTile.scss +16 -15
  66. package/lib/cjs/widget/components/Mapping.js +27 -31
  67. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  68. package/lib/cjs/widget/components/Mapping.scss +6 -12
  69. package/lib/cjs/widget/components/MappingAction.js +7 -9
  70. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  71. package/lib/cjs/widget/components/MappingAction.scss +1 -2
  72. package/lib/cjs/widget/components/MappingImportWizardModal.js +3 -2
  73. package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -1
  74. package/lib/cjs/widget/components/MappingImportWizardModal.scss +4 -5
  75. package/lib/cjs/widget/components/PropertyAction.js +4 -5
  76. package/lib/cjs/widget/components/PropertyAction.js.map +1 -1
  77. package/lib/cjs/widget/components/PropertyMenu.js +3 -3
  78. package/lib/cjs/widget/components/PropertyMenu.js.map +1 -1
  79. package/lib/cjs/widget/components/PropertyMenu.scss +2 -2
  80. package/lib/cjs/widget/components/PropertyMenuWithVisualization.scss +1 -2
  81. package/lib/cjs/widget/components/PropertyTable.d.ts +1 -1
  82. package/lib/cjs/widget/components/PropertyTable.js +3 -4
  83. package/lib/cjs/widget/components/PropertyTable.js.map +1 -1
  84. package/lib/cjs/widget/components/PropertyTable.scss +1 -2
  85. package/lib/cjs/widget/components/QueryBuilder.js +19 -29
  86. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  87. package/lib/cjs/widget/components/QueryBuilderCustomUI.js +1 -1
  88. package/lib/cjs/widget/components/QueryBuilderCustomUI.js.map +1 -1
  89. package/lib/cjs/widget/components/QueryBuilderStep.scss +1 -2
  90. package/lib/cjs/widget/components/SelectIModel.scss +0 -1
  91. package/lib/cjs/widget/components/SelectITwin.js +1 -1
  92. package/lib/cjs/widget/components/SelectITwin.js.map +1 -1
  93. package/lib/cjs/widget/components/SelectITwin.scss +1 -2
  94. package/lib/cjs/widget/components/SelectMapping.scss +0 -1
  95. package/lib/cjs/widget/components/SortableHorizontalTile.js +2 -1
  96. package/lib/cjs/widget/components/SortableHorizontalTile.js.map +1 -1
  97. package/lib/cjs/widget/components/StatusIcon.d.ts +5 -6
  98. package/lib/cjs/widget/components/StatusIcon.scss +4 -8
  99. package/lib/cjs/widget/components/ToggleGroupVisibility.scss +1 -2
  100. package/lib/cjs/widget/components/WidgetHeader.js +1 -1
  101. package/lib/cjs/widget/components/WidgetHeader.js.map +1 -1
  102. package/lib/cjs/widget/components/WidgetHeader.scss +4 -12
  103. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +1 -1
  104. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  105. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  106. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  107. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.scss +1 -2
  108. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +1 -1
  109. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  110. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.scss +2 -3
  111. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.scss +2 -3
  112. package/lib/cjs/widget/components/groupsHelpers.js +1 -2
  113. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -1
  114. package/lib/cjs/widget/components/utils.scss +1 -4
  115. package/lib/cjs/widget/components/viewerUtils.js +1 -2
  116. package/lib/cjs/widget/components/viewerUtils.js.map +1 -1
  117. package/lib/cjs/widget/hooks/useFetchData.js +1 -1
  118. package/lib/cjs/widget/hooks/useFetchData.js.map +1 -1
  119. package/lib/cjs/widget/hooks/useFormulaValidation.js +1 -2
  120. package/lib/cjs/widget/hooks/useFormulaValidation.js.map +1 -1
  121. package/lib/esm/decorators/BboxDimensionsDecorator.js +14 -17
  122. package/lib/esm/decorators/BboxDimensionsDecorator.js.map +1 -1
  123. package/lib/esm/formula/FormulaDataTypeResolver.js +1 -2
  124. package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -1
  125. package/lib/esm/formula/FormulaFunctionProvider.js +2 -3
  126. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  127. package/lib/esm/test/GroupingMappingCustomUI.test.js +1 -2
  128. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  129. package/lib/esm/test/PropertyFieldsHelpers.js +4 -7
  130. package/lib/esm/test/PropertyFieldsHelpers.js.map +1 -1
  131. package/lib/esm/test/QueryBuilder.test.js +3 -4
  132. package/lib/esm/test/QueryBuilder.test.js.map +1 -1
  133. package/lib/esm/widget/GroupingMappingWidget.d.ts +2 -2
  134. package/lib/esm/widget/GroupingMappingWidget.js +1 -3
  135. package/lib/esm/widget/GroupingMappingWidget.js.map +1 -1
  136. package/lib/esm/widget/components/ActionPanel.scss +2 -3
  137. package/lib/esm/widget/components/BlockingOverlay.scss +4 -5
  138. package/lib/esm/widget/components/CalculatedPropertyAction.js +4 -5
  139. package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -1
  140. package/lib/esm/widget/components/CalculatedPropertyAction.scss +1 -2
  141. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js +7 -9
  142. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.js.map +1 -1
  143. package/lib/esm/widget/components/CalculatedPropertyActionWithVisuals.scss +1 -2
  144. package/lib/esm/widget/components/ConfirmMappingsImport.js +4 -5
  145. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  146. package/lib/esm/widget/components/ConfirmMappingsImport.scss +7 -8
  147. package/lib/esm/widget/components/CustomCalculationAction.js +11 -15
  148. package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -1
  149. package/lib/esm/widget/components/CustomCalculationAction.scss +1 -2
  150. package/lib/esm/widget/components/DeleteModal.js +2 -2
  151. package/lib/esm/widget/components/DeleteModal.js.map +1 -1
  152. package/lib/esm/widget/components/DeleteModal.scss +1 -2
  153. package/lib/esm/widget/components/GroupAction.js +5 -7
  154. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  155. package/lib/esm/widget/components/GroupAction.scss +0 -1
  156. package/lib/esm/widget/components/GroupColorLegend.scss +0 -1
  157. package/lib/esm/widget/components/GroupColorToggle.d.ts +2 -2
  158. package/lib/esm/widget/components/GroupColorToggle.js.map +1 -1
  159. package/lib/esm/widget/components/GroupDetails.js +2 -2
  160. package/lib/esm/widget/components/GroupDetails.js.map +1 -1
  161. package/lib/esm/widget/components/GroupDetailsStep.scss +1 -2
  162. package/lib/esm/widget/components/GroupMenuActions.scss +1 -2
  163. package/lib/esm/widget/components/GroupPropertyAction.js +6 -7
  164. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  165. package/lib/esm/widget/components/GroupPropertyAction.scss +13 -16
  166. package/lib/esm/widget/components/GroupPropertyUtils.js +2 -3
  167. package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
  168. package/lib/esm/widget/components/Grouping.js +4 -5
  169. package/lib/esm/widget/components/Grouping.js.map +1 -1
  170. package/lib/esm/widget/components/Grouping.scss +9 -11
  171. package/lib/esm/widget/components/GroupingMapping.js +16 -20
  172. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  173. package/lib/esm/widget/components/GroupingMapping.scss +2 -3
  174. package/lib/esm/widget/components/GroupingMappingContext.js +9 -13
  175. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -1
  176. package/lib/esm/widget/components/GroupingMappingRouter.js +5 -5
  177. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -1
  178. package/lib/esm/widget/components/GroupsAddButton.scss +1 -2
  179. package/lib/esm/widget/components/GroupsVisualization.js +1 -1
  180. package/lib/esm/widget/components/GroupsVisualization.js.map +1 -1
  181. package/lib/esm/widget/components/GroupsVisualization.scss +3 -3
  182. package/lib/esm/widget/components/GroupsVisualizationActions.scss +0 -1
  183. package/lib/esm/widget/components/HorizontalTile.js +5 -2
  184. package/lib/esm/widget/components/HorizontalTile.js.map +1 -1
  185. package/lib/esm/widget/components/HorizontalTile.scss +16 -15
  186. package/lib/esm/widget/components/Mapping.js +28 -32
  187. package/lib/esm/widget/components/Mapping.js.map +1 -1
  188. package/lib/esm/widget/components/Mapping.scss +6 -12
  189. package/lib/esm/widget/components/MappingAction.js +8 -10
  190. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  191. package/lib/esm/widget/components/MappingAction.scss +1 -2
  192. package/lib/esm/widget/components/MappingImportWizardModal.js +3 -2
  193. package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -1
  194. package/lib/esm/widget/components/MappingImportWizardModal.scss +4 -5
  195. package/lib/esm/widget/components/PropertyAction.js +4 -5
  196. package/lib/esm/widget/components/PropertyAction.js.map +1 -1
  197. package/lib/esm/widget/components/PropertyMenu.js +3 -3
  198. package/lib/esm/widget/components/PropertyMenu.js.map +1 -1
  199. package/lib/esm/widget/components/PropertyMenu.scss +2 -2
  200. package/lib/esm/widget/components/PropertyMenuWithVisualization.scss +1 -2
  201. package/lib/esm/widget/components/PropertyTable.d.ts +1 -1
  202. package/lib/esm/widget/components/PropertyTable.js +3 -4
  203. package/lib/esm/widget/components/PropertyTable.js.map +1 -1
  204. package/lib/esm/widget/components/PropertyTable.scss +1 -2
  205. package/lib/esm/widget/components/QueryBuilder.js +19 -29
  206. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  207. package/lib/esm/widget/components/QueryBuilderCustomUI.js +1 -1
  208. package/lib/esm/widget/components/QueryBuilderCustomUI.js.map +1 -1
  209. package/lib/esm/widget/components/QueryBuilderStep.scss +1 -2
  210. package/lib/esm/widget/components/SelectIModel.scss +0 -1
  211. package/lib/esm/widget/components/SelectITwin.js +2 -2
  212. package/lib/esm/widget/components/SelectITwin.js.map +1 -1
  213. package/lib/esm/widget/components/SelectITwin.scss +1 -2
  214. package/lib/esm/widget/components/SelectMapping.scss +0 -1
  215. package/lib/esm/widget/components/SortableHorizontalTile.js +2 -1
  216. package/lib/esm/widget/components/SortableHorizontalTile.js.map +1 -1
  217. package/lib/esm/widget/components/StatusIcon.d.ts +5 -6
  218. package/lib/esm/widget/components/StatusIcon.scss +4 -8
  219. package/lib/esm/widget/components/ToggleGroupVisibility.scss +1 -2
  220. package/lib/esm/widget/components/WidgetHeader.js +2 -2
  221. package/lib/esm/widget/components/WidgetHeader.js.map +1 -1
  222. package/lib/esm/widget/components/WidgetHeader.scss +4 -12
  223. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +1 -1
  224. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  225. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js +2 -2
  226. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  227. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.scss +1 -2
  228. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +1 -1
  229. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  230. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.scss +2 -3
  231. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.scss +2 -3
  232. package/lib/esm/widget/components/groupsHelpers.js +1 -2
  233. package/lib/esm/widget/components/groupsHelpers.js.map +1 -1
  234. package/lib/esm/widget/components/utils.scss +1 -4
  235. package/lib/esm/widget/components/viewerUtils.js +1 -2
  236. package/lib/esm/widget/components/viewerUtils.js.map +1 -1
  237. package/lib/esm/widget/hooks/useFetchData.js +1 -1
  238. package/lib/esm/widget/hooks/useFetchData.js.map +1 -1
  239. package/lib/esm/widget/hooks/useFormulaValidation.js +1 -2
  240. package/lib/esm/widget/hooks/useFormulaValidation.js.map +1 -1
  241. package/package.json +32 -30
@@ -1 +1 @@
1
- {"version":3,"file":"BboxDimensionsDecorator.js","sourceRoot":"","sources":["../../../src/decorators/BboxDimensionsDecorator.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*--------------------------------------------------------------------------------------------*/\nimport type {\n CurvePrimitive,\n GeometryQuery} from \"@itwin/core-geometry\";\nimport {\n Angle,\n Arc3d,\n Box,\n CurveChainWithDistanceIndex,\n IndexedPolyface,\n IndexedPolyfaceVisitor,\n LineSegment3d,\n LineString3d,\n Loop,\n Path,\n Point3d,\n PolyfaceBuilder,\n Range3d,\n StrokeOptions,\n Transform,\n YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport {\n ColorByName,\n ColorDef,\n LinePixels,\n Placement3d,\n QueryBinder,\n QueryRowFormat,\n} from \"@itwin/core-common\";\nimport type {\n DecorateContext,\n Decorator,\n GraphicBuilder,\n RenderGraphic} from \"@itwin/core-frontend\";\nimport {\n GraphicBranch,\n GraphicType,\n IModelApp,\n Marker,\n} from \"@itwin/core-frontend\";\n\nexport enum BboxDimension {\n BoundingBoxShortestEdgeLength = \"Shortest Edge Length\",\n BoundingBoxIntermediateEdgeLength = \"Intermediate Edge Length\",\n BoundingBoxLongestEdgeLength = \"Longest Edge Length\",\n BoundingBoxShortestFaceDiagonalLength = \"Shortest Face Diagonal Length\",\n BoundingBoxIntermediateFaceDiagonalLength = \"Intermediate Face Diagonal Length\",\n BoundingBoxLongestFaceDiagonalLength = \"Longest Face Diagonal Length\",\n BoundingBoxDiagonalLength = \"Diagonal Length\",\n // SmallestFaceArea = \"Smallest Face Area\",\n // IntermediateFaceArea = \"Intermediate Face Area\",\n // LargestFaceArea = \"Largest Face Area\",\n // Volume = \"Volume\"\n}\n\ninterface CustomGeometryQuery {\n geometry: GeometryQuery;\n color: ColorDef;\n fill: boolean;\n fillColor: ColorDef;\n lineThickness: number;\n edges: boolean;\n linePixels: LinePixels;\n}\n\ninterface CustomPoint {\n point: Point3d;\n color: ColorDef;\n fill: boolean;\n lineThickness: number;\n}\n\ninterface SpatialElementQueryResult {\n bBoxHigh: Point3d;\n bBoxLow: Point3d;\n yaw: number;\n pitch: number;\n roll: number;\n origin: Point3d;\n}\n\ninterface InferredSpatialData {\n pointMappings: Map<BboxDimension, [number, number]>;\n placement: Placement3d;\n}\n\nexport class BboxDimensionsDecorator implements Decorator {\n private instance: InferredSpatialData | undefined;\n private graphics: RenderGraphic | undefined;\n private points: CustomPoint[] = [];\n private shapes: CustomGeometryQuery[] = [];\n private markers: Marker[] = [];\n\n private fill = false;\n private shapeColor: ColorDef = ColorDef.fromTbgr(\n ColorDef.withTransparency(ColorDef.create(ColorByName.cyan).tbgr, 200)\n );\n private pointColor: ColorDef = ColorDef.white;\n private lineColor: ColorDef = ColorDef.red;\n private fillColor: ColorDef = ColorDef.white;\n private shapeThickness = 1;\n private pointThickness = 8;\n private lineThickness = 4;\n private edges = true;\n private linePixels = LinePixels.Solid;\n\n /** Clear the current context. */\n public clearContext(): void {\n this.points = [];\n this.shapes = [];\n this.markers = [];\n this.graphics = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n\n /** Set the active instance used by the decorator. */\n public async setContext(instanceId: string): Promise<boolean> {\n // get locating info on the requested instance\n const query = `SELECT bBoxHigh,bBoxLow,yaw,pitch,roll,origin FROM BisCore.SpatialElement WHERE ECInstanceId = ?`;\n\n if (\n !IModelApp.viewManager.selectedView ||\n !IModelApp.viewManager.selectedView.iModel\n ) {\n return false;\n }\n\n const params = new QueryBinder().bindId(1, instanceId);\n const queryIterable = IModelApp.viewManager.selectedView?.iModel.query(\n query,\n params,\n { rowFormat: QueryRowFormat.UseJsPropertyNames }\n );\n\n const results: SpatialElementQueryResult[] = [];\n for await (const row of queryIterable) {\n results.push(row);\n }\n // if no results or more than one abort\n if (results.length !== 1) {\n // TODO: maybe report a warning or something\n return false;\n }\n\n // validate result\n const elem = results[0];\n if (!this.validateQueryResult(elem)) {\n return false;\n } else {\n this.instance = this.inferSpatialData(elem);\n return true;\n }\n }\n\n /** Get the calculated spatial lengths for all possible dimensions. */\n public getInferredSpatialData(): Map<BboxDimension, number> | undefined {\n if (!this.instance) {\n return;\n }\n\n // calculate each dimension\n const data = new Map<BboxDimension, number>();\n const corners = this.instance.placement.getWorldCorners().points;\n const mappings = this.instance.pointMappings;\n for (const dimKey in BboxDimension) {\n if (!Object.prototype.hasOwnProperty.call(BboxDimension, dimKey))\n continue;\n const dim = BboxDimension[dimKey as keyof typeof BboxDimension];\n if (mappings.has(dim)) {\n const points = mappings.get(dim);\n if (points) {\n data.set(dim, corners[points[0]].distance(corners[points[1]]));\n }\n }\n }\n\n return data;\n }\n\n /** Command to draw the BBox. */\n public drawContext(dim: BboxDimension): boolean {\n // check if valid instance set\n if (!this.instance) {\n return false;\n }\n this.clearContext();\n\n // add geometry to decorator\n const polyface = this.buildPolyface(\n this.instance.placement.bbox,\n this.instance.placement.transform\n );\n this.addGeometry(polyface);\n const [line, points] = this.buildLine(\n this.instance.placement.bbox,\n dim,\n this.instance.placement.transform\n );\n this.addLine(line);\n this.addPoints(points);\n\n return true;\n }\n\n /** Generates new graphics if needed, and adds them to the scene. */\n public decorate(context: DecorateContext): void {\n // const overrides = new ViewFlagOverrides();\n // overrides.setShowVisibleEdges(true);\n // overrides.setApplyLighting(true);\n const branch = new GraphicBranch(false);\n\n // branch.viewFlagOverrides.copyFrom(overrides);\n\n // context.viewFlags.visibleEdges = true;\n if (!this.graphics) {\n this.graphics = this.createGraphics(context);\n }\n\n if (this.graphics) {\n branch.add(this.graphics);\n }\n\n const graphic = context.createBranch(branch, Transform.identity);\n context.addDecoration(GraphicType.WorldOverlay, graphic);\n\n this.markers.forEach((marker) => {\n marker.addDecoration(context);\n });\n }\n\n // #region Helper Functions\n\n /** Calculate all BBox dimensions and properties and save. */\n private inferSpatialData(\n elem: SpatialElementQueryResult\n ): InferredSpatialData {\n // build placement from result\n const origin = new Point3d(elem.origin.x, elem.origin.y, elem.origin.z);\n const bBoxLow = new Point3d(elem.bBoxLow.x, elem.bBoxLow.y, elem.bBoxLow.z);\n const bBoxHigh = new Point3d(\n elem.bBoxHigh.x,\n elem.bBoxHigh.y,\n elem.bBoxHigh.z\n );\n const range = Range3d.create(bBoxLow, bBoxHigh);\n const ypra = new YawPitchRollAngles(\n Angle.createDegrees(elem.yaw),\n Angle.createDegrees(elem.pitch),\n Angle.createDegrees(elem.roll)\n );\n const placement = new Placement3d(origin, ypra, range);\n\n // determine dimension size ordering\n const pointMappings = new Map<BboxDimension, [number, number]>();\n pointMappings.set(BboxDimension.BoundingBoxDiagonalLength, [0, 7]);\n const corners = placement.getWorldCorners();\n const d01 = corners.distance(0, 1);\n const d02 = corners.distance(0, 2);\n const d04 = corners.distance(0, 4);\n if (d01 >= d02 && d02 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d01 >= d04 && d04 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d04 >= d02 && d02 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d04 >= d01 && d01 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d02 >= d01 && d01 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else if (d02 >= d04 && d04 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else {\n // Unreachable case\n }\n\n return { placement, pointMappings };\n }\n\n /** Validate if instance has all necessary properties. */\n private validateQueryResult(result: SpatialElementQueryResult): boolean {\n if (\n result?.bBoxHigh?.x !== undefined &&\n result?.bBoxHigh.y !== undefined &&\n result?.bBoxHigh.z !== undefined &&\n result?.bBoxLow?.x !== undefined &&\n result?.bBoxLow.y !== undefined &&\n result?.bBoxLow.z !== undefined &&\n result?.origin?.x !== undefined &&\n result?.origin.y !== undefined &&\n result?.origin.z !== undefined &&\n result?.yaw !== undefined &&\n result?.pitch !== undefined &&\n result?.roll !== undefined\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Takes a Bounding Box and builds a rectangular polyface.\n * @param bbox The desired Bounding Box.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The bounding box geometry.\n */\n private buildPolyface(bbox: Range3d, tf: Transform): IndexedPolyface {\n const options = StrokeOptions.createForCurves();\n options.needParams = false;\n options.needNormals = true;\n const builder = PolyfaceBuilder.create(options);\n const box = Box.createRange(bbox, true)?.cloneTransformed(tf);\n if (box) {\n builder.addBox(box);\n }\n return builder.claimPolyface(false);\n }\n\n /**\n * Build a Lone geometry based on specified dimension.\n * @param bbox The desired Bounding Box.\n * @param dim The desired dimension to draw.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The line geometry.\n */\n private buildLine(\n bbox: Range3d,\n dim: BboxDimension,\n tf: Transform\n ): [CurvePrimitive, Point3d[]] {\n // fallback scenario\n const fallback: [CurvePrimitive, Point3d[]] = [\n LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf),\n [bbox.low, bbox.high],\n ];\n if (!this.instance) {\n // TODO: probably should have some warning here...\n return fallback;\n }\n\n // otherwise return appropriate dimensions\n const corners = this.instance.placement.getWorldCorners().points;\n const targets = this.instance.pointMappings.get(dim);\n if (targets) {\n return [\n LineSegment3d.create(corners[targets[0]], corners[targets[1]]),\n [corners[targets[0]], corners[targets[1]]],\n ];\n } else {\n // TODO: probably should have some warning here...\n return fallback;\n }\n }\n\n /**\n * Configure and add points to the dectorator.\n * @param point Definition of the points.\n */\n public addPoints(points: Point3d[]) {\n for (const point of points) {\n const styledPoint: CustomPoint = {\n point,\n color: this.pointColor,\n fill: this.fill,\n lineThickness: this.pointThickness,\n };\n this.points.push(styledPoint);\n }\n }\n\n /**\n * Configure and add a line to the decorator.\n * Length of the line is displayed as a label in the center.\n * @param line Definition of the line.\n */\n private addLine(line: LineSegment3d | CurvePrimitive) {\n const styledGeometry: CustomGeometryQuery = {\n geometry: line,\n color: this.lineColor,\n fill: true,\n fillColor: this.fillColor,\n lineThickness: this.lineThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n\n const marker = new Marker(line.fractionToPoint(0.5), { x: 25, y: 25 });\n const label: HTMLDivElement = document.createElement(\"div\");\n label.textContent = `${line.quickLength().toFixed(3)}m`;\n label.style.backgroundColor = \"rgba(17,17,17,0.75)\";\n label.style.borderRadius = \"4px\";\n label.style.color = \"white\";\n label.style.padding = \"4px 8px\";\n marker.htmlElement = label;\n marker.visible = true;\n this.markers.push(marker);\n }\n\n /**\n * Configure and add a mesh to the decorator.\n * @param geometry Definition of the mesh.\n */\n private addGeometry(geometry: GeometryQuery) {\n const styledGeometry: CustomGeometryQuery = {\n geometry,\n color: this.shapeColor,\n fill: this.fill,\n fillColor: this.fillColor,\n lineThickness: this.shapeThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n }\n\n /**\n * Iterate through the geometry and point lists, extracting each geometry and point, along with their styles\n * Adding them to the graphic builder which then creates new graphics\n * @param context\n * @returns\n */\n private createGraphics(context: DecorateContext): RenderGraphic | undefined {\n // Specifying an Id for the graphics tells the display system that all of the geometry belongs to the same entity, so that it knows to make sure the edges draw on top of the surfaces.\n const builder = context.createGraphicBuilder(\n GraphicType.Scene,\n undefined,\n context.viewport.iModel.transientIds.next\n );\n // Read-only now\n // builder.wantNormals = true;\n this.points.forEach((styledPoint) => {\n builder.setSymbology(\n styledPoint.color,\n styledPoint.fill ? styledPoint.color : ColorDef.white,\n styledPoint.lineThickness\n );\n const point = styledPoint.point;\n builder.addPointString([point]);\n });\n this.shapes.forEach((styledGeometry) => {\n const geometry = styledGeometry.geometry;\n builder.setSymbology(\n styledGeometry.color,\n styledGeometry.fill ? styledGeometry.fillColor : styledGeometry.color,\n styledGeometry.lineThickness,\n styledGeometry.linePixels\n );\n this.createGraphicsForGeometry(geometry, styledGeometry.edges, builder);\n });\n const graphic = builder.finish();\n return graphic;\n }\n private createGraphicsForGeometry(\n geometry: GeometryQuery,\n wantEdges: boolean,\n builder: GraphicBuilder\n ) {\n if (geometry instanceof LineString3d) {\n builder.addLineString(geometry.points);\n } else if (geometry instanceof Loop) {\n builder.addLoop(geometry);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each loop edge/arc\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const curves = geometry.children;\n curves.forEach((value) => {\n if (value instanceof LineString3d) {\n let edges = value.points;\n const endPoint = value.pointAt(0);\n if (endPoint) {\n edges = edges.concat([endPoint]);\n }\n builder.addLineString(edges);\n } else if (value instanceof Arc3d) {\n builder.addArc(value, false, false);\n }\n });\n }\n } else if (geometry instanceof Path) {\n builder.addPath(geometry);\n } else if (geometry instanceof IndexedPolyface) {\n builder.addPolyface(geometry, false);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each facet edge\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const visitor = IndexedPolyfaceVisitor.create(geometry, 1);\n let flag = true;\n while (flag) {\n const numIndices = visitor.pointCount;\n for (let i = 0; i < numIndices - 1; i++) {\n const point1 = visitor.getPoint(i);\n const point2 = visitor.getPoint(i + 1);\n if (point1 && point2) {\n builder.addLineString([point1, point2]);\n }\n }\n flag = visitor.moveToNextFacet();\n }\n }\n } else if (geometry instanceof LineSegment3d) {\n const pointA = geometry.point0Ref;\n const pointB = geometry.point1Ref;\n const lineString = [pointA, pointB];\n builder.addLineString(lineString);\n } else if (geometry instanceof Arc3d) {\n builder.addArc(geometry, false, false);\n } else if (geometry instanceof CurveChainWithDistanceIndex) {\n this.createGraphicsForGeometry(geometry.path, wantEdges, builder);\n }\n }\n\n // #endregion\n}\n"]}
1
+ {"version":3,"file":"BboxDimensionsDecorator.js","sourceRoot":"","sources":["../../../src/decorators/BboxDimensionsDecorator.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,2BAA2B,EAC3B,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,eAAe,EACf,OAAO,EACP,aAAa,EACb,SAAS,EACT,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,aAAa,EACb,WAAW,EACX,SAAS,EACT,MAAM,GACP,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAN,IAAY,aAYX;AAZD,WAAY,aAAa;IACvB,uEAAsD,CAAA;IACtD,+EAA8D,CAAA;IAC9D,qEAAoD,CAAA;IACpD,wFAAuE,CAAA;IACvE,gGAA+E,CAAA;IAC/E,sFAAqE,CAAA;IACrE,8DAA6C,CAAA;IAC7C,2CAA2C;IAC3C,mDAAmD;IACnD,yCAAyC;IACzC,oBAAoB;AACtB,CAAC,EAZW,aAAa,KAAb,aAAa,QAYxB;AAiCD,MAAM,OAAO,uBAAuB;IAApC;QAGU,WAAM,GAAkB,EAAE,CAAC;QAC3B,WAAM,GAA0B,EAAE,CAAC;QACnC,YAAO,GAAa,EAAE,CAAC;QAEvB,SAAI,GAAG,KAAK,CAAC;QACb,eAAU,GAAa,QAAQ,CAAC,QAAQ,CAC9C,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CACvE,CAAC;QACM,eAAU,GAAa,QAAQ,CAAC,KAAK,CAAC;QACtC,cAAS,GAAa,QAAQ,CAAC,GAAG,CAAC;QACnC,cAAS,GAAa,QAAQ,CAAC,KAAK,CAAC;QACrC,mBAAc,GAAG,CAAC,CAAC;QACnB,mBAAc,GAAG,CAAC,CAAC;QACnB,kBAAa,GAAG,CAAC,CAAC;QAClB,UAAK,GAAG,IAAI,CAAC;QACb,eAAU,GAAG,UAAU,CAAC,KAAK,CAAC;QA+ftC,aAAa;IACf,CAAC;IA9fC,iCAAiC;IAC1B,YAAY;QACjB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,SAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;IACxD,CAAC;IAED,qDAAqD;IAC9C,KAAK,CAAC,UAAU,CAAC,UAAkB;QACxC,8CAA8C;QAC9C,MAAM,KAAK,GAAG,kGAAkG,CAAC;QAEjH,IACE,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY;YACnC,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAC1C;YACA,OAAO,KAAK,CAAC;SACd;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CACpE,KAAK,EACL,MAAM,EACN,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CACjD,CAAC;QAEF,MAAM,OAAO,GAAgC,EAAE,CAAC;QAChD,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa,EAAE;YACrC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnB;QACD,uCAAuC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,4CAA4C;YAC5C,OAAO,KAAK,CAAC;SACd;QAED,kBAAkB;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC;SACd;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,sEAAsE;IAC/D,sBAAsB;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;SACR;QAED,2BAA2B;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;gBAC9D,SAAS;YACX,MAAM,GAAG,GAAG,aAAa,CAAC,MAAoC,CAAC,CAAC;YAChE,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChE;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IACzB,WAAW,CAAC,GAAkB;QACnC,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAClC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAC5B,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAClC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oEAAoE;IAC7D,QAAQ,CAAC,OAAwB;QACtC,6CAA6C;QAC7C,uCAAuC;QACvC,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,gDAAgD;QAEhD,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC9C;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3B;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAE3B,6DAA6D;IACrD,gBAAgB,CACtB,IAA+B;QAE/B,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,OAAO,CAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,EACf,IAAI,CAAC,QAAQ,CAAC,CAAC,EACf,IAAI,CAAC,QAAQ,CAAC,CAAC,CAChB,CAAC;QACF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,kBAAkB,CACjC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7B,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAC/B,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvD,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmC,CAAC;QACjE,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YAC5B,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YACnC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YACnC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YACnC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YACnC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YACnC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,iCAAiC,EAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,oCAAoC,EAClD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,yCAAyC,EACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;YACF,aAAa,CAAC,GAAG,CACf,aAAa,CAAC,qCAAqC,EACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;SACH;aAAM;YACL,mBAAmB;SACpB;QAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IACtC,CAAC;IAED,yDAAyD;IACjD,mBAAmB,CAAC,MAAiC;QAC3D,IACE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,SAAS;YACjC,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,SAAS;YAChC,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,SAAS;YAChC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,SAAS;YAChC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS;YAC/B,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS;YAC/B,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,SAAS;YAC/B,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,SAAS;YAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,SAAS;YAC9B,MAAM,EAAE,GAAG,KAAK,SAAS;YACzB,MAAM,EAAE,KAAK,KAAK,SAAS;YAC3B,MAAM,EAAE,IAAI,KAAK,SAAS,EAC1B;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,IAAa,EAAE,EAAa;QAChD,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;QAChD,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QAC3B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,GAAG,EAAE;YACP,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACrB;QACD,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACK,SAAS,CACf,IAAa,EACb,GAAkB,EAClB,EAAa;QAEb,oBAAoB;QACpB,MAAM,QAAQ,GAAgC;YAC5C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9D,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;SACtB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,kDAAkD;YAClD,OAAO,QAAQ,CAAC;SACjB;QAED,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE;YACX,OAAO;gBACL,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C,CAAC;SACH;aAAM;YACL,kDAAkD;YAClD,OAAO,QAAQ,CAAC;SACjB;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,MAAiB;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,WAAW,GAAgB;gBAC/B,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,UAAU;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,IAAI,CAAC,cAAc;aACnC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/B;IACH,CAAC;IAED;;;;OAIG;IACK,OAAO,CAAC,IAAoC;QAClD,MAAM,cAAc,GAAwB;YAC1C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,KAAK,GAAmB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5D,KAAK,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,qBAAqB,CAAC;QACpD,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;QACjC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,QAAuB;QACzC,MAAM,cAAc,GAAwB;YAC1C,QAAQ;YACR,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,OAAwB;QAC7C,uLAAuL;QACvL,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAC1C,WAAW,CAAC,KAAK,EACjB,SAAS,EACT,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAC1C,CAAC;QACF,gBAAgB;QAChB,8BAA8B;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAClC,OAAO,CAAC,YAAY,CAClB,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EACrD,WAAW,CAAC,aAAa,CAC1B,CAAC;YACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YACzC,OAAO,CAAC,YAAY,CAClB,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EACrE,cAAc,CAAC,aAAa,EAC5B,cAAc,CAAC,UAAU,CAC1B,CAAC;YACF,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IACO,yBAAyB,CAC/B,QAAuB,EACvB,SAAkB,EAClB,OAAuB;QAEvB,IAAI,QAAQ,YAAY,YAAY,EAAE;YACpC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACxC;aAAM,IAAI,QAAQ,YAAY,IAAI,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,SAAS,EAAE;gBACb,wDAAwD;gBACxD,0DAA0D;gBAC1D,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACjC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACvB,IAAI,KAAK,YAAY,YAAY,EAAE;wBACjC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;wBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAClC,IAAI,QAAQ,EAAE;4BACZ,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;yBAClC;wBACD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;qBAC9B;yBAAM,IAAI,KAAK,YAAY,KAAK,EAAE;wBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;qBACrC;gBACH,CAAC,CAAC,CAAC;aACJ;SACF;aAAM,IAAI,QAAQ,YAAY,IAAI,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC3B;aAAM,IAAI,QAAQ,YAAY,eAAe,EAAE;YAC9C,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,SAAS,EAAE;gBACb,wDAAwD;gBACxD,uDAAuD;gBACvD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3D,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,OAAO,IAAI,EAAE;oBACX,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;oBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACnC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvC,IAAI,MAAM,IAAI,MAAM,EAAE;4BACpB,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;yBACzC;qBACF;oBACD,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;iBAClC;aACF;SACF;aAAM,IAAI,QAAQ,YAAY,aAAa,EAAE;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;YAClC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SACnC;aAAM,IAAI,QAAQ,YAAY,KAAK,EAAE;YACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACxC;aAAM,IAAI,QAAQ,YAAY,2BAA2B,EAAE;YAC1D,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;SACnE;IACH,CAAC;CAGF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type {\n CurvePrimitive,\n GeometryQuery} from \"@itwin/core-geometry\";\nimport {\n Angle,\n Arc3d,\n Box,\n CurveChainWithDistanceIndex,\n IndexedPolyface,\n IndexedPolyfaceVisitor,\n LineSegment3d,\n LineString3d,\n Loop,\n Path,\n Point3d,\n PolyfaceBuilder,\n Range3d,\n StrokeOptions,\n Transform,\n YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport {\n ColorByName,\n ColorDef,\n LinePixels,\n Placement3d,\n QueryBinder,\n QueryRowFormat,\n} from \"@itwin/core-common\";\nimport type {\n DecorateContext,\n Decorator,\n GraphicBuilder,\n RenderGraphic} from \"@itwin/core-frontend\";\nimport {\n GraphicBranch,\n GraphicType,\n IModelApp,\n Marker,\n} from \"@itwin/core-frontend\";\n\nexport enum BboxDimension {\n BoundingBoxShortestEdgeLength = \"Shortest Edge Length\",\n BoundingBoxIntermediateEdgeLength = \"Intermediate Edge Length\",\n BoundingBoxLongestEdgeLength = \"Longest Edge Length\",\n BoundingBoxShortestFaceDiagonalLength = \"Shortest Face Diagonal Length\",\n BoundingBoxIntermediateFaceDiagonalLength = \"Intermediate Face Diagonal Length\",\n BoundingBoxLongestFaceDiagonalLength = \"Longest Face Diagonal Length\",\n BoundingBoxDiagonalLength = \"Diagonal Length\",\n // SmallestFaceArea = \"Smallest Face Area\",\n // IntermediateFaceArea = \"Intermediate Face Area\",\n // LargestFaceArea = \"Largest Face Area\",\n // Volume = \"Volume\"\n}\n\ninterface CustomGeometryQuery {\n geometry: GeometryQuery;\n color: ColorDef;\n fill: boolean;\n fillColor: ColorDef;\n lineThickness: number;\n edges: boolean;\n linePixels: LinePixels;\n}\n\ninterface CustomPoint {\n point: Point3d;\n color: ColorDef;\n fill: boolean;\n lineThickness: number;\n}\n\ninterface SpatialElementQueryResult {\n bBoxHigh: Point3d;\n bBoxLow: Point3d;\n yaw: number;\n pitch: number;\n roll: number;\n origin: Point3d;\n}\n\ninterface InferredSpatialData {\n pointMappings: Map<BboxDimension, [number, number]>;\n placement: Placement3d;\n}\n\nexport class BboxDimensionsDecorator implements Decorator {\n private instance: InferredSpatialData | undefined;\n private graphics: RenderGraphic | undefined;\n private points: CustomPoint[] = [];\n private shapes: CustomGeometryQuery[] = [];\n private markers: Marker[] = [];\n\n private fill = false;\n private shapeColor: ColorDef = ColorDef.fromTbgr(\n ColorDef.withTransparency(ColorDef.create(ColorByName.cyan).tbgr, 200)\n );\n private pointColor: ColorDef = ColorDef.white;\n private lineColor: ColorDef = ColorDef.red;\n private fillColor: ColorDef = ColorDef.white;\n private shapeThickness = 1;\n private pointThickness = 8;\n private lineThickness = 4;\n private edges = true;\n private linePixels = LinePixels.Solid;\n\n /** Clear the current context. */\n public clearContext(): void {\n this.points = [];\n this.shapes = [];\n this.markers = [];\n this.graphics = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n\n /** Set the active instance used by the decorator. */\n public async setContext(instanceId: string): Promise<boolean> {\n // get locating info on the requested instance\n const query = `SELECT bBoxHigh,bBoxLow,yaw,pitch,roll,origin FROM BisCore.SpatialElement WHERE ECInstanceId = ?`;\n\n if (\n !IModelApp.viewManager.selectedView ||\n !IModelApp.viewManager.selectedView.iModel\n ) {\n return false;\n }\n\n const params = new QueryBinder().bindId(1, instanceId);\n const queryIterable = IModelApp.viewManager.selectedView?.iModel.query(\n query,\n params,\n { rowFormat: QueryRowFormat.UseJsPropertyNames }\n );\n\n const results: SpatialElementQueryResult[] = [];\n for await (const row of queryIterable) {\n results.push(row);\n }\n // if no results or more than one abort\n if (results.length !== 1) {\n // TODO: maybe report a warning or something\n return false;\n }\n\n // validate result\n const elem = results[0];\n if (!this.validateQueryResult(elem)) {\n return false;\n } else {\n this.instance = this.inferSpatialData(elem);\n return true;\n }\n }\n\n /** Get the calculated spatial lengths for all possible dimensions. */\n public getInferredSpatialData(): Map<BboxDimension, number> | undefined {\n if (!this.instance) {\n return;\n }\n\n // calculate each dimension\n const data = new Map<BboxDimension, number>();\n const corners = this.instance.placement.getWorldCorners().points;\n const mappings = this.instance.pointMappings;\n for (const dimKey in BboxDimension) {\n if (!Object.prototype.hasOwnProperty.call(BboxDimension, dimKey))\n continue;\n const dim = BboxDimension[dimKey as keyof typeof BboxDimension];\n if (mappings.has(dim)) {\n const points = mappings.get(dim);\n if (points) {\n data.set(dim, corners[points[0]].distance(corners[points[1]]));\n }\n }\n }\n\n return data;\n }\n\n /** Command to draw the BBox. */\n public drawContext(dim: BboxDimension): boolean {\n // check if valid instance set\n if (!this.instance) {\n return false;\n }\n this.clearContext();\n\n // add geometry to decorator\n const polyface = this.buildPolyface(\n this.instance.placement.bbox,\n this.instance.placement.transform\n );\n this.addGeometry(polyface);\n const [line, points] = this.buildLine(\n this.instance.placement.bbox,\n dim,\n this.instance.placement.transform\n );\n this.addLine(line);\n this.addPoints(points);\n\n return true;\n }\n\n /** Generates new graphics if needed, and adds them to the scene. */\n public decorate(context: DecorateContext): void {\n // const overrides = new ViewFlagOverrides();\n // overrides.setShowVisibleEdges(true);\n // overrides.setApplyLighting(true);\n const branch = new GraphicBranch(false);\n\n // branch.viewFlagOverrides.copyFrom(overrides);\n\n // context.viewFlags.visibleEdges = true;\n if (!this.graphics) {\n this.graphics = this.createGraphics(context);\n }\n\n if (this.graphics) {\n branch.add(this.graphics);\n }\n\n const graphic = context.createBranch(branch, Transform.identity);\n context.addDecoration(GraphicType.WorldOverlay, graphic);\n\n this.markers.forEach((marker) => {\n marker.addDecoration(context);\n });\n }\n\n // #region Helper Functions\n\n /** Calculate all BBox dimensions and properties and save. */\n private inferSpatialData(\n elem: SpatialElementQueryResult\n ): InferredSpatialData {\n // build placement from result\n const origin = new Point3d(elem.origin.x, elem.origin.y, elem.origin.z);\n const bBoxLow = new Point3d(elem.bBoxLow.x, elem.bBoxLow.y, elem.bBoxLow.z);\n const bBoxHigh = new Point3d(\n elem.bBoxHigh.x,\n elem.bBoxHigh.y,\n elem.bBoxHigh.z\n );\n const range = Range3d.create(bBoxLow, bBoxHigh);\n const ypra = new YawPitchRollAngles(\n Angle.createDegrees(elem.yaw),\n Angle.createDegrees(elem.pitch),\n Angle.createDegrees(elem.roll)\n );\n const placement = new Placement3d(origin, ypra, range);\n\n // determine dimension size ordering\n const pointMappings = new Map<BboxDimension, [number, number]>();\n pointMappings.set(BboxDimension.BoundingBoxDiagonalLength, [0, 7]);\n const corners = placement.getWorldCorners();\n const d01 = corners.distance(0, 1);\n const d02 = corners.distance(0, 2);\n const d04 = corners.distance(0, 4);\n if (d01 >= d02 && d02 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d01 >= d04 && d04 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d04 >= d02 && d02 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d04 >= d01 && d01 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d02 >= d01 && d01 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else if (d02 >= d04 && d04 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else {\n // Unreachable case\n }\n\n return { placement, pointMappings };\n }\n\n /** Validate if instance has all necessary properties. */\n private validateQueryResult(result: SpatialElementQueryResult): boolean {\n if (\n result?.bBoxHigh?.x !== undefined &&\n result?.bBoxHigh.y !== undefined &&\n result?.bBoxHigh.z !== undefined &&\n result?.bBoxLow?.x !== undefined &&\n result?.bBoxLow.y !== undefined &&\n result?.bBoxLow.z !== undefined &&\n result?.origin?.x !== undefined &&\n result?.origin.y !== undefined &&\n result?.origin.z !== undefined &&\n result?.yaw !== undefined &&\n result?.pitch !== undefined &&\n result?.roll !== undefined\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Takes a Bounding Box and builds a rectangular polyface.\n * @param bbox The desired Bounding Box.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The bounding box geometry.\n */\n private buildPolyface(bbox: Range3d, tf: Transform): IndexedPolyface {\n const options = StrokeOptions.createForCurves();\n options.needParams = false;\n options.needNormals = true;\n const builder = PolyfaceBuilder.create(options);\n const box = Box.createRange(bbox, true)?.cloneTransformed(tf);\n if (box) {\n builder.addBox(box);\n }\n return builder.claimPolyface(false);\n }\n\n /**\n * Build a Lone geometry based on specified dimension.\n * @param bbox The desired Bounding Box.\n * @param dim The desired dimension to draw.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The line geometry.\n */\n private buildLine(\n bbox: Range3d,\n dim: BboxDimension,\n tf: Transform\n ): [CurvePrimitive, Point3d[]] {\n // fallback scenario\n const fallback: [CurvePrimitive, Point3d[]] = [\n LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf),\n [bbox.low, bbox.high],\n ];\n if (!this.instance) {\n // TODO: probably should have some warning here...\n return fallback;\n }\n\n // otherwise return appropriate dimensions\n const corners = this.instance.placement.getWorldCorners().points;\n const targets = this.instance.pointMappings.get(dim);\n if (targets) {\n return [\n LineSegment3d.create(corners[targets[0]], corners[targets[1]]),\n [corners[targets[0]], corners[targets[1]]],\n ];\n } else {\n // TODO: probably should have some warning here...\n return fallback;\n }\n }\n\n /**\n * Configure and add points to the dectorator.\n * @param point Definition of the points.\n */\n public addPoints(points: Point3d[]) {\n for (const point of points) {\n const styledPoint: CustomPoint = {\n point,\n color: this.pointColor,\n fill: this.fill,\n lineThickness: this.pointThickness,\n };\n this.points.push(styledPoint);\n }\n }\n\n /**\n * Configure and add a line to the decorator.\n * Length of the line is displayed as a label in the center.\n * @param line Definition of the line.\n */\n private addLine(line: LineSegment3d | CurvePrimitive) {\n const styledGeometry: CustomGeometryQuery = {\n geometry: line,\n color: this.lineColor,\n fill: true,\n fillColor: this.fillColor,\n lineThickness: this.lineThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n\n const marker = new Marker(line.fractionToPoint(0.5), { x: 25, y: 25 });\n const label: HTMLDivElement = document.createElement(\"div\");\n label.textContent = `${line.quickLength().toFixed(3)}m`;\n label.style.backgroundColor = \"rgba(17,17,17,0.75)\";\n label.style.borderRadius = \"4px\";\n label.style.color = \"white\";\n label.style.padding = \"4px 8px\";\n marker.htmlElement = label;\n marker.visible = true;\n this.markers.push(marker);\n }\n\n /**\n * Configure and add a mesh to the decorator.\n * @param geometry Definition of the mesh.\n */\n private addGeometry(geometry: GeometryQuery) {\n const styledGeometry: CustomGeometryQuery = {\n geometry,\n color: this.shapeColor,\n fill: this.fill,\n fillColor: this.fillColor,\n lineThickness: this.shapeThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n }\n\n /**\n * Iterate through the geometry and point lists, extracting each geometry and point, along with their styles\n * Adding them to the graphic builder which then creates new graphics\n * @param context\n * @returns\n */\n private createGraphics(context: DecorateContext): RenderGraphic | undefined {\n // Specifying an Id for the graphics tells the display system that all of the geometry belongs to the same entity, so that it knows to make sure the edges draw on top of the surfaces.\n const builder = context.createGraphicBuilder(\n GraphicType.Scene,\n undefined,\n context.viewport.iModel.transientIds.next\n );\n // Read-only now\n // builder.wantNormals = true;\n this.points.forEach((styledPoint) => {\n builder.setSymbology(\n styledPoint.color,\n styledPoint.fill ? styledPoint.color : ColorDef.white,\n styledPoint.lineThickness\n );\n const point = styledPoint.point;\n builder.addPointString([point]);\n });\n this.shapes.forEach((styledGeometry) => {\n const geometry = styledGeometry.geometry;\n builder.setSymbology(\n styledGeometry.color,\n styledGeometry.fill ? styledGeometry.fillColor : styledGeometry.color,\n styledGeometry.lineThickness,\n styledGeometry.linePixels\n );\n this.createGraphicsForGeometry(geometry, styledGeometry.edges, builder);\n });\n const graphic = builder.finish();\n return graphic;\n }\n private createGraphicsForGeometry(\n geometry: GeometryQuery,\n wantEdges: boolean,\n builder: GraphicBuilder\n ) {\n if (geometry instanceof LineString3d) {\n builder.addLineString(geometry.points);\n } else if (geometry instanceof Loop) {\n builder.addLoop(geometry);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each loop edge/arc\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const curves = geometry.children;\n curves.forEach((value) => {\n if (value instanceof LineString3d) {\n let edges = value.points;\n const endPoint = value.pointAt(0);\n if (endPoint) {\n edges = edges.concat([endPoint]);\n }\n builder.addLineString(edges);\n } else if (value instanceof Arc3d) {\n builder.addArc(value, false, false);\n }\n });\n }\n } else if (geometry instanceof Path) {\n builder.addPath(geometry);\n } else if (geometry instanceof IndexedPolyface) {\n builder.addPolyface(geometry, false);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each facet edge\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const visitor = IndexedPolyfaceVisitor.create(geometry, 1);\n let flag = true;\n while (flag) {\n const numIndices = visitor.pointCount;\n for (let i = 0; i < numIndices - 1; i++) {\n const point1 = visitor.getPoint(i);\n const point2 = visitor.getPoint(i + 1);\n if (point1 && point2) {\n builder.addLineString([point1, point2]);\n }\n }\n flag = visitor.moveToNextFacet();\n }\n }\n } else if (geometry instanceof LineSegment3d) {\n const pointA = geometry.point0Ref;\n const pointB = geometry.point1Ref;\n const lineString = [pointA, pointB];\n builder.addLineString(lineString);\n } else if (geometry instanceof Arc3d) {\n builder.addArc(geometry, false, false);\n } else if (geometry instanceof CurveChainWithDistanceIndex) {\n this.createGraphicsForGeometry(geometry.path, wantEdges, builder);\n }\n }\n\n // #endregion\n}\n"]}
@@ -15,7 +15,6 @@ import { ParenthesisState, validateParenthesis } from "./ParenthesisValidator";
15
15
  * @returns `dataType` if formula is valid. `errorMessage` otherwise.
16
16
  */
17
17
  export function resolveFormulaDataType(formulaName, formula, properties) {
18
- var _a;
19
18
  const parenthesisState = validateParenthesis(formula);
20
19
  if (ParenthesisState.NotClosed === parenthesisState) {
21
20
  return { errorMessage: "Opened but not closed parenthesis found." };
@@ -39,7 +38,7 @@ export function resolveFormulaDataType(formulaName, formula, properties) {
39
38
  }
40
39
  const postfixFormulaTokens = convertInfixToPostfix(infixFormulaTokens);
41
40
  if (undefined === postfixFormulaTokens.value) {
42
- return { errorMessage: (_a = postfixFormulaTokens.errorMessage) !== null && _a !== void 0 ? _a : "Unknown error." };
41
+ return { errorMessage: postfixFormulaTokens.errorMessage ?? "Unknown error." };
43
42
  }
44
43
  return resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);
45
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,OAAe,EAAE,UAAuB;;IAClG,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QACnD,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;SAAM,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QAC1D,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;IAED,IAAI,kBAAkB,CAAC;IACvB,IAAI;QACF,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;KAC5C;IAAC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY,KAAK,EAAE;YACvB,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;SACrC;aAAM;YACL,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;SAC3C;KACF;IAED,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAEvE,IAAI,SAAS,KAAK,oBAAoB,CAAC,KAAK,EAAE;QAC5C,OAAO,EAAE,YAAY,EAAE,MAAA,oBAAoB,CAAC,YAAY,mCAAI,gBAAgB,EAAE,CAAC;KAChF;IAED,OAAO,qBAAqB,CAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpF,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*--------------------------------------------------------------------------------------------*/\nimport { splitFormula } from \"./FormulaSplitter\";\nimport { resolveTokensDataType } from \"./FormulaTokensDataTypeResolver\";\nimport { convertInfixToPostfix } from \"./InfixToPostfixConverter\";\nimport type { IResult } from \"./IResult\";\nimport { ParenthesisState, validateParenthesis } from \"./ParenthesisValidator\";\nimport type { DataType, PropertyMap } from \"./Types\";\n\n/**\n * Resolves DataType of the given formula.\n * @param formulaName Name of the current formula. Expected to be lowercase.\n * @param formula The formula itself.\n * @param properties All available properties or variables with their data types\n * that could be used in formula. Names are expected to be lowercase.\n * @returns `dataType` if formula is valid. `errorMessage` otherwise.\n */\nexport function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap): IResult<DataType> {\n const parenthesisState = validateParenthesis(formula);\n if (ParenthesisState.NotClosed === parenthesisState) {\n return { errorMessage: \"Opened but not closed parenthesis found.\" };\n } else if (ParenthesisState.NotOpened === parenthesisState) {\n return { errorMessage: \"Closed but not opened parenthesis found.\" };\n }\n\n let infixFormulaTokens;\n try {\n infixFormulaTokens = splitFormula(formula);\n } catch (ex) {\n if (ex instanceof Error) {\n return { errorMessage: ex.message };\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unknown error.\", ex);\n return { errorMessage: \"Unknown error.\" };\n }\n }\n\n const postfixFormulaTokens = convertInfixToPostfix(infixFormulaTokens);\n\n if (undefined === postfixFormulaTokens.value) {\n return { errorMessage: postfixFormulaTokens.errorMessage ?? \"Unknown error.\" };\n }\n\n return resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);\n}\n"]}
1
+ {"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,OAAe,EAAE,UAAuB;IAClG,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QACnD,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;SAAM,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QAC1D,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;IAED,IAAI,kBAAkB,CAAC;IACvB,IAAI;QACF,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;KAC5C;IAAC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY,KAAK,EAAE;YACvB,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;SACrC;aAAM;YACL,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;SAC3C;KACF;IAED,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAEvE,IAAI,SAAS,KAAK,oBAAoB,CAAC,KAAK,EAAE;QAC5C,OAAO,EAAE,YAAY,EAAE,oBAAoB,CAAC,YAAY,IAAI,gBAAgB,EAAE,CAAC;KAChF;IAED,OAAO,qBAAqB,CAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpF,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*--------------------------------------------------------------------------------------------*/\nimport { splitFormula } from \"./FormulaSplitter\";\nimport { resolveTokensDataType } from \"./FormulaTokensDataTypeResolver\";\nimport { convertInfixToPostfix } from \"./InfixToPostfixConverter\";\nimport type { IResult } from \"./IResult\";\nimport { ParenthesisState, validateParenthesis } from \"./ParenthesisValidator\";\nimport type { DataType, PropertyMap } from \"./Types\";\n\n/**\n * Resolves DataType of the given formula.\n * @param formulaName Name of the current formula. Expected to be lowercase.\n * @param formula The formula itself.\n * @param properties All available properties or variables with their data types\n * that could be used in formula. Names are expected to be lowercase.\n * @returns `dataType` if formula is valid. `errorMessage` otherwise.\n */\nexport function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap): IResult<DataType> {\n const parenthesisState = validateParenthesis(formula);\n if (ParenthesisState.NotClosed === parenthesisState) {\n return { errorMessage: \"Opened but not closed parenthesis found.\" };\n } else if (ParenthesisState.NotOpened === parenthesisState) {\n return { errorMessage: \"Closed but not opened parenthesis found.\" };\n }\n\n let infixFormulaTokens;\n try {\n infixFormulaTokens = splitFormula(formula);\n } catch (ex) {\n if (ex instanceof Error) {\n return { errorMessage: ex.message };\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unknown error.\", ex);\n return { errorMessage: \"Unknown error.\" };\n }\n }\n\n const postfixFormulaTokens = convertInfixToPostfix(infixFormulaTokens);\n\n if (undefined === postfixFormulaTokens.value) {\n return { errorMessage: postfixFormulaTokens.errorMessage ?? \"Unknown error.\" };\n }\n\n return resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);\n}\n"]}
@@ -31,13 +31,12 @@ function validateArgumentsWithTypeMatching() {
31
31
  };
32
32
  }
33
33
  export function getFormulaFunctionReturnType(func, args) {
34
- var _a, _b;
35
34
  const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;
36
35
  if (args.length < func.argumentCountBounds[0])
37
36
  return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };
38
37
  if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])
39
38
  return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };
40
- let returnType = (_a = func.returnType) !== null && _a !== void 0 ? _a : "Undefined";
39
+ let returnType = func.returnType ?? "Undefined";
41
40
  const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();
42
41
  for (let i = 0; i < args.length; i++) {
43
42
  const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;
@@ -47,7 +46,7 @@ export function getFormulaFunctionReturnType(func, args) {
47
46
  if (!validationResult.isValid)
48
47
  return { errorMessage: validationResult.invalidReason };
49
48
  if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)
50
- returnType = (_b = validationResult.matchingType) !== null && _b !== void 0 ? _b : "Undefined";
49
+ returnType = validationResult.matchingType ?? "Undefined";
51
50
  }
52
51
  return { value: returnType };
53
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.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*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Number\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
1
+ {"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.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*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Number\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
@@ -91,10 +91,9 @@ describe("Groupings View", () => {
91
91
  const horizontalTiles = screen.getAllByTestId("gmw-horizontal-tile");
92
92
  expect(horizontalTiles).toHaveLength(mockGroups.groups.length);
93
93
  horizontalTiles.forEach((horizontalTile, index) => {
94
- var _a;
95
94
  const groupTile = within(horizontalTile);
96
95
  expect(groupTile.getByText(mockGroups.groups[index].groupName)).toBeInTheDocument();
97
- expect(groupTile.getByText((_a = mockGroups.groups[index].description) !== null && _a !== void 0 ? _a : "")).toBeInTheDocument();
96
+ expect(groupTile.getByText(mockGroups.groups[index].description ?? "")).toBeInTheDocument();
98
97
  });
99
98
  // Click on first group more icon
100
99
  const moreButton = screen.getAllByTestId("gmw-more-button");
@@ -1 +1 @@
1
- {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.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*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n});\n"]}
1
+ {"version":3,"file":"GroupingMappingCustomUI.test.js","sourceRoot":"","sources":["../../../src/test/GroupingMappingCustomUI.test.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*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport \"@testing-library/jest-dom\";\nimport { faker } from \"@faker-js/faker\";\nimport { GroupingMappingCustomUIType, Groupings } from \"../grouping-mapping-widget\";\nimport type { GroupCollection, IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport * as moq from \"typemoq\";\nimport type { IModelConnection, ViewManager } from \"@itwin/core-frontend\";\nimport type { ContextCustomUIProps, GroupingCustomUIProps, GroupingMappingCustomUI } from \"../grouping-mapping-widget\";\nimport userEvent from \"@testing-library/user-event\";\nimport { render, screen, waitForElementToBeRemoved, within } from \"../test/test-utils\";\n\nconst mockITwinId = faker.datatype.uuid();\nconst mockIModelId = faker.datatype.uuid();\nconst mockMappingId = faker.datatype.uuid();\nconst mockMapping: Mapping = {\n id: mockMappingId,\n mappingName: \"mOcKmApPiNg1\",\n description: \"mOcKmApPiNgDeScRiPtIoN1\",\n createdBy: faker.random.alpha(),\n createdOn: faker.date.past().toDateString(),\n modifiedBy: faker.random.alpha(),\n modifiedOn: faker.date.past().toDateString(),\n extractionEnabled: false,\n _links: {\n imodel: {\n href: \"\",\n },\n },\n};\n\nconst groupsFactory = (): GroupCollection => ({\n groups: Array.from(\n { length: faker.datatype.number({ min: 3, max: 5 }) },\n (_, index) => ({\n id: `${faker.datatype.uuid()}`,\n groupName: `mOcKgRoUp${index}`,\n description: `mOcKgRoUpDeScRiPtIoN${index}`,\n query: `mOcKgRoUpQuErY${index}`,\n _links: {\n imodel: {\n href: \"\",\n },\n mapping: {\n href: \"\",\n },\n },\n })\n ),\n _links: {\n next: undefined,\n self: {\n href: \"\",\n },\n },\n});\n\nconst connectionMock = moq.Mock.ofType<IModelConnection>();\nconst viewManagerMock = moq.Mock.ofType<ViewManager>();\nconst mappingClientMock = moq.Mock.ofType<IMappingsClient>();\n\njest.mock(\"@itwin/appui-react\", () => ({\n ...jest.requireActual(\"@itwin/appui-react\"),\n useActiveIModelConnection: () => connectionMock.object,\n}));\n\njest.mock(\"@itwin/core-frontend\", () => ({\n ...jest.requireActual(\"@itwin/core-frontend\"),\n IModelApp: {\n viewManager: {},\n },\n}));\n\njest.mock(\"../widget/components/context/MappingClientContext\", () => ({\n ...jest.requireActual(\"../widget/components/context/MappingClientContext\"),\n useMappingClient: () => mappingClientMock.object,\n}));\n\nconst mockGroups = groupsFactory();\n\ndescribe(\"Groupings View\", () => {\n beforeEach(async () => {\n connectionMock.setup((x) => x.iModelId).returns(() => mockIModelId);\n connectionMock.setup((x) => x.iTwinId).returns(() => mockITwinId);\n\n mappingClientMock\n .setup(async (x) => x.getGroups(moq.It.isAny(), moq.It.isAny(), moq.It.isAny()))\n .returns(async () => Promise.resolve(mockGroups.groups));\n });\n\n afterEach(() => {\n connectionMock.reset();\n mappingClientMock.reset();\n viewManagerMock.reset();\n });\n\n it(\"List all groups\", async () => {\n // Arange\n\n // Act\n const user = userEvent.setup();\n render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the correct random mockGroups.groups count listed\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n horizontalTiles.forEach((horizontalTile, index) => {\n const groupTile = within(horizontalTile);\n expect(\n groupTile.getByText(\n mockGroups.groups[index].groupName\n )\n ).toBeInTheDocument();\n expect(\n groupTile.getByText(\n mockGroups.groups[index].description ?? \"\"\n )\n ).toBeInTheDocument();\n });\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should only have the permanent delete context item.\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(1);\n expect(contextMenuItems[0]).toHaveTextContent(\"Remove\");\n });\n\n it(\"Set up grouping custom UI\", async () => {\n // Arange\n const mockedUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockGroupingUI];\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={jest.fn()}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Each group should have a more icon button\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n expect(moreButton.length).toBeGreaterThan(0);\n\n // Click on first more icon\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n\n // Hover on 'Edit'\n await user.hover(contextMenuItems[0]);\n\n // Should have exactly 1 sub menu item\n const editCustom = screen.getAllByTestId(`gmw-edit-0`);\n expect(editCustom).toHaveLength(1);\n expect(editCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n // Click on the edit custom UI\n await user.click(editCustom[0]);\n\n const groupName = screen.getAllByText(mockGroups.groups[0].groupName);\n expect(groupName).toHaveLength(1);\n });\n\n it(\"Set up context custom UI - should have add context menu\", async () => {\n // Arange\n const mockedUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI];\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={jest.fn()}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n\n // Should have the right group number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 2 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n expect(contextMenuItems).toHaveLength(2);\n expect(contextMenuItems[0]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[1]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n\n it(\"Set up both grouping and context custom UI\", async () => {\n // Arange\n const mockedGroupingUIComponent = (_props: GroupingCustomUIProps) => React.createElement(\"div\");\n const mockedContextUIComponent = (_props: ContextCustomUIProps) => React.createElement(\"div\");\n const mockGroupingUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Grouping,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedGroupingUIComponent,\n };\n const mockContextUI: GroupingMappingCustomUI = {\n type: GroupingMappingCustomUIType.Context,\n name: \"mOcKgRoUpInGuI\",\n displayLabel: \"Mock Grouping UI\",\n uiComponent: mockedContextUIComponent,\n };\n\n const groupingMappingCustomUIMock = [mockContextUI, mockGroupingUI];\n const onClickAddGroup = jest.fn();\n const onClickRenderContextCustomUIMock = jest.fn();\n\n // Act\n const { user } = render(\n <Groupings\n mapping={mockMapping}\n onClickAddGroup={onClickAddGroup}\n onClickGroupModify={jest.fn()}\n onClickGroupTitle={jest.fn}\n onClickRenderContextCustomUI={onClickRenderContextCustomUIMock}\n />,\n groupingMappingCustomUIMock\n );\n\n await waitForElementToBeRemoved(() => screen.getByText(/loading/i));\n\n // Assert\n const addButton = screen.getAllByTestId(\"gmw-add-group-button\");\n expect(addButton).toHaveLength(1);\n\n // Click on 'Add Group' button\n await user.click(addButton[0]);\n\n // Should have exactly 1 add method with given configuration\n const addCustom = screen.getAllByTestId(\"gmw-add-0\");\n expect(addCustom).toHaveLength(1);\n expect(addCustom[0]).toHaveTextContent(mockGroupingUI.displayLabel);\n\n await user.click(addCustom[0]);\n\n // Callback should have been called with correct parameters\n expect(onClickAddGroup).toBeCalledWith(mockGroupingUI.name);\n\n // Check the group tile number\n const horizontalTiles = screen.getAllByTestId(\"gmw-horizontal-tile\");\n expect(horizontalTiles).toHaveLength(mockGroups.groups.length);\n\n // Click on first group more icon\n const moreButton = screen.getAllByTestId(\"gmw-more-button\");\n expect(moreButton).toHaveLength(mockGroups.groups.length);\n\n await user.click(moreButton[0]);\n\n // Should have 3 context menu items\n const contextMenuItems = screen.getAllByTestId(\"gmw-context-menu-item\");\n\n expect(contextMenuItems).toHaveLength(3);\n expect(contextMenuItems[0]).toHaveTextContent(\"Edit\");\n expect(contextMenuItems[1]).toHaveTextContent(mockContextUI.displayLabel);\n expect(contextMenuItems[2]).toHaveTextContent(\"Remove\");\n\n // Click on the context ui\n await user.click(contextMenuItems[1]);\n\n // Callback should have been called with correct parameters\n expect(onClickRenderContextCustomUIMock).toBeCalledWith(mockedContextUIComponent, mockGroups.groups[0], mockContextUI.displayLabel);\n });\n});\n"]}
@@ -39,18 +39,15 @@ export const createTestRelatedClassInfo = (props) => ({
39
39
  ...props,
40
40
  });
41
41
  export const createTestSimpleContentField = (props) => {
42
- var _a, _b, _c, _d, _e, _f;
43
- return new Field((_a = props === null || props === void 0 ? void 0 : props.category) !== null && _a !== void 0 ? _a : createTestCategoryDescription(), (_b = props === null || props === void 0 ? void 0 : props.name) !== null && _b !== void 0 ? _b : "SimpleField", (_c = props === null || props === void 0 ? void 0 : props.label) !== null && _c !== void 0 ? _c : "Simple Field", (_d = props === null || props === void 0 ? void 0 : props.type) !== null && _d !== void 0 ? _d : {
42
+ return new Field(props?.category ?? createTestCategoryDescription(), props?.name ?? "SimpleField", props?.label ?? "Simple Field", props?.type ?? {
44
43
  valueFormat: PropertyValueFormat.Primitive,
45
44
  typeName: "string",
46
- }, (_e = props === null || props === void 0 ? void 0 : props.isReadonly) !== null && _e !== void 0 ? _e : false, (_f = props === null || props === void 0 ? void 0 : props.priority) !== null && _f !== void 0 ? _f : 0, props === null || props === void 0 ? void 0 : props.editor, props === null || props === void 0 ? void 0 : props.renderer);
45
+ }, props?.isReadonly ?? false, props?.priority ?? 0, props?.editor, props?.renderer);
47
46
  };
48
47
  export const createTestPropertiesContentField = (props) => {
49
- var _a, _b, _c, _d, _e, _f;
50
- return new PropertiesField((_a = props.category) !== null && _a !== void 0 ? _a : createTestCategoryDescription(), (_b = props.name) !== null && _b !== void 0 ? _b : "PropertiesField", (_c = props.label) !== null && _c !== void 0 ? _c : "Properties Field", (_d = props.type) !== null && _d !== void 0 ? _d : { valueFormat: PropertyValueFormat.Primitive, typeName: "string" }, (_e = props.isReadonly) !== null && _e !== void 0 ? _e : false, (_f = props.priority) !== null && _f !== void 0 ? _f : 0, props.properties, props.editor, props.renderer);
48
+ return new PropertiesField(props.category ?? createTestCategoryDescription(), props.name ?? "PropertiesField", props.label ?? "Properties Field", props.type ?? { valueFormat: PropertyValueFormat.Primitive, typeName: "string" }, props.isReadonly ?? false, props.priority ?? 0, props.properties, props.editor, props.renderer);
51
49
  };
52
50
  export const createTestNestedContentField = (props) => {
53
- var _a, _b, _c, _d, _e, _f, _g;
54
51
  const nestedContentFieldType = {
55
52
  valueFormat: PropertyValueFormat.Struct,
56
53
  typeName: "NestedContentFieldType",
@@ -60,7 +57,7 @@ export const createTestNestedContentField = (props) => {
60
57
  type: f.type,
61
58
  })),
62
59
  };
63
- const field = new NestedContentField((_a = props.category) !== null && _a !== void 0 ? _a : createTestCategoryDescription(), (_b = props.name) !== null && _b !== void 0 ? _b : "NestedContentField", (_c = props.label) !== null && _c !== void 0 ? _c : "Nested Content", nestedContentFieldType, (_d = props.isReadonly) !== null && _d !== void 0 ? _d : false, (_e = props.priority) !== null && _e !== void 0 ? _e : 0, (_f = props.contentClassInfo) !== null && _f !== void 0 ? _f : createTestECClassInfo(), (_g = props.pathToPrimaryClass) !== null && _g !== void 0 ? _g : createTestRelationshipPath(1), props.nestedFields, props.editor, !!props.autoExpand, props.renderer);
60
+ const field = new NestedContentField(props.category ?? createTestCategoryDescription(), props.name ?? "NestedContentField", props.label ?? "Nested Content", nestedContentFieldType, props.isReadonly ?? false, props.priority ?? 0, props.contentClassInfo ?? createTestECClassInfo(), props.pathToPrimaryClass ?? createTestRelationshipPath(1), props.nestedFields, props.editor, !!props.autoExpand, props.renderer);
64
61
  if (props.relationshipMeaning)
65
62
  field.relationshipMeaning = props.relationshipMeaning;
66
63
  field.rebuildParentship();
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyFieldsHelpers.js","sourceRoot":"","sources":["../../../src/test/PropertyFieldsHelpers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAG7G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA6B,EAAE,EAAE,CAAC,CAAC;IACxE,SAAS,EAAE,qBAAqB,EAAE;IAClC,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,QAAQ;IACd,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAAoC,EAAE,EAAE,CAAC,CAAC;IACtF,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,2BAA2B;IACxC,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,KAAK;IACb,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAE,EAAE,CAAC,CAAC;IACpE,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,sBAAsB;IAC5B,KAAK,EAAE,aAAa;IACpB,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAiB,CAAC,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAI,KAAK,EAAoB,CAAC;IAC3C,OAAO,MAAM,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAiC,EAAE,EAAE,CAAC,CAAC;IAChF,eAAe,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5F,eAAe,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5F,wBAAwB,EAAE,KAAK;IAC/B,gBAAgB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACzG,qBAAqB,EAAE,KAAK;IAC5B,yBAAyB,EAAE,KAAK;IAChC,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAS5C,EAAE,EAAE;;IACH,OAAO,IAAI,KAAK,CACd,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,mCAAI,6BAA6B,EAAE,EAClD,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,aAAa,EAC5B,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,cAAc,EAC9B,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI;QACb,WAAW,EAAE,mBAAmB,CAAC,SAAS;QAC1C,QAAQ,EAAE,QAAQ;KACnB,EACD,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,mCAAI,KAAK,EAC1B,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,mCAAI,CAAC,EACpB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EACb,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAChB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAUhD,EAAE,EAAE;;IACH,OAAO,IAAI,eAAe,CACxB,MAAA,KAAK,CAAC,QAAQ,mCAAI,6BAA6B,EAAE,EACjD,MAAA,KAAK,CAAC,IAAI,mCAAI,iBAAiB,EAC/B,MAAA,KAAK,CAAC,KAAK,mCAAI,kBAAkB,EACjC,MAAA,KAAK,CAAC,IAAI,mCAAI,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAChF,MAAA,KAAK,CAAC,UAAU,mCAAI,KAAK,EACzB,MAAA,KAAK,CAAC,QAAQ,mCAAI,CAAC,EACnB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAa5C,EAAE,EAAE;;IACH,MAAM,sBAAsB,GAA0B;QACpD,WAAW,EAAE,mBAAmB,CAAC,MAAM;QACvC,QAAQ,EAAE,wBAAwB;QAClC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAClC,MAAA,KAAK,CAAC,QAAQ,mCAAI,6BAA6B,EAAE,EACjD,MAAA,KAAK,CAAC,IAAI,mCAAI,oBAAoB,EAClC,MAAA,KAAK,CAAC,KAAK,mCAAI,gBAAgB,EAC/B,sBAAsB,EACtB,MAAA,KAAK,CAAC,UAAU,mCAAI,KAAK,EACzB,MAAA,KAAK,CAAC,QAAQ,mCAAI,CAAC,EACnB,MAAA,KAAK,CAAC,gBAAgB,mCAAI,qBAAqB,EAAE,EACjD,MAAA,KAAK,CAAC,kBAAkB,mCAAI,0BAA0B,CAAC,CAAC,CAAC,EACzD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,MAAM,EACZ,CAAC,CAAC,KAAK,CAAC,UAAU,EAClB,KAAK,CAAC,QAAQ,CACf,CAAC;IACF,IAAI,KAAK,CAAC,mBAAmB;QAC3B,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACxD,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Field, NestedContentField, PropertiesField, PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { CategoryDescription, ClassInfo, EditorDescription, Property, PropertyInfo, RelatedClassInfo, RelationshipMeaning, RelationshipPath, RendererDescription, StructTypeDescription, TypeDescription } from \"@itwin/presentation-common\";\n\nexport const createTestPropertyInfo = (props?: Partial<PropertyInfo>) => ({\n classInfo: createTestECClassInfo(),\n name: \"PropertyName\",\n type: \"string\",\n ...props,\n});\n\nexport const createTestCategoryDescription = (props?: Partial<CategoryDescription>) => ({\n name: \"test-category\",\n label: \"Test Category\",\n description: \"Test category description\",\n priority: 0,\n expand: false,\n ...props,\n});\n\nexport const createTestECClassInfo = (props?: Partial<ClassInfo>) => ({\n id: \"0x1\",\n name: \"SchemaName:ClassName\",\n label: \"Class Label\",\n ...props,\n});\n\nexport const createTestRelationshipPath = (length: number = 2) => {\n const path = new Array<RelatedClassInfo>();\n while (length--)\n path.push(createTestRelatedClassInfo());\n return path;\n};\n\nexport const createTestRelatedClassInfo = (props?: Partial<RelatedClassInfo>) => ({\n sourceClassInfo: createTestECClassInfo({ id: \"0x1\", name: \"source:class\", label: \"Source\" }),\n targetClassInfo: createTestECClassInfo({ id: \"0x2\", name: \"target:class\", label: \"Target\" }),\n isPolymorphicTargetClass: false,\n relationshipInfo: createTestECClassInfo({ id: \"0x3\", name: \"relationship:class\", label: \"Relationship\" }),\n isForwardRelationship: false,\n isPolymorphicRelationship: false,\n ...props,\n});\n\nexport const createTestSimpleContentField = (props?: {\n category?: CategoryDescription;\n type?: TypeDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n}) => {\n return new Field(\n props?.category ?? createTestCategoryDescription(),\n props?.name ?? \"SimpleField\",\n props?.label ?? \"Simple Field\",\n props?.type ?? {\n valueFormat: PropertyValueFormat.Primitive,\n typeName: \"string\",\n },\n props?.isReadonly ?? false,\n props?.priority ?? 0,\n props?.editor,\n props?.renderer\n );\n};\n\nexport const createTestPropertiesContentField = (props: {\n properties: Property[];\n category?: CategoryDescription;\n type?: TypeDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n}) => {\n return new PropertiesField(\n props.category ?? createTestCategoryDescription(),\n props.name ?? \"PropertiesField\",\n props.label ?? \"Properties Field\",\n props.type ?? { valueFormat: PropertyValueFormat.Primitive, typeName: \"string\" },\n props.isReadonly ?? false,\n props.priority ?? 0,\n props.properties,\n props.editor,\n props.renderer\n );\n};\n\nexport const createTestNestedContentField = (props: {\n nestedFields: Field[];\n category?: CategoryDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n contentClassInfo?: ClassInfo;\n pathToPrimaryClass?: RelationshipPath;\n autoExpand?: boolean;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n relationshipMeaning?: RelationshipMeaning;\n}) => {\n const nestedContentFieldType: StructTypeDescription = {\n valueFormat: PropertyValueFormat.Struct,\n typeName: \"NestedContentFieldType\",\n members: props.nestedFields.map((f) => ({\n name: f.name,\n label: f.label,\n type: f.type,\n })),\n };\n const field = new NestedContentField(\n props.category ?? createTestCategoryDescription(),\n props.name ?? \"NestedContentField\",\n props.label ?? \"Nested Content\",\n nestedContentFieldType,\n props.isReadonly ?? false,\n props.priority ?? 0,\n props.contentClassInfo ?? createTestECClassInfo(),\n props.pathToPrimaryClass ?? createTestRelationshipPath(1),\n props.nestedFields,\n props.editor,\n !!props.autoExpand,\n props.renderer,\n );\n if (props.relationshipMeaning)\n field.relationshipMeaning = props.relationshipMeaning;\n field.rebuildParentship();\n return field;\n};\n"]}
1
+ {"version":3,"file":"PropertyFieldsHelpers.js","sourceRoot":"","sources":["../../../src/test/PropertyFieldsHelpers.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*--------------------------------------------------------------------------------------------*/\nimport { Field, NestedContentField, PropertiesField, PropertyValueFormat } from \"@itwin/presentation-common\";\nimport type { CategoryDescription, ClassInfo, EditorDescription, Property, PropertyInfo, RelatedClassInfo, RelationshipMeaning, RelationshipPath, RendererDescription, StructTypeDescription, TypeDescription } from \"@itwin/presentation-common\";\n\nexport const createTestPropertyInfo = (props?: Partial<PropertyInfo>) => ({\n classInfo: createTestECClassInfo(),\n name: \"PropertyName\",\n type: \"string\",\n ...props,\n});\n\nexport const createTestCategoryDescription = (props?: Partial<CategoryDescription>) => ({\n name: \"test-category\",\n label: \"Test Category\",\n description: \"Test category description\",\n priority: 0,\n expand: false,\n ...props,\n});\n\nexport const createTestECClassInfo = (props?: Partial<ClassInfo>) => ({\n id: \"0x1\",\n name: \"SchemaName:ClassName\",\n label: \"Class Label\",\n ...props,\n});\n\nexport const createTestRelationshipPath = (length: number = 2) => {\n const path = new Array<RelatedClassInfo>();\n while (length--)\n path.push(createTestRelatedClassInfo());\n return path;\n};\n\nexport const createTestRelatedClassInfo = (props?: Partial<RelatedClassInfo>) => ({\n sourceClassInfo: createTestECClassInfo({ id: \"0x1\", name: \"source:class\", label: \"Source\" }),\n targetClassInfo: createTestECClassInfo({ id: \"0x2\", name: \"target:class\", label: \"Target\" }),\n isPolymorphicTargetClass: false,\n relationshipInfo: createTestECClassInfo({ id: \"0x3\", name: \"relationship:class\", label: \"Relationship\" }),\n isForwardRelationship: false,\n isPolymorphicRelationship: false,\n ...props,\n});\n\nexport const createTestSimpleContentField = (props?: {\n category?: CategoryDescription;\n type?: TypeDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n}) => {\n return new Field(\n props?.category ?? createTestCategoryDescription(),\n props?.name ?? \"SimpleField\",\n props?.label ?? \"Simple Field\",\n props?.type ?? {\n valueFormat: PropertyValueFormat.Primitive,\n typeName: \"string\",\n },\n props?.isReadonly ?? false,\n props?.priority ?? 0,\n props?.editor,\n props?.renderer\n );\n};\n\nexport const createTestPropertiesContentField = (props: {\n properties: Property[];\n category?: CategoryDescription;\n type?: TypeDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n}) => {\n return new PropertiesField(\n props.category ?? createTestCategoryDescription(),\n props.name ?? \"PropertiesField\",\n props.label ?? \"Properties Field\",\n props.type ?? { valueFormat: PropertyValueFormat.Primitive, typeName: \"string\" },\n props.isReadonly ?? false,\n props.priority ?? 0,\n props.properties,\n props.editor,\n props.renderer\n );\n};\n\nexport const createTestNestedContentField = (props: {\n nestedFields: Field[];\n category?: CategoryDescription;\n name?: string;\n label?: string;\n isReadonly?: boolean;\n priority?: number;\n contentClassInfo?: ClassInfo;\n pathToPrimaryClass?: RelationshipPath;\n autoExpand?: boolean;\n editor?: EditorDescription;\n renderer?: RendererDescription;\n relationshipMeaning?: RelationshipMeaning;\n}) => {\n const nestedContentFieldType: StructTypeDescription = {\n valueFormat: PropertyValueFormat.Struct,\n typeName: \"NestedContentFieldType\",\n members: props.nestedFields.map((f) => ({\n name: f.name,\n label: f.label,\n type: f.type,\n })),\n };\n const field = new NestedContentField(\n props.category ?? createTestCategoryDescription(),\n props.name ?? \"NestedContentField\",\n props.label ?? \"Nested Content\",\n nestedContentFieldType,\n props.isReadonly ?? false,\n props.priority ?? 0,\n props.contentClassInfo ?? createTestECClassInfo(),\n props.pathToPrimaryClass ?? createTestRelationshipPath(1),\n props.nestedFields,\n props.editor,\n !!props.autoExpand,\n props.renderer,\n );\n if (props.relationshipMeaning)\n field.relationshipMeaning = props.relationshipMeaning;\n field.rebuildParentship();\n return field;\n};\n"]}