@itwin/core-backend 5.2.0-dev.7 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/CHANGELOG.md +56 -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 +10 -1
  109. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  110. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +15 -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 +145 -36
  119. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  120. package/lib/cjs/annotations/TextAnnotationElement.js +234 -106
  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 +49 -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 +10 -1
  288. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  289. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +13 -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 +145 -36
  298. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  299. package/lib/esm/annotations/TextAnnotationElement.js +235 -107
  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 +51 -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 +195 -78
  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 +410 -59
  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 +640 -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 +13 -13
@@ -6,7 +6,7 @@ import { expect } from "chai";
6
6
  import { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from "@itwin/core-geometry";
7
7
  import { 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, 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";
@@ -15,7 +15,10 @@ import { DrawingCategory, SpatialCategory } from "../../Category";
15
15
  import { DisplayStyle2d, DisplayStyle3d } from "../../DisplayStyle";
16
16
  import { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from "../../ViewDefinition";
17
17
  import { FontFile } from "../../FontFile";
18
- import { computeTextRangeAsStringLength } from "../AnnotationTestUtils";
18
+ import { computeTextRangeAsStringLength, MockBuilder } from "../AnnotationTestUtils";
19
+ import { TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementDrivesTextAnnotation";
20
+ import { layoutTextBlock, TextStyleResolver } from "../../annotations/TextBlockLayout";
21
+ import { appendTextAnnotationGeometry } from "../../annotations/TextAnnotationGeometry";
19
22
  function mockIModel() {
20
23
  const iModel = {
21
24
  fonts: {
@@ -26,13 +29,14 @@ function mockIModel() {
26
29
  };
27
30
  return iModel;
28
31
  }
29
- function createAnnotation(styleId) {
30
- const styleOverrides = { fontName: "Karla" };
31
- const block = TextBlock.create({ styleId: styleId ?? "0x42", styleOverrides });
32
- block.appendRun(TextRun.create({ content: "Run, Barry,", styleOverrides }));
33
- block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides }));
34
- block.appendRun(FractionRun.create({ numerator: "Harrison", denominator: "Wells", styleOverrides }));
35
- block.margins = { left: 0, right: 1, top: 2, bottom: 3 };
32
+ function createAnnotation(textBlock) {
33
+ const styleOverrides = { font: { name: "Karla" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };
34
+ const block = textBlock ?? TextBlock.create({ styleOverrides });
35
+ if (!textBlock) {
36
+ block.appendRun(TextRun.create({ content: "Run, Barry,", styleOverrides }));
37
+ block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides }));
38
+ block.appendRun(FractionRun.create({ numerator: "Harrison", denominator: "Wells", styleOverrides }));
39
+ }
36
40
  const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
37
41
  annotation.anchor = { vertical: "middle", horizontal: "right" };
38
42
  annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);
@@ -78,9 +82,34 @@ const createIModel = async (name) => {
78
82
  });
79
83
  return iModel;
80
84
  };
81
- const createAnnotationTextStyle = (iModel, definitionModel, name, settings = TextStyleSettings.defaultProps) => {
82
- return AnnotationTextStyle.create(iModel, definitionModel, name, settings, "description");
85
+ const createAnnotationTextStyle = (iModel, definitionModelId, name, settings = TextStyleSettings.defaultProps) => {
86
+ return AnnotationTextStyle.create(iModel, {
87
+ definitionModelId,
88
+ name,
89
+ settings,
90
+ description: "description",
91
+ });
83
92
  };
93
+ function createElement2d(imodel, createArgs) {
94
+ const placement = {
95
+ origin: { x: 0, y: 0 },
96
+ angle: Angle.createDegrees(0).toJSON(),
97
+ };
98
+ return TextAnnotation2d.create(imodel, {
99
+ ...createArgs,
100
+ placement,
101
+ });
102
+ }
103
+ function createElement3d(imodel, createArgs) {
104
+ const placement = {
105
+ origin: { x: 0, y: 0, z: 0 },
106
+ angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),
107
+ };
108
+ return TextAnnotation3d.create(imodel, {
109
+ ...createArgs,
110
+ placement,
111
+ });
112
+ }
84
113
  describe("TextAnnotation element", () => {
85
114
  function makeElement(props) {
86
115
  return TextAnnotation2d.fromJSON({
@@ -95,25 +124,76 @@ describe("TextAnnotation element", () => {
95
124
  origin: { x: 0, y: 0 },
96
125
  angle: 0,
97
126
  },
127
+ defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x21").toJSON(),
98
128
  ...props,
99
129
  }, mockIModel());
100
130
  }
131
+ describe("versioning", () => {
132
+ it("throws if the JSON has no version", () => {
133
+ expect(() => makeElement({
134
+ textAnnotationData: JSON.stringify({
135
+ data: {
136
+ textBlock: TextBlock.create().toJSON()
137
+ }
138
+ }),
139
+ })).to.throw("JSON version is missing or invalid.");
140
+ });
141
+ it("throws if the JSON has no data", () => {
142
+ expect(() => makeElement({
143
+ textAnnotationData: JSON.stringify({
144
+ version: TEXT_ANNOTATION_JSON_VERSION,
145
+ }),
146
+ })).to.throw("JSON data is missing or invalid.");
147
+ });
148
+ it("throws if the JSON version is too new", () => {
149
+ expect(() => makeElement({
150
+ textAnnotationData: JSON.stringify({
151
+ version: "999.999.999",
152
+ data: {
153
+ textBlock: TextBlock.create().toJSON()
154
+ }
155
+ }),
156
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);
157
+ });
158
+ it("throws if the JSON version is old and cannot be migrated", () => {
159
+ expect(() => makeElement({
160
+ textAnnotationData: JSON.stringify({
161
+ version: "0.0.1",
162
+ data: {
163
+ textBlock: TextBlock.create().toJSON()
164
+ }
165
+ }),
166
+ })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);
167
+ });
168
+ });
101
169
  describe("getAnnotation", () => {
102
170
  it("returns undefined if not provided", () => {
103
171
  expect(makeElement().getAnnotation()).to.be.undefined;
104
172
  });
105
173
  it("converts JSON string to class instance", () => {
106
174
  const elem = makeElement({
107
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create({ styleId: "0x42" }).toJSON() })
175
+ textAnnotationData: JSON.stringify({
176
+ version: TEXT_ANNOTATION_JSON_VERSION,
177
+ data: {
178
+ textBlock: TextBlock.create().toJSON()
179
+ }
180
+ }),
181
+ defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x42").toJSON()
108
182
  });
109
183
  const anno = elem.getAnnotation();
110
184
  expect(anno).not.to.be.undefined;
111
185
  expect(anno.textBlock.isEmpty).to.be.true;
112
- expect(anno.textBlock.styleId).to.equal("0x42");
186
+ expect(elem.defaultTextStyle).not.to.be.undefined;
187
+ expect(elem.defaultTextStyle.id).to.equal("0x42");
113
188
  });
114
189
  it("produces a new object each time it is called", () => {
115
190
  const elem = makeElement({
116
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create({ styleId: "0x42" }).toJSON() })
191
+ textAnnotationData: JSON.stringify({
192
+ version: TEXT_ANNOTATION_JSON_VERSION,
193
+ data: {
194
+ textBlock: TextBlock.create().toJSON()
195
+ }
196
+ }),
117
197
  });
118
198
  const anno1 = elem.getAnnotation();
119
199
  const anno2 = elem.getAnnotation();
@@ -124,7 +204,7 @@ describe("TextAnnotation element", () => {
124
204
  describe("setAnnotation", () => {
125
205
  it("updates properties", () => {
126
206
  const elem = makeElement();
127
- const textBlock = TextBlock.create({ styleId: "0x42" });
207
+ const textBlock = TextBlock.create();
128
208
  textBlock.appendRun(TextRun.create({ content: "text" }));
129
209
  const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });
130
210
  elem.setAnnotation(annotation);
@@ -134,33 +214,24 @@ describe("TextAnnotation element", () => {
134
214
  });
135
215
  describe("TextAnnotation3d Persistence", () => {
136
216
  let imodel;
137
- let seedCategoryId;
138
- let seedModelId;
139
- let seedStyleId;
217
+ let createElement3dArgs;
140
218
  before(async () => {
141
219
  imodel = await createIModel("TextAnnotation3d");
142
220
  const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
143
221
  const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
144
222
  const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);
145
- const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { fontName: "Totally Real Font", lineHeight: 0.25, isItalic: true }).insert();
223
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
146
224
  expect(jobSubjectId).not.to.be.undefined;
147
225
  expect(category).not.to.be.undefined;
148
226
  expect(model).not.to.be.undefined;
149
227
  expect(styleId).not.to.be.undefined;
150
- seedCategoryId = category;
151
- seedModelId = model;
152
- seedStyleId = styleId;
228
+ createElement3dArgs = { category, model };
153
229
  });
154
230
  after(() => imodel.close());
155
- function createElement3d(createArgs) {
156
- return TextAnnotation3d.create(imodel, seedCategoryId, seedModelId, {
157
- origin: { x: 0, y: 0, z: 0 },
158
- angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),
159
- }, createArgs?.textAnnotationData);
160
- }
161
231
  it("creating element does not automatically compute the geometry", () => {
162
232
  const annotation = createAnnotation();
163
- const el = createElement3d({ textAnnotationData: annotation.toJSON() });
233
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
234
+ const el = createElement3d(imodel, args);
164
235
  expect(el.getAnnotation().equals(annotation)).to.be.true;
165
236
  expect(el.geom).to.be.undefined;
166
237
  });
@@ -175,7 +246,7 @@ describe("TextAnnotation element", () => {
175
246
  }
176
247
  describe("inserts 3d element and round-trips through JSON", async () => {
177
248
  async function test(annotation) {
178
- const el0 = createElement3d();
249
+ const el0 = createElement3d(imodel, { ...createElement3dArgs });
179
250
  if (annotation) {
180
251
  el0.setAnnotation(annotation);
181
252
  }
@@ -198,42 +269,30 @@ describe("TextAnnotation element", () => {
198
269
  }
199
270
  }
200
271
  it("roundtrips an empty annotation", async () => { await test(); });
201
- it("roundtrips an annotation with a style", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });
202
272
  it("roundtrips an annotation with a textBlock", async () => { await test(createAnnotation()); });
203
273
  });
204
274
  });
205
275
  describe("TextAnnotation2d Persistence", () => {
206
276
  let imodel;
207
- let seedCategoryId;
208
- let seedModelId;
209
- let seedStyleId;
277
+ let createElement2dArgs;
210
278
  before(async () => {
211
279
  imodel = await createIModel("TextAnnotation2d");
212
280
  const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
213
281
  const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
214
282
  const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);
215
- const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { fontName: "Totally Real Font", lineHeight: 0.25, isItalic: true }).insert();
216
283
  expect(jobSubjectId).not.to.be.undefined;
217
284
  expect(category).not.to.be.undefined;
218
285
  expect(model).not.to.be.undefined;
219
- expect(styleId).not.to.be.undefined;
220
- seedCategoryId = category;
221
- seedModelId = model;
222
- seedStyleId = styleId;
286
+ createElement2dArgs = { category, model };
223
287
  });
224
288
  after(() => {
225
289
  imodel.saveChanges("tests");
226
290
  imodel.close();
227
291
  });
228
- function createElement2d(createArgs) {
229
- return TextAnnotation2d.create(imodel, seedCategoryId, seedModelId, {
230
- origin: { x: 0, y: 0 },
231
- angle: Angle.createDegrees(0).toJSON(),
232
- }, createArgs?.textAnnotationData);
233
- }
234
292
  it("creating element does not automatically compute the geometry", () => {
235
293
  const annotation = createAnnotation();
236
- const el = createElement2d({ textAnnotationData: annotation.toJSON() });
294
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
295
+ const el = createElement2d(imodel, args);
237
296
  expect(el.getAnnotation().equals(annotation)).to.be.true;
238
297
  expect(el.geom).to.be.undefined;
239
298
  });
@@ -245,7 +304,7 @@ describe("TextAnnotation element", () => {
245
304
  }
246
305
  describe("inserts 2d element and round-trips through JSON", async () => {
247
306
  async function test(annotation) {
248
- const el0 = createElement2d();
307
+ const el0 = createElement2d(imodel, createElement2dArgs);
249
308
  if (annotation) {
250
309
  el0.setAnnotation(annotation);
251
310
  }
@@ -265,13 +324,127 @@ describe("TextAnnotation element", () => {
265
324
  expect(anno).not.to.be.undefined;
266
325
  expect(anno.equals(annotation)).to.be.true;
267
326
  expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;
327
+ expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);
268
328
  }
269
329
  }
270
330
  it("roundtrips an empty annotation", async () => { await test(); });
271
- it("roundtrips an annotation with a style", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });
272
331
  it("roundtrips an annotation with a textBlock", async () => { await test(createAnnotation()); });
273
332
  });
274
333
  });
334
+ describe("defaultTextStyle", () => {
335
+ let imodel;
336
+ let seedSubjectId;
337
+ let seedDefinitionModelId;
338
+ let seedStyleId;
339
+ let seedStyleId2;
340
+ before(async () => {
341
+ imodel = await createIModel("DefaultTextStyle");
342
+ const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
343
+ const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
344
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
345
+ const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
346
+ expect(jobSubjectId).not.to.be.undefined;
347
+ expect(definitionModel).not.to.be.undefined;
348
+ expect(styleId).not.to.be.undefined;
349
+ expect(differentStyleId).not.to.be.undefined;
350
+ seedSubjectId = jobSubjectId;
351
+ seedDefinitionModelId = definitionModel;
352
+ seedStyleId = styleId;
353
+ seedStyleId2 = differentStyleId;
354
+ });
355
+ after(() => {
356
+ imodel.saveChanges("tests");
357
+ imodel.close();
358
+ });
359
+ describe("TextAnnotation2d", () => {
360
+ let createElement2dArgs;
361
+ before(() => {
362
+ const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);
363
+ expect(category).not.to.be.undefined;
364
+ expect(model).not.to.be.undefined;
365
+ createElement2dArgs = { category, model };
366
+ });
367
+ it("preserves defaultTextStyle after round trip", () => {
368
+ const annotation = createAnnotation();
369
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
370
+ const el0 = createElement2d(imodel, args);
371
+ expect(el0.defaultTextStyle).not.to.be.undefined;
372
+ expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
373
+ el0.insert();
374
+ const el1 = imodel.elements.getElement(el0.id);
375
+ expect(el1).not.to.be.undefined;
376
+ expect(el1.defaultTextStyle).not.to.be.undefined;
377
+ expect(el1.defaultTextStyle.id).to.equal(seedStyleId);
378
+ expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);
379
+ });
380
+ it("produces different geometry when defaultTextStyle changes", () => {
381
+ const annotation = createAnnotation();
382
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
383
+ const el0 = createElement2d(imodel, args);
384
+ el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
385
+ const geom1 = el0.toJSON().elementGeometryBuilderParams;
386
+ el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);
387
+ const geom2 = el0.toJSON().elementGeometryBuilderParams;
388
+ expect(geom1).not.to.deep.equal(geom2);
389
+ });
390
+ it("allows defaultTextStyle to be undefined", () => {
391
+ const annotation = createAnnotation();
392
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
393
+ const el0 = createElement2d(imodel, args);
394
+ el0.defaultTextStyle = undefined;
395
+ const elId = el0.insert();
396
+ expect(Id64.isValidId64(elId)).to.be.true;
397
+ const el1 = imodel.elements.getElement(elId);
398
+ expect(el1).not.to.be.undefined;
399
+ expect(el1 instanceof TextAnnotation2d).to.be.true;
400
+ expect(el1.defaultTextStyle).to.be.undefined;
401
+ });
402
+ });
403
+ describe("TextAnnotation3d", () => {
404
+ let createElement3dArgs;
405
+ before(() => {
406
+ const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);
407
+ expect(category).not.to.be.undefined;
408
+ expect(model).not.to.be.undefined;
409
+ createElement3dArgs = { category, model };
410
+ });
411
+ it("preserves defaultTextStyle after round trip", () => {
412
+ const annotation = createAnnotation();
413
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
414
+ const el0 = createElement3d(imodel, args);
415
+ expect(el0.defaultTextStyle).not.to.be.undefined;
416
+ expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
417
+ el0.insert();
418
+ const el1 = imodel.elements.getElement(el0.id);
419
+ expect(el1).not.to.be.undefined;
420
+ expect(el1.defaultTextStyle).not.to.be.undefined;
421
+ expect(el1.defaultTextStyle.id).to.equal(seedStyleId);
422
+ expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);
423
+ });
424
+ it("produces different geometry when defaultTextStyle changes", () => {
425
+ const annotation = createAnnotation();
426
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
427
+ const el0 = createElement3d(imodel, args);
428
+ el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
429
+ const geom1 = el0.toJSON().elementGeometryBuilderParams;
430
+ el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);
431
+ const geom2 = el0.toJSON().elementGeometryBuilderParams;
432
+ expect(geom1).not.to.deep.equal(geom2);
433
+ });
434
+ it("allows defaultTextStyle to be undefined", () => {
435
+ const annotation = createAnnotation();
436
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
437
+ const el0 = createElement3d(imodel, args);
438
+ el0.defaultTextStyle = undefined;
439
+ const elId = el0.insert();
440
+ expect(Id64.isValidId64(elId)).to.be.true;
441
+ const el1 = imodel.elements.getElement(elId);
442
+ expect(el1).not.to.be.undefined;
443
+ expect(el1 instanceof TextAnnotation3d).to.be.true;
444
+ expect(el1.defaultTextStyle).to.be.undefined;
445
+ });
446
+ });
447
+ });
275
448
  });
276
449
  describe("AnnotationTextStyle", () => {
277
450
  let imodel;
@@ -291,9 +464,9 @@ describe("AnnotationTextStyle", () => {
291
464
  });
292
465
  it("inserts a style and round-trips through JSON", async () => {
293
466
  const textStyle = TextStyleSettings.fromJSON({
294
- fontName: "Totally Real Font",
467
+ font: { name: "Totally Real Font" },
295
468
  isUnderlined: true,
296
- lineHeight: 0.5
469
+ textHeight: 0.5
297
470
  });
298
471
  const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "round-trip", textStyle.toJSON());
299
472
  const elId = el0.insert();
@@ -310,27 +483,27 @@ describe("AnnotationTextStyle", () => {
310
483
  let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "default");
311
484
  expect(() => annotationTextStyle.insert()).to.throw();
312
485
  // font is required
313
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", { fontName: "" });
486
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "no font", { font: { name: "" } });
314
487
  expect(() => annotationTextStyle.insert()).to.throw();
315
- // lineHeight should be positive
316
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid lineHeight", { fontName: "Totally Real Font", lineHeight: 0 });
488
+ // textHeight should be positive
489
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid textHeight", { font: { name: "Totally Real Font" }, textHeight: 0 });
317
490
  expect(() => annotationTextStyle.insert()).to.throw();
318
491
  // stackedFractionScale should be positive
319
- annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", { fontName: "Totally Real Font", stackedFractionScale: 0 });
492
+ annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "invalid stackedFractionScale", { font: { name: "Totally Real Font" }, stackedFractionScale: 0 });
320
493
  expect(() => annotationTextStyle.insert()).to.throw();
321
494
  });
322
495
  it("does not allow updating of elements to invalid styles", async () => {
323
- const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", { fontName: "Totally Real Font" });
496
+ const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "valid style", { font: { name: "Totally Real Font" } });
324
497
  const elId = annotationTextStyle.insert();
325
498
  expect(Id64.isValidId64(elId)).to.be.true;
326
499
  const el1 = imodel.elements.getElement(elId);
327
500
  expect(el1).not.to.be.undefined;
328
501
  expect(el1 instanceof AnnotationTextStyle).to.be.true;
329
- el1.settings = el1.settings.clone({ fontName: "" });
502
+ el1.settings = el1.settings.clone({ font: { name: "" } });
330
503
  expect(() => el1.update()).to.throw();
331
- el1.settings = el1.settings.clone({ fontName: "Totally Real Font", lineHeight: 0 });
504
+ el1.settings = el1.settings.clone({ font: { name: "Totally Real Font" }, textHeight: 0 });
332
505
  expect(() => el1.update()).to.throw();
333
- el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });
506
+ el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });
334
507
  expect(() => el1.update()).to.throw();
335
508
  el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });
336
509
  el1.update();
@@ -347,11 +520,189 @@ describe("AnnotationTextStyle", () => {
347
520
  expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);
348
521
  });
349
522
  it("can update style via cloning", async () => {
350
- const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", { fontName: "Totally Real Font" });
523
+ const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, "cloning", { font: { name: "Totally Real Font" } });
351
524
  const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });
352
525
  expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());
353
526
  el0.settings = newStyle;
354
527
  expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());
355
528
  });
529
+ describe("versioning", () => {
530
+ function makeStyle(props) {
531
+ return AnnotationTextStyle.fromJSON({
532
+ model: "0x34",
533
+ code: {
534
+ spec: "0x56",
535
+ scope: "0x78",
536
+ value: "style"
537
+ },
538
+ classFullName: AnnotationTextStyle.classFullName,
539
+ ...props,
540
+ }, mockIModel());
541
+ }
542
+ it("throws if the JSON has no version", () => {
543
+ expect(() => makeStyle({
544
+ settings: JSON.stringify({
545
+ data: TextStyleSettings.defaultProps
546
+ }),
547
+ })).to.throw("JSON version is missing or invalid.");
548
+ });
549
+ it("throws if the JSON has no data", () => {
550
+ expect(() => makeStyle({
551
+ settings: JSON.stringify({
552
+ version: TEXT_STYLE_SETTINGS_JSON_VERSION,
553
+ }),
554
+ })).to.throw("JSON data is missing or invalid.");
555
+ });
556
+ it("throws if the JSON version is too new", () => {
557
+ expect(() => makeStyle({
558
+ settings: JSON.stringify({
559
+ version: "999.999.999",
560
+ data: TextStyleSettings.defaultProps
561
+ }),
562
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);
563
+ });
564
+ it("throws if the JSON version is old and cannot be migrated", () => {
565
+ expect(() => makeStyle({
566
+ settings: JSON.stringify({
567
+ version: "0.0.1",
568
+ data: TextStyleSettings.defaultProps
569
+ }),
570
+ })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
571
+ });
572
+ });
573
+ });
574
+ describe("appendTextAnnotationGeometry", () => {
575
+ let imodel;
576
+ let seedDefinitionModelId;
577
+ let seedCategoryId;
578
+ let seedStyleId;
579
+ let seedStyleId2;
580
+ before(async () => {
581
+ imodel = await createIModel("DefaultTextStyle");
582
+ const jobSubjectId = createJobSubjectElement(imodel, "Job").insert();
583
+ const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, "Definition");
584
+ const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);
585
+ const styleId = createAnnotationTextStyle(imodel, definitionModel, "test", { font: { name: "Totally Real Font" }, textHeight: 0.25, isItalic: true }).insert();
586
+ const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, "alt", { font: { name: "Karla" }, textHeight: 0.5, isBold: true }).insert();
587
+ expect(jobSubjectId).not.to.be.undefined;
588
+ expect(definitionModel).not.to.be.undefined;
589
+ expect(category).not.to.be.undefined;
590
+ expect(model).not.to.be.undefined;
591
+ expect(styleId).not.to.be.undefined;
592
+ expect(differentStyleId).not.to.be.undefined;
593
+ seedDefinitionModelId = definitionModel;
594
+ seedCategoryId = category;
595
+ seedStyleId = styleId;
596
+ seedStyleId2 = differentStyleId;
597
+ });
598
+ function runAppendTextAnnotationGeometry(annotation, styleId, scaleFactor = 1) {
599
+ const builder = new MockBuilder();
600
+ const resolver = new TextStyleResolver({
601
+ textBlock: annotation.textBlock,
602
+ textStyleId: styleId,
603
+ iModel: imodel,
604
+ });
605
+ const layout = layoutTextBlock({
606
+ textBlock: annotation.textBlock,
607
+ iModel: imodel,
608
+ textStyleResolver: resolver,
609
+ });
610
+ const result = appendTextAnnotationGeometry({
611
+ annotationProps: annotation.toJSON(),
612
+ layout,
613
+ textStyleResolver: resolver,
614
+ scaleFactor,
615
+ builder,
616
+ categoryId: seedCategoryId,
617
+ });
618
+ expect(result).to.be.true;
619
+ return builder;
620
+ }
621
+ it("produces the same geometry when given the same inputs", () => {
622
+ const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);
623
+ const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);
624
+ expect(builder1.geometries).to.deep.equal(builder2.geometries);
625
+ expect(builder1.params).to.deep.equal(builder2.params);
626
+ expect(builder1.textStrings).to.deep.equal(builder2.textStrings);
627
+ });
628
+ it("produces no geometry when given an empty annotation", () => {
629
+ const block = TextBlock.create();
630
+ const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
631
+ const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);
632
+ expect(builder.geometries).to.be.empty;
633
+ expect(builder.params).to.be.empty;
634
+ expect(builder.textStrings).to.be.empty;
635
+ });
636
+ it("produces geometry when given an empty annotation with frame styling", () => {
637
+ const block = TextBlock.create();
638
+ const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });
639
+ const styleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "empty anno style", {
640
+ font: { name: "Totally Real Font" },
641
+ frame: {
642
+ shape: "rectangle",
643
+ }
644
+ }).insert();
645
+ const builder = runAppendTextAnnotationGeometry(annotation, styleId);
646
+ expect(builder.geometries).not.to.be.empty;
647
+ expect(builder.params).not.to.be.empty;
648
+ expect(builder.textStrings).to.be.empty;
649
+ });
650
+ it("produces different geometry when given different text-content in annotations", () => {
651
+ const anno1 = createAnnotation();
652
+ const anno2 = createAnnotation();
653
+ anno2.textBlock.appendRun(TextRun.create({ content: "extra", styleOverrides: { font: { name: "Totally Real Font" } } }));
654
+ const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);
655
+ const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);
656
+ expect(builder1.geometries).to.not.deep.equal(builder2.geometries);
657
+ expect(builder1.params).to.deep.equal(builder2.params);
658
+ expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);
659
+ });
660
+ it("produces different geometry when given different default styles", () => {
661
+ const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);
662
+ const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);
663
+ expect(builder1.geometries).to.not.deep.equal(builder2.geometries);
664
+ expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);
665
+ });
666
+ it("accounts for style overrides in the text", () => {
667
+ const block = TextBlock.create();
668
+ block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } };
669
+ block.appendParagraph();
670
+ block.children[0].styleOverrides = { isBold: true };
671
+ block.appendRun(TextRun.create({ content: "Run, Barry," }));
672
+ block.appendParagraph();
673
+ block.appendRun(TextRun.create({ content: " RUN!!! ", styleOverrides: { isItalic: false } }));
674
+ const annotation = createAnnotation(block);
675
+ const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);
676
+ expect(builder.textStrings.length).to.equal(2);
677
+ expect(builder.textStrings[0].text).to.equal("Run, Barry,");
678
+ // From override on paragraph
679
+ expect(builder.textStrings[0].bold).to.be.true;
680
+ // From default style
681
+ expect(builder.textStrings[0].italic).to.be.true;
682
+ expect(builder.textStrings[1].text).to.equal(" RUN!!! ");
683
+ // From default style
684
+ expect(builder.textStrings[1].bold).to.be.false;
685
+ // From override on run
686
+ expect(builder.textStrings[1].italic).to.be.false;
687
+ });
688
+ it("uses TextStyleSettings.defaults when no default style is provided", () => {
689
+ const block = TextBlock.create();
690
+ block.appendRun(TextRun.create({ content: "Run, Barry," }));
691
+ const annotation = createAnnotation(block);
692
+ const builder = runAppendTextAnnotationGeometry(annotation, "");
693
+ expect(builder.textStrings.length).to.equal(1);
694
+ expect(builder.textStrings[0].text).to.equal("Run, Barry,");
695
+ expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the "missing" font in the default text style
696
+ expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);
697
+ expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);
698
+ expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);
699
+ });
700
+ it("scales geometry correctly", () => {
701
+ const annotation = createAnnotation();
702
+ const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);
703
+ const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);
704
+ expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);
705
+ expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);
706
+ });
356
707
  });
357
708
  //# sourceMappingURL=TextAnnotation.test.js.map