@itwin/core-backend 5.3.0-dev.2 → 5.3.0-dev.23

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 (473) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.d.ts +2 -2
  7. package/lib/cjs/BriefcaseManager.js.map +1 -1
  8. package/lib/cjs/CatalogDb.js.map +1 -1
  9. package/lib/cjs/Category.js.map +1 -1
  10. package/lib/cjs/ChangeSummaryManager.js +2 -2
  11. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  12. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  13. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  14. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  15. package/lib/cjs/ChannelControl.js.map +1 -1
  16. package/lib/cjs/CheckpointManager.js.map +1 -1
  17. package/lib/cjs/ClassRegistry.js +5 -5
  18. package/lib/cjs/ClassRegistry.js.map +1 -1
  19. package/lib/cjs/CloudSqlite.d.ts +12 -9
  20. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  21. package/lib/cjs/CloudSqlite.js.map +1 -1
  22. package/lib/cjs/CodeService.js.map +1 -1
  23. package/lib/cjs/CodeSpecs.js.map +1 -1
  24. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  25. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  26. package/lib/cjs/DevTools.js.map +1 -1
  27. package/lib/cjs/DisplayStyle.d.ts +2 -2
  28. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  29. package/lib/cjs/DisplayStyle.js +4 -4
  30. package/lib/cjs/DisplayStyle.js.map +1 -1
  31. package/lib/cjs/ECDb.js +1 -1
  32. package/lib/cjs/ECDb.js.map +1 -1
  33. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  34. package/lib/cjs/ECSqlStatement.js.map +1 -1
  35. package/lib/cjs/Element.d.ts +2 -2
  36. package/lib/cjs/Element.d.ts.map +1 -1
  37. package/lib/cjs/Element.js +2 -2
  38. package/lib/cjs/Element.js.map +1 -1
  39. package/lib/cjs/ElementAspect.js.map +1 -1
  40. package/lib/cjs/ElementGraphics.js.map +1 -1
  41. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  42. package/lib/cjs/Entity.js.map +1 -1
  43. package/lib/cjs/EntityReferences.js.map +1 -1
  44. package/lib/cjs/ExportGraphics.js.map +1 -1
  45. package/lib/cjs/ExternalSource.js.map +1 -1
  46. package/lib/cjs/FontFile.js.map +1 -1
  47. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  48. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  49. package/lib/cjs/GeometrySummary.js +47 -47
  50. package/lib/cjs/GeometrySummary.js.map +1 -1
  51. package/lib/cjs/IModelDb.d.ts.map +1 -1
  52. package/lib/cjs/IModelDb.js +20 -9
  53. package/lib/cjs/IModelDb.js.map +1 -1
  54. package/lib/cjs/IModelDbFonts.js.map +1 -1
  55. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  56. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  57. package/lib/cjs/IModelElementCloneContext.js +2 -2
  58. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  59. package/lib/cjs/IModelHost.d.ts +1 -2
  60. package/lib/cjs/IModelHost.d.ts.map +1 -1
  61. package/lib/cjs/IModelHost.js +9 -17
  62. package/lib/cjs/IModelHost.js.map +1 -1
  63. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  64. package/lib/cjs/IModelJsFs.js.map +1 -1
  65. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  66. package/lib/cjs/IpcHost.js.map +1 -1
  67. package/lib/cjs/LineStyle.js.map +1 -1
  68. package/lib/cjs/LocalHub.js +1 -1
  69. package/lib/cjs/LocalHub.js.map +1 -1
  70. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  71. package/lib/cjs/LockControl.js.map +1 -1
  72. package/lib/cjs/Material.d.ts +1 -1
  73. package/lib/cjs/Material.d.ts.map +1 -1
  74. package/lib/cjs/Material.js +2 -2
  75. package/lib/cjs/Material.js.map +1 -1
  76. package/lib/cjs/Model.js.map +1 -1
  77. package/lib/cjs/NativeAppStorage.js.map +1 -1
  78. package/lib/cjs/NativeHost.js.map +1 -1
  79. package/lib/cjs/NavigationRelationship.js.map +1 -1
  80. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  81. package/lib/cjs/PropertyStore.js.map +1 -1
  82. package/lib/cjs/Relationship.js.map +1 -1
  83. package/lib/cjs/RpcBackend.js.map +1 -1
  84. package/lib/cjs/SQLiteDb.js.map +1 -1
  85. package/lib/cjs/Schema.js.map +1 -1
  86. package/lib/cjs/SchemaSync.js.map +1 -1
  87. package/lib/cjs/SchemaUtils.js.map +1 -1
  88. package/lib/cjs/SheetIndex.js.map +1 -1
  89. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  90. package/lib/cjs/SqliteStatement.js.map +1 -1
  91. package/lib/cjs/StashManager.js.map +1 -1
  92. package/lib/cjs/Texture.js.map +1 -1
  93. package/lib/cjs/TileStorage.d.ts +1 -1
  94. package/lib/cjs/TileStorage.d.ts.map +1 -1
  95. package/lib/cjs/TileStorage.js.map +1 -1
  96. package/lib/cjs/TxnManager.d.ts +2 -0
  97. package/lib/cjs/TxnManager.d.ts.map +1 -1
  98. package/lib/cjs/TxnManager.js +10 -2
  99. package/lib/cjs/TxnManager.js.map +1 -1
  100. package/lib/cjs/ViewDefinition.d.ts +1 -1
  101. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  102. package/lib/cjs/ViewDefinition.js +2 -2
  103. package/lib/cjs/ViewDefinition.js.map +1 -1
  104. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  105. package/lib/cjs/ViewStore.js.map +1 -1
  106. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +7 -1
  107. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  108. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +25 -0
  109. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  110. package/lib/cjs/annotations/FrameGeometry.js +6 -6
  111. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  112. package/lib/cjs/annotations/LeaderGeometry.js +4 -4
  113. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  114. package/lib/cjs/annotations/TextAnnotationElement.d.ts +122 -21
  115. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  116. package/lib/cjs/annotations/TextAnnotationElement.js +298 -63
  117. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  118. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  119. package/lib/cjs/annotations/TextBlockGeometry.js +3 -3
  120. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  121. package/lib/cjs/annotations/TextBlockLayout.d.ts +2 -2
  122. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  123. package/lib/cjs/annotations/TextBlockLayout.js +52 -25
  124. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  125. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  126. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  127. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  128. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  129. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  130. package/lib/cjs/core-backend.js.map +1 -1
  131. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  132. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  133. package/lib/cjs/domains/GenericElements.js.map +1 -1
  134. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  135. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  136. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  137. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  138. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  139. package/lib/cjs/internal/HubMock.js.map +1 -1
  140. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  141. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  142. package/lib/cjs/internal/NoLocks.js.map +1 -1
  143. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  144. package/lib/cjs/internal/Symbols.js.map +1 -1
  145. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  146. package/lib/cjs/internal/annotations/fields.js +1 -0
  147. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  148. package/lib/cjs/internal/cross-package.js.map +1 -1
  149. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  150. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  151. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  152. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  153. package/lib/cjs/rpc/multipart.js.map +1 -1
  154. package/lib/cjs/rpc/tracing.js.map +1 -1
  155. package/lib/cjs/rpc/web/logging.js.map +1 -1
  156. package/lib/cjs/rpc/web/request.js.map +1 -1
  157. package/lib/cjs/rpc/web/response.js.map +1 -1
  158. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  159. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  160. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  161. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  162. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  163. package/lib/cjs/workspace/Settings.js.map +1 -1
  164. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  165. package/lib/cjs/workspace/Workspace.js.map +1 -1
  166. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  167. package/lib/esm/BackendHubAccess.js.map +1 -1
  168. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  169. package/lib/esm/BisCoreSchema.js.map +1 -1
  170. package/lib/esm/BlobContainerService.js.map +1 -1
  171. package/lib/esm/BriefcaseManager.d.ts +2 -2
  172. package/lib/esm/BriefcaseManager.js.map +1 -1
  173. package/lib/esm/CatalogDb.js.map +1 -1
  174. package/lib/esm/Category.js.map +1 -1
  175. package/lib/esm/ChangeSummaryManager.js +2 -2
  176. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  177. package/lib/esm/ChangedElementsDb.js.map +1 -1
  178. package/lib/esm/ChangesetECAdaptor.js +248 -248
  179. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  180. package/lib/esm/ChannelControl.js.map +1 -1
  181. package/lib/esm/CheckpointManager.js.map +1 -1
  182. package/lib/esm/ClassRegistry.js +5 -5
  183. package/lib/esm/ClassRegistry.js.map +1 -1
  184. package/lib/esm/CloudSqlite.d.ts +12 -9
  185. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  186. package/lib/esm/CloudSqlite.js.map +1 -1
  187. package/lib/esm/CodeService.js.map +1 -1
  188. package/lib/esm/CodeSpecs.js.map +1 -1
  189. package/lib/esm/ConcurrentQuery.js.map +1 -1
  190. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  191. package/lib/esm/DevTools.js.map +1 -1
  192. package/lib/esm/DisplayStyle.d.ts +2 -2
  193. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  194. package/lib/esm/DisplayStyle.js +4 -4
  195. package/lib/esm/DisplayStyle.js.map +1 -1
  196. package/lib/esm/ECDb.js +1 -1
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  199. package/lib/esm/ECSqlStatement.js.map +1 -1
  200. package/lib/esm/Element.d.ts +2 -2
  201. package/lib/esm/Element.d.ts.map +1 -1
  202. package/lib/esm/Element.js +2 -2
  203. package/lib/esm/Element.js.map +1 -1
  204. package/lib/esm/ElementAspect.js.map +1 -1
  205. package/lib/esm/ElementGraphics.js.map +1 -1
  206. package/lib/esm/ElementTreeWalker.js.map +1 -1
  207. package/lib/esm/Entity.js.map +1 -1
  208. package/lib/esm/EntityReferences.js.map +1 -1
  209. package/lib/esm/ExportGraphics.js.map +1 -1
  210. package/lib/esm/ExternalSource.js.map +1 -1
  211. package/lib/esm/FontFile.js.map +1 -1
  212. package/lib/esm/GeoCoordConfig.js.map +1 -1
  213. package/lib/esm/GeographicCRSServices.js.map +1 -1
  214. package/lib/esm/GeometrySummary.js +47 -47
  215. package/lib/esm/GeometrySummary.js.map +1 -1
  216. package/lib/esm/IModelDb.d.ts.map +1 -1
  217. package/lib/esm/IModelDb.js +20 -9
  218. package/lib/esm/IModelDb.js.map +1 -1
  219. package/lib/esm/IModelDbFonts.js.map +1 -1
  220. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  221. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  222. package/lib/esm/IModelElementCloneContext.js +2 -2
  223. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  224. package/lib/esm/IModelHost.d.ts +1 -2
  225. package/lib/esm/IModelHost.d.ts.map +1 -1
  226. package/lib/esm/IModelHost.js +10 -18
  227. package/lib/esm/IModelHost.js.map +1 -1
  228. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  229. package/lib/esm/IModelJsFs.js.map +1 -1
  230. package/lib/esm/ImageSourceConversion.js.map +1 -1
  231. package/lib/esm/IpcHost.js.map +1 -1
  232. package/lib/esm/LineStyle.js.map +1 -1
  233. package/lib/esm/LocalHub.js +1 -1
  234. package/lib/esm/LocalHub.js.map +1 -1
  235. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  236. package/lib/esm/LockControl.js.map +1 -1
  237. package/lib/esm/Material.d.ts +1 -1
  238. package/lib/esm/Material.d.ts.map +1 -1
  239. package/lib/esm/Material.js +2 -2
  240. package/lib/esm/Material.js.map +1 -1
  241. package/lib/esm/Model.js.map +1 -1
  242. package/lib/esm/NativeAppStorage.js.map +1 -1
  243. package/lib/esm/NativeHost.js.map +1 -1
  244. package/lib/esm/NavigationRelationship.js.map +1 -1
  245. package/lib/esm/PromiseMemoizer.js.map +1 -1
  246. package/lib/esm/PropertyStore.js.map +1 -1
  247. package/lib/esm/Relationship.js.map +1 -1
  248. package/lib/esm/RpcBackend.js.map +1 -1
  249. package/lib/esm/SQLiteDb.js.map +1 -1
  250. package/lib/esm/Schema.js.map +1 -1
  251. package/lib/esm/SchemaSync.js.map +1 -1
  252. package/lib/esm/SchemaUtils.js.map +1 -1
  253. package/lib/esm/SheetIndex.js.map +1 -1
  254. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  255. package/lib/esm/SqliteStatement.js.map +1 -1
  256. package/lib/esm/StashManager.js.map +1 -1
  257. package/lib/esm/Texture.js.map +1 -1
  258. package/lib/esm/TileStorage.d.ts +1 -1
  259. package/lib/esm/TileStorage.d.ts.map +1 -1
  260. package/lib/esm/TileStorage.js.map +1 -1
  261. package/lib/esm/TxnManager.d.ts +2 -0
  262. package/lib/esm/TxnManager.d.ts.map +1 -1
  263. package/lib/esm/TxnManager.js +10 -2
  264. package/lib/esm/TxnManager.js.map +1 -1
  265. package/lib/esm/ViewDefinition.d.ts +1 -1
  266. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  267. package/lib/esm/ViewDefinition.js +2 -2
  268. package/lib/esm/ViewDefinition.js.map +1 -1
  269. package/lib/esm/ViewStateHydrator.js.map +1 -1
  270. package/lib/esm/ViewStore.js.map +1 -1
  271. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +7 -1
  272. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  273. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +25 -0
  274. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  275. package/lib/esm/annotations/FrameGeometry.js +6 -6
  276. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  277. package/lib/esm/annotations/LeaderGeometry.js +4 -4
  278. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  279. package/lib/esm/annotations/TextAnnotationElement.d.ts +122 -21
  280. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  281. package/lib/esm/annotations/TextAnnotationElement.js +298 -64
  282. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  283. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  284. package/lib/esm/annotations/TextBlockGeometry.js +3 -3
  285. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  286. package/lib/esm/annotations/TextBlockLayout.d.ts +2 -2
  287. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  288. package/lib/esm/annotations/TextBlockLayout.js +52 -25
  289. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  290. package/lib/esm/core-backend.js.map +1 -1
  291. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  292. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  293. package/lib/esm/domains/GenericElements.js.map +1 -1
  294. package/lib/esm/domains/GenericSchema.js.map +1 -1
  295. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  296. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  297. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  298. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  299. package/lib/esm/internal/HubMock.js.map +1 -1
  300. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  301. package/lib/esm/internal/NativePlatform.js.map +1 -1
  302. package/lib/esm/internal/NoLocks.js.map +1 -1
  303. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  304. package/lib/esm/internal/Symbols.js.map +1 -1
  305. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  306. package/lib/esm/internal/annotations/fields.js +1 -0
  307. package/lib/esm/internal/annotations/fields.js.map +1 -1
  308. package/lib/esm/internal/cross-package.js.map +1 -1
  309. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  310. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  311. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  312. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  313. package/lib/esm/rpc/multipart.js.map +1 -1
  314. package/lib/esm/rpc/tracing.js.map +1 -1
  315. package/lib/esm/rpc/web/logging.js.map +1 -1
  316. package/lib/esm/rpc/web/request.js.map +1 -1
  317. package/lib/esm/rpc/web/response.js.map +1 -1
  318. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  319. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  320. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  321. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  322. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  323. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  324. package/lib/esm/test/AnnotationTestUtils.js +1 -1
  325. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  326. package/lib/esm/test/AttachDb.test.js +11 -11
  327. package/lib/esm/test/AttachDb.test.js.map +1 -1
  328. package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
  329. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
  330. package/lib/esm/test/ElementDrivesElement.test.js +862 -0
  331. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
  332. package/lib/esm/test/ElementLRUCache.test.js +13 -0
  333. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  334. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  335. package/lib/esm/test/IModelHost.test.js +17 -11
  336. package/lib/esm/test/IModelHost.test.js.map +1 -1
  337. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  338. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  339. package/lib/esm/test/IpcHost.test.js.map +1 -1
  340. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  341. package/lib/esm/test/PrintElementTree.js.map +1 -1
  342. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  343. package/lib/esm/test/RevisionUtility.js.map +1 -1
  344. package/lib/esm/test/SchemaUtils.test.js +25 -25
  345. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  346. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  347. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  348. package/lib/esm/test/TestUtils.js.map +1 -1
  349. package/lib/esm/test/annotations/Fields.test.js +229 -90
  350. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  351. package/lib/esm/test/annotations/FrameGeometry.test.js +4 -4
  352. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  353. package/lib/esm/test/annotations/LeaderGeometry.test.js +8 -8
  354. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  355. package/lib/esm/test/annotations/TextAnnotation.test.js +402 -36
  356. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  357. package/lib/esm/test/annotations/TextBlock.test.js +218 -151
  358. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  359. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  360. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  361. package/lib/esm/test/categories/Category.test.js.map +1 -1
  362. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  363. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  364. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  365. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +17 -17
  366. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  367. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  368. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  369. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  370. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  371. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  373. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  374. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  375. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  376. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  377. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  378. package/lib/esm/test/ecdb/ECSqlStatement.test.js +359 -328
  379. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  380. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  381. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  382. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  383. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  384. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  385. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  386. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  387. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  388. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  389. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  390. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  391. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  392. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  393. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  394. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  395. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  396. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  397. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  398. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  399. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  400. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  401. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  402. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  403. package/lib/esm/test/hubaccess/Rebase.test.js +103 -35
  404. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  405. package/lib/esm/test/imageData.js.map +1 -1
  406. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  407. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  408. package/lib/esm/test/imodel/IModel.test.js +89 -44
  409. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  410. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  411. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  412. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  413. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  414. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  415. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  416. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  417. package/lib/esm/test/index.js.map +1 -1
  418. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  419. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  420. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  421. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  422. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  423. package/lib/esm/test/rpc/response.test.js.map +1 -1
  424. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  425. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  426. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  427. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  428. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  429. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  430. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  431. package/lib/esm/test/standalone/ChangesetReader.test.js +164 -170
  432. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  433. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  434. package/lib/esm/test/standalone/DisplayStyle.test.js +6 -6
  435. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  436. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  437. package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
  438. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  439. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  440. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  441. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  442. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  443. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  444. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  445. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  446. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  447. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  448. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  449. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  450. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  451. package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
  452. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  453. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  454. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  455. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  456. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  457. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  458. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  459. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  460. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  461. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  462. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  463. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  464. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  465. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  466. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  467. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  468. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  469. package/lib/esm/workspace/Settings.js.map +1 -1
  470. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  471. package/lib/esm/workspace/Workspace.js.map +1 -1
  472. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  473. package/package.json +16 -18
@@ -4,9 +4,9 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { expect } from "chai";
6
6
  import { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from "@itwin/core-geometry";
7
- import { FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
7
+ import { FieldRun, FontType, FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
8
8
  import { StandaloneDb } from "../../IModelDb";
9
- import { AnnotationTextStyle, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
9
+ import { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
10
10
  import { IModelTestUtils } from "../IModelTestUtils";
11
11
  import { Subject } from "../../Element";
12
12
  import { Guid, Id64 } from "@itwin/core-bentley";
@@ -19,6 +19,8 @@ import { computeTextRangeAsStringLength, MockBuilder } from "../AnnotationTestUt
19
19
  import { TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementDrivesTextAnnotation";
20
20
  import { layoutTextBlock, TextStyleResolver } from "../../annotations/TextBlockLayout";
21
21
  import { appendTextAnnotationGeometry } from "../../annotations/TextAnnotationGeometry";
22
+ import { IModelElementCloneContext } from "../../IModelElementCloneContext";
23
+ import * as fs from "fs";
22
24
  function mockIModel() {
23
25
  const iModel = {
24
26
  fonts: {
@@ -30,13 +32,12 @@ function mockIModel() {
30
32
  return iModel;
31
33
  }
32
34
  function createAnnotation(textBlock) {
33
- const styleOverrides = { fontName: "Karla" };
35
+ const styleOverrides = { font: { name: "Karla" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };
34
36
  const block = textBlock ?? TextBlock.create({ styleOverrides });
35
37
  if (!textBlock) {
36
38
  block.appendRun(TextRun.create({ content: "Run, Barry,", styleOverrides }));
37
39
  block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides }));
38
40
  block.appendRun(FractionRun.create({ numerator: "Harrison", denominator: "Wells", styleOverrides }));
39
- block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
40
41
  }
41
42
  const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
42
43
  annotation.anchor = { vertical: "middle", horizontal: "right" };
@@ -83,8 +84,13 @@ const createIModel = async (name) => {
83
84
  });
84
85
  return iModel;
85
86
  };
86
- const createAnnotationTextStyle = (iModel, definitionModel, name, settings = TextStyleSettings.defaultProps) => {
87
- return AnnotationTextStyle.create(iModel, definitionModel, name, settings, "description");
87
+ const createAnnotationTextStyle = (iModel, definitionModelId, name, settings = TextStyleSettings.defaultProps) => {
88
+ return AnnotationTextStyle.create(iModel, {
89
+ definitionModelId,
90
+ name,
91
+ settings,
92
+ description: "description",
93
+ });
88
94
  };
89
95
  function createElement2d(imodel, createArgs) {
90
96
  const placement = {
@@ -124,13 +130,56 @@ describe("TextAnnotation element", () => {
124
130
  ...props,
125
131
  }, mockIModel());
126
132
  }
133
+ describe("versioning", () => {
134
+ it("throws if the JSON has no version", () => {
135
+ expect(() => makeElement({
136
+ textAnnotationData: JSON.stringify({
137
+ data: {
138
+ textBlock: TextBlock.create().toJSON()
139
+ }
140
+ }),
141
+ })).to.throw("JSON version is missing or invalid.");
142
+ });
143
+ it("throws if the JSON has no data", () => {
144
+ expect(() => makeElement({
145
+ textAnnotationData: JSON.stringify({
146
+ version: TEXT_ANNOTATION_JSON_VERSION,
147
+ }),
148
+ })).to.throw("JSON data is missing or invalid.");
149
+ });
150
+ it("throws if the JSON version is too new", () => {
151
+ expect(() => makeElement({
152
+ textAnnotationData: JSON.stringify({
153
+ version: "999.999.999",
154
+ data: {
155
+ textBlock: TextBlock.create().toJSON()
156
+ }
157
+ }),
158
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);
159
+ });
160
+ it("throws if the JSON version is old and cannot be migrated", () => {
161
+ expect(() => makeElement({
162
+ textAnnotationData: JSON.stringify({
163
+ version: "0.0.1",
164
+ data: {
165
+ textBlock: TextBlock.create().toJSON()
166
+ }
167
+ }),
168
+ })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);
169
+ });
170
+ });
127
171
  describe("getAnnotation", () => {
128
172
  it("returns undefined if not provided", () => {
129
173
  expect(makeElement().getAnnotation()).to.be.undefined;
130
174
  });
131
175
  it("converts JSON string to class instance", () => {
132
176
  const elem = makeElement({
133
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create().toJSON() }),
177
+ textAnnotationData: JSON.stringify({
178
+ version: TEXT_ANNOTATION_JSON_VERSION,
179
+ data: {
180
+ textBlock: TextBlock.create().toJSON()
181
+ }
182
+ }),
134
183
  defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x42").toJSON()
135
184
  });
136
185
  const anno = elem.getAnnotation();
@@ -141,7 +190,12 @@ describe("TextAnnotation element", () => {
141
190
  });
142
191
  it("produces a new object each time it is called", () => {
143
192
  const elem = makeElement({
144
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create().toJSON() })
193
+ textAnnotationData: JSON.stringify({
194
+ version: TEXT_ANNOTATION_JSON_VERSION,
195
+ data: {
196
+ textBlock: TextBlock.create().toJSON()
197
+ }
198
+ }),
145
199
  });
146
200
  const anno1 = elem.getAnnotation();
147
201
  const anno2 = elem.getAnnotation();
@@ -160,6 +214,58 @@ describe("TextAnnotation element", () => {
160
214
  expect(elem.getAnnotation().toJSON()).not.to.equal(annotation.toJSON());
161
215
  });
162
216
  });
217
+ describe("getReferenceIds", () => {
218
+ function expectReferenceIds(expected, element) {
219
+ const actual = Array.from(element.getReferenceIds()).sort();
220
+ // reference Ids get a prefix indicating their type ('e' for 'element')
221
+ expected = expected.map((id) => `e${id}`);
222
+ // the superclasses provide some reference Ids (code spec, model, category)
223
+ const baseIds = ["e0x12", "e0x78", "m0x34"];
224
+ expected.push(...baseIds);
225
+ expected = expected.sort();
226
+ expect(actual).to.deep.equal(expected);
227
+ }
228
+ it("reports default text style and field hosts", () => {
229
+ // makeElement sets defaultTextStyle to "0x21"
230
+ const elem = makeElement();
231
+ expectReferenceIds(["0x21"], elem);
232
+ elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault("0x123");
233
+ expectReferenceIds(["0x123"], elem);
234
+ const textBlock = TextBlock.create();
235
+ textBlock.appendRun(FieldRun.create({
236
+ propertyHost: { elementId: "0x456", schemaName: "BisCore", className: "GeometricElement3d" },
237
+ propertyPath: { propertyName: "CodeValue" },
238
+ }));
239
+ textBlock.appendRun(FieldRun.create({
240
+ propertyHost: { elementId: "0x789", schemaName: "BisCore", className: "GeometricElement3d" },
241
+ propertyPath: { propertyName: "LastMod" },
242
+ }));
243
+ elem.setAnnotation(TextAnnotation.create({ textBlock }));
244
+ expectReferenceIds(["0x123", "0x456", "0x789"], elem);
245
+ elem.defaultTextStyle = undefined;
246
+ expectReferenceIds(["0x456", "0x789"], elem);
247
+ elem.setAnnotation(TextAnnotation.create());
248
+ expectReferenceIds([], elem);
249
+ });
250
+ it("does not report invalid Ids", () => {
251
+ const elem = makeElement();
252
+ elem.defaultTextStyle = undefined;
253
+ expectReferenceIds([], elem);
254
+ elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault("0");
255
+ expectReferenceIds([], elem);
256
+ const textBlock = TextBlock.create();
257
+ textBlock.appendRun(FieldRun.create({
258
+ propertyHost: { elementId: "0", schemaName: "BisCore", className: "GeometricElement3d" },
259
+ propertyPath: { propertyName: "CodeValue" },
260
+ }));
261
+ textBlock.appendRun(FieldRun.create({
262
+ propertyHost: { elementId: "0x123", schemaName: "BisCore", className: "GeometricElement3d" },
263
+ propertyPath: { propertyName: "LastMod" },
264
+ }));
265
+ elem.setAnnotation(TextAnnotation.create({ textBlock }));
266
+ expectReferenceIds(["0x123"], elem);
267
+ });
268
+ });
163
269
  describe("TextAnnotation3d Persistence", () => {
164
270
  let imodel;
165
271
  let createElement3dArgs;
@@ -168,7 +274,7 @@ describe("TextAnnotation element", () => {
168
274
  const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
169
275
  const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
170
276
  const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);
171
- const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { fontName: "Totally Real Font", lineHeight: 0.25, isItalic: true }).insert();
277
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
172
278
  expect(jobSubjectId).not.to.be.undefined;
173
279
  expect(category).not.to.be.undefined;
174
280
  expect(model).not.to.be.undefined;
@@ -178,7 +284,7 @@ describe("TextAnnotation element", () => {
178
284
  after(() => imodel.close());
179
285
  it("creating element does not automatically compute the geometry", () => {
180
286
  const annotation = createAnnotation();
181
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
287
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
182
288
  const el = createElement3d(imodel, args);
183
289
  expect(el.getAnnotation().equals(annotation)).to.be.true;
184
290
  expect(el.geom).to.be.undefined;
@@ -239,7 +345,7 @@ describe("TextAnnotation element", () => {
239
345
  });
240
346
  it("creating element does not automatically compute the geometry", () => {
241
347
  const annotation = createAnnotation();
242
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
348
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
243
349
  const el = createElement2d(imodel, args);
244
350
  expect(el.getAnnotation().equals(annotation)).to.be.true;
245
351
  expect(el.geom).to.be.undefined;
@@ -289,8 +395,8 @@ describe("TextAnnotation element", () => {
289
395
  imodel = await createIModel("DefaultTextStyle");
290
396
  const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
291
397
  const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
292
- const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { fontName: "Totally Real Font", lineHeight: 0.25, isItalic: true }).insert();
293
- const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { fontName: "Karla", lineHeight: 0.5, isBold: true }).insert();
398
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
399
+ const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
294
400
  expect(jobSubjectId).not.to.be.undefined;
295
401
  expect(definitionModel).not.to.be.undefined;
296
402
  expect(styleId).not.to.be.undefined;
@@ -314,7 +420,7 @@ describe("TextAnnotation element", () => {
314
420
  });
315
421
  it("preserves defaultTextStyle after round trip", () => {
316
422
  const annotation = createAnnotation();
317
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };
423
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
318
424
  const el0 = createElement2d(imodel, args);
319
425
  expect(el0.defaultTextStyle).not.to.be.undefined;
320
426
  expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
@@ -327,7 +433,7 @@ describe("TextAnnotation element", () => {
327
433
  });
328
434
  it("produces different geometry when defaultTextStyle changes", () => {
329
435
  const annotation = createAnnotation();
330
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
436
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
331
437
  const el0 = createElement2d(imodel, args);
332
438
  el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
333
439
  const geom1 = el0.toJSON().elementGeometryBuilderParams;
@@ -337,7 +443,7 @@ describe("TextAnnotation element", () => {
337
443
  });
338
444
  it("allows defaultTextStyle to be undefined", () => {
339
445
  const annotation = createAnnotation();
340
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
446
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
341
447
  const el0 = createElement2d(imodel, args);
342
448
  el0.defaultTextStyle = undefined;
343
449
  const elId = el0.insert();
@@ -347,6 +453,178 @@ describe("TextAnnotation element", () => {
347
453
  expect(el1 instanceof TextAnnotation2d).to.be.true;
348
454
  expect(el1.defaultTextStyle).to.be.undefined;
349
455
  });
456
+ describe("onCloned", () => {
457
+ function insertStyledElement(styleId, db) {
458
+ const args = { ...createElement2dArgs, defaultTextStyleId: styleId };
459
+ const elem = createElement2d(db, args);
460
+ elem.insert();
461
+ imodel.saveChanges();
462
+ return elem;
463
+ }
464
+ describe("within a single iModel", () => {
465
+ it("leaves property hosts intact", async () => {
466
+ const textBlock = TextBlock.create({
467
+ children: [{
468
+ children: [{
469
+ type: "field",
470
+ propertyHost: {
471
+ elementId: "0x123",
472
+ schemaName: "Fields",
473
+ className: "TestElement",
474
+ },
475
+ propertyPath: { propertyName: "intProp" },
476
+ }, {
477
+ type: "field",
478
+ propertyHost: {
479
+ elementId: "0xabc",
480
+ schemaName: "BisCore",
481
+ className: "Element",
482
+ },
483
+ propertyPath: { propertyName: "CodeValue" },
484
+ }],
485
+ }],
486
+ });
487
+ const annotation = TextAnnotation.create({ textBlock });
488
+ const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });
489
+ elem.insert();
490
+ imodel.saveChanges();
491
+ const context = new IModelElementCloneContext(imodel);
492
+ context.remapElement("0x123", "0x456");
493
+ context.remapElement("0xabc", "0xdef");
494
+ context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
495
+ const props = await context.cloneElement(elem);
496
+ expect(props.textAnnotationData).not.to.be.undefined;
497
+ const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
498
+ const para = anno.textBlock.children[0];
499
+ expect(para.children[0].propertyHost.elementId).to.equal("0x123");
500
+ expect(para.children[1].propertyHost.elementId).to.equal("0xabc");
501
+ });
502
+ it("leaves default text style intact", async () => {
503
+ async function clone(styleId, expectedStyleId) {
504
+ const elem = insertStyledElement(styleId, imodel);
505
+ const context = new IModelElementCloneContext(imodel);
506
+ context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
507
+ const props = await context.cloneElement(elem);
508
+ expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);
509
+ if (styleId) {
510
+ // Even an explicit remapping is ignored when cloning within a single iModel
511
+ // (per the examples set by most other elements, excluding RenderMaterial).
512
+ context.remapElement(styleId, "0x99887");
513
+ const props2 = await context.cloneElement(elem);
514
+ expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);
515
+ }
516
+ }
517
+ await clone(seedStyleId, seedStyleId);
518
+ await clone(undefined, undefined);
519
+ await clone("0x12345", "0x12345");
520
+ await clone(Id64.invalid, undefined);
521
+ });
522
+ });
523
+ describe("between iModels", () => {
524
+ let dstDb;
525
+ let dstDefModel;
526
+ let dstElemArgs;
527
+ before(async () => {
528
+ dstDb = await createIModel("CloneTarget");
529
+ const jobSubjectId = createJobSubjectElement(dstDb, "Job").insert();
530
+ dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, "Definition");
531
+ const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);
532
+ expect(category).not.to.equal(createElement2dArgs.category);
533
+ expect(model).not.to.equal(createElement2dArgs.model);
534
+ dstElemArgs = { category, model };
535
+ });
536
+ after(() => dstDb.close());
537
+ it("remaps property hosts", async () => {
538
+ const textBlock = TextBlock.create({
539
+ children: [{
540
+ children: [{
541
+ type: "field",
542
+ propertyHost: {
543
+ elementId: "0x123",
544
+ schemaName: "Fields",
545
+ className: "TestElement",
546
+ },
547
+ propertyPath: { propertyName: "intProp" },
548
+ }, {
549
+ type: "field",
550
+ propertyHost: {
551
+ elementId: "0xabc",
552
+ schemaName: "BisCore",
553
+ className: "Element",
554
+ },
555
+ propertyPath: { propertyName: "CodeValue" },
556
+ }],
557
+ }],
558
+ });
559
+ const annotation = TextAnnotation.create({ textBlock });
560
+ const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });
561
+ elem.insert();
562
+ imodel.saveChanges();
563
+ const context = new IModelElementCloneContext(imodel, dstDb);
564
+ context.remapElement("0x123", "0x456");
565
+ context.remapElement("0xabc", "0xdef");
566
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
567
+ const props = await context.cloneElement(elem);
568
+ expect(props.textAnnotationData).not.to.be.undefined;
569
+ const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
570
+ const para = anno.textBlock.children[0];
571
+ expect(para.children[0].propertyHost.elementId).to.equal("0x456");
572
+ expect(para.children[1].propertyHost.elementId).to.equal("0xdef");
573
+ });
574
+ it("sets default text style to undefined if source style does not exist", async () => {
575
+ const elem = insertStyledElement("0x12345", imodel);
576
+ const context = new IModelElementCloneContext(imodel, dstDb);
577
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
578
+ const props = await context.cloneElement(elem);
579
+ expect(props.defaultTextStyle).to.be.undefined;
580
+ });
581
+ it("remaps to an existing text style with the same code if present", async () => {
582
+ const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, "test", { font: { name: "Karla" } }).insert();
583
+ expect(dstStyleId).not.to.equal(seedStyleId);
584
+ const srcElem = insertStyledElement(seedStyleId, imodel);
585
+ const context = new IModelElementCloneContext(imodel, dstDb);
586
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
587
+ const props = await context.cloneElement(srcElem);
588
+ expect(props.defaultTextStyle?.id).to.equal(dstStyleId);
589
+ });
590
+ it("throws an error if definition model is not remapped", async () => {
591
+ const srcElem = insertStyledElement(seedStyleId2, imodel);
592
+ const context = new IModelElementCloneContext(imodel, dstDb);
593
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
594
+ await expect(context.cloneElement(srcElem)).to.be.rejectedWith("Invalid target model");
595
+ });
596
+ it("imports default text style if necessary", async () => {
597
+ const srcElem = insertStyledElement(seedStyleId2, imodel);
598
+ const context = new IModelElementCloneContext(imodel, dstDb);
599
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
600
+ context.remapElement(seedDefinitionModelId, dstDefModel);
601
+ const props = await context.cloneElement(srcElem);
602
+ const dstStyleId = props.defaultTextStyle.id;
603
+ expect(dstStyleId).not.to.be.undefined;
604
+ expect(dstStyleId).not.to.equal(seedStyleId2);
605
+ expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;
606
+ });
607
+ it("remaps multiple occurrences of same style to same Id", async () => {
608
+ const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "styyyle", { font: { name: "Karla" } }).insert();
609
+ const srcElem1 = insertStyledElement(srcStyleId, imodel);
610
+ const srcElem2 = insertStyledElement(srcStyleId, imodel);
611
+ const srcElem3 = insertStyledElement(srcStyleId, imodel);
612
+ const context = new IModelElementCloneContext(imodel, dstDb);
613
+ context.remapElement(createElement2dArgs.model, dstElemArgs.model);
614
+ context.remapElement(seedDefinitionModelId, dstDefModel);
615
+ const props1 = await context.cloneElement(srcElem1);
616
+ const props2 = await context.cloneElement(srcElem2);
617
+ expect(props1.defaultTextStyle).not.to.be.undefined;
618
+ expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);
619
+ expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
620
+ const context2 = new IModelElementCloneContext(imodel, dstDb);
621
+ context2.remapElement(createElement2dArgs.model, dstElemArgs.model);
622
+ context2.remapElement(seedDefinitionModelId, dstDefModel);
623
+ const props3 = await context2.cloneElement(srcElem3);
624
+ expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
625
+ });
626
+ });
627
+ });
350
628
  });
351
629
  describe("TextAnnotation3d", () => {
352
630
  let createElement3dArgs;
@@ -358,7 +636,7 @@ describe("TextAnnotation element", () => {
358
636
  });
359
637
  it("preserves defaultTextStyle after round trip", () => {
360
638
  const annotation = createAnnotation();
361
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };
639
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
362
640
  const el0 = createElement3d(imodel, args);
363
641
  expect(el0.defaultTextStyle).not.to.be.undefined;
364
642
  expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
@@ -371,7 +649,7 @@ describe("TextAnnotation element", () => {
371
649
  });
372
650
  it("produces different geometry when defaultTextStyle changes", () => {
373
651
  const annotation = createAnnotation();
374
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
652
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
375
653
  const el0 = createElement3d(imodel, args);
376
654
  el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
377
655
  const geom1 = el0.toJSON().elementGeometryBuilderParams;
@@ -381,7 +659,7 @@ describe("TextAnnotation element", () => {
381
659
  });
382
660
  it("allows defaultTextStyle to be undefined", () => {
383
661
  const annotation = createAnnotation();
384
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
662
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
385
663
  const el0 = createElement3d(imodel, args);
386
664
  el0.defaultTextStyle = undefined;
387
665
  const elId = el0.insert();
@@ -412,9 +690,9 @@ describe("AnnotationTextStyle", () => {
412
690
  });
413
691
  it("inserts a style and round-trips through JSON", async () => {
414
692
  const textStyle = TextStyleSettings.fromJSON({
415
- fontName: "Totally Real Font",
693
+ font: { name: "Totally Real Font" },
416
694
  isUnderlined: true,
417
- lineHeight: 0.5
695
+ textHeight: 0.5
418
696
  });
419
697
  const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "round-trip", textStyle.toJSON());
420
698
  const elId = el0.insert();
@@ -431,27 +709,27 @@ describe("AnnotationTextStyle", () => {
431
709
  let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "default");
432
710
  expect(() => annotationTextStyle.insert()).to.throw();
433
711
  // font is required
434
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", { fontName: "" });
712
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", { font: { name: "" } });
435
713
  expect(() => annotationTextStyle.insert()).to.throw();
436
- // lineHeight should be positive
437
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid lineHeight", { fontName: "Totally Real Font", lineHeight: 0 });
714
+ // textHeight should be positive
715
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid textHeight", { font: { name: "Totally Real Font" }, textHeight: 0 });
438
716
  expect(() => annotationTextStyle.insert()).to.throw();
439
717
  // stackedFractionScale should be positive
440
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", { fontName: "Totally Real Font", stackedFractionScale: 0 });
718
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", { font: { name: "Totally Real Font" }, stackedFractionScale: 0 });
441
719
  expect(() => annotationTextStyle.insert()).to.throw();
442
720
  });
443
721
  it("does not allow updating of elements to invalid styles", async () => {
444
- const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", { fontName: "Totally Real Font" });
722
+ const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", { font: { name: "Totally Real Font" } });
445
723
  const elId = annotationTextStyle.insert();
446
724
  expect(Id64.isValidId64(elId)).to.be.true;
447
725
  const el1 = imodel.elements.getElement(elId);
448
726
  expect(el1).not.to.be.undefined;
449
727
  expect(el1 instanceof AnnotationTextStyle).to.be.true;
450
- el1.settings = el1.settings.clone({ fontName: "" });
728
+ el1.settings = el1.settings.clone({ font: { name: "" } });
451
729
  expect(() => el1.update()).to.throw();
452
- el1.settings = el1.settings.clone({ fontName: "Totally Real Font", lineHeight: 0 });
730
+ el1.settings = el1.settings.clone({ font: { name: "Totally Real Font" }, textHeight: 0 });
453
731
  expect(() => el1.update()).to.throw();
454
- el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });
732
+ el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });
455
733
  expect(() => el1.update()).to.throw();
456
734
  el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });
457
735
  el1.update();
@@ -468,12 +746,101 @@ describe("AnnotationTextStyle", () => {
468
746
  expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);
469
747
  });
470
748
  it("can update style via cloning", async () => {
471
- const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", { fontName: "Totally Real Font" });
749
+ const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", { font: { name: "Totally Real Font" } });
472
750
  const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });
473
751
  expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());
474
752
  el0.settings = newStyle;
475
753
  expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());
476
754
  });
755
+ describe("versioning", () => {
756
+ function makeStyle(props) {
757
+ return AnnotationTextStyle.fromJSON({
758
+ model: "0x34",
759
+ code: {
760
+ spec: "0x56",
761
+ scope: "0x78",
762
+ value: "style"
763
+ },
764
+ classFullName: AnnotationTextStyle.classFullName,
765
+ ...props,
766
+ }, mockIModel());
767
+ }
768
+ it("throws if the JSON has no version", () => {
769
+ expect(() => makeStyle({
770
+ settings: JSON.stringify({
771
+ data: TextStyleSettings.defaultProps
772
+ }),
773
+ })).to.throw("JSON version is missing or invalid.");
774
+ });
775
+ it("throws if the JSON has no data", () => {
776
+ expect(() => makeStyle({
777
+ settings: JSON.stringify({
778
+ version: TEXT_STYLE_SETTINGS_JSON_VERSION,
779
+ }),
780
+ })).to.throw("JSON data is missing or invalid.");
781
+ });
782
+ it("throws if the JSON version is too new", () => {
783
+ expect(() => makeStyle({
784
+ settings: JSON.stringify({
785
+ version: "999.999.999",
786
+ data: TextStyleSettings.defaultProps
787
+ }),
788
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);
789
+ });
790
+ it("throws if the JSON version is old and cannot be migrated", () => {
791
+ expect(() => makeStyle({
792
+ settings: JSON.stringify({
793
+ version: "0.0.1",
794
+ data: TextStyleSettings.defaultProps
795
+ }),
796
+ })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
797
+ });
798
+ });
799
+ describe("onCloned", () => {
800
+ let targetDb;
801
+ let targetDefModel;
802
+ before(async () => {
803
+ // The source and target iModel will both contain the Karla font family.
804
+ targetDb = await createIModel("AnnotationTextStyleTargetDb");
805
+ const jobSubjectId = createJobSubjectElement(targetDb, "Job").insert();
806
+ targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, "Definition");
807
+ // Embed a font into the source iModel that doesn't exist in the target iModel.
808
+ const shxName = IModelTestUtils.resolveFontFile("Cdm.shx");
809
+ const shxBlob = fs.readFileSync(shxName);
810
+ const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: "Cdm" });
811
+ await imodel.fonts.embedFontFile({ file: shxFile });
812
+ });
813
+ after(() => targetDb.close());
814
+ it("embeds font into target Db if not already embedded", async () => {
815
+ const getFontCounts = () => {
816
+ let files = 0;
817
+ for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {
818
+ files++;
819
+ }
820
+ let families = 0;
821
+ for (const _ of targetDb.fonts.queryMappedFamilies()) {
822
+ families++;
823
+ }
824
+ return { files, families };
825
+ };
826
+ const initialCounts = getFontCounts();
827
+ const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "karla-style", TextStyleSettings.fromJSON({ font: { name: "Karla" } }));
828
+ karlaStyle.insert();
829
+ const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "cdm-style", TextStyleSettings.fromJSON({ font: { name: "Cdm", type: FontType.Shx } }));
830
+ cdmStyle.insert();
831
+ const context = new IModelElementCloneContext(imodel, targetDb);
832
+ context.remapElement(seedDefinitionModel, targetDefModel);
833
+ expect(targetDb.fonts.findId({ name: "Karla" })).not.to.be.undefined;
834
+ await context.cloneElement(karlaStyle);
835
+ expect(getFontCounts()).to.deep.equal(initialCounts);
836
+ expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).to.be.undefined;
837
+ await context.cloneElement(cdmStyle);
838
+ expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).not.to.be.undefined;
839
+ const finalCounts = getFontCounts();
840
+ expect(finalCounts.files).greaterThan(initialCounts.files);
841
+ expect(finalCounts.families).greaterThan(initialCounts.families);
842
+ });
843
+ });
477
844
  });
478
845
  describe("appendTextAnnotationGeometry", () => {
479
846
  let imodel;
@@ -486,8 +853,8 @@ describe("appendTextAnnotationGeometry", () => {
486
853
  const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
487
854
  const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
488
855
  const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);
489
- const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { fontName: "Totally Real Font", lineHeight: 0.25, isItalic: true }).insert();
490
- const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { fontName: "Karla", lineHeight: 0.5, isBold: true }).insert();
856
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
857
+ const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
491
858
  expect(jobSubjectId).not.to.be.undefined;
492
859
  expect(definitionModel).not.to.be.undefined;
493
860
  expect(category).not.to.be.undefined;
@@ -541,7 +908,7 @@ describe("appendTextAnnotationGeometry", () => {
541
908
  const block = TextBlock.create();
542
909
  const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
543
910
  const styleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "empty anno style", {
544
- fontName: "Totally Real Font",
911
+ font: { name: "Totally Real Font" },
545
912
  frame: {
546
913
  shape: "rectangle",
547
914
  }
@@ -554,7 +921,7 @@ describe("appendTextAnnotationGeometry", () => {
554
921
  it("produces different geometry when given different text-content in annotations", () => {
555
922
  const anno1 = createAnnotation();
556
923
  const anno2 = createAnnotation();
557
- anno2.textBlock.appendRun(TextRun.create({ content: "extra", styleOverrides: { fontName: "Totally Real Font" } }));
924
+ anno2.textBlock.appendRun(TextRun.create({ content: "extra", styleOverrides: { font: { name: "Totally Real Font" } } }));
558
925
  const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);
559
926
  const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);
560
927
  expect(builder1.geometries).to.not.deep.equal(builder2.geometries);
@@ -569,12 +936,12 @@ describe("appendTextAnnotationGeometry", () => {
569
936
  });
570
937
  it("accounts for style overrides in the text", () => {
571
938
  const block = TextBlock.create();
939
+ block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } };
572
940
  block.appendParagraph();
573
941
  block.children[0].styleOverrides = { isBold: true };
574
942
  block.appendRun(TextRun.create({ content: "Run, Barry," }));
575
943
  block.appendParagraph();
576
944
  block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides: { isItalic: false } }));
577
- block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
578
945
  const annotation = createAnnotation(block);
579
946
  const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);
580
947
  expect(builder.textStrings.length).to.equal(2);
@@ -592,7 +959,6 @@ describe("appendTextAnnotationGeometry", () => {
592
959
  it("uses TextStyleSettings.defaults when no default style is provided", () => {
593
960
  const block = TextBlock.create();
594
961
  block.appendRun(TextRun.create({ content: "Run, Barry," }));
595
- block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
596
962
  const annotation = createAnnotation(block);
597
963
  const builder = runAppendTextAnnotationGeometry(annotation, "");
598
964
  expect(builder.textStrings.length).to.equal(1);