@itwin/core-backend 5.2.0-dev.3 → 5.2.0-dev.31

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 (193) hide show
  1. package/CHANGELOG.md +79 -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/BriefcaseManager.d.ts +57 -3
  10. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  11. package/lib/cjs/BriefcaseManager.js +153 -44
  12. package/lib/cjs/BriefcaseManager.js.map +1 -1
  13. package/lib/cjs/ClassRegistry.js +2 -2
  14. package/lib/cjs/ClassRegistry.js.map +1 -1
  15. package/lib/cjs/CloudSqlite.d.ts +4 -0
  16. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  17. package/lib/cjs/CloudSqlite.js.map +1 -1
  18. package/lib/cjs/ECDb.d.ts +8 -0
  19. package/lib/cjs/ECDb.d.ts.map +1 -1
  20. package/lib/cjs/ECDb.js +22 -0
  21. package/lib/cjs/ECDb.js.map +1 -1
  22. package/lib/cjs/IModelDb.d.ts +54 -3
  23. package/lib/cjs/IModelDb.d.ts.map +1 -1
  24. package/lib/cjs/IModelDb.js +88 -10
  25. package/lib/cjs/IModelDb.js.map +1 -1
  26. package/lib/cjs/IModelHost.d.ts +11 -1
  27. package/lib/cjs/IModelHost.d.ts.map +1 -1
  28. package/lib/cjs/IModelHost.js +5 -0
  29. package/lib/cjs/IModelHost.js.map +1 -1
  30. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
  31. package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  32. package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
  33. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  34. package/lib/cjs/StashManager.d.ts +175 -0
  35. package/lib/cjs/StashManager.d.ts.map +1 -0
  36. package/lib/cjs/StashManager.js +306 -0
  37. package/lib/cjs/StashManager.js.map +1 -0
  38. package/lib/cjs/TxnManager.d.ts +226 -15
  39. package/lib/cjs/TxnManager.d.ts.map +1 -1
  40. package/lib/cjs/TxnManager.js +249 -23
  41. package/lib/cjs/TxnManager.js.map +1 -1
  42. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
  43. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  44. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +12 -1
  45. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  46. package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
  47. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  48. package/lib/cjs/annotations/LeaderGeometry.js +4 -3
  49. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  50. package/lib/cjs/annotations/TextAnnotationElement.d.ts +52 -24
  51. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  52. package/lib/cjs/annotations/TextAnnotationElement.js +49 -59
  53. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  54. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
  55. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  56. package/lib/cjs/annotations/TextAnnotationGeometry.js +2 -2
  57. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  58. package/lib/cjs/annotations/TextBlockLayout.d.ts +3 -9
  59. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  60. package/lib/cjs/annotations/TextBlockLayout.js +3 -22
  61. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  62. package/lib/cjs/internal/ChannelAdmin.js +1 -1
  63. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  64. package/lib/cjs/internal/Symbols.d.ts +1 -0
  65. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  66. package/lib/cjs/internal/Symbols.js +2 -1
  67. package/lib/cjs/internal/Symbols.js.map +1 -1
  68. package/lib/cjs/internal/annotations/fields.d.ts +2 -12
  69. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  70. package/lib/cjs/internal/annotations/fields.js +47 -40
  71. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  72. package/lib/cjs/internal/workspace/SettingsImpl.js +1 -1
  73. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  74. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +2 -2
  75. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  76. package/lib/cjs/workspace/Workspace.d.ts +1 -1
  77. package/lib/cjs/workspace/Workspace.js.map +1 -1
  78. package/lib/esm/BackendHubAccess.d.ts +2 -0
  79. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  80. package/lib/esm/BackendHubAccess.js.map +1 -1
  81. package/lib/esm/BackendLoggerCategory.d.ts +6 -0
  82. package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
  83. package/lib/esm/BackendLoggerCategory.js +6 -0
  84. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  85. package/lib/esm/BriefcaseManager.d.ts +57 -3
  86. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  87. package/lib/esm/BriefcaseManager.js +154 -45
  88. package/lib/esm/BriefcaseManager.js.map +1 -1
  89. package/lib/esm/ClassRegistry.js +2 -2
  90. package/lib/esm/ClassRegistry.js.map +1 -1
  91. package/lib/esm/CloudSqlite.d.ts +4 -0
  92. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  93. package/lib/esm/CloudSqlite.js.map +1 -1
  94. package/lib/esm/ECDb.d.ts +8 -0
  95. package/lib/esm/ECDb.d.ts.map +1 -1
  96. package/lib/esm/ECDb.js +22 -0
  97. package/lib/esm/ECDb.js.map +1 -1
  98. package/lib/esm/IModelDb.d.ts +54 -3
  99. package/lib/esm/IModelDb.d.ts.map +1 -1
  100. package/lib/esm/IModelDb.js +89 -11
  101. package/lib/esm/IModelDb.js.map +1 -1
  102. package/lib/esm/IModelHost.d.ts +11 -1
  103. package/lib/esm/IModelHost.d.ts.map +1 -1
  104. package/lib/esm/IModelHost.js +5 -0
  105. package/lib/esm/IModelHost.js.map +1 -1
  106. package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
  107. package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
  108. package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
  109. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  110. package/lib/esm/StashManager.d.ts +175 -0
  111. package/lib/esm/StashManager.d.ts.map +1 -0
  112. package/lib/esm/StashManager.js +301 -0
  113. package/lib/esm/StashManager.js.map +1 -0
  114. package/lib/esm/TxnManager.d.ts +226 -15
  115. package/lib/esm/TxnManager.d.ts.map +1 -1
  116. package/lib/esm/TxnManager.js +247 -21
  117. package/lib/esm/TxnManager.js.map +1 -1
  118. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
  119. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  120. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +10 -0
  121. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  122. package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
  123. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  124. package/lib/esm/annotations/LeaderGeometry.js +4 -3
  125. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  126. package/lib/esm/annotations/TextAnnotationElement.d.ts +52 -24
  127. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  128. package/lib/esm/annotations/TextAnnotationElement.js +51 -61
  129. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  130. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
  131. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  132. package/lib/esm/annotations/TextAnnotationGeometry.js +2 -2
  133. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  134. package/lib/esm/annotations/TextBlockLayout.d.ts +3 -9
  135. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  136. package/lib/esm/annotations/TextBlockLayout.js +3 -22
  137. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  138. package/lib/esm/internal/ChannelAdmin.js +1 -1
  139. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  140. package/lib/esm/internal/Symbols.d.ts +1 -0
  141. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  142. package/lib/esm/internal/Symbols.js +1 -0
  143. package/lib/esm/internal/Symbols.js.map +1 -1
  144. package/lib/esm/internal/annotations/fields.d.ts +2 -12
  145. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  146. package/lib/esm/internal/annotations/fields.js +50 -43
  147. package/lib/esm/internal/annotations/fields.js.map +1 -1
  148. package/lib/esm/internal/workspace/SettingsImpl.js +1 -1
  149. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  150. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +2 -2
  151. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  152. package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
  153. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
  154. package/lib/esm/test/AnnotationTestUtils.js +6 -1
  155. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  156. package/lib/esm/test/annotations/Fields.test.js +158 -43
  157. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  158. package/lib/esm/test/annotations/LeaderGeometry.test.js +12 -10
  159. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  160. package/lib/esm/test/annotations/TextAnnotation.test.js +299 -43
  161. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  162. package/lib/esm/test/annotations/TextBlock.test.js +39 -35
  163. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  164. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +46 -0
  165. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
  166. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
  167. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  168. package/lib/esm/test/ecdb/ECDb.test.js +71 -1
  169. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  170. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  171. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +8 -2
  172. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  173. package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
  174. package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
  175. package/lib/esm/test/hubaccess/Rebase.test.js +640 -0
  176. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
  177. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
  178. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  179. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
  180. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  181. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
  182. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
  183. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
  184. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  185. package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
  186. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  187. package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
  188. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  189. package/lib/esm/test/standalone/NativeAppStorage.test.js +2 -2
  190. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  191. package/lib/esm/workspace/Workspace.d.ts +1 -1
  192. package/lib/esm/workspace/Workspace.js.map +1 -1
  193. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { FractionRun, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextAnnotation3dProps, TextAnnotationProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TextAnnotation2d, TextAnnotation3d } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength } from \"../AnnotationTestUtils\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(styleId?: Id64String): TextAnnotation {\n const styleOverrides = { fontName: \"Karla\" };\n const block = TextBlock.create({ styleId: styleId ?? \"0x42\", styleOverrides });\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModel: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n definitionModel,\n name,\n settings,\n \"description\",\n )\n}\n\ntype CreateTextAnnotationArgs<T> = Partial<Omit<T, \"textAnnotationData\">> & { textAnnotationData?: TextAnnotationProps };\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n ...props,\n }, mockIModel());\n }\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create({ styleId: \"0x42\" }).toJSON()})\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(anno.textBlock.styleId).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create({ styleId: \"0x42\" }).toJSON()})\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create({ styleId: \"0x42\" });\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let seedCategoryId: string;\n let seedModelId: string;\n let seedStyleId: string;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n seedCategoryId = category;\n seedModelId = model;\n seedStyleId = styleId;\n });\n\n after(() => imodel.close());\n\n function createElement3d(createArgs?: CreateTextAnnotationArgs<TextAnnotation3dProps>): TextAnnotation3d {\n return TextAnnotation3d.create(\n imodel,\n seedCategoryId,\n seedModelId,\n {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n },\n createArgs?.textAnnotationData,\n )\n }\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const el = createElement3d({ textAnnotationData: annotation.toJSON() });\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d();\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a style\", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let seedCategoryId: string;\n let seedModelId: string;\n let seedStyleId: string;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n seedCategoryId = category;\n seedModelId = model;\n seedStyleId = styleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n function createElement2d(createArgs?: CreateTextAnnotationArgs<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.create(\n imodel,\n seedCategoryId,\n seedModelId,\n {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n },\n createArgs?.textAnnotationData,\n )\n }\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const el = createElement2d({ textAnnotationData: annotation.toJSON() });\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d();\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a style\", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n fontName: \"Totally Real Font\",\n isUnderlined: true,\n lineHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { fontName: \"\"});\n expect(() => annotationTextStyle.insert()).to.throw();\n // lineHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid lineHeight\", { fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { fontName: \"Totally Real Font\", stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { fontName: \"Totally Real Font\" });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ fontName: \"\" });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { fontName: \"Totally Real Font\" });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n});\n"]}
1
+ {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAsC,qBAAqB,EAAE,cAAc,EAAyB,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,oBAAoB,CAAC;AAClN,OAAO,EAAY,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAA8B,gBAAgB,EAA8B,MAAM,yCAAyC,CAAC;AAC1K,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAA0C,OAAO,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,oCAAoC,EAAE,MAAM,+CAA+C,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAGxF,SAAS,UAAU;IACjB,MAAM,MAAM,GAAyE;QACnF,KAAK,EAAE;YACL,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;SACT;QACR,oBAAoB,EAAE,8BAA8B;QACpD,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS;KACjC,CAAC;IAEF,OAAO,MAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAqB;IAC7C,MAAM,cAAc,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAC5E,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACrG,KAAK,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,UAAU,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAChE,UAAU,CAAC,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;IAC5F,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,MAAgB,EAAE,IAAY,EAAW,EAAE;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/E,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,2DAA2D;IAE3G,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAGD,MAAM,kBAAkB,GAAG,CAAC,eAA6B,EAAE,QAAoB,EAAE,eAA2B,EAAE,EAAE;IAC9G,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC1H,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,eAAe,CAAC,uCAAuC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElK,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpH,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,qBAAqB,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAEjI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,eAA6B,EAAE,QAAoB,EAAE,eAA2B,EAAE,EAAE;IAC9G,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC1H,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnK,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9G,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpH,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,qBAAqB,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAEnJ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAyB,EAAE;IACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE;QAChD,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,QAAQ,EAAE;QACpE,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC5B,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;QACtF,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;KACzB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;QAC/B,IAAI,EAAE,QAAQ,CAAC,0BAA0B,CAAC,eAAe,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;KAChG,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,CAAC,MAAgB,EAAE,eAA2B,EAAE,IAAY,EAAE,WAAmC,iBAAiB,CAAC,YAAY,EAAuB,EAAE;IACxL,OAAO,mBAAmB,CAAC,MAAM,CAC/B,MAAM,EACN,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,aAAa,CACd,CAAA;AACH,CAAC,CAAA;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,UAAyD;IAClG,MAAM,SAAS,GAAqB;QAClC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACtB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;KACvC,CAAC;IAEF,OAAO,gBAAgB,CAAC,MAAM,CAC5B,MAAM,EACN;QACE,GAAG,UAAU;QACb,SAAS;KACV,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,UAAyD;IAClG,MAAM,SAAS,GAAqB;QAClC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC5B,MAAM,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;KAC3D,CAAC;IAEF,OAAO,gBAAgB,CAAC,MAAM,CAC5B,MAAM,EACN;QACE,GAAG,UAAU;QACb,SAAS;KACV,CACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,SAAS,WAAW,CAAC,KAAsC;QACzD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;YAC/B,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;YACb,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;aACd;YACD,aAAa,EAAE,gBAAgB,CAAC,aAAa;YAC7C,SAAS,EAAE;gBACT,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACtB,KAAK,EAAE,CAAC;aACT;YACD,gBAAgB,EAAE,IAAI,oCAAoC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YAC3E,GAAG,KAAK;SACT,EAAE,UAAU,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,WAAW,CAAC;gBACvB,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAC,CAAC;gBAC5E,gBAAgB,EAAE,IAAI,oCAAoC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;aAC5E,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAG,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,IAAI,GAAG,WAAW,CAAC;gBACvB,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAC,CAAC;aAC7E,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAG,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAG,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;YAE3B,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YACrC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAE/B,MAAM,CAAC,IAAI,CAAC,aAAa,EAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,aAAa,EAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,IAAI,MAAoB,CAAC;QACzB,IAAI,mBAAkE,CAAC;QAEvE,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACrE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YACnF,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAEvJ,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAEpC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjF,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,SAAS,iBAAiB,CAAC,EAAsB,EAAE,eAAwB,EAAE,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9H,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QAED,QAAQ,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YACrE,KAAK,UAAU,IAAI,CAAC,UAA2B;gBAC7C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC;gBAChE,IAAI,UAAU,EAAE,CAAC;oBACf,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAChC,CAAC;gBAED,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE9B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;gBAEzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,IAAI,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,YAAY,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAEnD,iBAAiB,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAElF,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;gBAEjC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBACjC,MAAM,CAAC,IAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACxE,CAAC;YACH,CAAC;YAED,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,IAAI,MAAoB,CAAC;QACzB,IAAI,mBAAkE,CAAC;QAEvE,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACrE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YACnF,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YAEtF,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAElC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjF,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,SAAS,iBAAiB,CAAC,EAAsB,EAAE,eAAwB,EAAE,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9H,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QAED,QAAQ,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YACrE,KAAK,UAAU,IAAI,CAAC,UAA2B;gBAC7C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACzD,IAAI,UAAU,EAAE,CAAC;oBACf,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAChC,CAAC;gBAED,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE9B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBAE1B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,IAAI,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,YAAY,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAEnD,iBAAiB,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAElF,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;gBAEjC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBACjC,MAAM,CAAC,IAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;oBACtE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;YAED,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,MAAoB,CAAC;QACzB,IAAI,aAAqB,CAAC;QAC1B,IAAI,qBAA6B,CAAC;QAClC,IAAI,WAAmB,CAAC;QACxB,IAAI,YAAoB,CAAC;QAEzB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACrE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YACnF,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACvJ,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAEhJ,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACzC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE7C,aAAa,GAAG,YAAY,CAAC;YAC7B,qBAAqB,GAAG,eAAe,CAAC;YACxC,WAAW,GAAG,OAAO,CAAC;YACtB,YAAY,GAAG,gBAAgB,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,IAAI,mBAAkE,CAAC;YAEvE,MAAM,CAAC,GAAG,EAAE;gBACV,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAClC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;gBACrD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;gBAClH,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACjD,MAAM,CAAC,GAAG,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvD,GAAG,CAAC,MAAM,EAAE,CAAC;gBAEb,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACjD,MAAM,CAAC,GAAG,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;gBACnE,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjF,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAoC,CAAC,WAAW,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC;gBAExD,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAoC,CAAC,YAAY,CAAC,CAAC;gBAE9E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBACjD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAEjF,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBAE1B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,IAAI,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,YAAY,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACnD,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,IAAI,mBAAkE,CAAC;YAEvE,MAAM,CAAC,GAAG,EAAE;gBACV,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAClC,mBAAmB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;gBACrD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;gBAClH,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACjD,MAAM,CAAC,GAAG,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvD,GAAG,CAAC,MAAM,EAAE,CAAC;gBAEb,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACjD,MAAM,CAAC,GAAG,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;gBACnE,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjF,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAoC,CAAC,WAAW,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC;gBAExD,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAoC,CAAC,YAAY,CAAC,CAAC;gBAE9E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBACjD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,EAAE,GAAG,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAEjF,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1C,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBAE1B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmB,IAAI,CAAC,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChC,MAAM,CAAC,GAAG,YAAY,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBACnD,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,MAAoB,CAAC;IACzB,IAAI,aAAqB,CAAC;IAC1B,IAAI,mBAA2B,CAAC;IAEhC,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAEnF,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAE5C,aAAa,GAAG,YAAY,CAAC;QAC7B,mBAAmB,GAAG,eAAe,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,QAAQ,EAAE,mBAAmB;YAC7B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAErG,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAE1B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAChC,MAAM,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAElC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,iDAAiD;QACjD,IAAI,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC5F,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtD,mBAAmB;QACnB,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC,CAAC;QACzG,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtD,gCAAgC;QAChC,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACrJ,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtD,0CAA0C;QAC1C,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC;QACzK,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAErI,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAChC,MAAM,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEtD,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC;YACvC,aAAa,EAAE,mBAAmB,CAAC,aAAa;YAChD,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC;SACtE,EAAE,MAAM,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACjH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,MAAoB,CAAC;IACzB,IAAI,qBAA6B,CAAC;IAClC,IAAI,cAAsB,CAAC;IAC3B,IAAI,WAAmB,CAAC;IACxB,IAAI,YAAoB,CAAC;IAEzB,MAAM,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QACnF,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvJ,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAEhJ,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAE7C,qBAAqB,GAAG,eAAe,CAAC;QACxC,cAAc,GAAG,QAAQ,CAAC;QAC1B,WAAW,GAAG,OAAO,CAAC;QACtB,YAAY,GAAG,gBAAgB,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,SAAS,+BAA+B,CAAC,UAA0B,EAAE,OAAmB,EAAE,cAAsB,CAAC;QAC/G,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,MAAM,EAAE,MAAM;YACd,iBAAiB,EAAE,QAAQ;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,4BAA4B,CAAC;YAC1C,eAAe,EAAE,UAAU,CAAC,MAAM,EAAE;YACpC,MAAM;YACN,iBAAiB,EAAE,QAAQ;YAC3B,WAAW;YACX,OAAO;YACP,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,+BAA+B,CAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC;QAElF,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,+BAA+B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEzE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,yBAAyB,CACvC,MAAM,EACN,qBAAqB,EACrB,kBAAkB,EAClB;YACE,QAAQ,EAAE,mBAAmB;YAC7B,KAAK,EAAE;gBACL,KAAK,EAAE,WAAW;aACnB;SACF,CACF,CAAC,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;QAEnH,MAAM,QAAQ,GAAG,+BAA+B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,+BAA+B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAErE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAG,+BAA+B,CAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,+BAA+B,CAAC,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;QAEnF,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACtD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9F,KAAK,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,+BAA+B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEzE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5D,6BAA6B;QAC7B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC/C,qBAAqB;QACrB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,qBAAqB;QACrB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAChD,uBAAuB;QACvB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,+BAA+B,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4DAA4D;QAC7G,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,+BAA+B,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,+BAA+B,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAE7E,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\n const styleOverrides = { fontName: \"Karla\" };\n const block = textBlock ?? TextBlock.create({ styleOverrides });\n if (!textBlock) {\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n }\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModel: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n definitionModel,\n name,\n settings,\n \"description\",\n )\n}\n\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\n const placement: Placement2dProps = {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n };\n\n return TextAnnotation2d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\n const placement: Placement3dProps = {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n };\n\n return TextAnnotation3d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\n ...props,\n }, mockIModel());\n }\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()}),\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(elem.defaultTextStyle).not.to.be.undefined;\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()})\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n createElement3dArgs = { category, model };\n });\n\n after(() => imodel.close());\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement3d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n\n createElement2dArgs = { category, model };\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement2d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d(imodel, createElement2dArgs);\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"defaultTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModelId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {fontName: \"Karla\", lineHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModelId = definitionModel;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n describe(\"TextAnnotation2d\", () => {\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement2dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement2d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n\n describe(\"TextAnnotation3d\", () => {\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement3dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement3d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n fontName: \"Totally Real Font\",\n isUnderlined: true,\n lineHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { fontName: \"\"});\n expect(() => annotationTextStyle.insert()).to.throw();\n // lineHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid lineHeight\", { fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { fontName: \"Totally Real Font\", stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { fontName: \"Totally Real Font\" });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ fontName: \"\" });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { fontName: \"Totally Real Font\" });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n});\n\ndescribe(\"appendTextAnnotationGeometry\", () => {\n let imodel: StandaloneDb;\n let seedDefinitionModelId: string;\n let seedCategoryId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {fontName: \"Karla\", lineHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedDefinitionModelId = definitionModel;\n seedCategoryId = category;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\n const builder = new MockBuilder();\n\n const resolver = new TextStyleResolver({\n textBlock: annotation.textBlock,\n textStyleId: styleId,\n iModel: imodel,\n });\n\n const layout = layoutTextBlock({\n textBlock: annotation.textBlock,\n iModel: imodel,\n textStyleResolver: resolver,\n });\n\n const result = appendTextAnnotationGeometry({\n annotationProps: annotation.toJSON(),\n layout,\n textStyleResolver: resolver,\n scaleFactor,\n builder,\n categoryId: seedCategoryId,\n });\n\n expect(result).to.be.true;\n return builder;\n }\n\n it(\"produces the same geometry when given the same inputs\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\n });\n\n it(\"produces no geometry when given an empty annotation\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.geometries).to.be.empty;\n expect(builder.params).to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const styleId = createAnnotationTextStyle(\n imodel,\n seedDefinitionModelId,\n \"empty anno style\",\n {\n fontName: \"Totally Real Font\",\n frame: {\n shape: \"rectangle\",\n }\n }\n ).insert();\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\n\n expect(builder.geometries).not.to.be.empty;\n expect(builder.params).not.to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n\n it(\"produces different geometry when given different text-content in annotations\", () => {\n const anno1 = createAnnotation();\n const anno2 = createAnnotation();\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { fontName: \"Totally Real Font\" } }));\n\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"produces different geometry when given different default styles\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"accounts for style overrides in the text\", () => {\n const block = TextBlock.create();\n block.appendParagraph();\n block.paragraphs[0].styleOverrides = { isBold: true };\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.appendParagraph();\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = createAnnotation(block);\n\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.textStrings.length).to.equal(2);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n // From override on paragraph\n expect(builder.textStrings[0].bold).to.be.true;\n // From default style\n expect(builder.textStrings[0].italic).to.be.true;\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\n // From default style\n expect(builder.textStrings[1].bold).to.be.false;\n // From override on run\n expect(builder.textStrings[1].italic).to.be.false;\n });\n\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\n const block = TextBlock.create();\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = createAnnotation(block);\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\n\n expect(builder.textStrings.length).to.equal(1);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\n });\n\n it(\"scales geometry correctly\", () => {\n const annotation = createAnnotation();\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\n\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\n });\n});"]}
@@ -28,11 +28,12 @@ function findTextStyleImpl(id) {
28
28
  describe("layoutTextBlock", () => {
29
29
  describe("resolves TextStyleSettings", () => {
30
30
  it("inherits styling from TextBlock when Paragraph and Run have no style overrides", () => {
31
- const textBlock = TextBlock.create({ styleId: "0x42" });
31
+ const textBlock = TextBlock.create();
32
32
  const run = TextRun.create({ content: "test" });
33
33
  textBlock.appendParagraph();
34
34
  textBlock.appendRun(run);
35
35
  const tb = doLayout(textBlock, {
36
+ textStyleId: "0x42",
36
37
  findTextStyle: findTextStyleImpl,
37
38
  });
38
39
  expect(tb.lines.length).to.equal(1);
@@ -43,12 +44,13 @@ describe("layoutTextBlock", () => {
43
44
  expect(runStyle.isBold).to.be.true;
44
45
  });
45
46
  it("inherits style overrides from Paragraph when Run has no style overrides", () => {
46
- const textBlock = TextBlock.create({ styleId: "0x42" });
47
+ const textBlock = TextBlock.create();
47
48
  const paragraph = Paragraph.create({ styleOverrides: { fontName: "paragraph" } });
48
49
  const run = TextRun.create({ content: "test" });
49
50
  textBlock.paragraphs.push(paragraph);
50
51
  textBlock.appendRun(run);
51
52
  const tb = doLayout(textBlock, {
53
+ textStyleId: "0x42",
52
54
  findTextStyle: findTextStyleImpl,
53
55
  });
54
56
  expect(tb.lines.length).to.equal(1);
@@ -58,12 +60,13 @@ describe("layoutTextBlock", () => {
58
60
  expect(runStyle.isBold).to.be.true;
59
61
  });
60
62
  it("uses Run style overrides when Run has overrides", () => {
61
- const textBlock = TextBlock.create({ styleId: "0x42" });
63
+ const textBlock = TextBlock.create();
62
64
  const paragraph = Paragraph.create({ styleOverrides: { lineSpacingFactor: 55, fontName: "paragraph" } });
63
65
  const run = TextRun.create({ content: "test", styleOverrides: { lineSpacingFactor: 99, fontName: "run" } });
64
66
  textBlock.paragraphs.push(paragraph);
65
67
  textBlock.appendRun(run);
66
68
  const tb = doLayout(textBlock, {
69
+ textStyleId: "0x42",
67
70
  findTextStyle: findTextStyleImpl,
68
71
  });
69
72
  expect(tb.lines.length).to.equal(1);
@@ -74,11 +77,12 @@ describe("layoutTextBlock", () => {
74
77
  });
75
78
  it("still uses TextBlock specific styles when Run has style overrides", () => {
76
79
  // Some style settings only make sense on a TextBlock, so they are always applied from the TextBlock, even if the Run has a style override.
77
- const textBlock = TextBlock.create({ styleId: "0x42" });
80
+ const textBlock = TextBlock.create();
78
81
  const run = TextRun.create({ content: "test", styleOverrides: { lineSpacingFactor: 99, fontName: "run" } });
79
82
  textBlock.appendParagraph();
80
83
  textBlock.appendRun(run);
81
84
  const tb = doLayout(textBlock, {
85
+ textStyleId: "0x42",
82
86
  findTextStyle: findTextStyleImpl,
83
87
  });
84
88
  expect(tb.lines.length).to.equal(1);
@@ -87,7 +91,7 @@ describe("layoutTextBlock", () => {
87
91
  expect(runStyle.lineSpacingFactor).to.equal(12);
88
92
  });
89
93
  it("inherits overrides from TextBlock, Paragraph and Run when there is no styleId", () => {
90
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
94
+ const textBlock = TextBlock.create({ styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
91
95
  const paragraph = Paragraph.create({ styleOverrides: { lineHeight: 56, color: 0xff0000, frame: { shape: "octagon" } } });
92
96
  const run = TextRun.create({ content: "test", styleOverrides: { widthFactor: 78, fontName: "override", leader: { wantElbow: true } } });
93
97
  textBlock.paragraphs.push(paragraph);
@@ -113,12 +117,13 @@ describe("layoutTextBlock", () => {
113
117
  expect(runStyle.isBold).to.be.true;
114
118
  });
115
119
  it("does not inherit overrides in TextBlock or Paragraph when Run has same propertied overriden - unless they are TextBlock specific settings", () => {
116
- const textBlock = TextBlock.create({ styleId: "0x42", styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
120
+ const textBlock = TextBlock.create({ styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
117
121
  const paragraph = Paragraph.create({ styleOverrides: { lineHeight: 56, color: 0xff0000 } });
118
122
  const run = TextRun.create({ content: "test", styleOverrides: { widthFactor: 78, lineHeight: 6, lineSpacingFactor: 24, fontName: "override", isBold: false } });
119
123
  textBlock.paragraphs.push(paragraph);
120
124
  textBlock.appendRun(run);
121
125
  const tb = doLayout(textBlock, {
126
+ textStyleId: "0x42",
122
127
  findTextStyle: findTextStyleImpl,
123
128
  });
124
129
  expect(tb.lines.length).to.equal(1);
@@ -136,7 +141,7 @@ describe("layoutTextBlock", () => {
136
141
  });
137
142
  it("takes child overrides over parent overrides", () => {
138
143
  //...unless they are TextBlock specific as covered in other tests
139
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { fontName: "grandparent" } });
144
+ const textBlock = TextBlock.create({ styleOverrides: { fontName: "grandparent" } });
140
145
  const paragraph = Paragraph.create({ styleOverrides: { fontName: "parent" } });
141
146
  const run = TextRun.create({ content: "test", styleOverrides: { fontName: "child" } });
142
147
  textBlock.paragraphs.push(paragraph);
@@ -155,7 +160,7 @@ describe("layoutTextBlock", () => {
155
160
  this.skip();
156
161
  }
157
162
  // Initialize a new TextBlockLayout object
158
- const textBlock = TextBlock.create({ width: 50, styleId: "", styleOverrides: { widthFactor: 34, color: 0x00ff00, fontName: "arial" } });
163
+ const textBlock = TextBlock.create({ width: 50, styleOverrides: { widthFactor: 34, color: 0x00ff00, fontName: "arial" } });
159
164
  const run0 = TextRun.create({
160
165
  content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pretium mi sit amet magna malesuada, at venenatis ante eleifend.",
161
166
  styleOverrides: { lineHeight: 56, color: 0xff0000 },
@@ -262,7 +267,7 @@ describe("layoutTextBlock", () => {
262
267
  expect(marginRange.high.y).to.equal(layoutRange.high.y + (margins.top ?? 0));
263
268
  };
264
269
  const makeTextBlock = (margins) => {
265
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineSpacingFactor: 0 }, margins });
270
+ const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor: 0 }, margins });
266
271
  textBlock.appendRun(makeTextRun("abc"));
267
272
  textBlock.appendRun(makeTextRun("defg"));
268
273
  return textBlock;
@@ -287,7 +292,7 @@ describe("layoutTextBlock", () => {
287
292
  });
288
293
  describe("range", () => {
289
294
  it("aligns text to center based on height of stacked fraction", () => {
290
- const textBlock = TextBlock.create({ styleId: "" });
295
+ const textBlock = TextBlock.create();
291
296
  const fractionRun = FractionRun.create({ numerator: "1", denominator: "2" });
292
297
  const textRun = TextRun.create({ content: "text" });
293
298
  textBlock.appendRun(fractionRun);
@@ -305,7 +310,7 @@ describe("layoutTextBlock", () => {
305
310
  expect(round(textLayout.offsetFromLine.y, 3)).to.equal(.375);
306
311
  });
307
312
  it("produces one line per paragraph if document width <= 0", () => {
308
- const textBlock = TextBlock.create({ styleId: "" });
313
+ const textBlock = TextBlock.create();
309
314
  for (let i = 0; i < 4; i++) {
310
315
  const layout = doLayout(textBlock);
311
316
  if (i === 0) {
@@ -343,7 +348,7 @@ describe("layoutTextBlock", () => {
343
348
  it("produces a new line for each LineBreakRun", () => {
344
349
  const lineSpacingFactor = 0.5;
345
350
  const lineHeight = 1;
346
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineSpacingFactor, lineHeight } });
351
+ const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor, lineHeight } });
347
352
  textBlock.appendRun(TextRun.create({ content: "abc" }));
348
353
  textBlock.appendRun(LineBreakRun.create());
349
354
  textBlock.appendRun(TextRun.create({ content: "def" }));
@@ -363,7 +368,7 @@ describe("layoutTextBlock", () => {
363
368
  it("applies tab shifts", () => {
364
369
  const lineHeight = 1;
365
370
  const tabInterval = 6;
366
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineHeight, tabInterval } });
371
+ const textBlock = TextBlock.create({ styleOverrides: { lineHeight, tabInterval } });
367
372
  // Appends a line that looks like `stringOne` TAB `stringTwo` LINEBREAK
368
373
  const appendLine = (stringOne, stringTwo, wantLineBreak = true) => {
369
374
  if (stringOne.length > 0)
@@ -395,7 +400,7 @@ describe("layoutTextBlock", () => {
395
400
  it("applies consecutive tab shifts", () => {
396
401
  const lineHeight = 1;
397
402
  const tabInterval = 6;
398
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineHeight, tabInterval } });
403
+ const textBlock = TextBlock.create({ styleOverrides: { lineHeight, tabInterval } });
399
404
  // line 0: ----->----->----->LINEBREAK
400
405
  textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval } }));
401
406
  textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval } }));
@@ -437,7 +442,7 @@ describe("layoutTextBlock", () => {
437
442
  it("computes ranges based on custom line spacing and line height", () => {
438
443
  const lineSpacingFactor = 2;
439
444
  const lineHeight = 3;
440
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineSpacingFactor, lineHeight } });
445
+ const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor, lineHeight } });
441
446
  textBlock.appendRun(TextRun.create({ content: "abc" }));
442
447
  textBlock.appendRun(LineBreakRun.create());
443
448
  textBlock.appendRun(TextRun.create({ content: "def" }));
@@ -467,7 +472,7 @@ describe("layoutTextBlock", () => {
467
472
  if (!isIntlSupported()) {
468
473
  this.skip();
469
474
  }
470
- const block = TextBlock.create({ styleId: "", width: 3, styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
475
+ const block = TextBlock.create({ width: 3, styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
471
476
  function expectBlockRange(width, height) {
472
477
  const layout = doLayout(block);
473
478
  expectRange(width, height, layout.range);
@@ -491,7 +496,7 @@ describe("layoutTextBlock", () => {
491
496
  if (!isIntlSupported()) {
492
497
  this.skip();
493
498
  }
494
- const block = TextBlock.create({ styleId: "", styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
499
+ const block = TextBlock.create({ styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
495
500
  function expectBlockRange(width, height) {
496
501
  const layout = doLayout(block);
497
502
  expectRange(width, height, layout.range);
@@ -508,7 +513,7 @@ describe("layoutTextBlock", () => {
508
513
  if (!isIntlSupported()) {
509
514
  this.skip();
510
515
  }
511
- const block = TextBlock.create({ styleId: "", styleOverrides: { lineSpacingFactor: 0 } });
516
+ const block = TextBlock.create({ styleOverrides: { lineSpacingFactor: 0 } });
512
517
  function expectBlockRange(width, height) {
513
518
  const layout = doLayout(block);
514
519
  expectRange(width, height, layout.range);
@@ -582,7 +587,7 @@ describe("layoutTextBlock", () => {
582
587
  });
583
588
  describe("word-wrapping", () => {
584
589
  function expectLines(input, width, expectedLines) {
585
- const textBlock = TextBlock.create({ styleId: "" });
590
+ const textBlock = TextBlock.create();
586
591
  textBlock.width = width;
587
592
  const run = makeTextRun(input);
588
593
  textBlock.appendRun(run);
@@ -596,7 +601,7 @@ describe("layoutTextBlock", () => {
596
601
  if (!isIntlSupported()) {
597
602
  this.skip();
598
603
  }
599
- const textBlock = TextBlock.create({ styleId: "" });
604
+ const textBlock = TextBlock.create();
600
605
  textBlock.width = 6;
601
606
  textBlock.appendRun(makeTextRun("ab"));
602
607
  expect(doLayout(textBlock).lines.length).to.equal(1);
@@ -685,7 +690,7 @@ describe("layoutTextBlock", () => {
685
690
  this.skip();
686
691
  }
687
692
  const lineHeight = 1;
688
- const textBlock = TextBlock.create({ styleId: "", styleOverrides: { lineHeight } });
693
+ const textBlock = TextBlock.create({ styleOverrides: { lineHeight } });
689
694
  // line 0: -->-->------> LINEBREAK
690
695
  textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval: 3 } }));
691
696
  textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval: 3 } }));
@@ -755,7 +760,7 @@ describe("layoutTextBlock", () => {
755
760
  if (!isIntlSupported()) {
756
761
  this.skip();
757
762
  }
758
- const textBlock = TextBlock.create({ styleId: "" });
763
+ const textBlock = TextBlock.create();
759
764
  for (const str of ["The ", "quick brown", " fox jumped over ", "the lazy ", "dog"]) {
760
765
  textBlock.appendRun(makeTextRun(str));
761
766
  }
@@ -799,7 +804,7 @@ describe("layoutTextBlock", () => {
799
804
  if (!isIntlSupported()) {
800
805
  this.skip();
801
806
  }
802
- const block = TextBlock.create({ styleId: "" });
807
+ const block = TextBlock.create();
803
808
  block.appendRun(makeTextRun("aa")); // 2 chars wide
804
809
  block.appendRun(makeTextRun("bb ccc d ee")); // 11 chars wide
805
810
  block.appendRun(makeTextRun("ff ggg h")); // 8 chars wide
@@ -839,7 +844,7 @@ describe("layoutTextBlock", () => {
839
844
  if (!isIntlSupported()) {
840
845
  this.skip();
841
846
  }
842
- const block = TextBlock.create({ styleId: "", styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
847
+ const block = TextBlock.create({ styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
843
848
  block.appendRun(makeTextRun("abc defg"));
844
849
  const layout1 = doLayout(block);
845
850
  let width = layout1.range.xLength();
@@ -856,14 +861,14 @@ describe("layoutTextBlock", () => {
856
861
  const result = layout.toResult();
857
862
  const textStyleResolver = new TextStyleResolver({
858
863
  textBlock,
864
+ textStyleId: "",
859
865
  iModel: {},
860
- modelId: undefined,
861
866
  findTextStyle: () => TextStyleSettings.defaults
862
867
  });
863
868
  return { textStyleResolver, result };
864
869
  }
865
870
  it("should return an empty array if source type is not text", function () {
866
- const textBlock = TextBlock.create({ styleId: "" });
871
+ const textBlock = TextBlock.create();
867
872
  const fractionRun = FractionRun.create({ numerator: "1", denominator: "2" });
868
873
  textBlock.appendRun(fractionRun);
869
874
  const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
@@ -881,7 +886,7 @@ describe("layoutTextBlock", () => {
881
886
  expect(graphemeRanges).to.be.an("array").that.is.empty;
882
887
  });
883
888
  it("should handle empty text content", function () {
884
- const textBlock = TextBlock.create({ styleId: "" });
889
+ const textBlock = TextBlock.create();
885
890
  const textRun = TextRun.create({ content: "" });
886
891
  textBlock.appendRun(textRun);
887
892
  const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
@@ -899,7 +904,7 @@ describe("layoutTextBlock", () => {
899
904
  expect(graphemeRanges).to.be.an("array").that.is.empty;
900
905
  });
901
906
  it("should compute grapheme offsets correctly for a given text", function () {
902
- const textBlock = TextBlock.create({ styleId: "" });
907
+ const textBlock = TextBlock.create();
903
908
  const textRun = TextRun.create({ content: "hello" });
904
909
  textBlock.appendRun(textRun);
905
910
  const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
@@ -919,7 +924,7 @@ describe("layoutTextBlock", () => {
919
924
  expect(graphemeRanges[4].high.x).to.equal(5);
920
925
  });
921
926
  it("should compute grapheme offsets correctly for non-English text", function () {
922
- const textBlock = TextBlock.create({ styleId: "" });
927
+ const textBlock = TextBlock.create();
923
928
  // Hindi - "Paragraph"
924
929
  const textRun = TextRun.create({ content: "अनुच्छेद" });
925
930
  textBlock.appendRun(textRun);
@@ -942,7 +947,7 @@ describe("layoutTextBlock", () => {
942
947
  expect(graphemeRanges[3].high.x).to.equal(8);
943
948
  });
944
949
  it("should compute grapheme offsets correctly for emoji content", function () {
945
- const textBlock = TextBlock.create({ styleId: "" });
950
+ const textBlock = TextBlock.create();
946
951
  const textRun = TextRun.create({ content: "👨‍👦" });
947
952
  textBlock.appendRun(textRun);
948
953
  const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
@@ -979,9 +984,9 @@ describe("layoutTextBlock", () => {
979
984
  expect(comic).to.equal(3);
980
985
  expect(iModel.fonts.findId({ name: "Consolas" })).to.be.undefined;
981
986
  function test(fontName, expectedFontId) {
982
- const textBlock = TextBlock.create({ styleId: "" });
987
+ const textBlock = TextBlock.create();
983
988
  textBlock.appendRun(TextRun.create({ styleOverrides: { fontName } }));
984
- const textStyleResolver = new TextStyleResolver({ textBlock, iModel });
989
+ const textStyleResolver = new TextStyleResolver({ textBlock, textStyleId: "", iModel });
985
990
  const layout = layoutTextBlock({ textBlock, iModel, textStyleResolver });
986
991
  const run = layout.lines[0].runs[0];
987
992
  expect(run).not.to.be.undefined;
@@ -995,7 +1000,6 @@ describe("layoutTextBlock", () => {
995
1000
  });
996
1001
  function computeDimensions(args) {
997
1002
  const textBlock = TextBlock.create({
998
- styleId: "",
999
1003
  styleOverrides: {
1000
1004
  lineHeight: args.height,
1001
1005
  widthFactor: args.width,
@@ -1009,7 +1013,7 @@ describe("layoutTextBlock", () => {
1009
1013
  fontName: args.font ?? "Vera",
1010
1014
  },
1011
1015
  }));
1012
- const textStyleResolver = new TextStyleResolver({ textBlock, iModel });
1016
+ const textStyleResolver = new TextStyleResolver({ textBlock, textStyleId: "", iModel });
1013
1017
  const range = layoutTextBlock({ textBlock, iModel, textStyleResolver }).range;
1014
1018
  return { x: range.high.x - range.low.x, y: range.high.y - range.low.y };
1015
1019
  }
@@ -1085,7 +1089,7 @@ describe("produceTextBlockGeometry", () => {
1085
1089
  return LineBreakRun.create({ styleOverrides });
1086
1090
  }
1087
1091
  function makeTextBlock(runs) {
1088
- const block = TextBlock.create({ styleId: "" });
1092
+ const block = TextBlock.create();
1089
1093
  for (const run of runs) {
1090
1094
  block.appendRun(run);
1091
1095
  }