'use static';
/*
 * Copyright (c) 2025 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
 */

import { ResourceStr } from '@ohos.arkui.component';

import { NavPathStack, NavigationOperation, NavBar } from '@ohos.arkui.component';
import { UIContext } from '@ohos.arkui.UIContext';

import UIAbilityContext from './application/UIAbilityContext';

import { Callback } from './@ohos.base';
import { NavDestinationMode } from '@ohos.arkui.component';
import { HeightBreakpoint, WidthBreakpoint } from '@ohos.arkui.component';
import { Size } from '@ohos.arkui.node';
import { Axis } from '@ohos.arkui.component';
/**
 * Register callbacks to observe ArkUI behavior.
 *
 * @namespace uiObserver
 * @syscap SystemCapability.ArkUI.ArkUI.Full
 * @stagemodelonly
 * @since 23 static
 */
declare namespace uiObserver {

  /**
   * NavDestination state.
   *
   * @enum { number }
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export enum NavDestinationState {

    /**
     * When the NavDestination is displayed.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_SHOWN = 0,

    /**
     * When the NavDestination is hidden.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_HIDDEN = 1,

    /**
     * When the NavDestination appear.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_APPEAR = 2,

    /**
     * When the NavDestination disappear.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_DISAPPEAR = 3,

    /**
     * Before the NavDestination is displayed.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_WILL_SHOW = 4,

    /**
     * Before the NavDestination is hidden.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_WILL_HIDE = 5,

    /**
     * Before the NavDestination is appeared.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_WILL_APPEAR = 6,

    /**
     * Before the NavDestination is disappeared.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_WILL_DISAPPEAR = 7,

    /**
     * When the NavDestination is active.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_ACTIVE = 8,

    /**
     * When the NavDestination is inactive.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_INACTIVE = 9,

    /**
     * When back press event happened in NavDestination.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_BACKPRESS = 100
  }

  /**
   * Router page state.
   *
   * @enum { number }
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export enum RouterPageState {

    /**
     * When the router page create.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ABOUT_TO_APPEAR = 0,

    /**
     * When the router page destroy.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ABOUT_TO_DISAPPEAR = 1,

    /**
     * When the router page show.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_PAGE_SHOW = 2,

    /**
     * When the router page hide.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_PAGE_HIDE = 3,

    /**
     * When back press event happened in the router page.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_BACK_PRESS = 4
  }

  /**
   * ScrollEvent type.
   *
   * @enum { number }
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export enum ScrollEventType {
    /**
     * When the ScrollEvent start.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    SCROLL_START = 0,
    /**
     * When the ScrollEvent stop.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    SCROLL_STOP = 1
  }

  /**
   * TabContent state.
   *
   * @enum { number }
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export enum TabContentState {

    /**
     * When the TabContent is shown.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_SHOW = 0,

    /**
     * When the TabContent is hidden.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    ON_HIDE = 1
  }

  /**
   * NavDestination info.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface NavDestinationInfo {

    /**
     * Navigation id.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    navigationId: ResourceStr;

    /**
     * Changed NavDestination name.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    name: ResourceStr;

    /**
     * Changed NavDestination state.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    state: NavDestinationState;

    /**
     * NavDestination index.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    index: int;

    /**
     * The detailed parameter of NavDestination.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    param?: Object;

    /**
     * Auto-generated navDestination id, which is different from common property id of Component.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    navDestinationId: string;

    /**
     * NavDestination uniqueId.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    uniqueId?: int;

    /**
     * NavDestination mode.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    mode?: NavDestinationMode;

    /**
     * NavDestination size.
     *
     * @type { ?Size }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    size?: Size;
  }

  /**
   * Navigation info.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface NavigationInfo {

    /**
     * Navigation id.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    navigationId: string;

    /**
     * Navigation path stack.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    pathStack: NavPathStack;

    /**
     * The uniqueId of the navigation.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    uniqueId?: int;
  }

  /**
   * ScrollEvent info.
   *
   * @interface ScrollEventInfo
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface ScrollEventInfo {
    /**
     * Scroll id.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    id: string;
    /**
     * The uniqueId of the scrollable component.
     *
         * @type { number }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    uniqueId: int;
    /**
     * Changed ScrollEvent type.
     *
     * @type { ScrollEventType }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    scrollEvent: ScrollEventType;
    /**
     * Changed ScrollEvent offset.
     *
         * @type { number }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    offset: double;
    /**
     * Scroll axis.
     *
     * @type { ?Axis }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 26.0.0 static
     */
    axis?: Axis;
  }

  /**
   * TabContent info.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface TabContentInfo {

    /**
     * TabContent id.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    tabContentId: string;

    /**
     * TabContent uniqueId.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    tabContentUniqueId: int;

    /**
     * The state of TabContent.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    state: TabContentState;

    /**
     * The index of TabContent in Tabs.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    index: int;

    /**
     * Tabs id.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    id: string;

    /**
     * Tabs uniqueId.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    uniqueId: int;

    /**
     * The last focus index of TabContent in Tabs.
     * The value should be an integer.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    lastIndex?: int;
  }

  /**
   * Text change event info
   *
   * @interface TextChangeEventInfo
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 24 static
   */
  export interface TextChangeEventInfo {
    /**
     * The id of text field component.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 24 static
     */
    id: string;

    /**
     * The uniqueId of the text field component.
     *
     * @type { int }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 24 static
     */
    uniqueId: int;

    /**
     * Current content of text field component.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 24 static
     */
    content: string;
  }
  /**
   * observer options.
   *
   * @interface ObserverOptions
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface ObserverOptions {
    /**
     * component id.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    id: string;
  }

  /**
   * Router page info.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export class RouterPageInfo {

    /**
     * The context of the changed router page.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    context: UIAbilityContext | UIContext;

    /**
     * The index of the changed router page in router stack.
     * The value should be an integer.
     *
     * @type { int }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    index: int;

    /**
     * The name of the changed router page.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    name: string;

    /**
     * The path of the changed router page.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    path: string;

    /**
     * The state of the changed router page.
     *
     * @type { RouterPageState }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    state: RouterPageState;

    /**
     * The unique identifier of the router page.
     *
     * @type { string }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    pageId: string;

    /**
     * The size of the router page.
     *
     * @type { ?Size }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    size?: Size;
  }

  /**
   * Density info.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export class DensityInfo {
    /**
     * The context of the changed screen density.
     *
     * @type { UIContext }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    context: UIContext;
    /**
     * The changed screen density.
     *
     * @type { double }
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    density: double;
  }

  /**
   * NavDestination switch info
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface NavDestinationSwitchInfo {

    /**
     * The context of the navigation operation.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    context: UIAbilityContext | UIContext;

    /**
     * From navigation content info.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    from: NavDestinationInfo | NavBar;

    /**
     * To navigation content info.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    to: NavDestinationInfo | NavBar;

    /**
     * The operation type.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    operation: NavigationOperation;
  }

  /**
   * Defines the window size layout breakpoint information.
   * This interface provides the current breakpoint classification of the window's width and height
   * based on the configured breakpoint thresholds.
   *
   * @interface WindowSizeLayoutBreakpointInfo
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @crossplatform [since 26.0.0]
   * @since 24 static
   */
  export interface WindowSizeLayoutBreakpointInfo {
    /**
     * The width breakpoint classification of the current window.
     * This value indicates which width category the window currently falls into based on
     * the configured width breakpoint thresholds.
     *
     * @type { WidthBreakpoint }
     * @readonly
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @crossplatform [since 26.0.0]
     * @since 24 static
     */
    readonly widthBreakpoint: WidthBreakpoint;
    /**
     * The height breakpoint classification of the current window.
     * This value indicates which height category the window currently falls into based on
     * the configured height breakpoint thresholds and aspect ratio.
     *
     * @type { HeightBreakpoint }
     * @readonly
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @crossplatform [since 26.0.0]
     * @since 24 static
     */
    readonly heightBreakpoint: HeightBreakpoint;
  }

  /**
   * Indicates the options of NavDestination switch.
   *
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export interface NavDestinationSwitchObserverOptions {

    /**
     * The navigationId that need observation.
     *
     * @syscap SystemCapability.ArkUI.ArkUI.Full
     * @stagemodelonly
     * @since 23 static
     */
    navigationId: ResourceStr;
  }

  /**
   * Registers a callback function to be called when the navigation destination is updated.
   *
   * @param { NavDestinationSwitchObserverOptions } options - The options object.
   * @param { Callback<NavDestinationInfo> } callback - The callback function to be called when the navigation
   *     destination is updated.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onNavDestinationUpdate(
    options: NavDestinationSwitchObserverOptions, 
    callback: Callback<NavDestinationInfo>
  ): void;

  /**
   * Removes a callback function that was previously registered with `onNavDestinationUpdate`.
   *
   * @param { NavDestinationSwitchObserverOptions } options - The options object.
   * @param { Callback<NavDestinationInfo> } [callback] - The callback function to remove. If not provided,
   *     all callbacks for the given event type and navigation ID will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offNavDestinationUpdate(
    options: NavDestinationSwitchObserverOptions, 
    callback?: Callback<NavDestinationInfo>
  ): void;

  /**
   * Registers a callback function to be called when the navigation destination is updated.
   *
   * @param { Callback<NavDestinationInfo> } callback - The callback function to be called when the navigation
   *     destination is updated.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onNavDestinationUpdate(callback: Callback<NavDestinationInfo>): void;

  /**
   * Removes a callback function that was previously registered with `onNavDestinationUpdate`.
   *
   * @param { Callback<NavDestinationInfo> } [callback] - The callback function to remove. If not provided, all
   *     callbacks for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offNavDestinationUpdate(callback?: Callback<NavDestinationInfo>): void;

  /**
   * Registers a callback function to be called when the scroll event starts or stops.
   *
   * @param { ObserverOptions } options - The options object.
     * @param { Callback<ScrollEventInfo> } callback - The callback function to be called when the scroll event
     *     start or stop.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onScrollEvent(options: ObserverOptions, callback: Callback<ScrollEventInfo>): void;
  /**
   * Removes a callback function that was previously registered with `onScrollEvent()`.
   *
   * @param { ObserverOptions } options - The options object.
     * @param { Callback<ScrollEventInfo> } callback - The callback function to remove. If not provided, all callbacks
   *     for the given event type and scroll ID will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offScrollEvent(options: ObserverOptions, callback?: Callback<ScrollEventInfo>): void;
  /**
   * Registers a callback function to be called when the scroll event starts or stops.
   *
   * @param { Callback<ScrollEventInfo> } callback - The callback function to be called when the scroll event
   *     start or stop.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onScrollEvent(callback: Callback<ScrollEventInfo>): void;
  /**
   * Removes a callback function that was previously registered with `onScrollEvent()`.
   *
     * @param { Callback<ScrollEventInfo> } [callback] - The callback function to remove. If not provided, all
     *     callbacks for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offScrollEvent(callback?: Callback<ScrollEventInfo>): void;

  /**
   * Registers a callback function to be called when the router page is updated.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { Callback<RouterPageInfo> } callback - The callback function to be called when the router page is updated.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onRouterPageUpdate(context: UIAbilityContext | UIContext, callback: Callback<RouterPageInfo>): void;

  /**
   * Removes a callback function that was previously registered with `onRouterPageUpdate`.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { Callback<RouterPageInfo> } [callback] - The callback function to remove. If not provided, all callbacks
   *     for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offRouterPageUpdate(context: UIAbilityContext | UIContext, callback?: Callback<RouterPageInfo>): void;

  /**
   * Registers a callback function to be called when the screen density is updated.
   *
   * @param { UIContext } context - The context scope of the observer.
     * @param { Callback<DensityInfo> } callback - The callback function to be called when the screen density
     *     is updated.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onDensityUpdate(context: UIContext, callback: Callback<DensityInfo>): void;
  /**
   * Removes a callback function that was previously registered with `on()`.
   *
   * @param { UIContext } context - The context scope of the observer.
   * @param { Callback<DensityInfo> } [callback] - The callback function to remove. If not provided, all callbacks
   *     for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offDensityUpdate(context: UIContext, callback?: Callback<DensityInfo>): void;
  /**
   * Registers a callback function to be called when the draw command will be drawn.
   *
   * @param { UIContext } context - The context scope of the observer.
   * @param { Callback<void> } callback - The callback function to be called when the draw command will be drawn.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onWillDraw(context: UIContext, callback: Callback<void>): void;
  /**
   * Removes a callback function that was previously registered with `on()`.
   *
   * @param { UIContext } context - The context scope of the observer.
     * @param { Callback<void> } [callback] - The callback function to remove. If not provided, all callbacks
     *     for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offWillDraw(context: UIContext, callback?: Callback<void>): void;
  /**
   * Registers a callback function to be called when the layout is done.
   *
   * @param { UIContext } context - The context scope of the observer.
   * @param { Callback<void> } callback - The callback function to be called when the layout is done.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onDidLayout(context: UIContext, callback: Callback<void>): void;
  /**
   * Removes a callback function that was previously registered with `on()`.
   *
   * @param { UIContext } context - The context scope of the observer.
     * @param { Callback<void> } [callback] - The callback function to remove. If not provided, all callbacks
     *     for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offDidLayout(context: UIContext, callback?: Callback<void>): void;
  /**
   * Registers a callback function to be called when the tabContent is showed or hidden.
   *
   * @param { ObserverOptions } options - The options object.
   * @param { Callback<TabContentInfo> } callback - The callback function to be called when when the tabContent is
   *     showed or hidden.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onTabContentUpdate(options: ObserverOptions, callback: Callback<TabContentInfo>): void;

  /**
   * Removes a callback function that was previously registered with `on()`.
   *
   * @param { ObserverOptions } options - The options object.
   * @param { Callback<TabContentInfo> } [callback] - The callback function to remove. If not provided, all callbacks for
   *     the given event type and Tabs ID will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offTabContentUpdate(options: ObserverOptions, callback?: Callback<TabContentInfo>): void;

  /**
   * Registers a callback function to be called when the tabContent is showed or hidden.
   *
   * @param { Callback<TabContentInfo> } callback - The callback function to be called when the tabContent is
   *     showed or hidden.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onTabContentUpdate(callback: Callback<TabContentInfo>): void;

  /**
   * Removes a callback function that was previously registered with `on()`.
   *
   * @param { Callback<TabContentInfo> } [callback] - The callback function to remove. If not provided, all callbacks
   *     for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offTabContentUpdate(callback?: Callback<TabContentInfo>): void;

  /**
   * Registers a callback function to be called when the navigation switched to a new navDestination.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { Callback<NavDestinationSwitchInfo> } callback - The callback function to be called when the navigation
   *     switched to a new navDestination.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onNavDestinationSwitch(
    context: UIAbilityContext | UIContext,
    callback: Callback<NavDestinationSwitchInfo>
  ): void;

  /**
   * Removes a callback function that was previously registered with `onNavDestinationSwitch`.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { Callback<NavDestinationSwitchInfo> } [callback] - The callback function to remove. If not provided, all
   *     callbacks for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offNavDestinationSwitch(
    context: UIAbilityContext | UIContext,
    callback?: Callback<NavDestinationSwitchInfo>
  ): void;

  /**
   * Registers a callback function to be called when the navigation switched to a new navDestination.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { NavDestinationSwitchObserverOptions } observerOptions - Options.
   * @param { Callback<NavDestinationSwitchInfo> } callback - The callback function to be called when the navigation
   *     switched to a new navDestination.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function onNavDestinationSwitch(
    context: UIAbilityContext | UIContext,
    observerOptions: NavDestinationSwitchObserverOptions,
    callback: Callback<NavDestinationSwitchInfo>
  ): void;

  /**
   * Removes a callback function that was previously registered with `onNavDestinationSwitch`.
   *
   * @param { UIAbilityContext | UIContext } context - The context scope of the observer.
   * @param { NavDestinationSwitchObserverOptions } observerOptions - Options.
   * @param { Callback<NavDestinationSwitchInfo> } [callback] - The callback function to remove. If not provided, all
   *     callbacks for the given event type will be removed.
   * @syscap SystemCapability.ArkUI.ArkUI.Full
   * @stagemodelonly
   * @since 23 static
   */
  export function offNavDestinationSwitch(
    context: UIAbilityContext | UIContext,
    observerOptions: NavDestinationSwitchObserverOptions,
    callback?: Callback<NavDestinationSwitchInfo>
  ): void;
}
export default uiObserver;