@itwin/grouping-mapping-widget 0.36.0 → 0.37.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 (427) hide show
  1. package/lib/cjs/GroupingMappingWidget.js +15 -28
  2. package/lib/cjs/GroupingMappingWidget.js.map +1 -1
  3. package/lib/cjs/WidgetShell/GroupingMapping.d.ts +1 -2
  4. package/lib/cjs/WidgetShell/GroupingMapping.js +1 -1
  5. package/lib/cjs/WidgetShell/GroupingMapping.js.map +1 -1
  6. package/lib/cjs/WidgetShell/GroupingMappingContent.d.ts +2 -3
  7. package/lib/cjs/WidgetShell/GroupingMappingContent.js.map +1 -1
  8. package/lib/cjs/WidgetShell/GroupingMappingHeader.d.ts +0 -1
  9. package/lib/cjs/WidgetShell/GroupingMappingWidget.js +2 -1
  10. package/lib/cjs/WidgetShell/GroupingMappingWidget.js.map +1 -1
  11. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.d.ts +2 -3
  12. package/lib/cjs/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  13. package/lib/cjs/WidgetShell/WidgetHeader/WidgetHeader.d.ts +0 -1
  14. package/lib/cjs/common/hooks/useIsMounted.d.ts +0 -1
  15. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js +1 -2
  16. package/lib/cjs/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  17. package/lib/cjs/common/utils.d.ts +1 -1
  18. package/lib/cjs/common/utils.js +10 -21
  19. package/lib/cjs/common/utils.js.map +1 -1
  20. package/lib/cjs/common/viewerUtils.js.map +1 -1
  21. package/lib/cjs/components/Constants.js +1 -1
  22. package/lib/cjs/components/Constants.js.map +1 -1
  23. package/lib/cjs/components/GroupingMappingContext.js.map +1 -1
  24. package/lib/cjs/components/Groups/Editing/GroupAction.d.ts +0 -1
  25. package/lib/cjs/components/Groups/Editing/GroupAction.js +9 -5
  26. package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
  27. package/lib/cjs/components/Groups/Editing/GroupDetails.d.ts +0 -1
  28. package/lib/cjs/components/Groups/Editing/GroupDetailsActionPanel.d.ts +0 -1
  29. package/lib/cjs/components/Groups/Editing/GroupDetailsStep.d.ts +0 -1
  30. package/lib/cjs/components/Groups/GroupColorLegend.d.ts +0 -1
  31. package/lib/cjs/components/Groups/GroupListItem.d.ts +0 -1
  32. package/lib/cjs/components/Groups/GroupListItem.js.map +1 -1
  33. package/lib/cjs/components/Groups/GroupMenuActions.d.ts +0 -1
  34. package/lib/cjs/components/Groups/GroupMenuActions.js.map +1 -1
  35. package/lib/cjs/components/Groups/GroupOverlapProgressBar.d.ts +0 -1
  36. package/lib/cjs/components/Groups/Groups.js.map +1 -1
  37. package/lib/cjs/components/Groups/GroupsAddButton.d.ts +0 -1
  38. package/lib/cjs/components/Groups/GroupsShowHideButtons.d.ts +0 -1
  39. package/lib/cjs/components/Groups/GroupsShowHideButtons.js.map +1 -1
  40. package/lib/cjs/components/Groups/GroupsView.d.ts +1 -1
  41. package/lib/cjs/components/Groups/GroupsVisualization.d.ts +0 -1
  42. package/lib/cjs/components/Groups/GroupsVisualization.js.map +1 -1
  43. package/lib/cjs/components/Groups/GroupsVisualizationActions.d.ts +0 -1
  44. package/lib/cjs/components/Groups/GroupsVisualizationActions.js.map +1 -1
  45. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.d.ts +0 -1
  46. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js +28 -9
  47. package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  48. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js +36 -33
  49. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  50. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +0 -1
  51. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +0 -1
  52. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  53. package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderStep.d.ts +0 -1
  54. package/lib/cjs/components/Groups/ToggleGroupVisibility.d.ts +0 -1
  55. package/lib/cjs/components/Groups/groupsHelpers.d.ts +1 -1
  56. package/lib/cjs/components/Groups/groupsHelpers.js.map +1 -1
  57. package/lib/cjs/components/Groups/hooks/useGroupsOperations.d.ts +0 -1
  58. package/lib/cjs/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  59. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js +1 -2
  60. package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  61. package/lib/cjs/components/Groups/hooks/useVisualization.d.ts +0 -1
  62. package/lib/cjs/components/Groups/hooks/useVisualization.js.map +1 -1
  63. package/lib/cjs/components/Mappings/BlockingOverlay.d.ts +0 -1
  64. package/lib/cjs/components/Mappings/Editing/MappingAction.d.ts +0 -1
  65. package/lib/cjs/components/Mappings/Editing/MappingAction.js.map +1 -1
  66. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js +1 -2
  67. package/lib/cjs/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  68. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.d.ts +0 -1
  69. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js +8 -0
  70. package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  71. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.d.ts +0 -1
  72. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.d.ts +0 -1
  73. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.d.ts +0 -1
  74. package/lib/cjs/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.d.ts +0 -1
  75. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.d.ts +0 -1
  76. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js +1 -1
  77. package/lib/cjs/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  78. package/lib/cjs/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +1 -2
  79. package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  80. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.d.ts +0 -1
  81. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js +1 -2
  82. package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  83. package/lib/cjs/components/Mappings/Import/SelectIModel.d.ts +0 -1
  84. package/lib/cjs/components/Mappings/Import/SelectIModel.js.map +1 -1
  85. package/lib/cjs/components/Mappings/Import/SelectITwin.d.ts +0 -1
  86. package/lib/cjs/components/Mappings/Import/SelectITwin.js +1 -1
  87. package/lib/cjs/components/Mappings/Import/SelectITwin.js.map +1 -1
  88. package/lib/cjs/components/Mappings/Import/SelectMappings.d.ts +0 -1
  89. package/lib/cjs/components/Mappings/MappingListItem.d.ts +0 -1
  90. package/lib/cjs/components/Mappings/MappingListItem.js +1 -2
  91. package/lib/cjs/components/Mappings/MappingListItem.js.map +1 -1
  92. package/lib/cjs/components/Mappings/MappingViewActionGroup.d.ts +0 -1
  93. package/lib/cjs/components/Mappings/Mappings.d.ts +1 -2
  94. package/lib/cjs/components/Mappings/MappingsView.js +1 -1
  95. package/lib/cjs/components/Mappings/MappingsView.js.map +1 -1
  96. package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  97. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -2
  98. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js +1 -1
  99. package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  100. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.d.ts +0 -1
  101. package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  102. package/lib/cjs/components/Mappings/hooks/useRunExtraction.d.ts +0 -1
  103. package/lib/cjs/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  104. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +2 -3
  105. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +1 -1
  106. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  107. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +0 -1
  108. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +17 -4
  109. package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  110. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +0 -1
  111. package/lib/cjs/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  112. package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +0 -1
  113. package/lib/cjs/components/Properties/GroupColorToggle.d.ts +1 -2
  114. package/lib/cjs/components/Properties/GroupColorToggle.js.map +1 -1
  115. package/lib/cjs/components/Properties/GroupInformationPanel.d.ts +0 -1
  116. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.d.ts +0 -1
  117. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  118. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +0 -1
  119. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.d.ts +0 -1
  120. package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  121. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.d.ts +0 -1
  122. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +4 -6
  123. package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  124. package/lib/cjs/components/Properties/GroupProperties/SaveModal.d.ts +0 -1
  125. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.d.ts +0 -1
  126. package/lib/cjs/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  127. package/lib/cjs/components/Properties/PropertyAction.d.ts +0 -1
  128. package/lib/cjs/components/Properties/PropertyAction.js +7 -3
  129. package/lib/cjs/components/Properties/PropertyAction.js.map +1 -1
  130. package/lib/cjs/components/Properties/PropertyMenu.d.ts +0 -1
  131. package/lib/cjs/components/Properties/PropertyMenuWithVisualization.d.ts +0 -1
  132. package/lib/cjs/components/Properties/PropertyNameCell.d.ts +0 -1
  133. package/lib/cjs/components/Properties/PropertyTable.d.ts +0 -1
  134. package/lib/cjs/components/Properties/PropertyTableToolbar.d.ts +0 -1
  135. package/lib/cjs/components/Properties/ScrollableExpandableBlock.js.map +1 -1
  136. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js +2 -2
  137. package/lib/cjs/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  138. package/lib/cjs/components/Properties/hooks/useForwardRef.js.map +1 -1
  139. package/lib/cjs/components/Properties/hooks/useValidator.js.map +1 -1
  140. package/lib/cjs/components/SharedComponents/ActionPanel.d.ts +0 -1
  141. package/lib/cjs/components/SharedComponents/DeleteModal.d.ts +0 -1
  142. package/lib/cjs/components/SharedComponents/EmptyMessage.d.ts +0 -1
  143. package/lib/cjs/components/SharedComponents/LoadingOverlay.d.ts +0 -1
  144. package/lib/cjs/components/SharedComponents/LoadingSpinner.d.ts +0 -1
  145. package/lib/cjs/components/SharedComponents/StatusIcon.d.ts +1 -1
  146. package/lib/cjs/components/context/ExtractionClientContext.d.ts +0 -1
  147. package/lib/cjs/components/context/ExtractionClientContext.js.map +1 -1
  148. package/lib/cjs/components/context/ExtractionStateJobContext.js.map +1 -1
  149. package/lib/cjs/components/context/GroupHilitedElementsContext.js.map +1 -1
  150. package/lib/cjs/components/context/GroupingApiConfigContext.d.ts +2 -2
  151. package/lib/cjs/components/context/GroupingApiConfigContext.js.map +1 -1
  152. package/lib/cjs/components/context/GroupingMappingCustomUIContext.d.ts +0 -1
  153. package/lib/cjs/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  154. package/lib/cjs/components/context/GroupsClientContext.d.ts +0 -1
  155. package/lib/cjs/components/context/GroupsClientContext.js.map +1 -1
  156. package/lib/cjs/components/context/IModelsClientContext.d.ts +0 -1
  157. package/lib/cjs/components/context/IModelsClientContext.js.map +1 -1
  158. package/lib/cjs/components/context/ITwinsClientContext.d.ts +0 -1
  159. package/lib/cjs/components/context/ITwinsClientContext.js.map +1 -1
  160. package/lib/cjs/components/context/MappingClientContext.d.ts +0 -1
  161. package/lib/cjs/components/context/MappingClientContext.js.map +1 -1
  162. package/lib/cjs/components/context/PropertiesClientContext.d.ts +0 -1
  163. package/lib/cjs/components/context/PropertiesClientContext.js.map +1 -1
  164. package/lib/cjs/components/context/PropertiesGroupColorContext.js.map +1 -1
  165. package/lib/cjs/components/context/PropertyGridWrapperContext.d.ts +1 -0
  166. package/lib/cjs/components/context/PropertyGridWrapperContext.js.map +1 -1
  167. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.d.ts +0 -1
  168. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js +2 -1
  169. package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  170. package/lib/cjs/components/customUI/GroupingMappingCustomUI.d.ts +1 -1
  171. package/lib/cjs/components/customUI/GroupingMappingCustomUI.js +1 -1
  172. package/lib/cjs/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  173. package/lib/cjs/components/customUI/ManualGroupingCustomUI.d.ts +0 -1
  174. package/lib/cjs/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  175. package/lib/cjs/components/customUI/SearchGroupingCustomUI.d.ts +0 -1
  176. package/lib/cjs/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  177. package/lib/cjs/decorators/BboxDimensionsDecorator.d.ts +2 -0
  178. package/lib/cjs/decorators/BboxDimensionsDecorator.js +80 -29
  179. package/lib/cjs/decorators/BboxDimensionsDecorator.js.map +1 -1
  180. package/lib/cjs/formula/FormulaDataTypeResolver.js +1 -2
  181. package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -1
  182. package/lib/cjs/formula/FormulaFunctionProvider.js +3 -4
  183. package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
  184. package/lib/cjs/formula/FormulaOperatorsProvider.js +11 -11
  185. package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
  186. package/lib/cjs/formula/FormulaSplitter.js +1 -2
  187. package/lib/cjs/formula/FormulaSplitter.js.map +1 -1
  188. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js +1 -2
  189. package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  190. package/lib/cjs/formula/InfixToPostfixConverter.js +3 -3
  191. package/lib/cjs/formula/InfixToPostfixConverter.js.map +1 -1
  192. package/lib/cjs/formula/InputStream.js +3 -2
  193. package/lib/cjs/formula/InputStream.js.map +1 -1
  194. package/lib/cjs/formula/ParenthesisValidator.js +3 -3
  195. package/lib/cjs/formula/ParenthesisValidator.js.map +1 -1
  196. package/lib/cjs/formula/Queue.js +1 -0
  197. package/lib/cjs/formula/Queue.js.map +1 -1
  198. package/lib/cjs/formula/Stack.js +2 -3
  199. package/lib/cjs/formula/Stack.js.map +1 -1
  200. package/lib/cjs/formula/StringBuilder.js +1 -0
  201. package/lib/cjs/formula/StringBuilder.js.map +1 -1
  202. package/lib/cjs/formula/Types.d.ts +4 -4
  203. package/lib/cjs/formula/Utils.js +6 -7
  204. package/lib/cjs/formula/Utils.js.map +1 -1
  205. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.d.ts +2 -0
  206. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.js +137 -0
  207. package/lib/cjs/test/CalculatedPropertyActionWithVisuals.test.js.map +1 -0
  208. package/lib/cjs/test/GroupingMappingCustomUI.test.d.ts +1 -1
  209. package/lib/cjs/test/GroupingMappingCustomUI.test.js +37 -28
  210. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  211. package/lib/cjs/test/MockFactory.d.ts +1 -1
  212. package/lib/cjs/test/MockFactory.js.map +1 -1
  213. package/lib/cjs/test/PropertyFieldsHelpers.d.ts +22 -20
  214. package/lib/cjs/test/QueryBuilder.test.js.map +1 -1
  215. package/lib/cjs/test/WidgetHeader.test.d.ts +1 -1
  216. package/lib/cjs/test/WidgetHeader.test.js +2 -2
  217. package/lib/cjs/test/WidgetHeader.test.js.map +1 -1
  218. package/lib/cjs/test/setup.d.ts +1 -1
  219. package/lib/cjs/test/setup.js +1 -0
  220. package/lib/cjs/test/setup.js.map +1 -1
  221. package/lib/cjs/test/test-utils.d.ts +3 -3
  222. package/lib/cjs/test/test-utils.js +12 -6
  223. package/lib/cjs/test/test-utils.js.map +1 -1
  224. package/lib/esm/GroupingMappingWidget.js +15 -28
  225. package/lib/esm/GroupingMappingWidget.js.map +1 -1
  226. package/lib/esm/WidgetShell/GroupingMapping.d.ts +1 -2
  227. package/lib/esm/WidgetShell/GroupingMappingContent.d.ts +2 -3
  228. package/lib/esm/WidgetShell/GroupingMappingContent.js.map +1 -1
  229. package/lib/esm/WidgetShell/GroupingMappingHeader.d.ts +0 -1
  230. package/lib/esm/WidgetShell/GroupingMappingWidget.js +2 -1
  231. package/lib/esm/WidgetShell/GroupingMappingWidget.js.map +1 -1
  232. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.d.ts +2 -3
  233. package/lib/esm/WidgetShell/Router/GroupingMappingRouter.js.map +1 -1
  234. package/lib/esm/WidgetShell/WidgetHeader/WidgetHeader.d.ts +0 -1
  235. package/lib/esm/common/hooks/useIsMounted.d.ts +0 -1
  236. package/lib/esm/common/hooks/useMemoizedCollectionPick.js.map +1 -1
  237. package/lib/esm/common/utils.d.ts +1 -1
  238. package/lib/esm/common/utils.js +8 -19
  239. package/lib/esm/common/utils.js.map +1 -1
  240. package/lib/esm/common/viewerUtils.js.map +1 -1
  241. package/lib/esm/components/GroupingMappingContext.js.map +1 -1
  242. package/lib/esm/components/Groups/Editing/GroupAction.d.ts +0 -1
  243. package/lib/esm/components/Groups/Editing/GroupAction.js +9 -5
  244. package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
  245. package/lib/esm/components/Groups/Editing/GroupDetails.d.ts +0 -1
  246. package/lib/esm/components/Groups/Editing/GroupDetailsActionPanel.d.ts +0 -1
  247. package/lib/esm/components/Groups/Editing/GroupDetailsStep.d.ts +0 -1
  248. package/lib/esm/components/Groups/GroupColorLegend.d.ts +0 -1
  249. package/lib/esm/components/Groups/GroupListItem.d.ts +0 -1
  250. package/lib/esm/components/Groups/GroupListItem.js.map +1 -1
  251. package/lib/esm/components/Groups/GroupMenuActions.d.ts +0 -1
  252. package/lib/esm/components/Groups/GroupMenuActions.js.map +1 -1
  253. package/lib/esm/components/Groups/GroupOverlapProgressBar.d.ts +0 -1
  254. package/lib/esm/components/Groups/Groups.js.map +1 -1
  255. package/lib/esm/components/Groups/GroupsAddButton.d.ts +0 -1
  256. package/lib/esm/components/Groups/GroupsShowHideButtons.d.ts +0 -1
  257. package/lib/esm/components/Groups/GroupsShowHideButtons.js.map +1 -1
  258. package/lib/esm/components/Groups/GroupsView.d.ts +1 -1
  259. package/lib/esm/components/Groups/GroupsVisualization.d.ts +0 -1
  260. package/lib/esm/components/Groups/GroupsVisualization.js.map +1 -1
  261. package/lib/esm/components/Groups/GroupsVisualizationActions.d.ts +0 -1
  262. package/lib/esm/components/Groups/GroupsVisualizationActions.js.map +1 -1
  263. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.d.ts +0 -1
  264. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js +1 -2
  265. package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
  266. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js +36 -33
  267. package/lib/esm/components/Groups/QueryBuilder/QueryBuilder.js.map +1 -1
  268. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderActionPanel.d.ts +0 -1
  269. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +0 -1
  270. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
  271. package/lib/esm/components/Groups/QueryBuilder/QueryBuilderStep.d.ts +0 -1
  272. package/lib/esm/components/Groups/ToggleGroupVisibility.d.ts +0 -1
  273. package/lib/esm/components/Groups/groupsHelpers.d.ts +1 -1
  274. package/lib/esm/components/Groups/groupsHelpers.js.map +1 -1
  275. package/lib/esm/components/Groups/hooks/useGroupsOperations.d.ts +0 -1
  276. package/lib/esm/components/Groups/hooks/useGroupsOperations.js.map +1 -1
  277. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js +1 -2
  278. package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
  279. package/lib/esm/components/Groups/hooks/useVisualization.d.ts +0 -1
  280. package/lib/esm/components/Groups/hooks/useVisualization.js.map +1 -1
  281. package/lib/esm/components/Mappings/BlockingOverlay.d.ts +0 -1
  282. package/lib/esm/components/Mappings/Editing/MappingAction.d.ts +0 -1
  283. package/lib/esm/components/Mappings/Editing/MappingAction.js.map +1 -1
  284. package/lib/esm/components/Mappings/Extraction/ExtractionLogCustomFilter.js.map +1 -1
  285. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.d.ts +0 -1
  286. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js +8 -0
  287. package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
  288. package/lib/esm/components/Mappings/Extraction/ExtractionStates/QueuedExtractionState.d.ts +0 -1
  289. package/lib/esm/components/Mappings/Extraction/ExtractionStates/RunningExtractionState.d.ts +0 -1
  290. package/lib/esm/components/Mappings/Extraction/ExtractionStates/StartingExtractionState.d.ts +0 -1
  291. package/lib/esm/components/Mappings/Extraction/ExtractionStates/TerminalExtractionState.d.ts +0 -1
  292. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.d.ts +0 -1
  293. package/lib/esm/components/Mappings/Extraction/ExtractionStatus.js.map +1 -1
  294. package/lib/esm/components/Mappings/Extraction/ExtractionStatusIcon.d.ts +1 -2
  295. package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
  296. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.d.ts +0 -1
  297. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js +1 -2
  298. package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
  299. package/lib/esm/components/Mappings/Import/SelectIModel.d.ts +0 -1
  300. package/lib/esm/components/Mappings/Import/SelectIModel.js.map +1 -1
  301. package/lib/esm/components/Mappings/Import/SelectITwin.d.ts +0 -1
  302. package/lib/esm/components/Mappings/Import/SelectITwin.js.map +1 -1
  303. package/lib/esm/components/Mappings/Import/SelectMappings.d.ts +0 -1
  304. package/lib/esm/components/Mappings/MappingListItem.d.ts +0 -1
  305. package/lib/esm/components/Mappings/MappingListItem.js +1 -2
  306. package/lib/esm/components/Mappings/MappingListItem.js.map +1 -1
  307. package/lib/esm/components/Mappings/MappingViewActionGroup.d.ts +0 -1
  308. package/lib/esm/components/Mappings/Mappings.d.ts +1 -2
  309. package/lib/esm/components/Mappings/MappingsView.js +1 -1
  310. package/lib/esm/components/Mappings/MappingsView.js.map +1 -1
  311. package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
  312. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.d.ts +1 -2
  313. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js +1 -1
  314. package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
  315. package/lib/esm/components/Mappings/hooks/useMappingsOperations.d.ts +0 -1
  316. package/lib/esm/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
  317. package/lib/esm/components/Mappings/hooks/useRunExtraction.d.ts +0 -1
  318. package/lib/esm/components/Mappings/hooks/useRunExtraction.js.map +1 -1
  319. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +2 -3
  320. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +1 -1
  321. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
  322. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +0 -1
  323. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +17 -4
  324. package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
  325. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.d.ts +0 -1
  326. package/lib/esm/components/Properties/CalculatedProperties/SharedCalculatedPropertyForms.js.map +1 -1
  327. package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +0 -1
  328. package/lib/esm/components/Properties/GroupColorToggle.d.ts +1 -2
  329. package/lib/esm/components/Properties/GroupColorToggle.js.map +1 -1
  330. package/lib/esm/components/Properties/GroupInformationPanel.d.ts +0 -1
  331. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.d.ts +0 -1
  332. package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
  333. package/lib/esm/components/Properties/GroupProperties/GroupPropertyListItem.d.ts +0 -1
  334. package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.d.ts +0 -1
  335. package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
  336. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.d.ts +0 -1
  337. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +2 -4
  338. package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
  339. package/lib/esm/components/Properties/GroupProperties/SaveModal.d.ts +0 -1
  340. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.d.ts +0 -1
  341. package/lib/esm/components/Properties/GroupProperties/SortableHorizontalTile.js.map +1 -1
  342. package/lib/esm/components/Properties/PropertyAction.d.ts +0 -1
  343. package/lib/esm/components/Properties/PropertyAction.js +7 -3
  344. package/lib/esm/components/Properties/PropertyAction.js.map +1 -1
  345. package/lib/esm/components/Properties/PropertyMenu.d.ts +0 -1
  346. package/lib/esm/components/Properties/PropertyMenuWithVisualization.d.ts +0 -1
  347. package/lib/esm/components/Properties/PropertyNameCell.d.ts +0 -1
  348. package/lib/esm/components/Properties/PropertyTable.d.ts +0 -1
  349. package/lib/esm/components/Properties/PropertyTableToolbar.d.ts +0 -1
  350. package/lib/esm/components/Properties/ScrollableExpandableBlock.js.map +1 -1
  351. package/lib/esm/components/Properties/hooks/useFormulaValidation.js.map +1 -1
  352. package/lib/esm/components/Properties/hooks/useForwardRef.js.map +1 -1
  353. package/lib/esm/components/Properties/hooks/useValidator.js.map +1 -1
  354. package/lib/esm/components/SharedComponents/ActionPanel.d.ts +0 -1
  355. package/lib/esm/components/SharedComponents/DeleteModal.d.ts +0 -1
  356. package/lib/esm/components/SharedComponents/EmptyMessage.d.ts +0 -1
  357. package/lib/esm/components/SharedComponents/LoadingOverlay.d.ts +0 -1
  358. package/lib/esm/components/SharedComponents/LoadingSpinner.d.ts +0 -1
  359. package/lib/esm/components/SharedComponents/StatusIcon.d.ts +1 -1
  360. package/lib/esm/components/context/ExtractionClientContext.d.ts +0 -1
  361. package/lib/esm/components/context/ExtractionClientContext.js.map +1 -1
  362. package/lib/esm/components/context/ExtractionStateJobContext.js.map +1 -1
  363. package/lib/esm/components/context/GroupHilitedElementsContext.js.map +1 -1
  364. package/lib/esm/components/context/GroupingApiConfigContext.d.ts +2 -2
  365. package/lib/esm/components/context/GroupingApiConfigContext.js.map +1 -1
  366. package/lib/esm/components/context/GroupingMappingCustomUIContext.d.ts +0 -1
  367. package/lib/esm/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  368. package/lib/esm/components/context/GroupsClientContext.d.ts +0 -1
  369. package/lib/esm/components/context/GroupsClientContext.js.map +1 -1
  370. package/lib/esm/components/context/IModelsClientContext.d.ts +0 -1
  371. package/lib/esm/components/context/IModelsClientContext.js.map +1 -1
  372. package/lib/esm/components/context/ITwinsClientContext.d.ts +0 -1
  373. package/lib/esm/components/context/ITwinsClientContext.js.map +1 -1
  374. package/lib/esm/components/context/MappingClientContext.d.ts +0 -1
  375. package/lib/esm/components/context/MappingClientContext.js.map +1 -1
  376. package/lib/esm/components/context/PropertiesClientContext.d.ts +0 -1
  377. package/lib/esm/components/context/PropertiesClientContext.js.map +1 -1
  378. package/lib/esm/components/context/PropertiesGroupColorContext.js.map +1 -1
  379. package/lib/esm/components/context/PropertyGridWrapperContext.d.ts +1 -0
  380. package/lib/esm/components/context/PropertyGridWrapperContext.js.map +1 -1
  381. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.d.ts +0 -1
  382. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js +2 -1
  383. package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
  384. package/lib/esm/components/customUI/GroupingMappingCustomUI.d.ts +1 -1
  385. package/lib/esm/components/customUI/ManualGroupingCustomUI.d.ts +0 -1
  386. package/lib/esm/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  387. package/lib/esm/components/customUI/SearchGroupingCustomUI.d.ts +0 -1
  388. package/lib/esm/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  389. package/lib/esm/decorators/BboxDimensionsDecorator.d.ts +2 -0
  390. package/lib/esm/decorators/BboxDimensionsDecorator.js +79 -28
  391. package/lib/esm/decorators/BboxDimensionsDecorator.js.map +1 -1
  392. package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -1
  393. package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
  394. package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
  395. package/lib/esm/formula/FormulaSplitter.js.map +1 -1
  396. package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -1
  397. package/lib/esm/formula/InfixToPostfixConverter.js.map +1 -1
  398. package/lib/esm/formula/InputStream.js +3 -2
  399. package/lib/esm/formula/InputStream.js.map +1 -1
  400. package/lib/esm/formula/ParenthesisValidator.js.map +1 -1
  401. package/lib/esm/formula/Queue.js +1 -0
  402. package/lib/esm/formula/Queue.js.map +1 -1
  403. package/lib/esm/formula/Stack.js +2 -3
  404. package/lib/esm/formula/Stack.js.map +1 -1
  405. package/lib/esm/formula/StringBuilder.js +1 -0
  406. package/lib/esm/formula/StringBuilder.js.map +1 -1
  407. package/lib/esm/formula/Types.d.ts +4 -4
  408. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.d.ts +2 -0
  409. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.js +132 -0
  410. package/lib/esm/test/CalculatedPropertyActionWithVisuals.test.js.map +1 -0
  411. package/lib/esm/test/GroupingMappingCustomUI.test.d.ts +1 -1
  412. package/lib/esm/test/GroupingMappingCustomUI.test.js +37 -28
  413. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  414. package/lib/esm/test/MockFactory.d.ts +1 -1
  415. package/lib/esm/test/MockFactory.js.map +1 -1
  416. package/lib/esm/test/PropertyFieldsHelpers.d.ts +22 -20
  417. package/lib/esm/test/QueryBuilder.test.js.map +1 -1
  418. package/lib/esm/test/WidgetHeader.test.d.ts +1 -1
  419. package/lib/esm/test/WidgetHeader.test.js +2 -2
  420. package/lib/esm/test/WidgetHeader.test.js.map +1 -1
  421. package/lib/esm/test/setup.d.ts +1 -1
  422. package/lib/esm/test/setup.js +1 -0
  423. package/lib/esm/test/setup.js.map +1 -1
  424. package/lib/esm/test/test-utils.d.ts +3 -3
  425. package/lib/esm/test/test-utils.js +3 -2
  426. package/lib/esm/test/test-utils.js.map +1 -1
  427. package/package.json +43 -66
@@ -39,6 +39,8 @@ export declare class BboxDimensionsDecorator implements Decorator {
39
39
  private inferSpatialData;
40
40
  /** Validate if instance has all necessary properties. */
41
41
  private validateQueryResult;
42
+ private readNumber;
43
+ private asNumber;
42
44
  /**
43
45
  * Takes a Bounding Box and builds a rectangular polyface.
44
46
  * @param bbox The desired Bounding Box.
@@ -17,24 +17,23 @@ var BboxDimension;
17
17
  // IntermediateFaceArea = "Intermediate Face Area",
18
18
  // LargestFaceArea = "Largest Face Area",
19
19
  // Volume = "Volume"
20
- })(BboxDimension = exports.BboxDimension || (exports.BboxDimension = {}));
20
+ })(BboxDimension || (exports.BboxDimension = BboxDimension = {}));
21
21
  class BboxDimensionsDecorator {
22
- constructor() {
23
- this.points = [];
24
- this.shapes = [];
25
- this.markers = [];
26
- this.fill = false;
27
- this.shapeColor = core_common_1.ColorDef.fromTbgr(core_common_1.ColorDef.withTransparency(core_common_1.ColorDef.create(core_common_1.ColorByName.cyan).tbgr, 200));
28
- this.pointColor = core_common_1.ColorDef.white;
29
- this.lineColor = core_common_1.ColorDef.red;
30
- this.fillColor = core_common_1.ColorDef.white;
31
- this.shapeThickness = 1;
32
- this.pointThickness = 8;
33
- this.lineThickness = 4;
34
- this.edges = true;
35
- this.linePixels = core_common_1.LinePixels.Solid;
36
- // #endregion
37
- }
22
+ instance;
23
+ graphics;
24
+ points = [];
25
+ shapes = [];
26
+ markers = [];
27
+ fill = false;
28
+ shapeColor = core_common_1.ColorDef.fromTbgr(core_common_1.ColorDef.withTransparency(core_common_1.ColorDef.create(core_common_1.ColorByName.cyan).tbgr, 200));
29
+ pointColor = core_common_1.ColorDef.white;
30
+ lineColor = core_common_1.ColorDef.red;
31
+ fillColor = core_common_1.ColorDef.white;
32
+ shapeThickness = 1;
33
+ pointThickness = 8;
34
+ lineThickness = 4;
35
+ edges = true;
36
+ linePixels = core_common_1.LinePixels.Solid;
38
37
  /** Clear the current context. */
39
38
  clearContext() {
40
39
  this.points = [];
@@ -45,24 +44,37 @@ class BboxDimensionsDecorator {
45
44
  }
46
45
  /** Set the active instance used by the decorator. */
47
46
  async setContext(instanceId) {
48
- // get locating info on the requested instance
49
- const query = `SELECT bBoxHigh,bBoxLow,yaw,pitch,roll,origin FROM BisCore.SpatialElement WHERE ECInstanceId = ?`;
47
+ // Read spatial extents from SpatialIndex. Some element classes don't expose placement fields through ECSQL.
48
+ const query = `SELECT minX,minY,minZ,maxX,maxY,maxZ FROM BisCore.SpatialIndex WHERE ECInstanceId = ?`;
50
49
  if (!core_frontend_1.IModelApp.viewManager.selectedView || !core_frontend_1.IModelApp.viewManager.selectedView.iModel) {
51
50
  return false;
52
51
  }
53
52
  const params = new core_common_1.QueryBinder().bindId(1, instanceId);
54
- const queryIterable = core_frontend_1.IModelApp.viewManager.selectedView?.iModel.query(query, params, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
55
- const results = [];
56
- for await (const row of queryIterable) {
57
- results.push(row);
58
- }
59
- // if no results or more than one abort
60
- if (results.length !== 1) {
53
+ const reader = core_frontend_1.IModelApp.viewManager.selectedView.iModel.createQueryReader(query, params, { rowFormat: core_common_1.QueryRowFormat.UseECSqlPropertyIndexes });
54
+ const rows = await reader.toArray();
55
+ if (rows.length !== 1) {
61
56
  // TODO: maybe report a warning or something
62
57
  return false;
63
58
  }
64
- // validate result
65
- const elem = results[0];
59
+ const row = rows[0];
60
+ const minX = this.readNumber(row, 0, "minX");
61
+ const minY = this.readNumber(row, 1, "minY");
62
+ const minZ = this.readNumber(row, 2, "minZ");
63
+ const maxX = this.readNumber(row, 3, "maxX");
64
+ const maxY = this.readNumber(row, 4, "maxY");
65
+ const maxZ = this.readNumber(row, 5, "maxZ");
66
+ if (minX === undefined || minY === undefined || minZ === undefined || maxX === undefined || maxY === undefined || maxZ === undefined) {
67
+ return false;
68
+ }
69
+ const elem = {
70
+ bBoxHigh: core_geometry_1.Point3d.create(maxX, maxY, maxZ),
71
+ bBoxLow: core_geometry_1.Point3d.create(minX, minY, minZ),
72
+ // SpatialIndex stores world-aligned extents only. Build an axis-aligned placement.
73
+ yaw: 0,
74
+ pitch: 0,
75
+ roll: 0,
76
+ origin: core_geometry_1.Point3d.createZero(),
77
+ };
66
78
  if (!this.validateQueryResult(elem)) {
67
79
  return false;
68
80
  }
@@ -216,6 +228,45 @@ class BboxDimensionsDecorator {
216
228
  }
217
229
  return false;
218
230
  }
231
+ readNumber(row, index, key) {
232
+ if (Array.isArray(row)) {
233
+ return this.asNumber(row[index]);
234
+ }
235
+ if (!row || typeof row !== "object") {
236
+ return undefined;
237
+ }
238
+ const valueByIndex = row[index];
239
+ if (valueByIndex !== undefined) {
240
+ return this.asNumber(valueByIndex);
241
+ }
242
+ const valueByStringIndex = row[String(index)];
243
+ if (valueByStringIndex !== undefined) {
244
+ return this.asNumber(valueByStringIndex);
245
+ }
246
+ const value = row[key];
247
+ if (value !== undefined) {
248
+ return this.asNumber(value);
249
+ }
250
+ const keyLower = key.toLowerCase();
251
+ for (const [rowKey, rowValue] of Object.entries(row)) {
252
+ if (rowKey.toLowerCase() === keyLower) {
253
+ return this.asNumber(rowValue);
254
+ }
255
+ }
256
+ return undefined;
257
+ }
258
+ asNumber(value) {
259
+ if (typeof value === "number" && Number.isFinite(value)) {
260
+ return value;
261
+ }
262
+ if (typeof value === "string") {
263
+ const parsed = Number(value);
264
+ if (Number.isFinite(parsed)) {
265
+ return parsed;
266
+ }
267
+ }
268
+ return undefined;
269
+ }
219
270
  /**
220
271
  * Takes a Bounding Box and builds a rectangular polyface.
221
272
  * @param bbox The desired Bounding Box.
@@ -324,7 +375,7 @@ class BboxDimensionsDecorator {
324
375
  */
325
376
  createGraphics(context) {
326
377
  // 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.
327
- const builder = context.createGraphicBuilder(core_frontend_1.GraphicType.Scene, undefined, context.viewport.iModel.transientIds.next);
378
+ const builder = context.createGraphicBuilder(core_frontend_1.GraphicType.Scene, undefined, context.viewport.iModel.transientIds.getNext());
328
379
  // Read-only now
329
380
  // builder.wantNormals = true;
330
381
  this.points.forEach((styledPoint) => {
@@ -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 { CurvePrimitive, 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 { ColorByName, ColorDef, LinePixels, Placement3d, QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport type { DecorateContext, Decorator, GraphicBuilder, RenderGraphic } from \"@itwin/core-frontend\";\nimport { GraphicBranch, GraphicType, IModelApp, Marker } 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(ColorDef.withTransparency(ColorDef.create(ColorByName.cyan).tbgr, 200));\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 (!IModelApp.viewManager.selectedView || !IModelApp.viewManager.selectedView.iModel) {\n return false;\n }\n\n const params = new QueryBinder().bindId(1, instanceId);\n const queryIterable = IModelApp.viewManager.selectedView?.iModel.query(query, params, { rowFormat: QueryRowFormat.UseJsPropertyNames });\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)) 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(this.instance.placement.bbox, this.instance.placement.transform);\n this.addGeometry(polyface);\n const [line, points] = this.buildLine(this.instance.placement.bbox, dim, this.instance.placement.transform);\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(elem: SpatialElementQueryResult): 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(elem.bBoxHigh.x, elem.bBoxHigh.y, elem.bBoxHigh.z);\n const range = Range3d.create(bBoxLow, bBoxHigh);\n const ypra = new YawPitchRollAngles(Angle.createDegrees(elem.yaw), Angle.createDegrees(elem.pitch), Angle.createDegrees(elem.roll));\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(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);\n } else if (d01 >= d04 && d04 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);\n } else if (d04 >= d02 && d02 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);\n } else if (d04 >= d01 && d01 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);\n } else if (d02 >= d01 && d01 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);\n } else if (d02 >= d04 && d04 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);\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(bbox: Range3d, dim: BboxDimension, tf: Transform): [CurvePrimitive, Point3d[]] {\n // fallback scenario\n const fallback: [CurvePrimitive, Point3d[]] = [LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf), [bbox.low, bbox.high]];\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 [LineSegment3d.create(corners[targets[0]], corners[targets[1]]), [corners[targets[0]], corners[targets[1]]]];\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(GraphicType.Scene, undefined, context.viewport.iModel.transientIds.next);\n // Read-only now\n // builder.wantNormals = true;\n this.points.forEach((styledPoint) => {\n builder.setSymbology(styledPoint.color, styledPoint.fill ? styledPoint.color : ColorDef.white, styledPoint.lineThickness);\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(geometry: GeometryQuery, wantEdges: boolean, builder: GraphicBuilder) {\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":"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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 { CurvePrimitive, 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 { ColorByName, ColorDef, LinePixels, Placement3d, QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport type { DecorateContext, Decorator, GraphicBuilder, RenderGraphic } from \"@itwin/core-frontend\";\nimport { GraphicBranch, GraphicType, IModelApp, Marker } 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(ColorDef.withTransparency(ColorDef.create(ColorByName.cyan).tbgr, 200));\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 // Read spatial extents from SpatialIndex. Some element classes don't expose placement fields through ECSQL.\n const query = `SELECT minX,minY,minZ,maxX,maxY,maxZ FROM BisCore.SpatialIndex WHERE ECInstanceId = ?`;\n\n if (!IModelApp.viewManager.selectedView || !IModelApp.viewManager.selectedView.iModel) {\n return false;\n }\n\n const params = new QueryBinder().bindId(1, instanceId);\n const reader = IModelApp.viewManager.selectedView.iModel.createQueryReader(query, params, { rowFormat: QueryRowFormat.UseECSqlPropertyIndexes });\n const rows = await reader.toArray();\n if (rows.length !== 1) {\n // TODO: maybe report a warning or something\n return false;\n }\n\n const row = rows[0] as unknown;\n const minX = this.readNumber(row, 0, \"minX\");\n const minY = this.readNumber(row, 1, \"minY\");\n const minZ = this.readNumber(row, 2, \"minZ\");\n const maxX = this.readNumber(row, 3, \"maxX\");\n const maxY = this.readNumber(row, 4, \"maxY\");\n const maxZ = this.readNumber(row, 5, \"maxZ\");\n\n if (minX === undefined || minY === undefined || minZ === undefined || maxX === undefined || maxY === undefined || maxZ === undefined) {\n return false;\n }\n\n const elem: SpatialElementQueryResult = {\n bBoxHigh: Point3d.create(maxX, maxY, maxZ),\n bBoxLow: Point3d.create(minX, minY, minZ),\n // SpatialIndex stores world-aligned extents only. Build an axis-aligned placement.\n yaw: 0,\n pitch: 0,\n roll: 0,\n origin: Point3d.createZero(),\n };\n\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)) 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(this.instance.placement.bbox, this.instance.placement.transform);\n this.addGeometry(polyface);\n const [line, points] = this.buildLine(this.instance.placement.bbox, dim, this.instance.placement.transform);\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(elem: SpatialElementQueryResult): 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(elem.bBoxHigh.x, elem.bBoxHigh.y, elem.bBoxHigh.z);\n const range = Range3d.create(bBoxLow, bBoxHigh);\n const ypra = new YawPitchRollAngles(Angle.createDegrees(elem.yaw), Angle.createDegrees(elem.pitch), Angle.createDegrees(elem.roll));\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(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);\n } else if (d01 >= d04 && d04 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);\n } else if (d04 >= d02 && d02 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);\n } else if (d04 >= d01 && d01 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);\n } else if (d02 >= d01 && d01 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);\n } else if (d02 >= d04 && d04 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);\n pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);\n pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);\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 private readNumber(row: unknown, index: number, key: string): number | undefined {\n if (Array.isArray(row)) {\n return this.asNumber(row[index]);\n }\n if (!row || typeof row !== \"object\") {\n return undefined;\n }\n const valueByIndex = (row as Record<number, unknown>)[index];\n if (valueByIndex !== undefined) {\n return this.asNumber(valueByIndex);\n }\n const valueByStringIndex = (row as Record<string, unknown>)[String(index)];\n if (valueByStringIndex !== undefined) {\n return this.asNumber(valueByStringIndex);\n }\n const value = (row as Record<string, unknown>)[key];\n if (value !== undefined) {\n return this.asNumber(value);\n }\n const keyLower = key.toLowerCase();\n for (const [rowKey, rowValue] of Object.entries(row)) {\n if (rowKey.toLowerCase() === keyLower) {\n return this.asNumber(rowValue);\n }\n }\n return undefined;\n }\n\n private asNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return undefined;\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(bbox: Range3d, dim: BboxDimension, tf: Transform): [CurvePrimitive, Point3d[]] {\n // fallback scenario\n const fallback: [CurvePrimitive, Point3d[]] = [LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf), [bbox.low, bbox.high]];\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 [LineSegment3d.create(corners[targets[0]], corners[targets[1]]), [corners[targets[0]], corners[targets[1]]]];\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(GraphicType.Scene, undefined, context.viewport.iModel.transientIds.getNext());\n // Read-only now\n // builder.wantNormals = true;\n this.points.forEach((styledPoint) => {\n builder.setSymbology(styledPoint.color, styledPoint.fill ? styledPoint.color : ColorDef.white, styledPoint.lineThickness);\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(geometry: GeometryQuery, wantEdges: boolean, builder: GraphicBuilder) {\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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveFormulaDataType = void 0;
3
+ exports.resolveFormulaDataType = resolveFormulaDataType;
4
4
  const FormulaSplitter_1 = require("./FormulaSplitter");
5
5
  const FormulaTokensDataTypeResolver_1 = require("./FormulaTokensDataTypeResolver");
6
6
  const InfixToPostfixConverter_1 = require("./InfixToPostfixConverter");
@@ -50,5 +50,4 @@ function resolveFormulaDataType(formulaName, formula, properties, providedDataTy
50
50
  }
51
51
  return tokensDataType;
52
52
  }
53
- exports.resolveFormulaDataType = resolveFormulaDataType;
54
53
  //# sourceMappingURL=FormulaDataTypeResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":";;;AAKA,uDAAiD;AACjD,mFAAwE;AACxE,uEAAkE;AAElE,iEAA+E;AAE/E,8FAA8F;AAE9F;;;;;;;;GAQG;AAEH,SAAgB,sBAAsB,CAAC,WAAmB,EAAE,OAAe,EAAE,UAAuB,EAAE,gBAA2B;IAC/H,MAAM,gBAAgB,GAAG,IAAA,0CAAmB,EAAC,OAAO,CAAC,CAAC;IACtD,IAAI,uCAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QACnD,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;SAAM,IAAI,uCAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QAC1D,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;IAED,IAAI,kBAAkB,CAAC;IACvB,IAAI;QACF,kBAAkB,GAAG,IAAA,8BAAY,EAAC,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,IAAA,+CAAqB,EAAC,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,MAAM,cAAc,GAAG,IAAA,qDAAqB,EAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAElG,IAAI,gBAAgB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QACpD,MAAM,eAAe,GAAG,IAAA,8CAAuB,EAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,gBAAgB,KAAK,eAAe,EAAE;YACxC,OAAO,EAAE,YAAY,EAAE,gCAAgC,eAAe,0CAA0C,gBAAgB,EAAE,EAAE,CAAC;SACtI;KACF;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AArCD,wDAqCC","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 { DataType } from \"@itwin/insights-client\";\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 as FormulaDataType, PropertyMap } from \"./Types\";\nimport { inferToPropertyDataType } from \"../components/Properties/hooks/useFormulaValidation\";\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 * @public\n */\n\nexport function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap, providedDataType?: DataType): IResult<FormulaDataType> {\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 const tokensDataType = resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);\n\n if (providedDataType && !tokensDataType.errorMessage) {\n const formulaDataType = inferToPropertyDataType(tokensDataType.value);\n if (providedDataType !== formulaDataType) {\n return { errorMessage: `The formula result data type ${formulaDataType} does not match the provided data type ${providedDataType}` };\n }\n }\n\n return tokensDataType;\n}\n"]}
1
+ {"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":";;AAuBA,wDAqCC;AAvDD,uDAAiD;AACjD,mFAAwE;AACxE,uEAAkE;AAElE,iEAA+E;AAE/E,8FAA8F;AAE9F;;;;;;;;GAQG;AAEH,SAAgB,sBAAsB,CAAC,WAAmB,EAAE,OAAe,EAAE,UAAuB,EAAE,gBAA2B;IAC/H,MAAM,gBAAgB,GAAG,IAAA,0CAAmB,EAAC,OAAO,CAAC,CAAC;IACtD,IAAI,uCAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACpD,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;IACtE,CAAC;SAAM,IAAI,uCAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;QAC3D,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;IACtE,CAAC;IAED,IAAI,kBAAkB,CAAC;IACvB,IAAI,CAAC;QACH,kBAAkB,GAAG,IAAA,8BAAY,EAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,EAAE,YAAY,KAAK,EAAE,CAAC;YACxB,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAA,+CAAqB,EAAC,kBAAkB,CAAC,CAAC;IAEvE,IAAI,SAAS,KAAK,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,CAAC,YAAY,IAAI,gBAAgB,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,qDAAqB,EAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAElG,IAAI,gBAAgB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,eAAe,GAAG,IAAA,8CAAuB,EAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,gBAAgB,KAAK,eAAe,EAAE,CAAC;YACzC,OAAO,EAAE,YAAY,EAAE,gCAAgC,eAAe,0CAA0C,gBAAgB,EAAE,EAAE,CAAC;QACvI,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,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 type { DataType } from \"@itwin/insights-client\";\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 as FormulaDataType, PropertyMap } from \"./Types\";\nimport { inferToPropertyDataType } from \"../components/Properties/hooks/useFormulaValidation\";\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 * @public\n */\n\nexport function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap, providedDataType?: DataType): IResult<FormulaDataType> {\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 const tokensDataType = resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);\n\n if (providedDataType && !tokensDataType.errorMessage) {\n const formulaDataType = inferToPropertyDataType(tokensDataType.value);\n if (providedDataType !== formulaDataType) {\n return { errorMessage: `The formula result data type ${formulaDataType} does not match the provided data type ${providedDataType}` };\n }\n }\n\n return tokensDataType;\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFunction = exports.getFunction = exports.getFormulaFunctionReturnType = void 0;
3
+ exports.getFormulaFunctionReturnType = getFormulaFunctionReturnType;
4
+ exports.getFunction = getFunction;
5
+ exports.isFunction = isFunction;
4
6
  const Utils_1 = require("./Utils");
5
7
  function isValidArgument(arg, argPos, expectedArg) {
6
8
  let isValid;
@@ -56,7 +58,6 @@ function getFormulaFunctionReturnType(func, args) {
56
58
  }
57
59
  return { value: returnType };
58
60
  }
59
- exports.getFormulaFunctionReturnType = getFormulaFunctionReturnType;
60
61
  const functions = new Map([
61
62
  // Numerical functions
62
63
  ["abs", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" }],
@@ -144,9 +145,7 @@ function getFunction(name) {
144
145
  const nameLowerCase = name.toLowerCase();
145
146
  return functions.get(nameLowerCase);
146
147
  }
147
- exports.getFunction = getFunction;
148
148
  function isFunction(name) {
149
149
  return !!getFunction(name);
150
150
  }
151
- exports.isFunction = isFunction;
152
151
  //# sourceMappingURL=FormulaFunctionProvider.js.map
@@ -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 {\n isValid,\n invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.`,\n };\n}\n\nfunction validateArgumentsWithTypeMatching(): (\n arg: PossibleDataType,\n argPos: number,\n expectedArg: FormulaFunctionArgument,\n shouldTypeMatch: boolean,\n) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\") matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid) 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) return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch) returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nconst functions: Map<string, FormulaFunction> = new Map([\n // Numerical functions\n [\"abs\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"acos\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"acosh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"asin\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"asinh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atan\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atanh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atan2\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cbrt\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"ceil\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"clz32\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cos\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cosh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"exp\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"expm1\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"floor\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"fround\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"hypot\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"imul\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log1p\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log10\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log2\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"max\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"min\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"pow\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"random\", { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Double\" }],\n [\"round\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sign\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sin\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sinh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sqrt\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tan\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tanh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"trunc\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tonumber\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Double\" }],\n\n // String functions\n [\"charat\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"String\" }],\n [\"concat\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"padend\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"padstart\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"substring\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"String\" }],\n [\"indexof\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tolowercase\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"touppercase\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trim\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trimend\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trimstart\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"tostring\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"String\" }],\n\n // Conditional functions\n [\"if\", {\n argumentCountBounds: [3, 3],\n expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }],\n typesMatchFromIndex: 1,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifnull\", {\n argumentCountBounds: [2, 2],\n expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }],\n typesMatchFromIndex: 0,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifnotnull\", {\n argumentCountBounds: [2, 2],\n expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }],\n typesMatchFromIndex: 0,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnullorempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotnullorempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnullorwhitespace\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotnullorwhitespace\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n\n // Boolean functions\n [\"isin\", { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: \"Boolean\" }],\n [\"toboolean\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Boolean\" }],\n\n // Unit functions\n [\"getpersistenceunit\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"String\" }],\n [\"getpresentationunits\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"String\" }],\n]);\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return functions.get(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 {\n isValid,\n invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.`,\n };\n}\n\nfunction validateArgumentsWithTypeMatching(): (\n arg: PossibleDataType,\n argPos: number,\n expectedArg: FormulaFunctionArgument,\n shouldTypeMatch: boolean,\n) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\") matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid) 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) return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch) returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nconst functions: Map<string, FormulaFunction> = new Map([\n // Numerical functions\n [\"abs\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"acos\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"acosh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"asin\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"asinh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atan\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atanh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"atan2\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cbrt\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"ceil\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"clz32\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cos\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"cosh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"exp\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"expm1\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"floor\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"fround\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"hypot\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"imul\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log1p\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log10\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"log2\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"max\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"min\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"pow\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"random\", { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Double\" }],\n [\"round\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sign\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sin\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sinh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"sqrt\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tan\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tanh\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"trunc\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tonumber\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Double\" }],\n\n // String functions\n [\"charat\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"String\" }],\n [\"concat\", { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"padend\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"padstart\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"substring\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"String\" }],\n [\"indexof\", { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"Double\" }],\n [\"tolowercase\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"touppercase\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trim\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trimend\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"trimstart\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" }],\n [\"tostring\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"String\" }],\n\n // Conditional functions\n [\"if\", {\n argumentCountBounds: [3, 3],\n expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }],\n typesMatchFromIndex: 1,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifnull\", {\n argumentCountBounds: [2, 2],\n expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }],\n typesMatchFromIndex: 0,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifnotnull\", {\n argumentCountBounds: [2, 2],\n expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }],\n typesMatchFromIndex: 0,\n isreturnTypeFromTypeMatch: true,\n }],\n [\"ifempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnullorempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotnullorempty\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnullorwhitespace\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n [\"ifnotnullorwhitespace\", { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" }],\n\n // Boolean functions\n [\"isin\", { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: \"Boolean\" }],\n [\"toboolean\", { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Boolean\" }],\n\n // Unit functions\n [\"getpersistenceunit\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"String\" }],\n [\"getpresentationunits\", { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"String\" }],\n]);\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return functions.get(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOperatorReturnType = exports.getOperatorArgumentCountBounds = exports.isSupportedOperator = exports.getOperatorAssociativity = exports.getOperatorPrecedence = exports.getUnaryOperator = exports.getBinaryOperator = exports.isOperator = exports.OperatorAssociativity = exports.OperatorType = void 0;
3
+ exports.OperatorAssociativity = exports.OperatorType = void 0;
4
+ exports.isOperator = isOperator;
5
+ exports.getBinaryOperator = getBinaryOperator;
6
+ exports.getUnaryOperator = getUnaryOperator;
7
+ exports.getOperatorPrecedence = getOperatorPrecedence;
8
+ exports.getOperatorAssociativity = getOperatorAssociativity;
9
+ exports.isSupportedOperator = isSupportedOperator;
10
+ exports.getOperatorArgumentCountBounds = getOperatorArgumentCountBounds;
11
+ exports.getOperatorReturnType = getOperatorReturnType;
4
12
  const allOperators = [
5
13
  "+",
6
14
  "-",
@@ -81,16 +89,15 @@ var OperatorType;
81
89
  OperatorType[OperatorType["Inequality"] = 14] = "Inequality";
82
90
  OperatorType[OperatorType["LogicalAnd"] = 15] = "LogicalAnd";
83
91
  OperatorType[OperatorType["LogicalOr"] = 16] = "LogicalOr";
84
- })(OperatorType = exports.OperatorType || (exports.OperatorType = {}));
92
+ })(OperatorType || (exports.OperatorType = OperatorType = {}));
85
93
  var OperatorAssociativity;
86
94
  (function (OperatorAssociativity) {
87
95
  OperatorAssociativity[OperatorAssociativity["Left"] = 0] = "Left";
88
96
  OperatorAssociativity[OperatorAssociativity["Right"] = 1] = "Right";
89
- })(OperatorAssociativity = exports.OperatorAssociativity || (exports.OperatorAssociativity = {}));
97
+ })(OperatorAssociativity || (exports.OperatorAssociativity = OperatorAssociativity = {}));
90
98
  function isOperator(token) {
91
99
  return allOperators.includes(token);
92
100
  }
93
- exports.isOperator = isOperator;
94
101
  function getBinaryOperator(token) {
95
102
  switch (token) {
96
103
  case "**":
@@ -125,7 +132,6 @@ function getBinaryOperator(token) {
125
132
  return undefined;
126
133
  }
127
134
  }
128
- exports.getBinaryOperator = getBinaryOperator;
129
135
  function getUnaryOperator(token) {
130
136
  switch (token) {
131
137
  case "+":
@@ -138,7 +144,6 @@ function getUnaryOperator(token) {
138
144
  return undefined;
139
145
  }
140
146
  }
141
- exports.getUnaryOperator = getUnaryOperator;
142
147
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
143
148
  function getOperatorPrecedence(op) {
144
149
  switch (op) {
@@ -171,7 +176,6 @@ function getOperatorPrecedence(op) {
171
176
  return 1;
172
177
  }
173
178
  }
174
- exports.getOperatorPrecedence = getOperatorPrecedence;
175
179
  function getOperatorAssociativity(op) {
176
180
  switch (op) {
177
181
  case OperatorType.UnaryPlus:
@@ -197,11 +201,9 @@ function getOperatorAssociativity(op) {
197
201
  return OperatorAssociativity.Left;
198
202
  }
199
203
  }
200
- exports.getOperatorAssociativity = getOperatorAssociativity;
201
204
  function isSupportedOperator(token) {
202
205
  return undefined !== getUnaryOperator(token) || undefined !== getBinaryOperator(token);
203
206
  }
204
- exports.isSupportedOperator = isSupportedOperator;
205
207
  function getOperatorArgumentCountBounds(token) {
206
208
  switch (token) {
207
209
  case "**":
@@ -238,7 +240,6 @@ function getOperatorArgumentCountBounds(token) {
238
240
  return undefined;
239
241
  }
240
242
  }
241
- exports.getOperatorArgumentCountBounds = getOperatorArgumentCountBounds;
242
243
  function getOperatorReturnType(token, arg1, arg2) {
243
244
  if (!arg2 && !getUnaryOperator(token))
244
245
  return { errorMessage: `Unary operator "${token}" is not supported.` };
@@ -275,5 +276,4 @@ function getOperatorReturnType(token, arg1, arg2) {
275
276
  return { errorMessage: `Operator "${token}" is not supported.` };
276
277
  }
277
278
  }
278
- exports.getOperatorReturnType = getOperatorReturnType;
279
279
  //# sourceMappingURL=FormulaOperatorsProvider.js.map