@itwin/core-common 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 (220) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/lib/cjs/AnalysisStyle.d.ts.map +1 -1
  3. package/lib/cjs/AnalysisStyle.js +2 -0
  4. package/lib/cjs/AnalysisStyle.js.map +1 -1
  5. package/lib/cjs/BlobReader.d.ts.map +1 -1
  6. package/lib/cjs/BlobReader.js +10 -2
  7. package/lib/cjs/BlobReader.js.map +1 -1
  8. package/lib/cjs/BriefcaseTypes.d.ts +2 -0
  9. package/lib/cjs/BriefcaseTypes.d.ts.map +1 -1
  10. package/lib/cjs/BriefcaseTypes.js.map +1 -1
  11. package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
  12. package/lib/cjs/DisplayStyleSettings.js +1 -1
  13. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  14. package/lib/cjs/ECSqlTypes.js +1 -1
  15. package/lib/cjs/ECSqlTypes.js.map +1 -1
  16. package/lib/cjs/ElementProps.d.ts +8 -0
  17. package/lib/cjs/ElementProps.d.ts.map +1 -1
  18. package/lib/cjs/ElementProps.js.map +1 -1
  19. package/lib/cjs/FeatureIndex.d.ts.map +1 -1
  20. package/lib/cjs/FeatureIndex.js +2 -1
  21. package/lib/cjs/FeatureIndex.js.map +1 -1
  22. package/lib/cjs/FeatureSymbology.d.ts.map +1 -1
  23. package/lib/cjs/FeatureSymbology.js +0 -2
  24. package/lib/cjs/FeatureSymbology.js.map +1 -1
  25. package/lib/cjs/GeometryParams.d.ts.map +1 -1
  26. package/lib/cjs/GeometryParams.js +6 -0
  27. package/lib/cjs/GeometryParams.js.map +1 -1
  28. package/lib/cjs/Gradient.d.ts.map +1 -1
  29. package/lib/cjs/Gradient.js +5 -0
  30. package/lib/cjs/Gradient.js.map +1 -1
  31. package/lib/cjs/HiddenLine.d.ts.map +1 -1
  32. package/lib/cjs/HiddenLine.js +4 -1
  33. package/lib/cjs/HiddenLine.js.map +1 -1
  34. package/lib/cjs/IModel.d.ts.map +1 -1
  35. package/lib/cjs/IModel.js +7 -7
  36. package/lib/cjs/IModel.js.map +1 -1
  37. package/lib/cjs/Localization.d.ts.map +1 -1
  38. package/lib/cjs/Localization.js +3 -0
  39. package/lib/cjs/Localization.js.map +1 -1
  40. package/lib/cjs/TextureMapping.js +2 -2
  41. package/lib/cjs/TextureMapping.js.map +1 -1
  42. package/lib/cjs/ThematicDisplay.d.ts.map +1 -1
  43. package/lib/cjs/ThematicDisplay.js +3 -1
  44. package/lib/cjs/ThematicDisplay.js.map +1 -1
  45. package/lib/cjs/Tween.d.ts +1 -1
  46. package/lib/cjs/Tween.d.ts.map +1 -1
  47. package/lib/cjs/Tween.js +4 -2
  48. package/lib/cjs/Tween.js.map +1 -1
  49. package/lib/cjs/annotation/TextAnnotation.d.ts +1 -1
  50. package/lib/cjs/annotation/TextAnnotation.d.ts.map +1 -1
  51. package/lib/cjs/annotation/TextAnnotation.js +1 -1
  52. package/lib/cjs/annotation/TextAnnotation.js.map +1 -1
  53. package/lib/cjs/annotation/TextBlock.d.ts +17 -68
  54. package/lib/cjs/annotation/TextBlock.d.ts.map +1 -1
  55. package/lib/cjs/annotation/TextBlock.js +18 -33
  56. package/lib/cjs/annotation/TextBlock.js.map +1 -1
  57. package/lib/cjs/annotation/TextField.d.ts +86 -0
  58. package/lib/cjs/annotation/TextField.d.ts.map +1 -0
  59. package/lib/cjs/annotation/TextField.js +10 -0
  60. package/lib/cjs/annotation/TextField.js.map +1 -0
  61. package/lib/cjs/core-common.d.ts +1 -0
  62. package/lib/cjs/core-common.d.ts.map +1 -1
  63. package/lib/cjs/core-common.js +1 -0
  64. package/lib/cjs/core-common.js.map +1 -1
  65. package/lib/cjs/geometry/AdditionalTransform.d.ts.map +1 -1
  66. package/lib/cjs/geometry/AdditionalTransform.js +1 -0
  67. package/lib/cjs/geometry/AdditionalTransform.js.map +1 -1
  68. package/lib/cjs/geometry/AreaPattern.d.ts.map +1 -1
  69. package/lib/cjs/geometry/AreaPattern.js +13 -0
  70. package/lib/cjs/geometry/AreaPattern.js.map +1 -1
  71. package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  72. package/lib/cjs/geometry/CoordinateReferenceSystem.js +7 -0
  73. package/lib/cjs/geometry/CoordinateReferenceSystem.js.map +1 -1
  74. package/lib/cjs/geometry/ElementGeometry.d.ts.map +1 -1
  75. package/lib/cjs/geometry/ElementGeometry.js +19 -10
  76. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  77. package/lib/cjs/geometry/ElementGeometryFB.d.ts.map +1 -1
  78. package/lib/cjs/geometry/ElementGeometryFB.js +1 -0
  79. package/lib/cjs/geometry/ElementGeometryFB.js.map +1 -1
  80. package/lib/cjs/geometry/GeodeticDatum.d.ts.map +1 -1
  81. package/lib/cjs/geometry/GeodeticDatum.js +7 -0
  82. package/lib/cjs/geometry/GeodeticDatum.js.map +1 -1
  83. package/lib/cjs/geometry/GeometryStream.d.ts.map +1 -1
  84. package/lib/cjs/geometry/GeometryStream.js +2 -2
  85. package/lib/cjs/geometry/GeometryStream.js.map +1 -1
  86. package/lib/cjs/geometry/LineStyle.d.ts.map +1 -1
  87. package/lib/cjs/geometry/LineStyle.js +3 -0
  88. package/lib/cjs/geometry/LineStyle.js.map +1 -1
  89. package/lib/cjs/geometry/Placement.d.ts.map +1 -1
  90. package/lib/cjs/geometry/Placement.js +1 -1
  91. package/lib/cjs/geometry/Placement.js.map +1 -1
  92. package/lib/cjs/internal/PackedFeatureTable.d.ts.map +1 -1
  93. package/lib/cjs/internal/PackedFeatureTable.js +1 -1
  94. package/lib/cjs/internal/PackedFeatureTable.js.map +1 -1
  95. package/lib/cjs/internal/annotations/FieldFormatter.d.ts +18 -0
  96. package/lib/cjs/internal/annotations/FieldFormatter.d.ts.map +1 -0
  97. package/lib/cjs/internal/annotations/FieldFormatter.js +66 -0
  98. package/lib/cjs/internal/annotations/FieldFormatter.js.map +1 -0
  99. package/lib/cjs/internal/cross-package.d.ts +1 -0
  100. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  101. package/lib/cjs/internal/cross-package.js +4 -1
  102. package/lib/cjs/internal/cross-package.js.map +1 -1
  103. package/lib/cjs/rpc/core/RpcConfiguration.d.ts +0 -3
  104. package/lib/cjs/rpc/core/RpcConfiguration.d.ts.map +1 -1
  105. package/lib/cjs/rpc/core/RpcConfiguration.js +10 -2
  106. package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
  107. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js +1 -1
  108. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  109. package/lib/cjs/rpc/web/WebAppRpcRequest.js +1 -1
  110. package/lib/cjs/rpc/web/WebAppRpcRequest.js.map +1 -1
  111. package/lib/esm/AnalysisStyle.d.ts.map +1 -1
  112. package/lib/esm/AnalysisStyle.js +2 -0
  113. package/lib/esm/AnalysisStyle.js.map +1 -1
  114. package/lib/esm/BlobReader.d.ts.map +1 -1
  115. package/lib/esm/BlobReader.js +10 -2
  116. package/lib/esm/BlobReader.js.map +1 -1
  117. package/lib/esm/BriefcaseTypes.d.ts +2 -0
  118. package/lib/esm/BriefcaseTypes.d.ts.map +1 -1
  119. package/lib/esm/BriefcaseTypes.js.map +1 -1
  120. package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
  121. package/lib/esm/DisplayStyleSettings.js +2 -2
  122. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  123. package/lib/esm/ECSqlTypes.js +1 -1
  124. package/lib/esm/ECSqlTypes.js.map +1 -1
  125. package/lib/esm/ElementProps.d.ts +8 -0
  126. package/lib/esm/ElementProps.d.ts.map +1 -1
  127. package/lib/esm/ElementProps.js.map +1 -1
  128. package/lib/esm/FeatureIndex.d.ts.map +1 -1
  129. package/lib/esm/FeatureIndex.js +2 -1
  130. package/lib/esm/FeatureIndex.js.map +1 -1
  131. package/lib/esm/FeatureSymbology.d.ts.map +1 -1
  132. package/lib/esm/FeatureSymbology.js +0 -2
  133. package/lib/esm/FeatureSymbology.js.map +1 -1
  134. package/lib/esm/GeometryParams.d.ts.map +1 -1
  135. package/lib/esm/GeometryParams.js +6 -0
  136. package/lib/esm/GeometryParams.js.map +1 -1
  137. package/lib/esm/Gradient.d.ts.map +1 -1
  138. package/lib/esm/Gradient.js +5 -0
  139. package/lib/esm/Gradient.js.map +1 -1
  140. package/lib/esm/HiddenLine.d.ts.map +1 -1
  141. package/lib/esm/HiddenLine.js +4 -1
  142. package/lib/esm/HiddenLine.js.map +1 -1
  143. package/lib/esm/IModel.d.ts.map +1 -1
  144. package/lib/esm/IModel.js +8 -8
  145. package/lib/esm/IModel.js.map +1 -1
  146. package/lib/esm/Localization.d.ts.map +1 -1
  147. package/lib/esm/Localization.js +3 -0
  148. package/lib/esm/Localization.js.map +1 -1
  149. package/lib/esm/TextureMapping.js +3 -3
  150. package/lib/esm/TextureMapping.js.map +1 -1
  151. package/lib/esm/ThematicDisplay.d.ts.map +1 -1
  152. package/lib/esm/ThematicDisplay.js +3 -1
  153. package/lib/esm/ThematicDisplay.js.map +1 -1
  154. package/lib/esm/Tween.d.ts +1 -1
  155. package/lib/esm/Tween.d.ts.map +1 -1
  156. package/lib/esm/Tween.js +4 -2
  157. package/lib/esm/Tween.js.map +1 -1
  158. package/lib/esm/annotation/TextAnnotation.d.ts +1 -1
  159. package/lib/esm/annotation/TextAnnotation.d.ts.map +1 -1
  160. package/lib/esm/annotation/TextAnnotation.js +1 -1
  161. package/lib/esm/annotation/TextAnnotation.js.map +1 -1
  162. package/lib/esm/annotation/TextBlock.d.ts +17 -68
  163. package/lib/esm/annotation/TextBlock.d.ts.map +1 -1
  164. package/lib/esm/annotation/TextBlock.js +18 -33
  165. package/lib/esm/annotation/TextBlock.js.map +1 -1
  166. package/lib/esm/annotation/TextField.d.ts +86 -0
  167. package/lib/esm/annotation/TextField.d.ts.map +1 -0
  168. package/lib/esm/annotation/TextField.js +9 -0
  169. package/lib/esm/annotation/TextField.js.map +1 -0
  170. package/lib/esm/core-common.d.ts +1 -0
  171. package/lib/esm/core-common.d.ts.map +1 -1
  172. package/lib/esm/core-common.js +1 -0
  173. package/lib/esm/core-common.js.map +1 -1
  174. package/lib/esm/geometry/AdditionalTransform.d.ts.map +1 -1
  175. package/lib/esm/geometry/AdditionalTransform.js +1 -0
  176. package/lib/esm/geometry/AdditionalTransform.js.map +1 -1
  177. package/lib/esm/geometry/AreaPattern.d.ts.map +1 -1
  178. package/lib/esm/geometry/AreaPattern.js +13 -0
  179. package/lib/esm/geometry/AreaPattern.js.map +1 -1
  180. package/lib/esm/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  181. package/lib/esm/geometry/CoordinateReferenceSystem.js +7 -0
  182. package/lib/esm/geometry/CoordinateReferenceSystem.js.map +1 -1
  183. package/lib/esm/geometry/ElementGeometry.d.ts.map +1 -1
  184. package/lib/esm/geometry/ElementGeometry.js +20 -11
  185. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  186. package/lib/esm/geometry/ElementGeometryFB.d.ts.map +1 -1
  187. package/lib/esm/geometry/ElementGeometryFB.js +1 -0
  188. package/lib/esm/geometry/ElementGeometryFB.js.map +1 -1
  189. package/lib/esm/geometry/GeodeticDatum.d.ts.map +1 -1
  190. package/lib/esm/geometry/GeodeticDatum.js +7 -0
  191. package/lib/esm/geometry/GeodeticDatum.js.map +1 -1
  192. package/lib/esm/geometry/GeometryStream.d.ts.map +1 -1
  193. package/lib/esm/geometry/GeometryStream.js +3 -3
  194. package/lib/esm/geometry/GeometryStream.js.map +1 -1
  195. package/lib/esm/geometry/LineStyle.d.ts.map +1 -1
  196. package/lib/esm/geometry/LineStyle.js +3 -0
  197. package/lib/esm/geometry/LineStyle.js.map +1 -1
  198. package/lib/esm/geometry/Placement.d.ts.map +1 -1
  199. package/lib/esm/geometry/Placement.js +2 -2
  200. package/lib/esm/geometry/Placement.js.map +1 -1
  201. package/lib/esm/internal/PackedFeatureTable.d.ts.map +1 -1
  202. package/lib/esm/internal/PackedFeatureTable.js +2 -2
  203. package/lib/esm/internal/PackedFeatureTable.js.map +1 -1
  204. package/lib/esm/internal/annotations/FieldFormatter.d.ts +18 -0
  205. package/lib/esm/internal/annotations/FieldFormatter.d.ts.map +1 -0
  206. package/lib/esm/internal/annotations/FieldFormatter.js +62 -0
  207. package/lib/esm/internal/annotations/FieldFormatter.js.map +1 -0
  208. package/lib/esm/internal/cross-package.d.ts +1 -0
  209. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  210. package/lib/esm/internal/cross-package.js +1 -0
  211. package/lib/esm/internal/cross-package.js.map +1 -1
  212. package/lib/esm/rpc/core/RpcConfiguration.d.ts +0 -3
  213. package/lib/esm/rpc/core/RpcConfiguration.d.ts.map +1 -1
  214. package/lib/esm/rpc/core/RpcConfiguration.js +10 -2
  215. package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
  216. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js +1 -1
  217. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  218. package/lib/esm/rpc/web/WebAppRpcRequest.js +2 -2
  219. package/lib/esm/rpc/web/WebAppRpcRequest.js.map +1 -1
  220. package/package.json +6 -6
@@ -1,8 +1,8 @@
1
1
  /** @packageDocumentation
2
2
  * @module Annotation
3
3
  */
4
- import { Id64String } from "@itwin/core-bentley";
5
4
  import { TextStyleSettingsProps } from "./TextStyle";
5
+ import { FieldFormatOptions, FieldPropertyHost, FieldPropertyPath } from "./TextField";
6
6
  /** Options supplied to [[TextBlockComponent.clearStyleOverrides]] to control how the style overrides are cleared on the component and its child components.
7
7
  * @beta
8
8
  */
@@ -50,7 +50,7 @@ export declare abstract class TextBlockComponent {
50
50
  private _styleOverrides;
51
51
  /** @internal */
52
52
  protected constructor(props?: TextBlockComponentProps);
53
- /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend) specified by `styleId` on the [[TextBlock]].
53
+ /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend).
54
54
  * For example, if the style uses the "Arial" font, you can override that by settings `styleOverrides.fontName` to "Comic Sans".
55
55
  * @see [[clearStyleOverrides]] to reset this to an empty object.
56
56
  */
@@ -209,56 +209,6 @@ export declare class TabRun extends TextBlockComponent {
209
209
  stringify(options?: TextBlockStringifyOptions): string;
210
210
  equals(other: TextBlockComponent): boolean;
211
211
  }
212
- /** A chain of property accesses that resolves to a primitive value that forms the basis of the displayed content
213
- * of a [[FieldRun]].
214
- * The simplest property paths consist of a [[propertyName]] and nothing else, where `propertyName` identifies
215
- * a primitive property.
216
- * If `propertyName` identifies a struct or array property, then additional [[accessors]] are required to identify the specific value.
217
- * If `propertyName` (including any [[accessors]]) resolves to a JSON property, then additional [[jsonAccessors]] are required to identify a specific value within the JSON.
218
- * Some examples:
219
- * ```
220
- * | Access String | propertyName | accessors | jsonAccessors |
221
- * | ------------- | ------------ | --------- | ------------- |
222
- * | name | "name" | undefined | undefined |
223
- * | spouse.name | "spouse" | [name] | undefined |
224
- * | colors[2] | "colors" | [2] | undefined |
225
- * | spouse.favoriteRestaurants[1].address | "spouse" | ["favoriteRestaurants", 1, "address"] | undefined |
226
- * | jsonProperties.contactInfo.email | "jsonProperties" | undefined | ["contactInfo", "email"] |
227
- * | spouse.jsonProperties.contactInfo.phoneNumbers[0].areaCode | "spouse" | ["jsonProperties"] | ["contactInfo", "phoneNumbers", 0, "areaCode"] |
228
- * ```
229
- * @beta
230
- */
231
- export interface FieldPropertyPath {
232
- /** The name of the BIS property of the [[FieldPropertyHost]] that serves as the root of the path. */
233
- propertyName: string;
234
- /** Property names and/or array indices describing the path from [[propertyName]] to the ultimate BIS property. */
235
- accessors?: Array<string | number>;
236
- /** If [[propertyName]] and [[accessors]] (if defined) resolve to a BIS property of extended type `Json`, property names and/or
237
- * array indices for selecting a primitive value within the JSON.
238
- */
239
- jsonAccessors?: Array<string | number>;
240
- }
241
- /** Describes the source of the property value against which a [[FieldPropertyPath]] is evaluated.
242
- * A field property is always hosted by an [Element]($backend). It may be a property of the element's BIS class itself,
243
- * or that of one of its [ElementAspect]($backend)s.
244
- * The [[schemaName]] and [[className]] should always identify the exact class that contains [[FieldPropertyPath.propertyName]] - not a subclass thereof.
245
- * @beta
246
- */
247
- export interface FieldPropertyHost {
248
- /** The Id of the [Element]($backend) that hosts the property. */
249
- elementId: Id64String;
250
- /** The name of the schema containing the class identified by [[className]]. */
251
- schemaName: string;
252
- /** The name of the exact class (not a subclass) containing the property identified by [[FieldPropertyPath.propertyName]]. */
253
- className: string;
254
- }
255
- /** Placeholder type for a description of how to format the raw property value resolved by a [[FieldPropertyPath]] into a [[FieldRun]]'s display string.
256
- * *** COMING SOON ***
257
- * @beta
258
- */
259
- export interface FieldFormatter {
260
- [k: string]: any;
261
- }
262
212
  /** JSON representation of a [[FieldRun]].
263
213
  * @beta
264
214
  */
@@ -269,15 +219,21 @@ export interface FieldRunProps extends TextBlockComponentProps {
269
219
  propertyHost: FieldPropertyHost;
270
220
  /** Describes how to obtain the property value from [[propertyHost]]. */
271
221
  propertyPath: FieldPropertyPath;
272
- /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]]. */
273
- formatter?: FieldFormatter;
274
- /** The field's most recently evaluated display string. */
222
+ /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]].
223
+ * The specific options used depend upon the field's [[propertyType]].
224
+ */
225
+ formatOptions?: FieldFormatOptions;
226
+ /** The field's most recently evaluated display string.
227
+ * @note It is unnecessary to specify this when creating a field as part of an element like a [[TextAnnotation2d]], because
228
+ * all of the element's fields will be re-evaluated when inserting or updating the element in the iModel.
229
+ */
275
230
  cachedContent?: string;
276
231
  }
277
232
  /** A [[Run]] that displays the formatted value of a property of some [Element]($backend).
278
233
  * When a [[TextBlock]] containing a [[FieldRun]] is written into the iModel as an [ITextAnnotation]($backend) element,
279
234
  * a dependency is established between the two elements via the [ElementDrivesTextAnnotation]($backend) relationship such that
280
- * whenever the source element specified by [[propertyHost]] is modified, the field(s) in the `ITextAnnotation` element are automatically
235
+ * whenever the source element specified by [[propertyHost]] is modified or the `ITextAnnotation` element is inserted or updated in the iModel,
236
+ * the field(s) in the `ITextAnnotation` element are automatically
281
237
  * recalculated, causing their [[cachedContent]] to update. If the field's display string cannot be evaluated (for example, because the specified element or
282
238
  * property does not exist), then its cached content is set to [[FieldRun.invalidContentIndicator]].
283
239
  * A [[FieldRun]] displays its [[cachedContent]] in the same way that [[TextRun]]s display their `content`, including word wrapping where appropriate.
@@ -292,8 +248,10 @@ export declare class FieldRun extends TextBlockComponent {
292
248
  readonly propertyHost: Readonly<FieldPropertyHost>;
293
249
  /** Describes how to obtain the property value from [[propertyHost]]. */
294
250
  readonly propertyPath: Readonly<FieldPropertyPath>;
295
- /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]]. */
296
- readonly formatter?: FieldFormatter;
251
+ /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]].
252
+ * The specific options used depend upon the [[FieldPropertyType]].
253
+ */
254
+ readonly formatOptions?: FieldFormatOptions;
297
255
  private _cachedContent;
298
256
  /** The field's most recently evaluated display string. */
299
257
  get cachedContent(): string;
@@ -361,8 +319,6 @@ export interface TextBlockMargins {
361
319
  * @beta
362
320
  */
363
321
  export interface TextBlockProps extends TextBlockComponentProps {
364
- /** The ID of an [AnnotationTextStyle]($backend) stored in the iModel from which the base [[TextStyleSettings]] applied to the [[TextBlock]] originates. */
365
- styleId: Id64String;
366
322
  /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.
367
323
  * A value less than or equal to zero indicates no wrapping is to be applied.
368
324
  * Default: 0
@@ -382,11 +338,6 @@ export interface TextBlockProps extends TextBlockComponentProps {
382
338
  * @beta
383
339
  */
384
340
  export declare class TextBlock extends TextBlockComponent {
385
- /** The ID of the [AnnotationTextStyle]($backend) that provides the base formatting for the contents of this TextBlock.
386
- * @note Assigning to this property retains all style overrides on the TextBlock and its child components.
387
- * Call [[clearStyleOverrides]] to clear the TextBlock's and optionally all children's style overrides.
388
- */
389
- styleId: Id64String;
390
341
  /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.
391
342
  * A value less than or equal to zero indicates no wrapping is to be applied.
392
343
  * Default: 0
@@ -401,9 +352,7 @@ export declare class TextBlock extends TextBlockComponent {
401
352
  private constructor();
402
353
  toJSON(): TextBlockProps;
403
354
  /** Create a text block from its JSON representation. */
404
- static create(props: TextBlockProps): TextBlock;
405
- /** Create an empty text block containing no [[paragraphs]] and an empty [[styleId]]. */
406
- static createEmpty(): TextBlock;
355
+ static create(props?: TextBlockProps): TextBlock;
407
356
  /** Returns true if every paragraph in this text block is empty. */
408
357
  get isEmpty(): boolean;
409
358
  clone(): TextBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"TextBlock.d.ts","sourceRoot":"","sources":["../../../src/annotation/TextBlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextBlock.d.ts","sourceRoot":"","sources":["../../../src/annotation/TextBlock.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export class TextBlockComponent {
16
16
  constructor(props) {
17
17
  this._styleOverrides = TextStyleSettings.cloneProps(props?.styleOverrides ?? {});
18
18
  }
19
- /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend) specified by `styleId` on the [[TextBlock]].
19
+ /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend).
20
20
  * For example, if the style uses the "Arial" font, you can override that by settings `styleOverrides.fontName` to "Comic Sans".
21
21
  * @see [[clearStyleOverrides]] to reset this to an empty object.
22
22
  */
@@ -227,7 +227,8 @@ export class TabRun extends TextBlockComponent {
227
227
  /** A [[Run]] that displays the formatted value of a property of some [Element]($backend).
228
228
  * When a [[TextBlock]] containing a [[FieldRun]] is written into the iModel as an [ITextAnnotation]($backend) element,
229
229
  * a dependency is established between the two elements via the [ElementDrivesTextAnnotation]($backend) relationship such that
230
- * whenever the source element specified by [[propertyHost]] is modified, the field(s) in the `ITextAnnotation` element are automatically
230
+ * whenever the source element specified by [[propertyHost]] is modified or the `ITextAnnotation` element is inserted or updated in the iModel,
231
+ * the field(s) in the `ITextAnnotation` element are automatically
231
232
  * recalculated, causing their [[cachedContent]] to update. If the field's display string cannot be evaluated (for example, because the specified element or
232
233
  * property does not exist), then its cached content is set to [[FieldRun.invalidContentIndicator]].
233
234
  * A [[FieldRun]] displays its [[cachedContent]] in the same way that [[TextRun]]s display their `content`, including word wrapping where appropriate.
@@ -242,8 +243,10 @@ export class FieldRun extends TextBlockComponent {
242
243
  propertyHost;
243
244
  /** Describes how to obtain the property value from [[propertyHost]]. */
244
245
  propertyPath;
245
- /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]]. */
246
- formatter;
246
+ /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]].
247
+ * The specific options used depend upon the [[FieldPropertyType]].
248
+ */
249
+ formatOptions;
247
250
  _cachedContent;
248
251
  /** The field's most recently evaluated display string. */
249
252
  get cachedContent() {
@@ -258,7 +261,7 @@ export class FieldRun extends TextBlockComponent {
258
261
  this._cachedContent = props.cachedContent ?? FieldRun.invalidContentIndicator;
259
262
  this.propertyHost = props.propertyHost;
260
263
  this.propertyPath = props.propertyPath;
261
- this.formatter = props.formatter;
264
+ this.formatOptions = props.formatOptions;
262
265
  }
263
266
  /** Create a FieldRun from its JSON representation. */
264
267
  static create(props) {
@@ -266,7 +269,7 @@ export class FieldRun extends TextBlockComponent {
266
269
  ...props,
267
270
  propertyHost: { ...props.propertyHost },
268
271
  propertyPath: structuredClone(props.propertyPath),
269
- formatter: structuredClone(props.formatter),
272
+ formatOptions: structuredClone(props.formatOptions),
270
273
  });
271
274
  }
272
275
  /** Convert the FieldRun to its JSON representation. */
@@ -280,8 +283,8 @@ export class FieldRun extends TextBlockComponent {
280
283
  if (this.cachedContent !== FieldRun.invalidContentIndicator) {
281
284
  json.cachedContent = this.cachedContent;
282
285
  }
283
- if (this.formatter) {
284
- json.formatter = structuredClone(this.formatter);
286
+ if (this.formatOptions) {
287
+ json.formatOptions = structuredClone(this.formatOptions);
285
288
  }
286
289
  return json;
287
290
  }
@@ -308,24 +311,20 @@ export class FieldRun extends TextBlockComponent {
308
311
  }
309
312
  const thisAccessors = this.propertyPath.accessors ?? [];
310
313
  const otherAccessors = other.propertyPath.accessors ?? [];
311
- const thisJsonAccessors = this.propertyPath.jsonAccessors ?? [];
312
- const otherJsonAccessors = other.propertyPath.jsonAccessors ?? [];
313
- if (thisAccessors.length !== otherAccessors.length || thisJsonAccessors.length !== otherJsonAccessors.length) {
314
+ if (thisAccessors.length !== otherAccessors.length) {
314
315
  return false;
315
316
  }
316
317
  if (!thisAccessors.every((value, index) => value === otherAccessors[index])) {
317
318
  return false;
318
319
  }
319
- if (!thisJsonAccessors.every((value, index) => value === otherJsonAccessors[index])) {
320
- return false;
321
- }
322
- if (this.formatter && other.formatter) {
323
- // ###TODO better comparison of formatter objects.
324
- if (JSON.stringify(this.formatter) !== JSON.stringify(other.formatter)) {
320
+ if (this.formatOptions && other.formatOptions) {
321
+ // We anticipate new formatting options being added in the future.
322
+ // So to account for properties we don't know about, just compare the string representations.
323
+ if (JSON.stringify(this.formatOptions) !== JSON.stringify(other.formatOptions)) {
325
324
  return false;
326
325
  }
327
326
  }
328
- else if (this.formatter || other.formatter) {
327
+ else if (this.formatOptions || other.formatOptions) {
329
328
  return false;
330
329
  }
331
330
  return true;
@@ -388,11 +387,6 @@ export class Paragraph extends TextBlockComponent {
388
387
  * @beta
389
388
  */
390
389
  export class TextBlock extends TextBlockComponent {
391
- /** The ID of the [AnnotationTextStyle]($backend) that provides the base formatting for the contents of this TextBlock.
392
- * @note Assigning to this property retains all style overrides on the TextBlock and its child components.
393
- * Call [[clearStyleOverrides]] to clear the TextBlock's and optionally all children's style overrides.
394
- */
395
- styleId;
396
390
  /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.
397
391
  * A value less than or equal to zero indicates no wrapping is to be applied.
398
392
  * Default: 0
@@ -406,7 +400,6 @@ export class TextBlock extends TextBlockComponent {
406
400
  paragraphs;
407
401
  constructor(props) {
408
402
  super(props);
409
- this.styleId = props.styleId;
410
403
  this.width = props.width ?? 0;
411
404
  this.justification = props.justification ?? "left";
412
405
  // Assign default margins if not provided
@@ -421,7 +414,6 @@ export class TextBlock extends TextBlockComponent {
421
414
  toJSON() {
422
415
  return {
423
416
  ...super.toJSON(),
424
- styleId: this.styleId,
425
417
  width: this.width,
426
418
  justification: this.justification,
427
419
  margins: this.margins,
@@ -430,11 +422,7 @@ export class TextBlock extends TextBlockComponent {
430
422
  }
431
423
  /** Create a text block from its JSON representation. */
432
424
  static create(props) {
433
- return new TextBlock(props);
434
- }
435
- /** Create an empty text block containing no [[paragraphs]] and an empty [[styleId]]. */
436
- static createEmpty() {
437
- return TextBlock.create({ styleId: "" });
425
+ return new TextBlock(props ?? {});
438
426
  }
439
427
  /** Returns true if every paragraph in this text block is empty. */
440
428
  get isEmpty() {
@@ -486,9 +474,6 @@ export class TextBlock extends TextBlockComponent {
486
474
  if (!(other instanceof TextBlock)) {
487
475
  return false;
488
476
  }
489
- if (this.styleId !== other.styleId || !super.equals(other)) {
490
- return false;
491
- }
492
477
  if (this.width !== other.width || this.justification !== other.justification || this.paragraphs.length !== other.paragraphs.length) {
493
478
  return false;
494
479
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TextBlock.js","sourceRoot":"","sources":["../../../src/annotation/TextBlock.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Annotation\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { TextStyleSettings, TextStyleSettingsProps } from \"./TextStyle\";\n\n/** Options supplied to [[TextBlockComponent.clearStyleOverrides]] to control how the style overrides are cleared on the component and its child components.\n * @beta\n */\nexport interface ClearTextStyleOptions {\n /** Controls whether the styleOverrides of any child components are retained.\n * By default, all overrides are cleared.\n */\n preserveChildrenOverrides?: boolean;\n}\n\n/** The JSON representation of a [[TextBlockComponent]].\n * @beta\n */\nexport interface TextBlockComponentProps {\n /** Deviations from the base [[TextStyleSettings]] defined by the [AnnotationTextStyle]($backend) applied to this component.\n * This permits you to, e.g., create a [[TextBlock]] using \"Arial\" font and override one of its [[TextRun]]s to use \"Comic Sans\" instead.\n */\n styleOverrides?: TextStyleSettingsProps;\n}\n\n/** Options supplied to [[TextBlockComponent.stringify]] to control how the content is formatted.\n * @beta\n */\nexport interface TextBlockStringifyOptions {\n /** A string to insert in between each [[Paragraph]].\n * Default: \" \" - a single space.\n */\n paragraphBreak?: string;\n /** A string to insert for each [[LineBreakRun]].\n * Default: \" \" - a single space.\n */\n lineBreak?: string;\n /** A string to insert between the numerator and denominator of each [[FractionRun]].\n * Default: \"/\"\n */\n fractionSeparator?: string;\n /** The number of spaces to use for tabs. If not provided, tabs will be represented by a tab character: \"\\t\".\n * Default: \"undefined\" - use \"\\t\".\n */\n tabsAsSpaces?: number;\n}\n\n/** Abstract representation of any of the building blocks that make up a [[TextBlock]] document - namely [[Run]]s, [[Paragraph]]s, and [[TextBlock]] itself.\n * The [[TextBlock]] can specify an [AnnotationTextStyle]($backend) that formats its contents. Each component can specify an optional [[styleOverrides]] to customize that formatting.\n * @beta\n */\nexport abstract class TextBlockComponent {\n private _styleOverrides: TextStyleSettingsProps;\n\n /** @internal */\n protected constructor(props?: TextBlockComponentProps) {\n this._styleOverrides = TextStyleSettings.cloneProps(props?.styleOverrides ?? {});\n }\n\n /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend) specified by `styleId` on the [[TextBlock]].\n * For example, if the style uses the \"Arial\" font, you can override that by settings `styleOverrides.fontName` to \"Comic Sans\".\n * @see [[clearStyleOverrides]] to reset this to an empty object.\n */\n public get styleOverrides(): TextStyleSettingsProps {\n return this._styleOverrides;\n }\n\n public set styleOverrides(overrides: TextStyleSettingsProps) {\n this._styleOverrides = TextStyleSettings.cloneProps(overrides);\n }\n\n /** Reset any [[styleOverrides]] applied to this component. */\n public clearStyleOverrides(_options?: ClearTextStyleOptions): void {\n this.styleOverrides = {};\n }\n\n /** Returns true if [[styleOverrides]] specifies any deviations from the [[TextBlock]]'s [AnnotationTextStyle]($backend). */\n public get overridesStyle(): boolean {\n return Object.keys(this.styleOverrides).length > 0;\n }\n\n /** Create a deep copy of this component. */\n public abstract clone(): TextBlockComponent;\n\n /** Compute a string representation of the contents of this component and all of its sub-components. */\n public abstract stringify(options?: TextBlockStringifyOptions): string;\n\n /**\n * Returns true if the string representation of this component consists only of whitespace characters.\n * Useful for checking if the component is visually empty (producing no graphics) or contains only spaces, tabs, or line breaks.\n */\n public get isWhitespace(): boolean {\n return /^\\s*$/g.test(this.stringify());\n };\n\n /** Convert this component to its JSON representation. */\n public toJSON(): TextBlockComponentProps {\n return {\n styleOverrides: TextStyleSettings.cloneProps(this.styleOverrides),\n };\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n public equals(other: TextBlockComponent): boolean {\n const myKeys = Object.keys(this.styleOverrides);\n const yrKeys = Object.keys(other._styleOverrides);\n if (myKeys.length !== yrKeys.length) {\n return false;\n }\n\n for (const name of myKeys) {\n const key = name as keyof TextStyleSettingsProps;\n if (this.styleOverrides[key] !== other.styleOverrides[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/** [[TextBlockComponent]]s contained within a [[Paragraph]].\n * @beta\n */\nexport type Run = TextRun | FractionRun | TabRun | LineBreakRun | FieldRun;\n\n/** The JSON representation of a [[Run]].\n * Use the `type` field to discriminate between the different kinds of runs.\n * @beta\n */\nexport type RunProps = TextRunProps | FractionRunProps | TabRunProps | LineBreakRunProps | FieldRunProps;\n\n/** A sequence of characters within a [[Paragraph]] that share a single style. Runs are the leaf nodes of a [[TextBlock]] document. When laid out for display, a single run may span\n * multiple lines, but it will never contain different styling.\n * Use the `type` field to discriminate between the different kinds of runs.\n * @beta\n */\nexport namespace Run { // eslint-disable-line @typescript-eslint/no-redeclare\n /** Create a run from its JSON representation.\n * @see [[TextRun.create]], [[FractionRun.create]], and [[LineBreakRun.create]] to create a run directly.\n */\n export function fromJSON(props: RunProps): Run {\n switch (props.type) {\n case \"text\": return TextRun.create(props);\n case \"fraction\": return FractionRun.create(props);\n case \"tab\": return TabRun.create(props);\n case \"linebreak\": return LineBreakRun.create(props);\n case \"field\": return FieldRun.create(props);\n }\n }\n}\n\n/** Describes whether the characters of a [[TextRun]] should be displayed normally, in subscript, or in superscript.\n * [[TextStyleSettings.superScriptScale]], [[TextStyleSettings.subScriptScale]], [[TextStyleSettings.superScriptOffsetFactor]], and [[TextStyleSettings.subScriptOffsetFactor]]\n * affect how the content is rendered.\n * @beta\n */\nexport type BaselineShift = \"subscript\" | \"superscript\" | \"none\";\n\n/** JSON representation of a [[TextRun]].\n * @beta\n */\nexport interface TextRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"text\";\n /** The characters displayed by the run.\n * Default: an empty string.\n */\n content?: string;\n /** Whether to display [[content]] as a subscript, superscript, or normally.\n * Default: \"none\"\n */\n baselineShift?: BaselineShift;\n}\n\n/** The most common type of [[Run]], containing a sequence of characters to be displayed using a single style.\n * @beta\n */\nexport class TextRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"text\";\n /** The sequence of characters to be displayed by the run. */\n public content: string;\n /** Whether to display [[content]] as a subscript, superscript, or normally. */\n public baselineShift: BaselineShift;\n\n private constructor(props?: Omit<TextRunProps, \"type\">) {\n super(props);\n this.content = props?.content ?? \"\";\n this.baselineShift = props?.baselineShift ?? \"none\";\n }\n\n public override clone(): TextRun {\n return new TextRun(this.toJSON());\n }\n\n public override toJSON(): TextRunProps {\n return {\n ...super.toJSON(),\n type: \"text\",\n content: this.content,\n baselineShift: this.baselineShift,\n };\n }\n\n public static create(props?: Omit<TextRunProps, \"type\">): TextRun {\n return new TextRun(props);\n }\n\n /** Simply returns [[content]]. */\n public override stringify(): string {\n return this.content;\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof TextRun && this.content === other.content && this.baselineShift === other.baselineShift && super.equals(other);\n }\n}\n\n/** JSON representation of a [[FractionRun]].\n * @beta\n */\nexport interface FractionRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"fraction\";\n /** The text displayed before or above the fraction separator, depending on [[TextStyleSettings.stackedFractionType]]. Default: an empty string. */\n numerator?: string;\n /** The text displayed after or below the fraction separator, depending on [[TextStyleSettings.stackedFractionType]]. Default: an empty string. */\n denominator?: string;\n}\n\n/** A [[Run]] containing a numeric ratio to be displayed as a numerator and denominator separated by a horizontal or diagonal bar.\n * @note The [[numerator]] and [[denominator]] are stored as strings. They are not technically required to contain a numeric representation.\n * @beta\n */\nexport class FractionRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"fraction\";\n /** The fraction's numerator. */\n public numerator: string;\n /** The fraction's denominator. */\n public denominator: string;\n\n private constructor(props?: Omit<FractionRunProps, \"type\">) {\n super(props);\n this.numerator = props?.numerator ?? \"\";\n this.denominator = props?.denominator ?? \"\";\n }\n\n public override toJSON(): FractionRunProps {\n return {\n ...super.toJSON(),\n type: \"fraction\",\n numerator: this.numerator,\n denominator: this.denominator,\n };\n }\n\n public override clone(): FractionRun {\n return new FractionRun(this.toJSON());\n }\n\n public static create(props?: Omit<FractionRunProps, \"type\">): FractionRun {\n return new FractionRun(props);\n }\n\n /** Formats the fraction as a string with the [[numerator]] and [[denominator]] separated by [[TextBlockStringifyOptions.fractionSeparator]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n const sep = options?.fractionSeparator ?? \"/\";\n return `${this.numerator}${sep}${this.denominator}`;\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof FractionRun && this.numerator === other.numerator && this.denominator === other.denominator && super.equals(other);\n }\n}\n\n/** JSON representation of a [[LineBreakRun]].\n * @beta\n */\nexport interface LineBreakRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"linebreak\";\n}\n\n/** A [[Run]] that represents the end of a line of text within a [[Paragraph]]. It contains no content of its own - it simply causes subsequent content to display on a new line.\n * @beta\n */\nexport class LineBreakRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"linebreak\";\n\n private constructor(props?: TextBlockComponentProps) {\n super(props);\n }\n\n public override toJSON(): LineBreakRunProps {\n return {\n ...super.toJSON(),\n type: \"linebreak\",\n };\n }\n\n public static create(props?: TextBlockComponentProps) {\n return new LineBreakRun(props);\n }\n\n public override clone(): LineBreakRun {\n return new LineBreakRun(this.toJSON());\n }\n\n /** Simply returns [[TextBlockStringifyOptions.lineBreak]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n return options?.lineBreak ?? \" \";\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof LineBreakRun && super.equals(other);\n }\n}\n\n/** JSON representation of a [[TabRun]].\n * @beta\n */\nexport interface TabRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"tab\";\n}\n\n/** A [[TabRun]] is used to shift the next tab stop.\n * @note Only left-justified tabs are supported at this tab.\n * @beta\n */\nexport class TabRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"tab\";\n\n public override toJSON(): TabRunProps {\n return {\n ...super.toJSON(),\n type: \"tab\",\n };\n }\n\n public override clone(): TabRun {\n return new TabRun(this.toJSON());\n }\n\n public static create(props?: Omit<TabRunProps, \"type\">): TabRun {\n return new TabRun(props);\n }\n\n /**\n * Converts a [[TabRun]] to its string representation.\n * If the `tabsAsSpaces` option is provided, returns a string of spaces of the specified length.\n * Otherwise, returns a tab character (\"\\t\").\n */\n public override stringify(options?: TextBlockStringifyOptions): string {\n if (options?.tabsAsSpaces) {\n return \" \".repeat(options.tabsAsSpaces);\n }\n\n return \"\\t\";\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof TabRun && super.equals(other);\n }\n}\n\n/** A chain of property accesses that resolves to a primitive value that forms the basis of the displayed content\n * of a [[FieldRun]].\n * The simplest property paths consist of a [[propertyName]] and nothing else, where `propertyName` identifies\n * a primitive property.\n * If `propertyName` identifies a struct or array property, then additional [[accessors]] are required to identify the specific value.\n * If `propertyName` (including any [[accessors]]) resolves to a JSON property, then additional [[jsonAccessors]] are required to identify a specific value within the JSON.\n * Some examples:\n * ```\n * | Access String | propertyName | accessors | jsonAccessors |\n * | ------------- | ------------ | --------- | ------------- |\n * | name | \"name\" | undefined | undefined |\n * | spouse.name | \"spouse\" | [name] | undefined |\n * | colors[2] | \"colors\" | [2] | undefined |\n * | spouse.favoriteRestaurants[1].address | \"spouse\" | [\"favoriteRestaurants\", 1, \"address\"] | undefined |\n * | jsonProperties.contactInfo.email | \"jsonProperties\" | undefined | [\"contactInfo\", \"email\"] |\n * | spouse.jsonProperties.contactInfo.phoneNumbers[0].areaCode | \"spouse\" | [\"jsonProperties\"] | [\"contactInfo\", \"phoneNumbers\", 0, \"areaCode\"] |\n * ```\n * @beta\n */\nexport interface FieldPropertyPath {\n /** The name of the BIS property of the [[FieldPropertyHost]] that serves as the root of the path. */\n propertyName: string;\n /** Property names and/or array indices describing the path from [[propertyName]] to the ultimate BIS property. */\n accessors?: Array<string | number>;\n /** If [[propertyName]] and [[accessors]] (if defined) resolve to a BIS property of extended type `Json`, property names and/or\n * array indices for selecting a primitive value within the JSON.\n */\n jsonAccessors?: Array<string | number>;\n}\n\n/** Describes the source of the property value against which a [[FieldPropertyPath]] is evaluated.\n * A field property is always hosted by an [Element]($backend). It may be a property of the element's BIS class itself,\n * or that of one of its [ElementAspect]($backend)s.\n * The [[schemaName]] and [[className]] should always identify the exact class that contains [[FieldPropertyPath.propertyName]] - not a subclass thereof.\n * @beta\n */\nexport interface FieldPropertyHost {\n /** The Id of the [Element]($backend) that hosts the property. */\n elementId: Id64String;\n /** The name of the schema containing the class identified by [[className]]. */\n schemaName: string;\n /** The name of the exact class (not a subclass) containing the property identified by [[FieldPropertyPath.propertyName]]. */\n className: string;\n}\n\n/** Placeholder type for a description of how to format the raw property value resolved by a [[FieldPropertyPath]] into a [[FieldRun]]'s display string.\n * *** COMING SOON ***\n * @beta\n */\nexport interface FieldFormatter { [k: string]: any }\n\n/** JSON representation of a [[FieldRun]].\n * @beta\n */\nexport interface FieldRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"field\";\n /** The element and BIS class containing the property described by [[propertyPath]]. */\n propertyHost: FieldPropertyHost;\n /** Describes how to obtain the property value from [[propertyHost]]. */\n propertyPath: FieldPropertyPath;\n /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]]. */\n formatter?: FieldFormatter;\n /** The field's most recently evaluated display string. */\n cachedContent?: string;\n}\n\n/** A [[Run]] that displays the formatted value of a property of some [Element]($backend).\n * When a [[TextBlock]] containing a [[FieldRun]] is written into the iModel as an [ITextAnnotation]($backend) element,\n * a dependency is established between the two elements via the [ElementDrivesTextAnnotation]($backend) relationship such that\n * whenever the source element specified by [[propertyHost]] is modified, the field(s) in the `ITextAnnotation` element are automatically\n * recalculated, causing their [[cachedContent]] to update. If the field's display string cannot be evaluated (for example, because the specified element or\n * property does not exist), then its cached content is set to [[FieldRun.invalidContentIndicator]].\n * A [[FieldRun]] displays its [[cachedContent]] in the same way that [[TextRun]]s display their `content`, including word wrapping where appropriate.\n * @beta\n */\nexport class FieldRun extends TextBlockComponent {\n /** Display string used to signal an error in computing the field's value. */\n public static invalidContentIndicator = \"####\";\n\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"field\";\n /** The element and BIS class containing the property described by [[propertyPath]]. */\n public readonly propertyHost: Readonly<FieldPropertyHost>;\n /** Describes how to obtain the property value from [[propertyHost]]. */\n public readonly propertyPath: Readonly<FieldPropertyPath>;\n /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]]. */\n public readonly formatter?: FieldFormatter;\n private _cachedContent: string;\n\n /** The field's most recently evaluated display string. */\n public get cachedContent(): string {\n return this._cachedContent;\n }\n\n /** @internal Used by core-backend when re-evaluating field content. */\n public setCachedContent(content: string | undefined): void {\n this._cachedContent = content ?? FieldRun.invalidContentIndicator;\n }\n\n private constructor(props: Omit<FieldRunProps, \"type\">) {\n super(props);\n\n this._cachedContent = props.cachedContent ?? FieldRun.invalidContentIndicator;\n this.propertyHost = props.propertyHost\n this.propertyPath = props.propertyPath;\n this.formatter = props.formatter;\n }\n\n /** Create a FieldRun from its JSON representation. */\n public static create(props: Omit<FieldRunProps, \"type\">): FieldRun {\n return new FieldRun({\n ...props,\n propertyHost: { ...props.propertyHost },\n propertyPath: structuredClone(props.propertyPath),\n formatter: structuredClone(props.formatter),\n });\n }\n\n /** Convert the FieldRun to its JSON representation. */\n public override toJSON(): FieldRunProps {\n const json: FieldRunProps = {\n ...super.toJSON(),\n type: \"field\",\n propertyHost: { ...this.propertyHost },\n propertyPath: structuredClone(this.propertyPath),\n };\n\n if (this.cachedContent !== FieldRun.invalidContentIndicator) {\n json.cachedContent = this.cachedContent;\n }\n\n if (this.formatter) {\n json.formatter = structuredClone(this.formatter);\n }\n\n return json;\n }\n\n /** Create a deep copy of this FieldRun. */\n public override clone(): FieldRun {\n return new FieldRun(this.toJSON());\n }\n\n /** Convert this FieldRun to a simple string representation. */\n public override stringify(): string {\n return this.cachedContent;\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof FieldRun) || !super.equals(other)) {\n return false;\n }\n\n if (\n this.propertyHost.elementId !== other.propertyHost.elementId ||\n this.propertyHost.className !== other.propertyHost.className ||\n this.propertyHost.schemaName !== other.propertyHost.schemaName\n ) {\n return false;\n }\n\n if (this.propertyPath.propertyName !== other.propertyPath.propertyName) {\n return false;\n }\n\n const thisAccessors = this.propertyPath.accessors ?? [];\n const otherAccessors = other.propertyPath.accessors ?? [];\n const thisJsonAccessors = this.propertyPath.jsonAccessors ?? [];\n const otherJsonAccessors = other.propertyPath.jsonAccessors ?? [];\n\n if (thisAccessors.length !== otherAccessors.length || thisJsonAccessors.length !== otherJsonAccessors.length) {\n return false;\n }\n\n if (!thisAccessors.every((value, index) => value === otherAccessors[index])) {\n return false;\n }\n\n if (!thisJsonAccessors.every((value, index) => value === otherJsonAccessors[index])) {\n return false;\n }\n\n if (this.formatter && other.formatter) {\n // ###TODO better comparison of formatter objects.\n if (JSON.stringify(this.formatter) !== JSON.stringify(other.formatter)) {\n return false;\n }\n } else if (this.formatter || other.formatter) {\n return false;\n }\n\n return true;\n }\n}\n\n/** JSON representation of a [[Paragraph]].\n * @beta\n */\nexport interface ParagraphProps extends TextBlockComponentProps {\n /** The collection of [[Run]]s within the paragraph.\n * Default: an empty array.\n */\n runs?: RunProps[];\n}\n\n/** A collection of [[Run]]s within a [[TextBlock]]. Each paragraph within a text block is laid out on a separate line.\n * @beta\n */\nexport class Paragraph extends TextBlockComponent {\n /** The runs within the paragraph. You can modify the contents of this array to change the content of the paragraph. */\n public readonly runs: Run[];\n\n private constructor(props?: ParagraphProps) {\n super(props);\n this.runs = props?.runs?.map((run) => Run.fromJSON(run)) ?? [];\n }\n\n public override toJSON(): ParagraphProps {\n return {\n ...super.toJSON(),\n runs: this.runs.map((run) => run.toJSON()),\n };\n }\n\n /** Create a paragraph from its JSON representation. */\n public static create(props?: ParagraphProps): Paragraph {\n return new Paragraph(props);\n }\n\n public override clone(): Paragraph {\n return new Paragraph(this.toJSON());\n }\n\n /**\n * Clears any [[styleOverrides]] applied to this Paragraph.\n * Will also clear [[styleOverrides]] from all child components unless [[ClearTextStyleOptions.preserveChildrenOverrides]] is `true`.\n */\n public override clearStyleOverrides(options?: ClearTextStyleOptions): void {\n super.clearStyleOverrides();\n if (options?.preserveChildrenOverrides)\n return;\n\n for (const run of this.runs) {\n run.clearStyleOverrides();\n }\n }\n\n /** Compute a string representation of this paragraph by concatenating the string representations of all of its [[runs]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n return this.runs.map((x) => x.stringify(options)).join(\"\");\n }\n\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof Paragraph)) {\n return false;\n }\n\n if (this.runs.length !== other.runs.length || !super.equals(other)) {\n return false;\n }\n\n return this.runs.every((run, index) => run.equals(other.runs[index]));\n }\n}\n\n/** Describes the relative alignment of the content of a [[TextBlock]].\n * @beta\n */\nexport type TextBlockJustification = \"left\" | \"center\" | \"right\";\n\n/** Describes the margins around the content inside a [[TextBlock]]. It's measured in meters.\n * @beta\n */\nexport interface TextBlockMargins {\n /** The left margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n left: number;\n /** The right margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n right: number;\n /** The top margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n top: number;\n /** The bottom margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n bottom: number;\n};\n\n/** JSON representation of a [[TextBlock]].\n * @beta\n */\nexport interface TextBlockProps extends TextBlockComponentProps {\n /** The ID of an [AnnotationTextStyle]($backend) stored in the iModel from which the base [[TextStyleSettings]] applied to the [[TextBlock]] originates. */\n styleId: Id64String;\n /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.\n * A value less than or equal to zero indicates no wrapping is to be applied.\n * Default: 0\n */\n width?: number;\n /** The alignment of the document content. Default: \"left\". */\n justification?: TextBlockJustification;\n /** The margins to surround the document content. Default: 0 margins on all sides */\n margins?: Partial<TextBlockMargins>;\n /** The paragraphs within the text block. Default: an empty array. */\n paragraphs?: ParagraphProps[];\n}\n\n/** Represents a formatted text document consisting of a series of [[Paragraph]]s, each laid out on a separate line and containing their own content in the form of [[Run]]s.\n * You can change the content of the document by directly modifying the contents of its [[paragraphs]], or via [[appendParagraph]] and [[appendRun]].\n * No word-wrapping is applied to the document unless a [[width]] greater than zero is specified.\n * @see [[TextAnnotation]] to position a text block as an annotation in 2d or 3d space.\n * @beta\n */\nexport class TextBlock extends TextBlockComponent {\n /** The ID of the [AnnotationTextStyle]($backend) that provides the base formatting for the contents of this TextBlock.\n * @note Assigning to this property retains all style overrides on the TextBlock and its child components.\n * Call [[clearStyleOverrides]] to clear the TextBlock's and optionally all children's style overrides.\n */\n public styleId: Id64String;\n /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.\n * A value less than or equal to zero indicates no wrapping is to be applied.\n * Default: 0\n */\n public width: number;\n /** The alignment of the document's content. */\n public justification: TextBlockJustification;\n /** The margins of the document. */\n public margins: TextBlockMargins;\n /** The ordered list of paragraphs within the document. */\n public readonly paragraphs: Paragraph[];\n\n private constructor(props: TextBlockProps) {\n super(props);\n this.styleId = props.styleId;\n this.width = props.width ?? 0;\n this.justification = props.justification ?? \"left\";\n\n // Assign default margins if not provided\n this.margins = {\n left: props.margins?.left ?? 0,\n right: props.margins?.right ?? 0,\n top: props.margins?.top ?? 0,\n bottom: props.margins?.bottom ?? 0,\n };\n\n this.paragraphs = props.paragraphs?.map((x) => Paragraph.create(x)) ?? [];\n }\n\n public override toJSON(): TextBlockProps {\n return {\n ...super.toJSON(),\n styleId: this.styleId,\n width: this.width,\n justification: this.justification,\n margins: this.margins,\n paragraphs: this.paragraphs.map((x) => x.toJSON()),\n };\n }\n\n /** Create a text block from its JSON representation. */\n public static create(props: TextBlockProps): TextBlock {\n return new TextBlock(props);\n }\n\n /** Create an empty text block containing no [[paragraphs]] and an empty [[styleId]]. */\n public static createEmpty(): TextBlock {\n return TextBlock.create({ styleId: \"\" });\n }\n\n /** Returns true if every paragraph in this text block is empty. */\n public get isEmpty(): boolean {\n return this.paragraphs.every((p) => p.runs.length === 0);\n }\n\n public override clone(): TextBlock {\n return new TextBlock(this.toJSON());\n }\n\n /**\n * Clears any [[styleOverrides]] applied to this TextBlock.\n * Will also clear [[styleOverrides]] from all child components unless [[ClearTextStyleOptions.preserveChildrenOverrides]] is `true`.\n */\n public override clearStyleOverrides(options?: ClearTextStyleOptions): void {\n super.clearStyleOverrides();\n if (options?.preserveChildrenOverrides)\n return;\n\n for (const paragraph of this.paragraphs) {\n paragraph.clearStyleOverrides();\n }\n }\n\n /** Compute a string representation of the document's contents by concatenating the string representations of each of its [[paragraphs]], separated by [[TextBlockStringifyOptions.paragraphBreak]]. */\n public stringify(options?: TextBlockStringifyOptions): string {\n return this.paragraphs.map((x) => x.stringify(options)).join(options?.paragraphBreak ?? \" \");\n }\n\n /** Add and return a new paragraph.\n * By default, the paragraph will be created with no [[styleOverrides]], so that it inherits the style of this block.\n * @param seedFromLast If true and [[paragraphs]] is not empty, the new paragraph will inherit the style overrides of the last [[Paragraph]] in this block.\n */\n public appendParagraph(seedFromLast: boolean = false): Paragraph {\n let styleOverrides: TextStyleSettingsProps = {};\n\n if (seedFromLast && this.paragraphs.length > 0) {\n const seed = this.paragraphs[this.paragraphs.length - 1];\n styleOverrides = { ...seed.styleOverrides };\n }\n\n const paragraph = Paragraph.create({\n styleOverrides\n });\n\n this.paragraphs.push(paragraph);\n return paragraph;\n }\n\n /** Append a run to the last [[Paragraph]] in this block.\n * If the block contains no [[paragraphs]], a new one will first be created using [[appendParagraph]].\n */\n public appendRun(run: Run): void {\n const paragraph = this.paragraphs[this.paragraphs.length - 1] ?? this.appendParagraph();\n paragraph.runs.push(run);\n }\n\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof TextBlock)) {\n return false;\n }\n\n if (this.styleId !== other.styleId || !super.equals(other)) {\n return false;\n }\n\n if (this.width !== other.width || this.justification !== other.justification || this.paragraphs.length !== other.paragraphs.length) {\n return false;\n }\n\n const marginsAreEqual = Object.entries(this.margins).every(([key, value]) =>\n value === (other.margins as any)[key]\n );\n\n if (!marginsAreEqual) return false;\n\n return this.paragraphs.every((paragraph, index) => paragraph.equals(other.paragraphs[index]));\n }\n}\n"]}
1
+ {"version":3,"file":"TextBlock.js","sourceRoot":"","sources":["../../../src/annotation/TextBlock.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*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Annotation\n */\n\nimport { TextStyleSettings, TextStyleSettingsProps } from \"./TextStyle\";\nimport { FieldFormatOptions, FieldPropertyHost, FieldPropertyPath } from \"./TextField\";\n\n/** Options supplied to [[TextBlockComponent.clearStyleOverrides]] to control how the style overrides are cleared on the component and its child components.\n * @beta\n */\nexport interface ClearTextStyleOptions {\n /** Controls whether the styleOverrides of any child components are retained.\n * By default, all overrides are cleared.\n */\n preserveChildrenOverrides?: boolean;\n}\n\n/** The JSON representation of a [[TextBlockComponent]].\n * @beta\n */\nexport interface TextBlockComponentProps {\n /** Deviations from the base [[TextStyleSettings]] defined by the [AnnotationTextStyle]($backend) applied to this component.\n * This permits you to, e.g., create a [[TextBlock]] using \"Arial\" font and override one of its [[TextRun]]s to use \"Comic Sans\" instead.\n */\n styleOverrides?: TextStyleSettingsProps;\n}\n\n/** Options supplied to [[TextBlockComponent.stringify]] to control how the content is formatted.\n * @beta\n */\nexport interface TextBlockStringifyOptions {\n /** A string to insert in between each [[Paragraph]].\n * Default: \" \" - a single space.\n */\n paragraphBreak?: string;\n /** A string to insert for each [[LineBreakRun]].\n * Default: \" \" - a single space.\n */\n lineBreak?: string;\n /** A string to insert between the numerator and denominator of each [[FractionRun]].\n * Default: \"/\"\n */\n fractionSeparator?: string;\n /** The number of spaces to use for tabs. If not provided, tabs will be represented by a tab character: \"\\t\".\n * Default: \"undefined\" - use \"\\t\".\n */\n tabsAsSpaces?: number;\n}\n\n/** Abstract representation of any of the building blocks that make up a [[TextBlock]] document - namely [[Run]]s, [[Paragraph]]s, and [[TextBlock]] itself.\n * The [[TextBlock]] can specify an [AnnotationTextStyle]($backend) that formats its contents. Each component can specify an optional [[styleOverrides]] to customize that formatting.\n * @beta\n */\nexport abstract class TextBlockComponent {\n private _styleOverrides: TextStyleSettingsProps;\n\n /** @internal */\n protected constructor(props?: TextBlockComponentProps) {\n this._styleOverrides = TextStyleSettings.cloneProps(props?.styleOverrides ?? {});\n }\n\n /** Deviations in individual properties of the [[TextStyleSettings]] in the [AnnotationTextStyle]($backend).\n * For example, if the style uses the \"Arial\" font, you can override that by settings `styleOverrides.fontName` to \"Comic Sans\".\n * @see [[clearStyleOverrides]] to reset this to an empty object.\n */\n public get styleOverrides(): TextStyleSettingsProps {\n return this._styleOverrides;\n }\n\n public set styleOverrides(overrides: TextStyleSettingsProps) {\n this._styleOverrides = TextStyleSettings.cloneProps(overrides);\n }\n\n /** Reset any [[styleOverrides]] applied to this component. */\n public clearStyleOverrides(_options?: ClearTextStyleOptions): void {\n this.styleOverrides = {};\n }\n\n /** Returns true if [[styleOverrides]] specifies any deviations from the [[TextBlock]]'s [AnnotationTextStyle]($backend). */\n public get overridesStyle(): boolean {\n return Object.keys(this.styleOverrides).length > 0;\n }\n\n /** Create a deep copy of this component. */\n public abstract clone(): TextBlockComponent;\n\n /** Compute a string representation of the contents of this component and all of its sub-components. */\n public abstract stringify(options?: TextBlockStringifyOptions): string;\n\n /**\n * Returns true if the string representation of this component consists only of whitespace characters.\n * Useful for checking if the component is visually empty (producing no graphics) or contains only spaces, tabs, or line breaks.\n */\n public get isWhitespace(): boolean {\n return /^\\s*$/g.test(this.stringify());\n };\n\n /** Convert this component to its JSON representation. */\n public toJSON(): TextBlockComponentProps {\n return {\n styleOverrides: TextStyleSettings.cloneProps(this.styleOverrides),\n };\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n public equals(other: TextBlockComponent): boolean {\n const myKeys = Object.keys(this.styleOverrides);\n const yrKeys = Object.keys(other._styleOverrides);\n if (myKeys.length !== yrKeys.length) {\n return false;\n }\n\n for (const name of myKeys) {\n const key = name as keyof TextStyleSettingsProps;\n if (this.styleOverrides[key] !== other.styleOverrides[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/** [[TextBlockComponent]]s contained within a [[Paragraph]].\n * @beta\n */\nexport type Run = TextRun | FractionRun | TabRun | LineBreakRun | FieldRun;\n\n/** The JSON representation of a [[Run]].\n * Use the `type` field to discriminate between the different kinds of runs.\n * @beta\n */\nexport type RunProps = TextRunProps | FractionRunProps | TabRunProps | LineBreakRunProps | FieldRunProps;\n\n/** A sequence of characters within a [[Paragraph]] that share a single style. Runs are the leaf nodes of a [[TextBlock]] document. When laid out for display, a single run may span\n * multiple lines, but it will never contain different styling.\n * Use the `type` field to discriminate between the different kinds of runs.\n * @beta\n */\nexport namespace Run { // eslint-disable-line @typescript-eslint/no-redeclare\n /** Create a run from its JSON representation.\n * @see [[TextRun.create]], [[FractionRun.create]], and [[LineBreakRun.create]] to create a run directly.\n */\n export function fromJSON(props: RunProps): Run {\n switch (props.type) {\n case \"text\": return TextRun.create(props);\n case \"fraction\": return FractionRun.create(props);\n case \"tab\": return TabRun.create(props);\n case \"linebreak\": return LineBreakRun.create(props);\n case \"field\": return FieldRun.create(props);\n }\n }\n}\n\n/** Describes whether the characters of a [[TextRun]] should be displayed normally, in subscript, or in superscript.\n * [[TextStyleSettings.superScriptScale]], [[TextStyleSettings.subScriptScale]], [[TextStyleSettings.superScriptOffsetFactor]], and [[TextStyleSettings.subScriptOffsetFactor]]\n * affect how the content is rendered.\n * @beta\n */\nexport type BaselineShift = \"subscript\" | \"superscript\" | \"none\";\n\n/** JSON representation of a [[TextRun]].\n * @beta\n */\nexport interface TextRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"text\";\n /** The characters displayed by the run.\n * Default: an empty string.\n */\n content?: string;\n /** Whether to display [[content]] as a subscript, superscript, or normally.\n * Default: \"none\"\n */\n baselineShift?: BaselineShift;\n}\n\n/** The most common type of [[Run]], containing a sequence of characters to be displayed using a single style.\n * @beta\n */\nexport class TextRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"text\";\n /** The sequence of characters to be displayed by the run. */\n public content: string;\n /** Whether to display [[content]] as a subscript, superscript, or normally. */\n public baselineShift: BaselineShift;\n\n private constructor(props?: Omit<TextRunProps, \"type\">) {\n super(props);\n this.content = props?.content ?? \"\";\n this.baselineShift = props?.baselineShift ?? \"none\";\n }\n\n public override clone(): TextRun {\n return new TextRun(this.toJSON());\n }\n\n public override toJSON(): TextRunProps {\n return {\n ...super.toJSON(),\n type: \"text\",\n content: this.content,\n baselineShift: this.baselineShift,\n };\n }\n\n public static create(props?: Omit<TextRunProps, \"type\">): TextRun {\n return new TextRun(props);\n }\n\n /** Simply returns [[content]]. */\n public override stringify(): string {\n return this.content;\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof TextRun && this.content === other.content && this.baselineShift === other.baselineShift && super.equals(other);\n }\n}\n\n/** JSON representation of a [[FractionRun]].\n * @beta\n */\nexport interface FractionRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"fraction\";\n /** The text displayed before or above the fraction separator, depending on [[TextStyleSettings.stackedFractionType]]. Default: an empty string. */\n numerator?: string;\n /** The text displayed after or below the fraction separator, depending on [[TextStyleSettings.stackedFractionType]]. Default: an empty string. */\n denominator?: string;\n}\n\n/** A [[Run]] containing a numeric ratio to be displayed as a numerator and denominator separated by a horizontal or diagonal bar.\n * @note The [[numerator]] and [[denominator]] are stored as strings. They are not technically required to contain a numeric representation.\n * @beta\n */\nexport class FractionRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"fraction\";\n /** The fraction's numerator. */\n public numerator: string;\n /** The fraction's denominator. */\n public denominator: string;\n\n private constructor(props?: Omit<FractionRunProps, \"type\">) {\n super(props);\n this.numerator = props?.numerator ?? \"\";\n this.denominator = props?.denominator ?? \"\";\n }\n\n public override toJSON(): FractionRunProps {\n return {\n ...super.toJSON(),\n type: \"fraction\",\n numerator: this.numerator,\n denominator: this.denominator,\n };\n }\n\n public override clone(): FractionRun {\n return new FractionRun(this.toJSON());\n }\n\n public static create(props?: Omit<FractionRunProps, \"type\">): FractionRun {\n return new FractionRun(props);\n }\n\n /** Formats the fraction as a string with the [[numerator]] and [[denominator]] separated by [[TextBlockStringifyOptions.fractionSeparator]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n const sep = options?.fractionSeparator ?? \"/\";\n return `${this.numerator}${sep}${this.denominator}`;\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof FractionRun && this.numerator === other.numerator && this.denominator === other.denominator && super.equals(other);\n }\n}\n\n/** JSON representation of a [[LineBreakRun]].\n * @beta\n */\nexport interface LineBreakRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"linebreak\";\n}\n\n/** A [[Run]] that represents the end of a line of text within a [[Paragraph]]. It contains no content of its own - it simply causes subsequent content to display on a new line.\n * @beta\n */\nexport class LineBreakRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"linebreak\";\n\n private constructor(props?: TextBlockComponentProps) {\n super(props);\n }\n\n public override toJSON(): LineBreakRunProps {\n return {\n ...super.toJSON(),\n type: \"linebreak\",\n };\n }\n\n public static create(props?: TextBlockComponentProps) {\n return new LineBreakRun(props);\n }\n\n public override clone(): LineBreakRun {\n return new LineBreakRun(this.toJSON());\n }\n\n /** Simply returns [[TextBlockStringifyOptions.lineBreak]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n return options?.lineBreak ?? \" \";\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof LineBreakRun && super.equals(other);\n }\n}\n\n/** JSON representation of a [[TabRun]].\n * @beta\n */\nexport interface TabRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"tab\";\n}\n\n/** A [[TabRun]] is used to shift the next tab stop.\n * @note Only left-justified tabs are supported at this tab.\n * @beta\n */\nexport class TabRun extends TextBlockComponent {\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"tab\";\n\n public override toJSON(): TabRunProps {\n return {\n ...super.toJSON(),\n type: \"tab\",\n };\n }\n\n public override clone(): TabRun {\n return new TabRun(this.toJSON());\n }\n\n public static create(props?: Omit<TabRunProps, \"type\">): TabRun {\n return new TabRun(props);\n }\n\n /**\n * Converts a [[TabRun]] to its string representation.\n * If the `tabsAsSpaces` option is provided, returns a string of spaces of the specified length.\n * Otherwise, returns a tab character (\"\\t\").\n */\n public override stringify(options?: TextBlockStringifyOptions): string {\n if (options?.tabsAsSpaces) {\n return \" \".repeat(options.tabsAsSpaces);\n }\n\n return \"\\t\";\n }\n\n public override equals(other: TextBlockComponent): boolean {\n return other instanceof TabRun && super.equals(other);\n }\n}\n\n/** JSON representation of a [[FieldRun]].\n * @beta\n */\nexport interface FieldRunProps extends TextBlockComponentProps {\n /** Discriminator field for the [[RunProps]] union. */\n readonly type: \"field\";\n /** The element and BIS class containing the property described by [[propertyPath]]. */\n propertyHost: FieldPropertyHost;\n /** Describes how to obtain the property value from [[propertyHost]]. */\n propertyPath: FieldPropertyPath;\n /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]].\n * The specific options used depend upon the field's [[propertyType]].\n */\n formatOptions?: FieldFormatOptions;\n /** The field's most recently evaluated display string.\n * @note It is unnecessary to specify this when creating a field as part of an element like a [[TextAnnotation2d]], because\n * all of the element's fields will be re-evaluated when inserting or updating the element in the iModel.\n */\n cachedContent?: string;\n}\n\n/** A [[Run]] that displays the formatted value of a property of some [Element]($backend).\n * When a [[TextBlock]] containing a [[FieldRun]] is written into the iModel as an [ITextAnnotation]($backend) element,\n * a dependency is established between the two elements via the [ElementDrivesTextAnnotation]($backend) relationship such that\n * whenever the source element specified by [[propertyHost]] is modified or the `ITextAnnotation` element is inserted or updated in the iModel,\n * the field(s) in the `ITextAnnotation` element are automatically\n * recalculated, causing their [[cachedContent]] to update. If the field's display string cannot be evaluated (for example, because the specified element or\n * property does not exist), then its cached content is set to [[FieldRun.invalidContentIndicator]].\n * A [[FieldRun]] displays its [[cachedContent]] in the same way that [[TextRun]]s display their `content`, including word wrapping where appropriate.\n * @beta\n */\nexport class FieldRun extends TextBlockComponent {\n /** Display string used to signal an error in computing the field's value. */\n public static invalidContentIndicator = \"####\";\n\n /** Discriminator field for the [[Run]] union. */\n public readonly type = \"field\";\n /** The element and BIS class containing the property described by [[propertyPath]]. */\n public readonly propertyHost: Readonly<FieldPropertyHost>;\n /** Describes how to obtain the property value from [[propertyHost]]. */\n public readonly propertyPath: Readonly<FieldPropertyPath>;\n /** Specifies how to format the property value obtained from [[propertyPath]] into a string to be stored in [[cachedContent]].\n * The specific options used depend upon the [[FieldPropertyType]].\n */\n public readonly formatOptions?: FieldFormatOptions;\n private _cachedContent: string;\n\n /** The field's most recently evaluated display string. */\n public get cachedContent(): string {\n return this._cachedContent;\n }\n\n /** @internal Used by core-backend when re-evaluating field content. */\n public setCachedContent(content: string | undefined): void {\n this._cachedContent = content ?? FieldRun.invalidContentIndicator;\n }\n\n private constructor(props: Omit<FieldRunProps, \"type\">) {\n super(props);\n\n this._cachedContent = props.cachedContent ?? FieldRun.invalidContentIndicator;\n this.propertyHost = props.propertyHost\n this.propertyPath = props.propertyPath;\n this.formatOptions = props.formatOptions;\n }\n\n /** Create a FieldRun from its JSON representation. */\n public static create(props: Omit<FieldRunProps, \"type\">): FieldRun {\n return new FieldRun({\n ...props,\n propertyHost: { ...props.propertyHost },\n propertyPath: structuredClone(props.propertyPath),\n formatOptions: structuredClone(props.formatOptions),\n });\n }\n\n /** Convert the FieldRun to its JSON representation. */\n public override toJSON(): FieldRunProps {\n const json: FieldRunProps = {\n ...super.toJSON(),\n type: \"field\",\n propertyHost: { ...this.propertyHost },\n propertyPath: structuredClone(this.propertyPath),\n };\n\n if (this.cachedContent !== FieldRun.invalidContentIndicator) {\n json.cachedContent = this.cachedContent;\n }\n\n if (this.formatOptions) {\n json.formatOptions = structuredClone(this.formatOptions);\n }\n\n return json;\n }\n\n /** Create a deep copy of this FieldRun. */\n public override clone(): FieldRun {\n return new FieldRun(this.toJSON());\n }\n\n /** Convert this FieldRun to a simple string representation. */\n public override stringify(): string {\n return this.cachedContent;\n }\n\n /** Returns true if `this` is equivalent to `other`. */\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof FieldRun) || !super.equals(other)) {\n return false;\n }\n\n if (\n this.propertyHost.elementId !== other.propertyHost.elementId ||\n this.propertyHost.className !== other.propertyHost.className ||\n this.propertyHost.schemaName !== other.propertyHost.schemaName\n ) {\n return false;\n }\n\n if (this.propertyPath.propertyName !== other.propertyPath.propertyName) {\n return false;\n }\n\n const thisAccessors = this.propertyPath.accessors ?? [];\n const otherAccessors = other.propertyPath.accessors ?? [];\n\n if (thisAccessors.length !== otherAccessors.length) {\n return false;\n }\n\n if (!thisAccessors.every((value, index) => value === otherAccessors[index])) {\n return false;\n }\n\n if (this.formatOptions && other.formatOptions) {\n // We anticipate new formatting options being added in the future.\n // So to account for properties we don't know about, just compare the string representations.\n if (JSON.stringify(this.formatOptions) !== JSON.stringify(other.formatOptions)) {\n return false;\n }\n } else if (this.formatOptions || other.formatOptions) {\n return false;\n }\n\n return true;\n }\n}\n\n/** JSON representation of a [[Paragraph]].\n * @beta\n */\nexport interface ParagraphProps extends TextBlockComponentProps {\n /** The collection of [[Run]]s within the paragraph.\n * Default: an empty array.\n */\n runs?: RunProps[];\n}\n\n/** A collection of [[Run]]s within a [[TextBlock]]. Each paragraph within a text block is laid out on a separate line.\n * @beta\n */\nexport class Paragraph extends TextBlockComponent {\n /** The runs within the paragraph. You can modify the contents of this array to change the content of the paragraph. */\n public readonly runs: Run[];\n\n private constructor(props?: ParagraphProps) {\n super(props);\n this.runs = props?.runs?.map((run) => Run.fromJSON(run)) ?? [];\n }\n\n public override toJSON(): ParagraphProps {\n return {\n ...super.toJSON(),\n runs: this.runs.map((run) => run.toJSON()),\n };\n }\n\n /** Create a paragraph from its JSON representation. */\n public static create(props?: ParagraphProps): Paragraph {\n return new Paragraph(props);\n }\n\n public override clone(): Paragraph {\n return new Paragraph(this.toJSON());\n }\n\n /**\n * Clears any [[styleOverrides]] applied to this Paragraph.\n * Will also clear [[styleOverrides]] from all child components unless [[ClearTextStyleOptions.preserveChildrenOverrides]] is `true`.\n */\n public override clearStyleOverrides(options?: ClearTextStyleOptions): void {\n super.clearStyleOverrides();\n if (options?.preserveChildrenOverrides)\n return;\n\n for (const run of this.runs) {\n run.clearStyleOverrides();\n }\n }\n\n /** Compute a string representation of this paragraph by concatenating the string representations of all of its [[runs]]. */\n public override stringify(options?: TextBlockStringifyOptions): string {\n return this.runs.map((x) => x.stringify(options)).join(\"\");\n }\n\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof Paragraph)) {\n return false;\n }\n\n if (this.runs.length !== other.runs.length || !super.equals(other)) {\n return false;\n }\n\n return this.runs.every((run, index) => run.equals(other.runs[index]));\n }\n}\n\n/** Describes the relative alignment of the content of a [[TextBlock]].\n * @beta\n */\nexport type TextBlockJustification = \"left\" | \"center\" | \"right\";\n\n/** Describes the margins around the content inside a [[TextBlock]]. It's measured in meters.\n * @beta\n */\nexport interface TextBlockMargins {\n /** The left margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n left: number;\n /** The right margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n right: number;\n /** The top margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n top: number;\n /** The bottom margin measured in meters. Must be a positive number >= 0. Negative values are disregarded */\n bottom: number;\n};\n\n/** JSON representation of a [[TextBlock]].\n * @beta\n */\nexport interface TextBlockProps extends TextBlockComponentProps {\n /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.\n * A value less than or equal to zero indicates no wrapping is to be applied.\n * Default: 0\n */\n width?: number;\n /** The alignment of the document content. Default: \"left\". */\n justification?: TextBlockJustification;\n /** The margins to surround the document content. Default: 0 margins on all sides */\n margins?: Partial<TextBlockMargins>;\n /** The paragraphs within the text block. Default: an empty array. */\n paragraphs?: ParagraphProps[];\n}\n\n/** Represents a formatted text document consisting of a series of [[Paragraph]]s, each laid out on a separate line and containing their own content in the form of [[Run]]s.\n * You can change the content of the document by directly modifying the contents of its [[paragraphs]], or via [[appendParagraph]] and [[appendRun]].\n * No word-wrapping is applied to the document unless a [[width]] greater than zero is specified.\n * @see [[TextAnnotation]] to position a text block as an annotation in 2d or 3d space.\n * @beta\n */\nexport class TextBlock extends TextBlockComponent {\n /** The width of the document in meters. Lines that would exceed this width are instead wrapped around to the next line if possible.\n * A value less than or equal to zero indicates no wrapping is to be applied.\n * Default: 0\n */\n public width: number;\n /** The alignment of the document's content. */\n public justification: TextBlockJustification;\n /** The margins of the document. */\n public margins: TextBlockMargins;\n /** The ordered list of paragraphs within the document. */\n public readonly paragraphs: Paragraph[];\n\n private constructor(props: TextBlockProps) {\n super(props);\n this.width = props.width ?? 0;\n this.justification = props.justification ?? \"left\";\n\n // Assign default margins if not provided\n this.margins = {\n left: props.margins?.left ?? 0,\n right: props.margins?.right ?? 0,\n top: props.margins?.top ?? 0,\n bottom: props.margins?.bottom ?? 0,\n };\n\n this.paragraphs = props.paragraphs?.map((x) => Paragraph.create(x)) ?? [];\n }\n\n public override toJSON(): TextBlockProps {\n return {\n ...super.toJSON(),\n width: this.width,\n justification: this.justification,\n margins: this.margins,\n paragraphs: this.paragraphs.map((x) => x.toJSON()),\n };\n }\n\n /** Create a text block from its JSON representation. */\n public static create(props?: TextBlockProps): TextBlock {\n return new TextBlock(props ?? {});\n }\n\n /** Returns true if every paragraph in this text block is empty. */\n public get isEmpty(): boolean {\n return this.paragraphs.every((p) => p.runs.length === 0);\n }\n\n public override clone(): TextBlock {\n return new TextBlock(this.toJSON());\n }\n\n /**\n * Clears any [[styleOverrides]] applied to this TextBlock.\n * Will also clear [[styleOverrides]] from all child components unless [[ClearTextStyleOptions.preserveChildrenOverrides]] is `true`.\n */\n public override clearStyleOverrides(options?: ClearTextStyleOptions): void {\n super.clearStyleOverrides();\n if (options?.preserveChildrenOverrides)\n return;\n\n for (const paragraph of this.paragraphs) {\n paragraph.clearStyleOverrides();\n }\n }\n\n /** Compute a string representation of the document's contents by concatenating the string representations of each of its [[paragraphs]], separated by [[TextBlockStringifyOptions.paragraphBreak]]. */\n public stringify(options?: TextBlockStringifyOptions): string {\n return this.paragraphs.map((x) => x.stringify(options)).join(options?.paragraphBreak ?? \" \");\n }\n\n /** Add and return a new paragraph.\n * By default, the paragraph will be created with no [[styleOverrides]], so that it inherits the style of this block.\n * @param seedFromLast If true and [[paragraphs]] is not empty, the new paragraph will inherit the style overrides of the last [[Paragraph]] in this block.\n */\n public appendParagraph(seedFromLast: boolean = false): Paragraph {\n let styleOverrides: TextStyleSettingsProps = {};\n\n if (seedFromLast && this.paragraphs.length > 0) {\n const seed = this.paragraphs[this.paragraphs.length - 1];\n styleOverrides = { ...seed.styleOverrides };\n }\n\n const paragraph = Paragraph.create({\n styleOverrides\n });\n\n this.paragraphs.push(paragraph);\n return paragraph;\n }\n\n /** Append a run to the last [[Paragraph]] in this block.\n * If the block contains no [[paragraphs]], a new one will first be created using [[appendParagraph]].\n */\n public appendRun(run: Run): void {\n const paragraph = this.paragraphs[this.paragraphs.length - 1] ?? this.appendParagraph();\n paragraph.runs.push(run);\n }\n\n public override equals(other: TextBlockComponent): boolean {\n if (!(other instanceof TextBlock)) {\n return false;\n }\n\n if (this.width !== other.width || this.justification !== other.justification || this.paragraphs.length !== other.paragraphs.length) {\n return false;\n }\n\n const marginsAreEqual = Object.entries(this.margins).every(([key, value]) =>\n value === (other.margins as any)[key]\n );\n\n if (!marginsAreEqual) return false;\n\n return this.paragraphs.every((paragraph, index) => paragraph.equals(other.paragraphs[index]));\n }\n}\n"]}
@@ -0,0 +1,86 @@
1
+ /** @packageDocumentation
2
+ * @module Annotation
3
+ */
4
+ import { Id64String } from "@itwin/core-bentley";
5
+ /** Enumerates the different kinds of [Property]($ecschema-metadata) values that can be used as the basis for a [[FieldRun]]'s display string.
6
+ * A field's property type is derived from the property's [PrimitiveType]($ecschema-metadata) and other attributes like its [PrimitiveOrEnumPropertyBase.extendedTypeName]($ecschema-metadata).
7
+ * The conversion of the raw property value into a display string can be customized by different [[FieldFormatOptions]] based on its type.
8
+ * The following types are currently recognized:
9
+ * - "quantity": an often-unitized scalar value like a distance or area, formatted using a quantity [Format]($core-quantity).
10
+ * - "coordinate": a 2- or 3-dimensional point, with each component formatted as a "quantity".
11
+ * - "boolean": a true or false value.
12
+ * - "datetime": an ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date).
13
+ * - "int-enum": an integer [EnumerationProperty]($ecschema-metadata) formatted using the enum value's display label.
14
+ * - "string-enum": a string [EnumerationProperty]($ecschema-metadata) formatted using the enum value's display label.
15
+ * - "string": a value convertible to a string.
16
+ * @note Currently, only formatting of "string" and "datetime" types is implemented. Other types are converted to and formatted as "string".
17
+ * @beta
18
+ */
19
+ export type FieldPropertyType = "quantity" | "coordinate" | "string" | "boolean" | "datetime" | "int-enum" | "string-enum";
20
+ /** A chain of property accesses that resolves to a primitive value that forms the basis of the displayed content
21
+ * of a [[FieldRun]].
22
+ * The simplest property paths consist of a [[propertyName]] and nothing else, where `propertyName` identifies
23
+ * a primitive property.
24
+ * If `propertyName` identifies a struct or array property, then additional [[accessors]] are required to identify the specific value.
25
+ * Some examples:
26
+ * ```
27
+ * | Access String | propertyName | accessors |
28
+ * | ------------- | ------------ | --------- |
29
+ * | name | "name" | undefined |
30
+ * | spouse.name | "spouse" | [name] |
31
+ * | colors[2] | "colors" | [2] |
32
+ * | spouse.favoriteRestaurants[1].address | "spouse" | ["favoriteRestaurants", 1, "address"] |
33
+ * ```
34
+ * @beta
35
+ */
36
+ export interface FieldPropertyPath {
37
+ /** The name of the BIS property of the [[FieldPropertyHost]] that serves as the root of the path. */
38
+ propertyName: string;
39
+ /** Property names and/or array indices describing the path from [[propertyName]] to the ultimate BIS property. */
40
+ accessors?: Array<string | number>;
41
+ }
42
+ /** Describes the source of the property value against which a [[FieldPropertyPath]] is evaluated.
43
+ * A field property is always hosted by an [Element]($backend). It may be a property of the element's BIS class itself,
44
+ * or that of one of its [ElementAspect]($backend)s.
45
+ * The [[schemaName]] and [[className]] should always identify the exact class that contains [[FieldPropertyPath.propertyName]] - not a subclass thereof.
46
+ * @beta
47
+ */
48
+ export interface FieldPropertyHost {
49
+ /** The Id of the [Element]($backend) that hosts the property. */
50
+ elementId: Id64String;
51
+ /** The name of the schema containing the class identified by [[className]]. */
52
+ schemaName: string;
53
+ /** The name of the exact class (not a subclass) containing the property identified by [[FieldPropertyPath.propertyName]]. */
54
+ className: string;
55
+ }
56
+ /** As part of [[FieldFormatOptions]], specifies how to modify the case of the display string.
57
+ * "as-is" leaves it unmodified. "upper" and "lower" convert it to all upper-case or all lower-case, respectively.
58
+ * @beta
59
+ */
60
+ export type FieldCase = "as-is" | "upper" | "lower";
61
+ /** As part of a [[FieldFormatOptions]], specifies how to format properties of [[FieldPropertyType]] "datetime".
62
+ * @beta
63
+ */
64
+ export interface DateTimeFieldFormatOptions {
65
+ /** The locale with which to localize the display string.
66
+ * Default: "en-US".
67
+ */
68
+ locale?: Intl.UnicodeBCP47LocaleIdentifier;
69
+ /** Describes how to produce the display string. */
70
+ formatOptions?: Intl.DateTimeFormatOptions;
71
+ }
72
+ /** Customizes how to format the raw property value resolved by a [[FieldPropertyPath]] into a [[FieldRun]]'s display string.
73
+ * The exact options used depend upon the [[FieldPropertyType]].
74
+ * @beta
75
+ */
76
+ export interface FieldFormatOptions {
77
+ /** A string inserted before the formatted string. This string is not affected by [[case]]. */
78
+ prefix?: string;
79
+ /** A string inserted after the formatted string. This string is not affected by [[case]]. */
80
+ suffix?: string;
81
+ /** Modifies the case of the formatted string. */
82
+ case?: FieldCase;
83
+ /** Formatting options for [[FieldPropertyType]] "datetime". */
84
+ dateTime?: DateTimeFieldFormatOptions;
85
+ }
86
+ //# sourceMappingURL=TextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/annotation/TextField.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AAE3H;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAChC,qGAAqG;IACrG,YAAY,EAAE,MAAM,CAAC;IACrB,kHAAkH;IAClH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,SAAS,EAAE,UAAU,CAAC;IACtB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,6HAA6H;IAC7H,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,4BAA4B,CAAC;IAC3C,mDAAmD;IACnD,aAAa,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC"}