@itwin/core-backend 5.2.0-dev.8 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/CHANGELOG.md +59 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +2 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
  6. package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
  7. package/lib/cjs/BackendLoggerCategory.js +6 -0
  8. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  9. package/lib/cjs/BisCoreSchema.js.map +1 -1
  10. package/lib/cjs/BlobContainerService.js.map +1 -1
  11. package/lib/cjs/BriefcaseManager.d.ts +57 -3
  12. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  13. package/lib/cjs/BriefcaseManager.js +151 -42
  14. package/lib/cjs/BriefcaseManager.js.map +1 -1
  15. package/lib/cjs/CatalogDb.js.map +1 -1
  16. package/lib/cjs/Category.js.map +1 -1
  17. package/lib/cjs/ChangeSummaryManager.js +2 -2
  18. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  19. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  20. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  21. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  22. package/lib/cjs/ChannelControl.js.map +1 -1
  23. package/lib/cjs/CheckpointManager.js.map +1 -1
  24. package/lib/cjs/ClassRegistry.js +5 -5
  25. package/lib/cjs/ClassRegistry.js.map +1 -1
  26. package/lib/cjs/CloudSqlite.d.ts +4 -0
  27. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  28. package/lib/cjs/CloudSqlite.js.map +1 -1
  29. package/lib/cjs/CodeService.js.map +1 -1
  30. package/lib/cjs/CodeSpecs.js.map +1 -1
  31. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  32. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  33. package/lib/cjs/DevTools.js.map +1 -1
  34. package/lib/cjs/DisplayStyle.js.map +1 -1
  35. package/lib/cjs/ECDb.d.ts +8 -0
  36. package/lib/cjs/ECDb.d.ts.map +1 -1
  37. package/lib/cjs/ECDb.js +22 -0
  38. package/lib/cjs/ECDb.js.map +1 -1
  39. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  40. package/lib/cjs/ECSqlStatement.js.map +1 -1
  41. package/lib/cjs/Element.js.map +1 -1
  42. package/lib/cjs/ElementAspect.js.map +1 -1
  43. package/lib/cjs/ElementGraphics.js.map +1 -1
  44. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  45. package/lib/cjs/Entity.js.map +1 -1
  46. package/lib/cjs/EntityReferences.js.map +1 -1
  47. package/lib/cjs/ExportGraphics.js.map +1 -1
  48. package/lib/cjs/ExternalSource.js.map +1 -1
  49. package/lib/cjs/FontFile.js.map +1 -1
  50. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  51. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  52. package/lib/cjs/GeometrySummary.js +47 -47
  53. package/lib/cjs/GeometrySummary.js.map +1 -1
  54. package/lib/cjs/IModelDb.d.ts +54 -3
  55. package/lib/cjs/IModelDb.d.ts.map +1 -1
  56. package/lib/cjs/IModelDb.js +96 -18
  57. package/lib/cjs/IModelDb.js.map +1 -1
  58. package/lib/cjs/IModelDbFonts.js.map +1 -1
  59. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  60. package/lib/cjs/IModelHost.d.ts +11 -1
  61. package/lib/cjs/IModelHost.d.ts.map +1 -1
  62. package/lib/cjs/IModelHost.js +5 -0
  63. package/lib/cjs/IModelHost.js.map +1 -1
  64. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
  65. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  66. package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
  67. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  68. package/lib/cjs/IModelJsFs.js.map +1 -1
  69. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  70. package/lib/cjs/IpcHost.js.map +1 -1
  71. package/lib/cjs/LineStyle.js.map +1 -1
  72. package/lib/cjs/LocalHub.js +1 -1
  73. package/lib/cjs/LocalHub.js.map +1 -1
  74. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  75. package/lib/cjs/LockControl.js.map +1 -1
  76. package/lib/cjs/Material.js.map +1 -1
  77. package/lib/cjs/Model.js.map +1 -1
  78. package/lib/cjs/NativeAppStorage.js.map +1 -1
  79. package/lib/cjs/NativeHost.js.map +1 -1
  80. package/lib/cjs/NavigationRelationship.js.map +1 -1
  81. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  82. package/lib/cjs/PropertyStore.js.map +1 -1
  83. package/lib/cjs/Relationship.js.map +1 -1
  84. package/lib/cjs/RpcBackend.js.map +1 -1
  85. package/lib/cjs/SQLiteDb.js.map +1 -1
  86. package/lib/cjs/Schema.js.map +1 -1
  87. package/lib/cjs/SchemaSync.js.map +1 -1
  88. package/lib/cjs/SchemaUtils.js.map +1 -1
  89. package/lib/cjs/SheetIndex.js.map +1 -1
  90. package/lib/cjs/SqliteChangesetReader.d.ts +8 -0
  91. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  92. package/lib/cjs/SqliteChangesetReader.js +11 -0
  93. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  94. package/lib/cjs/SqliteStatement.js.map +1 -1
  95. package/lib/cjs/StashManager.d.ts +175 -0
  96. package/lib/cjs/StashManager.d.ts.map +1 -0
  97. package/lib/cjs/StashManager.js +306 -0
  98. package/lib/cjs/StashManager.js.map +1 -0
  99. package/lib/cjs/Texture.js.map +1 -1
  100. package/lib/cjs/TileStorage.js.map +1 -1
  101. package/lib/cjs/TxnManager.d.ts +226 -15
  102. package/lib/cjs/TxnManager.d.ts.map +1 -1
  103. package/lib/cjs/TxnManager.js +249 -23
  104. package/lib/cjs/TxnManager.js.map +1 -1
  105. package/lib/cjs/ViewDefinition.js.map +1 -1
  106. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  107. package/lib/cjs/ViewStore.js.map +1 -1
  108. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
  109. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +40 -6
  111. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  112. package/lib/cjs/annotations/FrameGeometry.js +6 -6
  113. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  114. package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
  115. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  116. package/lib/cjs/annotations/LeaderGeometry.js +8 -7
  117. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  118. package/lib/cjs/annotations/TextAnnotationElement.d.ts +164 -36
  119. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  120. package/lib/cjs/annotations/TextAnnotationElement.js +315 -105
  121. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  122. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
  123. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  124. package/lib/cjs/annotations/TextAnnotationGeometry.js +26 -19
  125. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  126. package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -1
  127. package/lib/cjs/annotations/TextBlockGeometry.js +11 -3
  128. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  129. package/lib/cjs/annotations/TextBlockLayout.d.ts +51 -38
  130. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  131. package/lib/cjs/annotations/TextBlockLayout.js +252 -156
  132. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  133. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  134. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  135. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  136. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  137. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  138. package/lib/cjs/core-backend.js.map +1 -1
  139. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  140. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  141. package/lib/cjs/domains/GenericElements.js.map +1 -1
  142. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  143. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  144. package/lib/cjs/internal/ChannelAdmin.js +1 -1
  145. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  146. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  147. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  148. package/lib/cjs/internal/HubMock.js.map +1 -1
  149. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  150. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  151. package/lib/cjs/internal/NoLocks.js.map +1 -1
  152. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  153. package/lib/cjs/internal/Symbols.d.ts +1 -0
  154. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  155. package/lib/cjs/internal/Symbols.js +2 -1
  156. package/lib/cjs/internal/Symbols.js.map +1 -1
  157. package/lib/cjs/internal/annotations/fields.d.ts +2 -12
  158. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  159. package/lib/cjs/internal/annotations/fields.js +50 -45
  160. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  161. package/lib/cjs/internal/cross-package.js.map +1 -1
  162. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  163. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  164. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  165. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  166. package/lib/cjs/rpc/multipart.js.map +1 -1
  167. package/lib/cjs/rpc/tracing.js.map +1 -1
  168. package/lib/cjs/rpc/web/logging.js.map +1 -1
  169. package/lib/cjs/rpc/web/request.js.map +1 -1
  170. package/lib/cjs/rpc/web/response.js.map +1 -1
  171. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  172. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  173. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  174. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  175. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  176. package/lib/cjs/workspace/Settings.js.map +1 -1
  177. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  178. package/lib/cjs/workspace/Workspace.d.ts +1 -1
  179. package/lib/cjs/workspace/Workspace.js.map +1 -1
  180. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  181. package/lib/esm/BackendHubAccess.d.ts +2 -0
  182. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  183. package/lib/esm/BackendHubAccess.js.map +1 -1
  184. package/lib/esm/BackendLoggerCategory.d.ts +6 -0
  185. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
  186. package/lib/esm/BackendLoggerCategory.js +6 -0
  187. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  188. package/lib/esm/BisCoreSchema.js.map +1 -1
  189. package/lib/esm/BlobContainerService.js.map +1 -1
  190. package/lib/esm/BriefcaseManager.d.ts +57 -3
  191. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  192. package/lib/esm/BriefcaseManager.js +152 -43
  193. package/lib/esm/BriefcaseManager.js.map +1 -1
  194. package/lib/esm/CatalogDb.js.map +1 -1
  195. package/lib/esm/Category.js.map +1 -1
  196. package/lib/esm/ChangeSummaryManager.js +2 -2
  197. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  198. package/lib/esm/ChangedElementsDb.js.map +1 -1
  199. package/lib/esm/ChangesetECAdaptor.js +248 -248
  200. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  201. package/lib/esm/ChannelControl.js.map +1 -1
  202. package/lib/esm/CheckpointManager.js.map +1 -1
  203. package/lib/esm/ClassRegistry.js +5 -5
  204. package/lib/esm/ClassRegistry.js.map +1 -1
  205. package/lib/esm/CloudSqlite.d.ts +4 -0
  206. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  207. package/lib/esm/CloudSqlite.js.map +1 -1
  208. package/lib/esm/CodeService.js.map +1 -1
  209. package/lib/esm/CodeSpecs.js.map +1 -1
  210. package/lib/esm/ConcurrentQuery.js.map +1 -1
  211. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  212. package/lib/esm/DevTools.js.map +1 -1
  213. package/lib/esm/DisplayStyle.js.map +1 -1
  214. package/lib/esm/ECDb.d.ts +8 -0
  215. package/lib/esm/ECDb.d.ts.map +1 -1
  216. package/lib/esm/ECDb.js +22 -0
  217. package/lib/esm/ECDb.js.map +1 -1
  218. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  219. package/lib/esm/ECSqlStatement.js.map +1 -1
  220. package/lib/esm/Element.js.map +1 -1
  221. package/lib/esm/ElementAspect.js.map +1 -1
  222. package/lib/esm/ElementGraphics.js.map +1 -1
  223. package/lib/esm/ElementTreeWalker.js.map +1 -1
  224. package/lib/esm/Entity.js.map +1 -1
  225. package/lib/esm/EntityReferences.js.map +1 -1
  226. package/lib/esm/ExportGraphics.js.map +1 -1
  227. package/lib/esm/ExternalSource.js.map +1 -1
  228. package/lib/esm/FontFile.js.map +1 -1
  229. package/lib/esm/GeoCoordConfig.js.map +1 -1
  230. package/lib/esm/GeographicCRSServices.js.map +1 -1
  231. package/lib/esm/GeometrySummary.js +47 -47
  232. package/lib/esm/GeometrySummary.js.map +1 -1
  233. package/lib/esm/IModelDb.d.ts +54 -3
  234. package/lib/esm/IModelDb.d.ts.map +1 -1
  235. package/lib/esm/IModelDb.js +97 -19
  236. package/lib/esm/IModelDb.js.map +1 -1
  237. package/lib/esm/IModelDbFonts.js.map +1 -1
  238. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  239. package/lib/esm/IModelHost.d.ts +11 -1
  240. package/lib/esm/IModelHost.d.ts.map +1 -1
  241. package/lib/esm/IModelHost.js +5 -0
  242. package/lib/esm/IModelHost.js.map +1 -1
  243. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
  244. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  245. package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
  246. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  247. package/lib/esm/IModelJsFs.js.map +1 -1
  248. package/lib/esm/ImageSourceConversion.js.map +1 -1
  249. package/lib/esm/IpcHost.js.map +1 -1
  250. package/lib/esm/LineStyle.js.map +1 -1
  251. package/lib/esm/LocalHub.js +1 -1
  252. package/lib/esm/LocalHub.js.map +1 -1
  253. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  254. package/lib/esm/LockControl.js.map +1 -1
  255. package/lib/esm/Material.js.map +1 -1
  256. package/lib/esm/Model.js.map +1 -1
  257. package/lib/esm/NativeAppStorage.js.map +1 -1
  258. package/lib/esm/NativeHost.js.map +1 -1
  259. package/lib/esm/NavigationRelationship.js.map +1 -1
  260. package/lib/esm/PromiseMemoizer.js.map +1 -1
  261. package/lib/esm/PropertyStore.js.map +1 -1
  262. package/lib/esm/Relationship.js.map +1 -1
  263. package/lib/esm/RpcBackend.js.map +1 -1
  264. package/lib/esm/SQLiteDb.js.map +1 -1
  265. package/lib/esm/Schema.js.map +1 -1
  266. package/lib/esm/SchemaSync.js.map +1 -1
  267. package/lib/esm/SchemaUtils.js.map +1 -1
  268. package/lib/esm/SheetIndex.js.map +1 -1
  269. package/lib/esm/SqliteChangesetReader.d.ts +8 -0
  270. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  271. package/lib/esm/SqliteChangesetReader.js +11 -0
  272. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  273. package/lib/esm/SqliteStatement.js.map +1 -1
  274. package/lib/esm/StashManager.d.ts +175 -0
  275. package/lib/esm/StashManager.d.ts.map +1 -0
  276. package/lib/esm/StashManager.js +301 -0
  277. package/lib/esm/StashManager.js.map +1 -0
  278. package/lib/esm/Texture.js.map +1 -1
  279. package/lib/esm/TileStorage.js.map +1 -1
  280. package/lib/esm/TxnManager.d.ts +226 -15
  281. package/lib/esm/TxnManager.d.ts.map +1 -1
  282. package/lib/esm/TxnManager.js +247 -21
  283. package/lib/esm/TxnManager.js.map +1 -1
  284. package/lib/esm/ViewDefinition.js.map +1 -1
  285. package/lib/esm/ViewStateHydrator.js.map +1 -1
  286. package/lib/esm/ViewStore.js.map +1 -1
  287. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +17 -2
  288. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  289. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +38 -5
  290. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  291. package/lib/esm/annotations/FrameGeometry.js +6 -6
  292. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  293. package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
  294. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  295. package/lib/esm/annotations/LeaderGeometry.js +8 -7
  296. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  297. package/lib/esm/annotations/TextAnnotationElement.d.ts +164 -36
  298. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  299. package/lib/esm/annotations/TextAnnotationElement.js +317 -108
  300. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  301. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
  302. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  303. package/lib/esm/annotations/TextAnnotationGeometry.js +26 -19
  304. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  305. package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -1
  306. package/lib/esm/annotations/TextBlockGeometry.js +11 -3
  307. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  308. package/lib/esm/annotations/TextBlockLayout.d.ts +51 -38
  309. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  310. package/lib/esm/annotations/TextBlockLayout.js +253 -157
  311. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  312. package/lib/esm/core-backend.js.map +1 -1
  313. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  314. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  315. package/lib/esm/domains/GenericElements.js.map +1 -1
  316. package/lib/esm/domains/GenericSchema.js.map +1 -1
  317. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  318. package/lib/esm/internal/ChannelAdmin.js +1 -1
  319. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  320. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  321. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  322. package/lib/esm/internal/HubMock.js.map +1 -1
  323. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  324. package/lib/esm/internal/NativePlatform.js.map +1 -1
  325. package/lib/esm/internal/NoLocks.js.map +1 -1
  326. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  327. package/lib/esm/internal/Symbols.d.ts +1 -0
  328. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  329. package/lib/esm/internal/Symbols.js +1 -0
  330. package/lib/esm/internal/Symbols.js.map +1 -1
  331. package/lib/esm/internal/annotations/fields.d.ts +2 -12
  332. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  333. package/lib/esm/internal/annotations/fields.js +52 -47
  334. package/lib/esm/internal/annotations/fields.js.map +1 -1
  335. package/lib/esm/internal/cross-package.js.map +1 -1
  336. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  337. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  338. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  339. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  340. package/lib/esm/rpc/multipart.js.map +1 -1
  341. package/lib/esm/rpc/tracing.js.map +1 -1
  342. package/lib/esm/rpc/web/logging.js.map +1 -1
  343. package/lib/esm/rpc/web/request.js.map +1 -1
  344. package/lib/esm/rpc/web/response.js.map +1 -1
  345. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  346. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  347. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  348. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  349. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  350. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  351. package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
  352. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
  353. package/lib/esm/test/AnnotationTestUtils.js +7 -2
  354. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  355. package/lib/esm/test/AttachDb.test.js +11 -11
  356. package/lib/esm/test/AttachDb.test.js.map +1 -1
  357. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  358. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  359. package/lib/esm/test/IModelHost.test.js.map +1 -1
  360. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  361. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  362. package/lib/esm/test/IpcHost.test.js.map +1 -1
  363. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  364. package/lib/esm/test/PrintElementTree.js.map +1 -1
  365. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  366. package/lib/esm/test/RevisionUtility.js.map +1 -1
  367. package/lib/esm/test/SchemaUtils.test.js +25 -25
  368. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  369. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  370. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  371. package/lib/esm/test/TestUtils.js.map +1 -1
  372. package/lib/esm/test/annotations/Fields.test.js +338 -126
  373. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  374. package/lib/esm/test/annotations/FrameGeometry.test.js +4 -4
  375. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  376. package/lib/esm/test/annotations/LeaderGeometry.test.js +19 -17
  377. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  378. package/lib/esm/test/annotations/TextAnnotation.test.js +636 -60
  379. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  380. package/lib/esm/test/annotations/TextBlock.test.js +627 -193
  381. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  382. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  383. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +46 -0
  384. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
  385. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
  386. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  387. package/lib/esm/test/categories/Category.test.js.map +1 -1
  388. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  389. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  390. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  391. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  392. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  393. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  394. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  395. package/lib/esm/test/ecdb/ECDb.test.js +128 -58
  396. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  397. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  398. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  399. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  400. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  401. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  402. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  403. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  404. package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
  405. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  406. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  407. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  408. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  409. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  410. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  411. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  412. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  413. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  414. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  415. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  416. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  417. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  418. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  419. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  420. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  421. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  422. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  423. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  424. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  425. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  426. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  427. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  428. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  429. package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
  430. package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
  431. package/lib/esm/test/hubaccess/Rebase.test.js +680 -0
  432. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
  433. package/lib/esm/test/imageData.js.map +1 -1
  434. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  435. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  436. package/lib/esm/test/imodel/IModel.test.js +44 -44
  437. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  438. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  439. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  440. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
  441. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  442. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
  443. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  444. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  445. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  446. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
  447. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
  448. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
  449. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  450. package/lib/esm/test/index.js.map +1 -1
  451. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  452. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  453. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  454. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  455. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  456. package/lib/esm/test/rpc/response.test.js.map +1 -1
  457. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  458. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  459. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  460. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  461. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  462. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  463. package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
  464. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  465. package/lib/esm/test/standalone/ChangesetReader.test.js +248 -118
  466. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  467. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  468. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  469. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  470. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  471. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  472. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  473. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  474. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  475. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  476. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  477. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  478. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  479. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  480. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  481. package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
  482. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  483. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  484. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  485. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  486. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  487. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  488. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  490. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  491. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  492. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  493. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  494. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  495. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  496. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  497. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  498. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  499. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  500. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  501. package/lib/esm/workspace/Settings.js.map +1 -1
  502. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  503. package/lib/esm/workspace/Workspace.d.ts +1 -1
  504. package/lib/esm/workspace/Workspace.js.map +1 -1
  505. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  506. package/package.json +14 -14
@@ -5,29 +5,65 @@
5
5
  /** @packageDocumentation
6
6
  * @module Elements
7
7
  */
8
- import { BisCodeSpec, Code, ElementGeometry, Placement2d, Placement3d, TextAnnotation, TextStyleSettings } from "@itwin/core-common";
9
- import { AnnotationElement2d, DefinitionElement, GraphicalElement3d } from "../Element";
10
- import { assert } from "@itwin/core-bentley";
8
+ import { BisCodeSpec, Code, ElementGeometry, Placement2d, Placement3d, TextAnnotation, TextStyleSettings, traverseTextBlockComponent } from "@itwin/core-common";
9
+ import { AnnotationElement2d, DefinitionElement, Drawing, GraphicalElement3d } from "../Element";
10
+ import { assert, Id64 } from "@itwin/core-bentley";
11
11
  import { layoutTextBlock, TextStyleResolver } from "./TextBlockLayout";
12
12
  import { appendTextAnnotationGeometry } from "./TextAnnotationGeometry";
13
- import { ElementDrivesTextAnnotation } from "./ElementDrivesTextAnnotation";
14
- function parseTextAnnotationData(json) {
15
- if (!json)
16
- return undefined;
13
+ import { ElementDrivesTextAnnotation, TextAnnotationUsesTextStyleByDefault } from "./ElementDrivesTextAnnotation";
14
+ import * as semver from "semver";
15
+ /** The version of the JSON stored in `TextAnnotation2d/3dProps.textAnnotationData` used by the code.
16
+ * Uses the same semantics as [ECVersion]($ecschema-metadata).
17
+ * @internal
18
+ */
19
+ export const TEXT_ANNOTATION_JSON_VERSION = "1.0.0";
20
+ function validateAndMigrateVersionedJSON(json, currentVersion, migrate) {
21
+ let parsed;
17
22
  try {
18
- return JSON.parse(json);
23
+ parsed = JSON.parse(json);
19
24
  }
20
25
  catch {
21
26
  return undefined;
22
27
  }
28
+ const version = parsed.version;
29
+ if (typeof version !== "string" || !semver.valid(version))
30
+ throw new Error("JSON version is missing or invalid.");
31
+ if (typeof parsed.data !== "object" || parsed.data === null)
32
+ throw new Error("JSON data is missing or invalid.");
33
+ // Newer
34
+ if (semver.gt(version, currentVersion))
35
+ throw new Error(`JSON version ${parsed.version} is newer than supported version ${currentVersion}. Application update required to understand data.`);
36
+ // Older
37
+ if (semver.lt(version, currentVersion)) {
38
+ parsed.data = migrate(parsed);
39
+ parsed.version = currentVersion;
40
+ }
41
+ return parsed;
42
+ }
43
+ function migrateTextAnnotationData(oldData) {
44
+ if (oldData.version === TEXT_ANNOTATION_JSON_VERSION)
45
+ return oldData.data;
46
+ // Place migration logic here.
47
+ throw new Error(`Migration for textAnnotationData from version ${oldData.version} to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);
48
+ }
49
+ /** Parses, validates, and potentially migrates the text annotation data from a JSON string.
50
+ * @internal
51
+ */
52
+ export function parseTextAnnotationData(json) {
53
+ if (!json)
54
+ return undefined;
55
+ return validateAndMigrateVersionedJSON(json, TEXT_ANNOTATION_JSON_VERSION, migrateTextAnnotationData);
23
56
  }
24
- function getElementGeometryBuilderParams(iModel, modelId, _placementProps, stringifiedAnnotationProps, categoryId, _subCategory) {
25
- const annotationProps = parseTextAnnotationData(stringifiedAnnotationProps);
57
+ function getElementGeometryBuilderParams(iModel, modelId, categoryId, _placementProps, annotationProps, textStyleId, _subCategory) {
26
58
  const textBlock = TextAnnotation.fromJSON(annotationProps).textBlock;
27
- const textStyleResolver = new TextStyleResolver({ textBlock, iModel, modelId });
59
+ const textStyleResolver = new TextStyleResolver({ textBlock, textStyleId: textStyleId ?? "", iModel });
28
60
  const layout = layoutTextBlock({ iModel, textBlock, textStyleResolver });
29
61
  const builder = new ElementGeometry.Builder();
30
- appendTextAnnotationGeometry({ layout, textStyleResolver, annotationProps: annotationProps ?? {}, builder, categoryId });
62
+ let scaleFactor = 1;
63
+ const element = iModel.elements.getElement(modelId);
64
+ if (element instanceof Drawing)
65
+ scaleFactor = element.scaleFactor;
66
+ appendTextAnnotationGeometry({ layout, textStyleResolver, scaleFactor, annotationProps: annotationProps ?? {}, builder, categoryId });
31
67
  return { entryArray: builder.entries };
32
68
  }
33
69
  /** An element that displays textual content within a 2d model.
@@ -38,25 +74,32 @@ function getElementGeometryBuilderParams(iModel, modelId, _placementProps, strin
38
74
  export class TextAnnotation2d extends AnnotationElement2d /* implements ITextAnnotation */ {
39
75
  /** @internal */
40
76
  static get className() { return "TextAnnotation2d"; }
41
- /** Optional string containing the data associated with the text annotation. */
42
- _textAnnotationData;
77
+ /**
78
+ * The default [[AnnotationTextStyle]] used by the TextAnnotation2d.
79
+ * @beta
80
+ */
81
+ defaultTextStyle;
82
+ /** The data associated with the text annotation. */
83
+ _textAnnotationProps;
43
84
  /** Extract the textual content, if present.
44
85
  * @see [[setAnnotation]] to change it.
45
86
  */
46
87
  getAnnotation() {
47
- const textAnnotationProps = parseTextAnnotationData(this._textAnnotationData);
48
- return textAnnotationProps ? TextAnnotation.fromJSON(textAnnotationProps) : undefined;
88
+ return this._textAnnotationProps ? TextAnnotation.fromJSON(this._textAnnotationProps) : undefined;
49
89
  }
50
90
  /** Change the textual content of the `TextAnnotation2d`.
51
91
  * @see [[getAnnotation]] to extract the current annotation.
52
92
  * @param annotation The new annotation
53
93
  */
54
94
  setAnnotation(annotation) {
55
- this._textAnnotationData = annotation ? JSON.stringify(annotation.toJSON()) : undefined;
95
+ this._textAnnotationProps = annotation.toJSON();
56
96
  }
57
97
  constructor(props, iModel) {
58
98
  super(props, iModel);
59
- this._textAnnotationData = props.textAnnotationData;
99
+ if (props.defaultTextStyle) {
100
+ this.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(props.defaultTextStyle.id);
101
+ }
102
+ this._textAnnotationProps = parseTextAnnotationData(props.textAnnotationData)?.data;
60
103
  }
61
104
  /** Creates a new instance of `TextAnnotation2d` from its JSON representation. */
62
105
  static fromJSON(props, iModel) {
@@ -65,76 +108,96 @@ export class TextAnnotation2d extends AnnotationElement2d /* implements ITextAnn
65
108
  /**
66
109
  * Converts the current `TextAnnotation2d` instance to its JSON representation.
67
110
  * It also computes the `elementGeometryBuilderParams` property used to create the GeometryStream.
68
-
69
111
  * @inheritdoc
70
112
  */
71
113
  toJSON() {
72
114
  const props = super.toJSON();
73
- props.textAnnotationData = this._textAnnotationData;
74
- if (this._textAnnotationData) {
75
- props.elementGeometryBuilderParams = getElementGeometryBuilderParams(this.iModel, this.model, this.placement, this._textAnnotationData, this.category);
115
+ props.textAnnotationData = this._textAnnotationProps ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: this._textAnnotationProps }) : undefined;
116
+ if (this._textAnnotationProps) {
117
+ props.elementGeometryBuilderParams = getElementGeometryBuilderParams(this.iModel, this.model, this.category, this.placement, this._textAnnotationProps, this.defaultTextStyle ? this.defaultTextStyle.id : undefined);
76
118
  }
77
119
  return props;
78
120
  }
79
121
  /** Creates a new `TextAnnotation2d` instance with the specified properties.
80
122
  * @param iModelDb The iModel.
81
- * @param category The category ID for the annotation.
82
- * @param model The model ID where the annotation will be placed.
83
- * @param placement The placement properties for the annotation.
84
- * @param textAnnotationData Optional [[TextAnnotation]] JSON representation used to create the `TextAnnotation2d`. Essentially an empty element if not provided.
85
- * @param code Optional code for the element.
123
+ * @param arg The arguments for creating the TextAnnotation2d.
124
+ * @beta
86
125
  */
87
- static create(iModelDb, category, model, placement, textAnnotationData, code) {
88
- const props = {
126
+ static create(iModelDb, arg) {
127
+ const elementProps = {
89
128
  classFullName: this.classFullName,
90
- textAnnotationData: JSON.stringify(textAnnotationData),
91
- placement,
92
- model,
93
- category,
94
- code: code ?? Code.createEmpty(),
129
+ textAnnotationData: arg.textAnnotationProps ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: arg.textAnnotationProps }) : undefined,
130
+ defaultTextStyle: arg.defaultTextStyleId ? new TextAnnotationUsesTextStyleByDefault(arg.defaultTextStyleId).toJSON() : undefined,
131
+ placement: arg.placement,
132
+ model: arg.model,
133
+ category: arg.category,
134
+ code: arg.code ?? Code.createEmpty(),
95
135
  };
96
- return new this(props, iModelDb);
136
+ return new this(elementProps, iModelDb);
97
137
  }
98
138
  /**
99
- * Updates the geometry of the TextAnnotation2d on insert.
139
+ * Updates the geometry of the TextAnnotation2d on insert and validates version.
100
140
  * @inheritdoc
101
141
  * @beta
102
142
  */
103
143
  static onInsert(arg) {
104
144
  super.onInsert(arg);
105
- this.updateGeometry(arg.iModel, arg.props);
145
+ this.validateVersionAndUpdateGeometry(arg);
106
146
  }
107
147
  /**
108
- * Updates the geometry of the TextAnnotation2d on update.
148
+ * Updates the geometry of the TextAnnotation2d on update and validates version.
109
149
  * @inheritdoc
110
150
  * @beta
111
151
  */
112
152
  static onUpdate(arg) {
113
153
  super.onUpdate(arg);
114
- this.updateGeometry(arg.iModel, arg.props);
154
+ this.validateVersionAndUpdateGeometry(arg);
115
155
  }
116
156
  /**
117
157
  * Populates the `elementGeometryBuilderParams` property in the [TextAnnotation2dProps]($common).
118
- * It only does this if the `elementGeometryBuilderParams` is not already set and if there is actually a text annotation to produce geometry for.
158
+ * Only does this if the `elementGeometryBuilderParams` is not already set and if there is actually a text annotation to produce geometry for.
159
+ * Also, validates the version of the text annotation data and migrates it if necessary.
160
+ * @beta
119
161
  */
120
- static updateGeometry(iModelDb, props) {
121
- if (props.elementGeometryBuilderParams || !props.textAnnotationData) {
122
- return;
162
+ static validateVersionAndUpdateGeometry(arg) {
163
+ const props = arg.props;
164
+ const textAnnotationData = parseTextAnnotationData(props.textAnnotationData);
165
+ if (!props.elementGeometryBuilderParams && textAnnotationData) {
166
+ props.elementGeometryBuilderParams = getElementGeometryBuilderParams(arg.iModel, props.model, props.category, props.placement ?? Placement2d.fromJSON(), textAnnotationData.data, props.defaultTextStyle?.id);
123
167
  }
124
- props.elementGeometryBuilderParams = getElementGeometryBuilderParams(iModelDb, props.model, props.placement ?? Placement2d.fromJSON(), props.textAnnotationData, props.category);
125
168
  }
126
169
  /**
127
- * Collects reference IDs used by this `TextAnnotation2d`.
170
+ * TextAnnotation2d custom HandledProps include 'textAnnotationData'.
128
171
  * @inheritdoc
172
+ * @internal
129
173
  */
130
- collectReferenceIds(ids) {
131
- super.collectReferenceIds(ids);
132
- const annotation = this.getAnnotation();
133
- if (!annotation) {
134
- return;
174
+ static _customHandledProps = [
175
+ { propertyName: "textAnnotationData", source: "Class" },
176
+ ];
177
+ /**
178
+ * TextAnnotation2d deserializes 'textAnnotationData'.
179
+ * @inheritdoc
180
+ * @beta
181
+ */
182
+ static deserialize(props) {
183
+ const elProps = super.deserialize(props);
184
+ const textAnnotationData = parseTextAnnotationData(props.row.textAnnotationData);
185
+ if (textAnnotationData) {
186
+ elProps.textAnnotationData = JSON.stringify(textAnnotationData);
187
+ }
188
+ return elProps;
189
+ }
190
+ /**
191
+ * TextAnnotation2d serializes 'textAnnotationData'.
192
+ * @inheritdoc
193
+ * @beta
194
+ */
195
+ static serialize(props, iModel) {
196
+ const inst = super.serialize(props, iModel);
197
+ if (props.textAnnotationData !== undefined) {
198
+ inst.textAnnotationData = props.textAnnotationData;
135
199
  }
136
- if (annotation.textBlock.styleId)
137
- ids.addElement(annotation.textBlock.styleId);
200
+ return inst;
138
201
  }
139
202
  /** @internal */
140
203
  getTextBlocks() {
@@ -154,6 +217,19 @@ export class TextAnnotation2d extends AnnotationElement2d /* implements ITextAnn
154
217
  super.onUpdated(arg);
155
218
  ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
156
219
  }
220
+ collectReferenceIds(referenceIds) {
221
+ super.collectReferenceIds(referenceIds);
222
+ collectReferenceIds(this, referenceIds);
223
+ }
224
+ /** @internal */
225
+ static onCloned(context, srcProps, dstProps) {
226
+ super.onCloned(context, srcProps, dstProps);
227
+ const srcElem = TextAnnotation2d.fromJSON(srcProps, context.sourceDb);
228
+ ElementDrivesTextAnnotation.remapFields(srcElem, context);
229
+ const anno = srcElem.getAnnotation();
230
+ dstProps.textAnnotationData = anno ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: anno.toJSON() }) : undefined;
231
+ remapTextStyle(context, srcElem, dstProps);
232
+ }
157
233
  }
158
234
  /** An element that displays textual content within a 3d model.
159
235
  * The text is stored as a [TextAnnotation]($common) from which the element's [geometry]($docs/learning/common/GeometryStream.md) and [Placement]($common) are computed.
@@ -163,25 +239,32 @@ export class TextAnnotation2d extends AnnotationElement2d /* implements ITextAnn
163
239
  export class TextAnnotation3d extends GraphicalElement3d /* implements ITextAnnotation */ {
164
240
  /** @internal */
165
241
  static get className() { return "TextAnnotation3d"; }
166
- /** Optional string containing the data associated with the text annotation. */
167
- _textAnnotationData;
242
+ /**
243
+ * The default [[AnnotationTextStyle]] used by the TextAnnotation3d.
244
+ * @beta
245
+ */
246
+ defaultTextStyle;
247
+ /** The data associated with the text annotation. */
248
+ _textAnnotationProps;
168
249
  /** Extract the textual content, if present.
169
250
  * @see [[setAnnotation]] to change it.
170
251
  */
171
252
  getAnnotation() {
172
- const textAnnotationProps = parseTextAnnotationData(this._textAnnotationData);
173
- return textAnnotationProps ? TextAnnotation.fromJSON(textAnnotationProps) : undefined;
253
+ return this._textAnnotationProps ? TextAnnotation.fromJSON(this._textAnnotationProps) : undefined;
174
254
  }
175
255
  /** Change the textual content of the `TextAnnotation3d`.
176
256
  * @see [[getAnnotation]] to extract the current annotation.
177
257
  * @param annotation The new annotation
178
258
  */
179
259
  setAnnotation(annotation) {
180
- this._textAnnotationData = annotation ? JSON.stringify(annotation.toJSON()) : undefined;
260
+ this._textAnnotationProps = annotation.toJSON();
181
261
  }
182
262
  constructor(props, iModel) {
183
263
  super(props, iModel);
184
- this._textAnnotationData = props.textAnnotationData;
264
+ if (props.defaultTextStyle) {
265
+ this.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(props.defaultTextStyle.id);
266
+ }
267
+ this._textAnnotationProps = parseTextAnnotationData(props.textAnnotationData)?.data;
185
268
  }
186
269
  /** Creates a new instance of `TextAnnotation3d` from its JSON representation. */
187
270
  static fromJSON(props, iModel) {
@@ -194,71 +277,92 @@ export class TextAnnotation3d extends GraphicalElement3d /* implements ITextAnno
194
277
  */
195
278
  toJSON() {
196
279
  const props = super.toJSON();
197
- props.textAnnotationData = this._textAnnotationData;
198
- if (this._textAnnotationData) {
199
- props.elementGeometryBuilderParams = getElementGeometryBuilderParams(this.iModel, this.model, this.placement, this._textAnnotationData, this.category);
280
+ props.textAnnotationData = this._textAnnotationProps ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: this._textAnnotationProps }) : undefined;
281
+ if (this._textAnnotationProps) {
282
+ props.elementGeometryBuilderParams = getElementGeometryBuilderParams(this.iModel, this.model, this.category, this.placement, this._textAnnotationProps, this.defaultTextStyle ? this.defaultTextStyle.id : undefined);
200
283
  }
201
284
  return props;
202
285
  }
203
286
  /** Creates a new `TextAnnotation3d` instance with the specified properties.
204
287
  * @param iModelDb The iModel.
205
- * @param category The category ID for the annotation.
206
- * @param model The model ID where the annotation will be placed.
207
- * @param placement The placement properties for the annotation.
208
- * @param textAnnotationData Optional [[TextAnnotation]] JSON representation used to create the `TextAnnotation3d`. Essentially an empty element if not provided.
209
- * @param code Optional code for the element.
288
+ * @param arg The arguments for creating the TextAnnotation3d.
289
+ * @beta
210
290
  */
211
- static create(iModelDb, category, model, placement, textAnnotationData, code) {
212
- const props = {
291
+ static create(iModelDb, arg) {
292
+ const elementProps = {
213
293
  classFullName: this.classFullName,
214
- textAnnotationData: JSON.stringify(textAnnotationData),
215
- placement,
216
- model,
217
- category,
218
- code: code ?? Code.createEmpty(),
294
+ textAnnotationData: arg.textAnnotationProps ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: arg.textAnnotationProps }) : undefined,
295
+ defaultTextStyle: arg.defaultTextStyleId ? new TextAnnotationUsesTextStyleByDefault(arg.defaultTextStyleId).toJSON() : undefined,
296
+ placement: arg.placement,
297
+ model: arg.model,
298
+ category: arg.category,
299
+ code: arg.code ?? Code.createEmpty(),
219
300
  };
220
- return new this(props, iModelDb);
301
+ return new this(elementProps, iModelDb);
221
302
  }
222
303
  /**
223
- * Updates the geometry of the TextAnnotation3d on insert.
304
+ * Updates the geometry of the TextAnnotation3d on insert and validates version..
224
305
  * @inheritdoc
225
306
  * @beta
226
307
  */
227
308
  static onInsert(arg) {
228
309
  super.onInsert(arg);
229
- this.updateGeometry(arg.iModel, arg.props);
310
+ this.validateVersionAndUpdateGeometry(arg);
230
311
  }
231
312
  /**
232
- * Updates the geometry of the TextAnnotation3d on update.
313
+ * Updates the geometry of the TextAnnotation3d on update and validates version..
233
314
  * @inheritdoc
234
315
  * @beta
235
316
  */
236
317
  static onUpdate(arg) {
237
318
  super.onUpdate(arg);
238
- this.updateGeometry(arg.iModel, arg.props);
319
+ this.validateVersionAndUpdateGeometry(arg);
239
320
  }
240
321
  /**
241
322
  * Populates the `elementGeometryBuilderParams` property in the [TextAnnotation3dProps]($common).
242
- * It only does this if the `elementGeometryBuilderParams` is not already set and if there is actually a text annotation to produce geometry for.
323
+ * Only does this if the `elementGeometryBuilderParams` is not already set and if there is actually a text annotation to produce geometry for.
324
+ * Also, validates the version of the text annotation data and migrates it if necessary.
325
+ * @beta
243
326
  */
244
- static updateGeometry(iModelDb, props) {
245
- if (props.elementGeometryBuilderParams || !props.textAnnotationData) {
246
- return;
327
+ static validateVersionAndUpdateGeometry(arg) {
328
+ const props = arg.props;
329
+ const textAnnotationData = parseTextAnnotationData(props.textAnnotationData);
330
+ if (!props.elementGeometryBuilderParams && textAnnotationData) {
331
+ props.elementGeometryBuilderParams = getElementGeometryBuilderParams(arg.iModel, props.model, props.category, props.placement ?? Placement3d.fromJSON(), textAnnotationData.data, props.defaultTextStyle?.id);
247
332
  }
248
- props.elementGeometryBuilderParams = getElementGeometryBuilderParams(iModelDb, props.model, props.placement ?? Placement3d.fromJSON(), props.textAnnotationData, props.category);
249
333
  }
250
334
  /**
251
- * Collects reference IDs used by this `TextAnnotation3d`.
335
+ * TextAnnotation3d custom HandledProps include 'textAnnotationData'.
252
336
  * @inheritdoc
337
+ * @internal
253
338
  */
254
- collectReferenceIds(ids) {
255
- super.collectReferenceIds(ids);
256
- const annotation = this.getAnnotation();
257
- if (!annotation) {
258
- return;
339
+ static _customHandledProps = [
340
+ { propertyName: "textAnnotationData", source: "Class" },
341
+ ];
342
+ /**
343
+ * TextAnnotation3d deserializes 'textAnnotationData'.
344
+ * @inheritdoc
345
+ * @beta
346
+ */
347
+ static deserialize(props) {
348
+ const elProps = super.deserialize(props);
349
+ const textAnnotationData = parseTextAnnotationData(props.row.textAnnotationData);
350
+ if (textAnnotationData) {
351
+ elProps.textAnnotationData = JSON.stringify(textAnnotationData);
352
+ }
353
+ return elProps;
354
+ }
355
+ /**
356
+ * TextAnnotation3d serializes 'textAnnotationData'.
357
+ * @inheritdoc
358
+ * @beta
359
+ */
360
+ static serialize(props, iModel) {
361
+ const inst = super.serialize(props, iModel);
362
+ if (props.textAnnotationData !== undefined) {
363
+ inst.textAnnotationData = props.textAnnotationData;
259
364
  }
260
- if (annotation.textBlock.styleId)
261
- ids.addElement(annotation.textBlock.styleId);
365
+ return inst;
262
366
  }
263
367
  /** @internal */
264
368
  getTextBlocks() {
@@ -278,6 +382,40 @@ export class TextAnnotation3d extends GraphicalElement3d /* implements ITextAnno
278
382
  super.onUpdated(arg);
279
383
  ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
280
384
  }
385
+ collectReferenceIds(referenceIds) {
386
+ super.collectReferenceIds(referenceIds);
387
+ collectReferenceIds(this, referenceIds);
388
+ }
389
+ /** @internal */
390
+ static onCloned(context, srcProps, dstProps) {
391
+ super.onCloned(context, srcProps, dstProps);
392
+ const srcElem = TextAnnotation3d.fromJSON(srcProps, context.sourceDb);
393
+ ElementDrivesTextAnnotation.remapFields(srcElem, context);
394
+ const anno = srcElem.getAnnotation();
395
+ dstProps.textAnnotationData = anno ? JSON.stringify({ version: TEXT_ANNOTATION_JSON_VERSION, data: anno.toJSON() }) : undefined;
396
+ remapTextStyle(context, srcElem, dstProps);
397
+ }
398
+ }
399
+ function remapTextStyle(context, srcElem, dstProps) {
400
+ const dstStyleId = AnnotationTextStyle.remapTextStyleId(srcElem.defaultTextStyle?.id ?? Id64.invalid, context);
401
+ dstProps.defaultTextStyle = Id64.isValid(dstStyleId) ? new TextAnnotationUsesTextStyleByDefault(dstStyleId).toJSON() : undefined;
402
+ }
403
+ function collectReferenceIds(elem, referenceIds) {
404
+ const style = elem.defaultTextStyle?.id;
405
+ if (style && Id64.isValidId64(style)) {
406
+ referenceIds.addElement(style);
407
+ }
408
+ const block = elem.getAnnotation()?.textBlock;
409
+ if (block) {
410
+ for (const { child } of traverseTextBlockComponent(block)) {
411
+ if (child.type === "field") {
412
+ const hostId = child.propertyHost.elementId;
413
+ if (Id64.isValidId64(hostId)) {
414
+ referenceIds.addElement(hostId);
415
+ }
416
+ }
417
+ }
418
+ }
281
419
  }
282
420
  function getTextBlocks(elem) {
283
421
  const annotation = elem.getAnnotation();
@@ -294,7 +432,17 @@ function updateTextBlocks(elem, textBlocks) {
294
432
  }
295
433
  annotation.textBlock = textBlocks[0].textBlock;
296
434
  elem.setAnnotation(annotation);
297
- elem.update();
435
+ }
436
+ /** The version of the JSON stored in `AnnotationTextStyleProps.settings` used by the code.
437
+ * Uses the same semantics as [ECVersion]($ecschema-metadata).
438
+ * @internal
439
+ */
440
+ export const TEXT_STYLE_SETTINGS_JSON_VERSION = "1.0.0";
441
+ function migrateTextStyleSettings(oldData) {
442
+ if (oldData.version === TEXT_STYLE_SETTINGS_JSON_VERSION)
443
+ return oldData.data;
444
+ // Place migration logic here.
445
+ throw new Error(`Migration for settings from version ${oldData.version} to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
298
446
  }
299
447
  /**
300
448
  * The definition element that holds text style information.
@@ -317,7 +465,7 @@ export class AnnotationTextStyle extends DefinitionElement {
317
465
  super(props, iModel);
318
466
  this.description = props.description;
319
467
  const settingsProps = AnnotationTextStyle.parseTextStyleSettings(props.settings);
320
- this.settings = TextStyleSettings.fromJSON(settingsProps);
468
+ this.settings = TextStyleSettings.fromJSON(settingsProps?.data);
321
469
  }
322
470
  /**
323
471
  * Creates a Code for an `AnnotationTextStyle` given a name that is meant to be unique within the scope of the specified DefinitionModel.
@@ -325,6 +473,7 @@ export class AnnotationTextStyle extends DefinitionElement {
325
473
  * @param iModel - The IModelDb.
326
474
  * @param definitionModelId - The ID of the DefinitionModel that contains the AnnotationTextStyle and provides the scope for its name.
327
475
  * @param name - The AnnotationTextStyle name.
476
+ * @beta
328
477
  */
329
478
  static createCode(iModel, definitionModelId, name) {
330
479
  const codeSpec = iModel.codeSpecs.getByName(BisCodeSpec.annotationTextStyle);
@@ -334,18 +483,16 @@ export class AnnotationTextStyle extends DefinitionElement {
334
483
  * Creates a new instance of `AnnotationTextStyle` with the specified properties.
335
484
  *
336
485
  * @param iModelDb - The iModelDb.
337
- * @param definitionModelId - The ID of the [[DefinitionModel]].
338
- * @param name - The name to assign to the `AnnotationTextStyle`.
339
- * @param settings - Optional text style settings used to create the `AnnotationTextStyle`. Default settings will be used if not provided.
340
- * @param description - Optional description for the `AnnotationTextStyle`.
486
+ * @param arg - The arguments for creating the AnnotationTextStyle.
487
+ * @beta
341
488
  */
342
- static create(iModelDb, definitionModelId, name, settings, description) {
489
+ static create(iModelDb, arg) {
343
490
  const props = {
344
491
  classFullName: this.classFullName,
345
- model: definitionModelId,
346
- code: this.createCode(iModelDb, definitionModelId, name).toJSON(),
347
- description,
348
- settings: JSON.stringify(settings),
492
+ model: arg.definitionModelId,
493
+ code: this.createCode(iModelDb, arg.definitionModelId, arg.name).toJSON(),
494
+ description: arg.description,
495
+ settings: arg.settings ? JSON.stringify({ version: TEXT_STYLE_SETTINGS_JSON_VERSION, data: arg.settings }) : undefined,
349
496
  };
350
497
  return new this(props, iModelDb);
351
498
  }
@@ -356,7 +503,7 @@ export class AnnotationTextStyle extends DefinitionElement {
356
503
  toJSON() {
357
504
  const props = super.toJSON();
358
505
  props.description = this.description;
359
- props.settings = JSON.stringify(this.settings.toJSON());
506
+ props.settings = JSON.stringify({ version: TEXT_STYLE_SETTINGS_JSON_VERSION, data: this.settings.toJSON() });
360
507
  return props;
361
508
  }
362
509
  /** Creates a new instance of `AnnotationTextStyle` from its JSON representation. */
@@ -385,21 +532,83 @@ export class AnnotationTextStyle extends DefinitionElement {
385
532
  const settingProps = AnnotationTextStyle.parseTextStyleSettings(props.settings);
386
533
  if (!settingProps)
387
534
  return;
388
- const settings = TextStyleSettings.fromJSON(settingProps);
535
+ const settings = TextStyleSettings.fromJSON(settingProps.data);
389
536
  const errors = settings.getValidationErrors();
390
537
  if (errors.length > 0) {
391
538
  throw new Error(`Invalid AnnotationTextStyle settings: ${errors.join(", ")}`);
392
539
  }
393
540
  }
541
+ /**
542
+ * AnnotationTextStyle custom HandledProps include 'settings'.
543
+ * @inheritdoc
544
+ * @beta
545
+ */
546
+ static _customHandledProps = [
547
+ { propertyName: "settings", source: "Class" },
548
+ ];
549
+ /**
550
+ * AnnotationTextStyle deserializes 'settings'.
551
+ * @inheritdoc
552
+ * @beta
553
+ */
554
+ static deserialize(props) {
555
+ const elProps = super.deserialize(props);
556
+ const settings = this.parseTextStyleSettings(props.row.settings);
557
+ if (settings) {
558
+ elProps.settings = JSON.stringify(settings);
559
+ }
560
+ return elProps;
561
+ }
562
+ /**
563
+ * AnnotationTextStyle serializes 'settings'.
564
+ * @inheritdoc
565
+ * @beta
566
+ */
567
+ static serialize(props, iModel) {
568
+ const inst = super.serialize(props, iModel);
569
+ if (props.settings !== undefined) {
570
+ inst.settings = props.settings;
571
+ }
572
+ return inst;
573
+ }
574
+ /** Parses, validates, and potentially migrates the text style settings data from a JSON string. */
394
575
  static parseTextStyleSettings(json) {
395
576
  if (!json)
396
577
  return undefined;
397
- try {
398
- return JSON.parse(json);
578
+ return validateAndMigrateVersionedJSON(json, TEXT_STYLE_SETTINGS_JSON_VERSION, migrateTextStyleSettings);
579
+ }
580
+ /** When copying an element from one iModel to another, returns the Id of the AnnotationTextStyle in the `context`'s target iModel
581
+ * corresponding to `sourceTextStyleId`, or [Id64.invalid]($bentley) if no corresponding text style exists.
582
+ * If a text style with the same [Code]($common) exists in the target iModel, the style Id will be remapped to refer to that style.
583
+ * Otherwise, a copy of the style will be imported into the target iModel and its element Id returned.
584
+ * Implementations of [[ITextAnnotation]] should invoke this function when implementing their [[Element._onCloned]] method.
585
+ * @throws Error if an attempt to import the text style failed.
586
+ */
587
+ static remapTextStyleId(sourceTextStyleId, context) {
588
+ // No remapping necessary if there's no text style or we're not copying to a different iModel.
589
+ if (!Id64.isValid(sourceTextStyleId) || !context.isBetweenIModels) {
590
+ return sourceTextStyleId;
399
591
  }
400
- catch {
401
- return undefined;
592
+ // If the style's already been remapped, we're finished.
593
+ let dstStyleId = context.findTargetElementId(sourceTextStyleId);
594
+ if (Id64.isValid(dstStyleId)) {
595
+ return dstStyleId;
596
+ }
597
+ // Look up the style. It really ought to exist.
598
+ const srcStyle = context.sourceDb.elements.tryGetElement(sourceTextStyleId);
599
+ if (!srcStyle) {
600
+ return Id64.invalid;
601
+ }
602
+ // If a style with the same code exists in the target iModel, remap to that one.
603
+ dstStyleId = context.targetDb.elements.queryElementIdByCode(srcStyle.code);
604
+ if (undefined !== dstStyleId) {
605
+ return dstStyleId;
402
606
  }
607
+ // Copy the style into the target iModel and remap its Id.
608
+ const dstStyleProps = context.cloneElement(srcStyle);
609
+ dstStyleId = context.targetDb.elements.insertElement(dstStyleProps);
610
+ context.remapElement(sourceTextStyleId, dstStyleId);
611
+ return dstStyleId;
403
612
  }
404
613
  }
405
614
  //# sourceMappingURL=TextAnnotationElement.js.map