import { Graphic } from './Graphic.js';
import { type ICanvas, type ICanvasEventReceiver, type IHasAlphaFactor } from './Interfaces.js';
export declare enum TextAnchor {
    UpperLeft = 0,
    UpperCenter = 1,
    UpperRight = 2,
    MiddleLeft = 3,
    MiddleCenter = 4,
    MiddleRight = 5,
    LowerLeft = 6,
    LowerCenter = 7,
    LowerRight = 8
}
export declare enum VerticalWrapMode {
    Truncate = 0,
    Overflow = 1
}
export declare enum HorizontalWrapMode {
    Wrap = 0,
    Overflow = 1
}
export declare enum FontStyle {
    Normal = 0,
    Bold = 1,
    Italic = 2,
    BoldAndItalic = 3
}
/**
 * [Text](https://engine.needle.tools/docs/api/Text) displays text content in the UI. Supports custom fonts, colors,
 * alignment, and basic rich text formatting.
 *
 * **Text properties:**
 * - `text` - The string content to display
 * - `fontSize` - Size of the text in pixels
 * - `color` - Text color (inherited from Graphic)
 * - `alignment` - Text anchor position (UpperLeft, MiddleCenter, etc.)
 *
 * **Fonts:**
 * Set the `font` property to a URL pointing to a font file.
 * Supports MSDF (Multi-channel Signed Distance Field) fonts for crisp rendering.
 *
 * @example Update text at runtime
 * ```ts
 * const text = myLabel.getComponent(Text);
 * text.text = "Score: " + score;
 * text.fontSize = 24;
 * text.color = new RGBAColor(1, 1, 1, 1);
 * ```
 *
 * @summary Display text in the UI
 * @category User Interface
 * @group Components
 * @see {@link Canvas} for the UI root
 * @see {@link TextAnchor} for alignment options
 * @see {@link FontStyle} for bold/italic styles
 */
export declare class Text extends Graphic implements IHasAlphaFactor, ICanvasEventReceiver {
    /**
     * The alignment of the text within its container. This determines how the text is anchored and positioned relative to its RectTransform. For example, `UpperLeft` will anchor the text to the upper left corner of the container, while `MiddleCenter` will center the text both horizontally and vertically. Changing this property will update the underlying three-mesh-ui options and mark the UI as dirty to trigger a re-render.
     */
    set alignment(val: TextAnchor);
    get alignment(): TextAnchor;
    private _alignment;
    /**
     * Determines how text that exceeds the vertical bounds of the container is handled. If set to `Truncate`, any text that goes beyond the vertical limits of the container will be cut off and not visible. If set to `Overflow`, the text will continue to render outside the container bounds, which may result in it being partially or fully visible depending on the layout and parent containers.
     * @default VerticalWrapMode.Truncate
     */
    set verticalOverflow(val: VerticalWrapMode);
    get verticalOverflow(): VerticalWrapMode;
    private _verticalOverflow;
    /**
     * Determines how text that exceeds the horizontal bounds of the container is handled. If set to `Wrap`, the text will automatically wrap to the next line when it reaches the edge of the container. If set to `Overflow`, the text will continue on a single line and may overflow outside the container bounds.
     * @default HorizontalWrapMode.Wrap
     */
    set horizontalOverflow(val: HorizontalWrapMode);
    get horizontalOverflow(): HorizontalWrapMode;
    private _horizontalOverflow;
    /**
     * The line spacing multiplier for the text. A value of 1 means normal spacing, 1.5 means 50% more spacing, and 0.5 means 50% less spacing.
     * @default 1
     */
    set lineSpacing(val: number);
    get lineSpacing(): number;
    private _lineSpacing;
    /**
     * The style of the font, which can be normal, bold, italic, or bold and italic.
     *
     * This is used to determine the correct font variant to use based on the provided `font` property. For example, if you set `font` to "Arial" and `fontStyle` to `FontStyle.Bold`, it will look for a font variant named "Arial-Bold" (or "arial-bold") in the font library. If such a variant exists, it will be used to render the text with the specified style.
     *
     * @default FontStyle.Normal
     */
    set fontStyle(val: FontStyle);
    get fontStyle(): FontStyle;
    private _fontStyle;
    /**
     * The font to use for the text, specified as a URL to a font file.
     *
     * The font file must be in MSDF format. You can generate MSDF fonts using tools like [msdf-bmfont-xml](https://github.com/Chlumsky/msdf-bmfont-xml) or by using Needle Engine for Unity where the Needle Engine integration automatically generates MSDF fonts for used font assets.
     *
     * @default "https://cdn.needle.tools/static/fonts/msdf/arial/arial"
     */
    set font(val: string | null);
    get font(): string | null;
    private _font;
    private _assignedAtRuntime;
    /**
     * Whether to support basic rich text tags in the `text` property. Supported tags include `<b>`, `<i>`, and `<color=hex>`. For example: `Hello <b>World</b>` or `Score: <color=#ff0000>100</color>`
     * @default false
     */
    set supportRichText(val: boolean);
    get supportRichText(): boolean;
    private _supportRichText;
    /**
     * Set the alpha factor for the text, which multiplies with the color's alpha to determine overall transparency.
     */
    setAlphaFactor(factor: number): void;
    /**
     * The text content to display. Supports basic rich text tags like `<b>`, `<i>`, and `<color=hex>` if `supportRichText` is enabled.
     * @default ""
     */
    get text(): string;
    set text(val: string);
    private _text;
    private set_text;
    get fontSize(): number;
    set fontSize(val: number);
    private _fontSize;
    private sRGBTextColor;
    protected onColorChanged(): void;
    onParentRectTransformChanged(): void;
    onBeforeCanvasRender(_canvas: ICanvas): void;
    private updateOverflow;
    protected onCreate(_opts: any): void;
    onAfterAddedToScene(): void;
    private _textMeshUi;
    private getTextOpts;
    onEnable(): void;
    onDisable(): void;
    onDestroy(): void;
    private getAlignment;
    private feedText;
    private _didHandleTextRenderOnTop;
    private handleTextRenderOnTop;
    private renderOnTopCoroutine;
    private handleTag;
    private getText;
    private getNextTag;
    /**
     * Update provided opts to have a proper fontDefinition : family+weight+style
     * Ensure Family and Variant are registered in FontLibrary
     *
     * @param opts
     * @param fontStyle
     * @private
     */
    private setFont;
    private getFamilyNameWithCorrectSuffix;
}
