/** @packageDocumentation
 * @module Annotation
 */
import { Id64String } from "@itwin/core-bentley";
/** Enumerates the different kinds of [Property]($ecschema-metadata) values that can be used as the basis for a [[FieldRun]]'s display string.
 * A field's property type is derived from the property's [PrimitiveType]($ecschema-metadata) and other attributes like its [PrimitiveOrEnumPropertyBase.extendedTypeName]($ecschema-metadata).
 * The conversion of the raw property value into a display string can be customized by different [[FieldFormatOptions]] based on its type.
 * The following types are currently recognized:
 *  - "quantity": an often-unitized scalar value like a distance or area, formatted using a quantity [Format]($core-quantity).
 *  - "coordinate": a 2- or 3-dimensional point, with each component formatted as a "quantity".
 *  - "boolean": a true or false value.
 *  - "datetime": an ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date).
 *  - "int-enum": an integer [EnumerationProperty]($ecschema-metadata) formatted using the enum value's display label.
 *  - "string-enum": a string [EnumerationProperty]($ecschema-metadata) formatted using the enum value's display label.
 *  - "string": a value convertible to a string.
 * @note Currently, only formatting of "string" and "datetime" types is implemented. Other types are converted to and formatted as "string".
 * @beta
 */
export type FieldPropertyType = "quantity" | "coordinate" | "string" | "boolean" | "datetime" | "int-enum" | "string-enum";
/** A chain of property accesses that resolves to a primitive value that forms the basis of the displayed content
 * of a [[FieldRun]].
   * The simplest property paths consist of a [[propertyName]] and nothing else, where `propertyName` identifies
   * a primitive property.
   * If `propertyName` identifies a struct or array property, then additional [[accessors]] are required to identify the specific value.
   * Some examples:
   * ```
   * | Access String | propertyName | accessors |
   * | ------------- | ------------ | --------- |
   * | name          | "name"       | undefined |
   * | spouse.name   | "spouse"     | [name]    |
   * | colors[2]     | "colors"     | [2]       |
   * | spouse.favoriteRestaurants[1].address | "spouse" | ["favoriteRestaurants", 1, "address"] |
   * ```
 * @beta
 */
export interface FieldPropertyPath {
    /** The name of the BIS property of the [[FieldPropertyHost]] that serves as the root of the path. */
    propertyName: string;
    /** Property names and/or array indices describing the path from [[propertyName]] to the ultimate BIS property. */
    accessors?: Array<string | number>;
}
/** Describes the source of the property value against which a [[FieldPropertyPath]] is evaluated.
 * A field property is always hosted by an [Element]($backend). It may refer to a property belonging to any of the following:
 * - The element's BIS class itself;
 * - One of the element's [ElementAspect]($backend)s;
 * - Or an [EC view]($docs/learning/ECSqlReference/Views.md) with the same ECInstanceId as the element.
 * The [[schemaName]] and [[className]] should always identify the exact class that contains [[FieldPropertyPath.propertyName]] - not a subclass thereof.
 * @beta
 */
export interface FieldPropertyHost {
    /** The Id of the [Element]($backend) that hosts the property. */
    elementId: Id64String;
    /** The name of the schema containing the class identified by [[className]]. */
    schemaName: string;
    /** The name of the exact class (not a subclass) containing the property identified by [[FieldPropertyPath.propertyName]]. */
    className: string;
}
/** As part of [[FieldFormatOptions]], specifies how to modify the case of the display string.
 * "as-is" leaves it unmodified. "upper" and "lower" convert it to all upper-case or all lower-case, respectively.
 * @beta
 */
export type FieldCase = "as-is" | "upper" | "lower";
/** As part of a [[FieldFormatOptions]], specifies how to format properties of [[FieldPropertyType]] "datetime".
 * @beta
 */
export interface DateTimeFieldFormatOptions {
    /** The locale with which to localize the display string.
     * Default: "en-US".
     */
    locale?: Intl.UnicodeBCP47LocaleIdentifier;
    /** Describes how to produce the display string. */
    formatOptions?: Intl.DateTimeFormatOptions;
}
/** Customizes how to format the raw property value resolved by a [[FieldPropertyPath]] into a [[FieldRun]]'s display string.
 * The exact options used depend upon the [[FieldPropertyType]].
 * @beta
 */
export interface FieldFormatOptions {
    /** A string inserted before the formatted string. This string is not affected by [[case]]. */
    prefix?: string;
    /** A string inserted after the formatted string. This string is not affected by [[case]]. */
    suffix?: string;
    /** Modifies the case of the formatted string. */
    case?: FieldCase;
    /** Formatting options for [[FieldPropertyType]] "datetime". */
    dateTime?: DateTimeFieldFormatOptions;
}
//# sourceMappingURL=TextField.d.ts.map