'use static';
/*
 * Copyright (c) 2026 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License"),
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @file
 * @kit ArkUI
 * @arkts 1.2
 */

import { FrameNode, LayoutConstraint } from 'arkui.FrameNode';
import { LengthMetrics, NodePosition } from 'arkui.Graphics';
import { HorizontalAlign, FlexAlign, VerticalAlign, LocalizedAlignment } from './component/enums';
import { ItemFillPolicy } from './component/units';
import { ObservedV2, Trace } from '@ohos.arkui.stateManagement'

/**
 * DynamicLayout组件支持的布局算法基础类型。
 *
 * > **说明:**
 * >
 * > 该类型变量可以赋值具体的布局算法类对象,
 * > 如[CustomLayoutAlgorithm](#customlayoutalgorithm)类对象、
 * > [RowLayoutAlgorithm](#rowlayoutalgorithm)类对象等。
 *
 * @interface LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
export declare interface LayoutAlgorithm {}

/**
 * 自定义布局算法类。
 *
 * > **说明:**
 * >
 * > CustomLayoutAlgorithm类对象可以作为
 * > [DynamicLayout]{@link CommonMethod#DynamicLayout}组件的入参指定布局算法。
 *
 * @implements LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
@ObservedV2
export declare class CustomLayoutAlgorithm implements LayoutAlgorithm {
    /**
     * 通过重写此函数,开发者可以自定义测量子组件的大小。
     * ArkUI框架会在动态布局组件确定尺寸时,将该组件对应的FrameNode和布局约束通过onMeasure传递给开发者。
     * 不允许在onMeasure函数中改变状态变量。
     *
     * > **说明:**
     * >
     * > 在此函数中,开发者可以调用
     * > [FrameNode](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#framenode-1)的
     * > [getChild()](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#getchild12)方法获取子组件FrameNode,
     * > 调用[FrameNode](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#framenode-1)的
     * > [measure()](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#measure12)方法测量子组件大小,
     * > 参考DynamicLayout组件
     * > [示例1(自定义布局算法实现瀑布流布局)]{@link @ohos.arkui.components.ArkDynamicLayout}。
     *
     * @param { FrameNode } self - 动态布局组件在组件树上的实体节点。
     * @param { LayoutConstraint } constraint - 动态布局组件进行测量时使用的布局约束。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    onMeasure(self: FrameNode, constraint: LayoutConstraint): void;
    /**
     * 通过重写此函数,开发者可以自定义排列子组件的位置。
     * ArkUI框架会在动态布局组件确定位置时,将该组件对应的FrameNode和布局位置通过onLayout传递给开发者。
     * 不允许在onLayout函数中改变状态变量。
     *
     * > **说明:**
     * >
     * > 在此函数中,开发者可以调用
     * > [FrameNode](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#framenode-1)的
     * > [getChild()](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#getchild12)方法获取子组件FrameNode,
     * > 调用[FrameNode](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#framenode-1)的
     * > [layout()](docroot://reference/apis-arkui/js-apis-arkui-frameNode.md#layout12)方法设置子组件位置,
     * > 参考DynamicLayout组件
     * > [示例1(自定义布局算法实现瀑布流布局)]{@link @ohos.arkui.components.ArkDynamicLayout}。
     *
     * @param { FrameNode } self - 动态布局组件在组件树上的实体节点。
     * @param { NodePosition } position - 动态布局组件进行布局时使用的位置信息。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    onLayout(self: FrameNode, position: NodePosition): void;
}

/**
 * 设置垂直方向线性布局算法的间距、主轴对齐方式、交叉轴对齐方式及主轴排列方向。
 *
 * @interface ColumnLayoutAlgorithmOptions
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
interface ColumnLayoutAlgorithmOptions {
    /**
     * 纵向布局元素垂直方向间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    space?: LengthMetrics;
    /**
     * 所有子组件在水平方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?HorizontalAlign }
     * @default HorizontalAlign.Center
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    alignItems?: HorizontalAlign;
    /**
     * 所有子组件在垂直方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?FlexAlign }
     * @default FlexAlign.Start
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    justifyContent?: FlexAlign;
    /**
     * 子组件在垂直方向上的排列是否反转。
     * 取值为true表示子组件在垂直方向上反转排列。
     * 取值为false表示子组件在垂直方向上正序排列。
     * 非法值:按默认值处理。
     *
     * @type { ?boolean }
     * @default false
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    isReverse?: boolean;
}

/**
 * 垂直方向线性布局算法类。
 *
 * > **说明:**
 * >
 * > ColumnLayoutAlgorithm类对象可以作为
 * > [DynamicLayout]{@link CommonMethod#DynamicLayout}组件的入参指定布局算法。
 *
 * @implements LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
@ObservedV2
export declare class ColumnLayoutAlgorithm implements LayoutAlgorithm {
    /**
     * 垂直方向线性布局算法类的构造函数。
     *
     * @param { ColumnLayoutAlgorithmOptions } [option] - 垂直方向线性布局算法的构造入参,
     *    设置布局算法的间距、主轴对齐方式、交叉轴对齐方式及主轴排列方向。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    constructor(option?: ColumnLayoutAlgorithmOptions);
    /**
     * 纵向布局元素垂直方向间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public space?: LengthMetrics;
    /**
     * 所有子组件在水平方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?HorizontalAlign }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public alignItems?: HorizontalAlign;
    /**
     * 所有子组件在垂直方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?FlexAlign }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public justifyContent?: FlexAlign;
    /**
     * 子组件在垂直方向上的排列是否反转。
     * 取值为true表示子组件在垂直方向上反转排列。
     * 取值为false表示子组件在垂直方向上正序排列。
     * 非法值:按默认值处理。
     *
     * @type { ?boolean }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public isReverse?: boolean;
}

/**
 * 设置水平方向线性布局算法的间距、主轴对齐方式、交叉轴对齐方式及主轴排列方向。
 *
 * @interface RowLayoutAlgorithmOptions
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
interface RowLayoutAlgorithmOptions {
    /**
     * 横向布局元素水平方向间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    space?: LengthMetrics;
    /**
     * 所有子组件在垂直方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?VerticalAlign }
     * @default VerticalAlign.Center
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    alignItems?: VerticalAlign;
    /**
     * 所有子组件在水平方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?FlexAlign }
     * @default FlexAlign.Start
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    justifyContent?: FlexAlign;
    /**
     * 子组件在水平方向上的排列是否反转。
     * 取值为true表示子组件在水平方向上反转排列,
     * 由于水平方向受通用属性
     * [direction]{@link CommonMethod#direction}影响,
     * 如果[direction]{@link CommonMethod#direction}属性生效,
     * 再做一次反转。
     * 取值为false表示子组件在水平方向上正序排列。
     * 非法值:按默认值处理。
     *
     * @type { ?boolean }
     * @default false
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    isReverse?: boolean;
}

/**
 * 水平方向线性布局算法类。
 *
 * > **说明:**
 * >
 * > RowLayoutAlgorithm类对象可以作为
 * > [DynamicLayout]{@link CommonMethod#DynamicLayout}组件的入参指定布局算法。
 *
 * @implements LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
@ObservedV2
export declare class RowLayoutAlgorithm implements LayoutAlgorithm {
    /**
     * 水平方向线性布局算法类的构造函数。
     *
     * @param { RowLayoutAlgorithmOptions } [option] - 水平方向线性布局算法的构造入参,
     *    设置布局算法的间距、主轴对齐方式、交叉轴对齐方式及主轴排列方向。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    constructor(option?: RowLayoutAlgorithmOptions);
    /**
     * 横向布局元素水平方向间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public space?: LengthMetrics;
    /**
     * 所有子组件在垂直方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?VerticalAlign }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public alignItems?: VerticalAlign;
    /**
     * 所有子组件在水平方向上的对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?FlexAlign }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public justifyContent?: FlexAlign;
    /**
     * 子组件在水平方向上的排列是否反转。
     * 取值为true表示子组件在水平方向上反转排列,
     * 由于水平方向受通用属性
     * [direction]{@link CommonMethod#direction}影响,
     * 如果[direction]{@link CommonMethod#direction}属性生效,
     * 再做一次反转。
     * 取值为false表示子组件在水平方向上正序排列。
     * 非法值:按默认值处理。
     *
     * @type { ?boolean }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public isReverse?: boolean;
}

/**
 * 设置堆叠布局算法的对齐方式。
 *
 * @interface StackLayoutAlgorithmOptions
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
interface StackLayoutAlgorithmOptions {
    /**
     * 设置子组件在堆叠布局算法中对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?LocalizedAlignment }
     * @default LocalizedAlignment.Center
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    alignContent?: LocalizedAlignment;
}

/**
 * 堆叠布局算法类。
 *
 * > **说明:**
 * >
 * > StackLayoutAlgorithm类对象可以作为
 * > [DynamicLayout]{@link CommonMethod#DynamicLayout}组件的入参指定布局算法。
 *
 * @implements LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
@ObservedV2
export declare class StackLayoutAlgorithm implements LayoutAlgorithm {
    /**
     * 堆叠布局算法类的构造函数。
     *
     * @param { StackLayoutAlgorithmOptions } [option] - 堆叠布局算法的构造入参,设置九宫格对齐格式。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    constructor(option?: StackLayoutAlgorithmOptions);
    /**
     * 设置子组件在堆叠布局算法中对齐格式。
     * 非法值:按默认值处理。
     *
     * @type { ?LocalizedAlignment }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    @Trace public alignContent?: LocalizedAlignment;
}

/**
 * 设置网格布局算法的列数模板、列间距、行间距。
 *
 * @interface GridLayoutAlgorithmOptions
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
interface GridLayoutAlgorithmOptions {
    /**
     * 设置当前网格布局的列数。
     * 非法值:按默认值处理。
     *
     * @type { ?(string | ItemFillPolicy) }
     * @default '1fr'
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    columnsTemplate?: string | ItemFillPolicy;
    /**
     * 列与列之间的间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    columnsGap?: LengthMetrics;
    /**
     * 行与行之间的间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    rowsGap?: LengthMetrics;
}

/**
 * 网格布局算法类。
 *
 * > **说明:**
 * >
 * > GridLayoutAlgorithm类对象可以作为
 * > [DynamicLayout]{@link CommonMethod#DynamicLayout}组件的入参指定布局算法。
 *
 * @implements LayoutAlgorithm
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @since 24 static
 */
export declare class GridLayoutAlgorithm implements LayoutAlgorithm {
    /**
     * 网格布局算法类的构造函数。
     *
     * @param { GridLayoutAlgorithmOptions } [option] - 网格布局算法的构造入参,
     *    设置网格布局的列数、列间距、行间距。
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    constructor(option?: GridLayoutAlgorithmOptions);
    /**
     * 设置当前网格布局的列数。
     * 非法值:按默认值处理。
     *
     * @type { ?(string | ItemFillPolicy) }
     * @default '1fr'
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    public columnsTemplate?: string | ItemFillPolicy;
    /**
     * 列与列之间的间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    public columnsGap?: LengthMetrics;
    /**
     * 行与行之间的间距。
     * 非法值:按默认值处理。
     *
     * @type { ?LengthMetrics }
     * @default LengthMetrics.vp(0)
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @since 24 static
     */
    public rowsGap?: LengthMetrics;
}