// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

// AUTO-GENERATED by api/node/build.rs from internal/common/enums.rs
// and internal/common/builtin_structs.rs. Do not edit.

import { DataTransfer } from "../../binding.cjs";

const _data = {
    /**
     * The enum reports what happened to the `PointerEventButton` in the event
     */
    PointerEventKind: {
        /**
         * The action was cancelled.
         */
        Cancel: "cancel",
        /**
         * The button was pressed.
         */
        Down: "down",
        /**
         * The button was released.
         */
        Up: "up",
        /**
         * The pointer has moved,
         */
        Move: "move",
    },
    /**
     * This enum describes the different types of buttons for a pointer event,
     * typically on a mouse or a pencil.
     */
    PointerEventButton: {
        /**
         * A button that is none of left, right, middle, back or forward. For example,
         * this is used for the task button on a mouse with many buttons.
         */
        Other: "other",
        /**
         * The left button.
         */
        Left: "left",
        /**
         * The right button.
         */
        Right: "right",
        /**
         * The center button.
         */
        Middle: "middle",
        /**
         * The back button.
         */
        Back: "back",
        /**
         * The forward button.
         */
        Forward: "forward",
    },
    /**
     * This enum represents the different values for the `accessible-role` property, used to describe the
     * role of an element in the context of assistive technology such as screen readers.
     *
     * In addition to widget roles, this enum includes *landmark* roles (`banner`, `complementary`,
     * `content-info`, `form`, `main`, `navigation`, `region`, `search`).
     * Landmarks identify large content areas that screen reader users can jump between,
     * giving the application a navigable structure similar to headings in a document.
     * See [WAI-ARIA Landmark Regions](https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/)
     * for guidance on when and how to use them.
     */
    AccessibleRole: {
        /**
         * The element isn't accessible.
         */
        None: "none",
        /**
         * The element is a `Button` or behaves like one.
         */
        Button: "button",
        /**
         * The element is a `CheckBox` or behaves like one.
         */
        Checkbox: "checkbox",
        /**
         * The element is a `ComboBox` or behaves like one.
         */
        Combobox: "combobox",
        /**
         * The element is a `GroupBox` or behaves like one.
         */
        Groupbox: "groupbox",
        /**
         * The element is an `Image` or behaves like one. This is automatically applied to `Image` elements.
         */
        Image: "image",
        /**
         * The element is a `ListView` or behaves like one.
         */
        List: "list",
        /**
         * The element is a `Slider` or behaves like one.
         */
        Slider: "slider",
        /**
         * The element is a `SpinBox` or behaves like one.
         */
        Spinbox: "spinbox",
        /**
         * The element is a `Tab` or behaves like one.
         */
        Tab: "tab",
        /**
         * The element is similar to the tab bar in a `TabWidget`.
         */
        TabList: "tab-list",
        /**
         * The element is a container for tab content.
         */
        TabPanel: "tab-panel",
        /**
         * The role for a `Text` element. This is automatically applied to `Text` elements.
         */
        Text: "text",
        /**
         * The role for a `TableView` or behaves like one.
         */
        Table: "table",
        /**
         * The role for a TreeView or behaves like one. (Not provided yet)
         */
        Tree: "tree",
        /**
         * The element is a `ProgressIndicator` or behaves like one.
         */
        ProgressIndicator: "progress-indicator",
        /**
         * The role for widget with editable text such as a `LineEdit` or a `TextEdit`.
         * This is automatically applied to `TextInput` elements.
         */
        TextInput: "text-input",
        /**
         * The element is a `Switch` or behaves like one.
         */
        Switch: "switch",
        /**
         * The element is an item in a `ListView`.
         */
        ListItem: "list-item",
        /**
         * The element is a `RadioButton` or behaves like one.
         */
        RadioButton: "radio-button",
        /**
         * The element is a container grouping related `RadioButton`s.
         */
        RadioGroup: "radio-group",
        /**
         * Landmark: the header area of the application, typically containing a logo, title, or global navigation.
         */
        Banner: "banner",
        /**
         * Landmark: a supporting section that complements the main content, such as a sidebar.
         */
        Complementary: "complementary",
        /**
         * Landmark: information about the application or its content, typically at the bottom (e.g. status bar, copyright).
         */
        ContentInfo: "content-info",
        /**
         * Landmark: a region containing input fields and controls for submitting information.
         */
        Form: "form",
        /**
         * Landmark: the primary content of the application. Each view should have exactly one `main` landmark.
         */
        Main: "main",
        /**
         * Landmark: a group of links or controls used for navigating the application.
         */
        Navigation: "navigation",
        /**
         * Landmark: a generic section significant enough to be listed in a summary.
         * Use a more specific landmark if one applies.
         */
        Region: "region",
        /**
         * Landmark: a region containing controls for searching or filtering content.
         */
        Search: "search",
    },
    /**
     * This enum represents the different values of the `accessible-live-region` property.
     * It indicates that an element is a live region whose content changes should be
     * announced by assistive technologies.
     */
    AccessibleLiveness: {
        /**
         * Use in regions that present information that is of low-importance to the user.
         * Assistive technologies are expected to not announce changes unless the user explicitly asks for it.
         */
        Off: "off",
        /**
         * Use in regions that present new information to users.
         * Assistive technologies are expected to not interrupt the user to inform of changes to the live region.
         */
        Polite: "polite",
        /**
         * Use in regions that present information that a user should know about right away.
         * Assistive technologies are expected to announce to the user as soon as possible.
         */
        Assertive: "assertive",
    },
    /**
     * This enum represents the different values of the `sort-order` property.
     * It's used to sort a `StandardTableView` by a column.
     */
    SortOrder: {
        /**
         * The column is unsorted.
         */
        Unsorted: "unsorted",
        /**
         * The column is sorted in ascending order.
         */
        Ascending: "ascending",
        /**
         * The column is sorted in descending order.
         */
        Descending: "descending",
    },
    /**
     * Represents the orientation of an element or widget such as the `Slider`.
     */
    Orientation: {
        /**
         * Element is oriented horizontally.
         */
        Horizontal: "horizontal",
        /**
         * Element is oriented vertically.
         */
        Vertical: "vertical",
    },
    /**
     * This enum indicates the color scheme used by the widget style. Use this to explicitly switch
     * between dark and light schemes, or choose Unknown to fall back to the system default.
     */
    ColorScheme: {
        /**
         * The scheme is not known and a system wide setting configures this. This could mean that
         * the widgets are shown in a dark or light scheme, but it could also be a custom color scheme.
         */
        Unknown: "unknown",
        /**
         * The style chooses light colors for the background and dark for the foreground.
         */
        Dark: "dark",
        /**
         * The style chooses dark colors for the background and light for the foreground.
         */
        Light: "light",
    },
    /**
     * This enum describes the action negotiated between the source of a drag (`DragArea`)
     * and its target (`DropArea`) during a drag-and-drop operation. The source declares
     * which actions it permits, the target picks one in its `can-drop` callback, and the
     * chosen action is reported back to the source via `drag-finished` so that, for
     * example, a `move` source can remove the original data. The same enum is used for
     * drags that come from another application or window once native drag-and-drop is
     * in play.
     */
    DragAction: {
        /**
         * No action: the drag is rejected, no drop will be delivered.
         */
        None: "none",
        /**
         * The data is copied to the target; the source retains it.
         */
        Copy: "copy",
        /**
         * The data is moved to the target; the source should remove it once the
         * operation completes.
         */
        Move: "move",
        /**
         * A link to the source data is created at the target; neither side gives
         * up ownership.
         */
        Link: "link",
    },
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * The `KeyboardModifiers` struct provides booleans to indicate possible modifier keys on a keyboard, such as Shift, Control, etc.
     * It is provided as part of `KeyEvent`'s `modifiers` field.
     *
     * Keyboard shortcuts on Apple platforms typically use the Command key (⌘), such as Command+C for "Copy". On other platforms
     * the same shortcut is typically represented using Control+C. To make it easier to develop cross-platform applications, on macOS,
     * Slint maps the Command key to the control modifier, and the Control key to the meta modifier.
     *
     * On Windows, the Windows key is mapped to the meta modifier.
     */
    KeyboardModifiers: (props?: Partial<language.KeyboardModifiers>): language.KeyboardModifiers => Object.freeze({ alt: false, control: false, shift: false, meta: false, ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * Represents a Pointer event sent by the windowing system.
     * This structure is passed to the `pointer-event` callback of the `TouchArea` element.
     */
    PointerEvent: (props?: Partial<language.PointerEvent>): language.PointerEvent => Object.freeze({ button: "other", kind: "cancel", modifiers: _data.KeyboardModifiers(), touch_finger_id: 0, ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * Represents a Pointer scroll (or wheel) event sent by the windowing system.
     * This structure is passed to the `scroll-event` callback of the `TouchArea` element.
     */
    PointerScrollEvent: (props?: Partial<language.PointerScrollEvent>): language.PointerScrollEvent => Object.freeze({ delta_x: 0, delta_y: 0, modifiers: _data.KeyboardModifiers(), ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * This structure is generated and passed to the key press and release callbacks of the `FocusScope` element.
     */
    KeyEvent: (props?: Partial<language.KeyEvent>): language.KeyEvent => Object.freeze({ text: "", modifiers: _data.KeyboardModifiers(), repeat: false, ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * This structure is passed to the callbacks of the `DropArea` element
     */
    DropEvent: (props?: Partial<language.DropEvent>): language.DropEvent => Object.freeze({ data: new DataTransfer(), position: { x: 0, y: 0 }, proposed_action: "none", ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * Represents an item in a StandardListView and a StandardTableView.
     */
    StandardListViewItem: (props?: Partial<language.StandardListViewItem>): language.StandardListViewItem => Object.freeze({ text: "", ...props }),
    /**
     * Build a value of this struct. Any field you omit takes a documented default,
     * which lets Slint add fields later without breaking existing call-sites.
     *
     * This is used to define the column and the column header of a TableView
     */
    TableColumn: (props?: Partial<language.TableColumn>): language.TableColumn => Object.freeze({ title: "", min_width: 0, horizontal_stretch: 0, sort_order: "unsorted", width: 0, ...props }),
} as const;

/**
 * Built-in enums and structs from the Slint language.
 * Enum values are accessed via `language.ColorScheme.Dark`; struct values via the
 * factory call `language.PointerEvent({ button: … })`. Enum and struct types are
 * available in type position as `language.ColorScheme` / `language.PointerEvent`.
 */
export const language = _data;

/** Named types for the enum values in {@link language} and the built-in language structs. */
// biome-ignore lint/style/useConst: declaration-merging namespace, type-only.
export namespace language {
    /**
     * The enum reports what happened to the `PointerEventButton` in the event
     *
     * Variants:
     * - `language.PointerEventKind.Cancel` (`"cancel"`) — The action was cancelled.
     * - `language.PointerEventKind.Down` (`"down"`) — The button was pressed.
     * - `language.PointerEventKind.Up` (`"up"`) — The button was released.
     * - `language.PointerEventKind.Move` (`"move"`) — The pointer has moved,
     */
    export type PointerEventKind = (typeof _data.PointerEventKind)[keyof typeof _data.PointerEventKind];
    /**
     * This enum describes the different types of buttons for a pointer event,
     * typically on a mouse or a pencil.
     *
     * Variants:
     * - `language.PointerEventButton.Other` (`"other"`) — A button that is none of left, right, middle, back or forward. For example, this is used for the task button on a mouse with many buttons.
     * - `language.PointerEventButton.Left` (`"left"`) — The left button.
     * - `language.PointerEventButton.Right` (`"right"`) — The right button.
     * - `language.PointerEventButton.Middle` (`"middle"`) — The center button.
     * - `language.PointerEventButton.Back` (`"back"`) — The back button.
     * - `language.PointerEventButton.Forward` (`"forward"`) — The forward button.
     */
    export type PointerEventButton = (typeof _data.PointerEventButton)[keyof typeof _data.PointerEventButton];
    /**
     * This enum represents the different values for the `accessible-role` property, used to describe the
     * role of an element in the context of assistive technology such as screen readers.
     *
     * In addition to widget roles, this enum includes *landmark* roles (`banner`, `complementary`,
     * `content-info`, `form`, `main`, `navigation`, `region`, `search`).
     * Landmarks identify large content areas that screen reader users can jump between,
     * giving the application a navigable structure similar to headings in a document.
     * See [WAI-ARIA Landmark Regions](https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/)
     * for guidance on when and how to use them.
     *
     * Variants:
     * - `language.AccessibleRole.None` (`"none"`) — The element isn't accessible.
     * - `language.AccessibleRole.Button` (`"button"`) — The element is a `Button` or behaves like one.
     * - `language.AccessibleRole.Checkbox` (`"checkbox"`) — The element is a `CheckBox` or behaves like one.
     * - `language.AccessibleRole.Combobox` (`"combobox"`) — The element is a `ComboBox` or behaves like one.
     * - `language.AccessibleRole.Groupbox` (`"groupbox"`) — The element is a `GroupBox` or behaves like one.
     * - `language.AccessibleRole.Image` (`"image"`) — The element is an `Image` or behaves like one. This is automatically applied to `Image` elements.
     * - `language.AccessibleRole.List` (`"list"`) — The element is a `ListView` or behaves like one.
     * - `language.AccessibleRole.Slider` (`"slider"`) — The element is a `Slider` or behaves like one.
     * - `language.AccessibleRole.Spinbox` (`"spinbox"`) — The element is a `SpinBox` or behaves like one.
     * - `language.AccessibleRole.Tab` (`"tab"`) — The element is a `Tab` or behaves like one.
     * - `language.AccessibleRole.TabList` (`"tab-list"`) — The element is similar to the tab bar in a `TabWidget`.
     * - `language.AccessibleRole.TabPanel` (`"tab-panel"`) — The element is a container for tab content.
     * - `language.AccessibleRole.Text` (`"text"`) — The role for a `Text` element. This is automatically applied to `Text` elements.
     * - `language.AccessibleRole.Table` (`"table"`) — The role for a `TableView` or behaves like one.
     * - `language.AccessibleRole.Tree` (`"tree"`) — The role for a TreeView or behaves like one. (Not provided yet)
     * - `language.AccessibleRole.ProgressIndicator` (`"progress-indicator"`) — The element is a `ProgressIndicator` or behaves like one.
     * - `language.AccessibleRole.TextInput` (`"text-input"`) — The role for widget with editable text such as a `LineEdit` or a `TextEdit`. This is automatically applied to `TextInput` elements.
     * - `language.AccessibleRole.Switch` (`"switch"`) — The element is a `Switch` or behaves like one.
     * - `language.AccessibleRole.ListItem` (`"list-item"`) — The element is an item in a `ListView`.
     * - `language.AccessibleRole.RadioButton` (`"radio-button"`) — The element is a `RadioButton` or behaves like one.
     * - `language.AccessibleRole.RadioGroup` (`"radio-group"`) — The element is a container grouping related `RadioButton`s.
     * - `language.AccessibleRole.Banner` (`"banner"`) — Landmark: the header area of the application, typically containing a logo, title, or global navigation.
     * - `language.AccessibleRole.Complementary` (`"complementary"`) — Landmark: a supporting section that complements the main content, such as a sidebar.
     * - `language.AccessibleRole.ContentInfo` (`"content-info"`) — Landmark: information about the application or its content, typically at the bottom (e.g. status bar, copyright).
     * - `language.AccessibleRole.Form` (`"form"`) — Landmark: a region containing input fields and controls for submitting information.
     * - `language.AccessibleRole.Main` (`"main"`) — Landmark: the primary content of the application. Each view should have exactly one `main` landmark.
     * - `language.AccessibleRole.Navigation` (`"navigation"`) — Landmark: a group of links or controls used for navigating the application.
     * - `language.AccessibleRole.Region` (`"region"`) — Landmark: a generic section significant enough to be listed in a summary. Use a more specific landmark if one applies.
     * - `language.AccessibleRole.Search` (`"search"`) — Landmark: a region containing controls for searching or filtering content.
     */
    export type AccessibleRole = (typeof _data.AccessibleRole)[keyof typeof _data.AccessibleRole];
    /**
     * This enum represents the different values of the `accessible-live-region` property.
     * It indicates that an element is a live region whose content changes should be
     * announced by assistive technologies.
     *
     * Variants:
     * - `language.AccessibleLiveness.Off` (`"off"`) — Use in regions that present information that is of low-importance to the user. Assistive technologies are expected to not announce changes unless the user explicitly asks for it.
     * - `language.AccessibleLiveness.Polite` (`"polite"`) — Use in regions that present new information to users. Assistive technologies are expected to not interrupt the user to inform of changes to the live region.
     * - `language.AccessibleLiveness.Assertive` (`"assertive"`) — Use in regions that present information that a user should know about right away. Assistive technologies are expected to announce to the user as soon as possible.
     */
    export type AccessibleLiveness = (typeof _data.AccessibleLiveness)[keyof typeof _data.AccessibleLiveness];
    /**
     * This enum represents the different values of the `sort-order` property.
     * It's used to sort a `StandardTableView` by a column.
     *
     * Variants:
     * - `language.SortOrder.Unsorted` (`"unsorted"`) — The column is unsorted.
     * - `language.SortOrder.Ascending` (`"ascending"`) — The column is sorted in ascending order.
     * - `language.SortOrder.Descending` (`"descending"`) — The column is sorted in descending order.
     */
    export type SortOrder = (typeof _data.SortOrder)[keyof typeof _data.SortOrder];
    /**
     * Represents the orientation of an element or widget such as the `Slider`.
     *
     * Variants:
     * - `language.Orientation.Horizontal` (`"horizontal"`) — Element is oriented horizontally.
     * - `language.Orientation.Vertical` (`"vertical"`) — Element is oriented vertically.
     */
    export type Orientation = (typeof _data.Orientation)[keyof typeof _data.Orientation];
    /**
     * This enum indicates the color scheme used by the widget style. Use this to explicitly switch
     * between dark and light schemes, or choose Unknown to fall back to the system default.
     *
     * Variants:
     * - `language.ColorScheme.Unknown` (`"unknown"`) — The scheme is not known and a system wide setting configures this. This could mean that the widgets are shown in a dark or light scheme, but it could also be a custom color scheme.
     * - `language.ColorScheme.Dark` (`"dark"`) — The style chooses light colors for the background and dark for the foreground.
     * - `language.ColorScheme.Light` (`"light"`) — The style chooses dark colors for the background and light for the foreground.
     */
    export type ColorScheme = (typeof _data.ColorScheme)[keyof typeof _data.ColorScheme];
    /**
     * This enum describes the action negotiated between the source of a drag (`DragArea`)
     * and its target (`DropArea`) during a drag-and-drop operation. The source declares
     * which actions it permits, the target picks one in its `can-drop` callback, and the
     * chosen action is reported back to the source via `drag-finished` so that, for
     * example, a `move` source can remove the original data. The same enum is used for
     * drags that come from another application or window once native drag-and-drop is
     * in play.
     *
     * Variants:
     * - `language.DragAction.None` (`"none"`) — No action: the drag is rejected, no drop will be delivered.
     * - `language.DragAction.Copy` (`"copy"`) — The data is copied to the target; the source retains it.
     * - `language.DragAction.Move` (`"move"`) — The data is moved to the target; the source should remove it once the operation completes.
     * - `language.DragAction.Link` (`"link"`) — A link to the source data is created at the target; neither side gives up ownership.
     */
    export type DragAction = (typeof _data.DragAction)[keyof typeof _data.DragAction];
    /**
     * The `KeyboardModifiers` struct provides booleans to indicate possible modifier keys on a keyboard, such as Shift, Control, etc.
     * It is provided as part of `KeyEvent`'s `modifiers` field.
     *
     * Keyboard shortcuts on Apple platforms typically use the Command key (⌘), such as Command+C for "Copy". On other platforms
     * the same shortcut is typically represented using Control+C. To make it easier to develop cross-platform applications, on macOS,
     * Slint maps the Command key to the control modifier, and the Control key to the meta modifier.
     *
     * On Windows, the Windows key is mapped to the meta modifier.
     */
    export type KeyboardModifiers = {
        /**
         * Indicates the Alt key on a keyboard.
         */
        alt: boolean;
        /**
         * Indicates the Control key on a keyboard, except on macOS, where it is the Command key (⌘).
         */
        control: boolean;
        /**
         * Indicates the Shift key on a keyboard.
         */
        shift: boolean;
        /**
         * Indicates the Control key on macos, and the Windows key on Windows.
         */
        meta: boolean;
    };
    /**
     * Represents a Pointer event sent by the windowing system.
     * This structure is passed to the `pointer-event` callback of the `TouchArea` element.
     */
    export type PointerEvent = {
        /**
         * The button that was pressed or released
         */
        button: PointerEventButton;
        /**
         * The kind of the event
         */
        kind: PointerEventKind;
        /**
         * The keyboard modifiers pressed during the event
         */
        modifiers: KeyboardModifiers;
        /**
         * The unique ID of the touch point, indicating the finger ID. 0 means it's not a touch event (e.g., mouse).
         */
        touch_finger_id: number;
    };
    /**
     * Represents a Pointer scroll (or wheel) event sent by the windowing system.
     * This structure is passed to the `scroll-event` callback of the `TouchArea` element.
     */
    export type PointerScrollEvent = {
        /**
         * The amount of pixel in the horizontal direction
         */
        delta_x: number;
        /**
         * The amount of pixel in the vertical direction
         */
        delta_y: number;
        /**
         * The keyboard modifiers pressed during the event
         */
        modifiers: KeyboardModifiers;
    };
    /**
     * This structure is generated and passed to the key press and release callbacks of the `FocusScope` element.
     */
    export type KeyEvent = {
        /**
         * The unicode representation of the key pressed.
         */
        text: string;
        /**
         * The keyboard modifiers active at the time of the key press event.
         */
        modifiers: KeyboardModifiers;
        /**
         * This field is set to true for key press events that are repeated,
         * i.e. the key is held down. It's always false for key release events.
         */
        repeat: boolean;
    };
    /**
     * This structure is passed to the callbacks of the `DropArea` element
     */
    export type DropEvent = {
        /**
         * The payload set on the source `DragArea`.
         */
        data: DataTransfer;
        /**
         * The cursor position in the `DropArea`'s local coordinates.
         */
        position: { x: number; y: number };
        /**
         * The action negotiated from current modifier state, clamped to the allowed set;
         * when no modifier is pressed, the first allowed of move, copy, link.
         * Updated on every `DragMove`. The target's `can-drop` callback can return this
         * to honor the user's modifier choice, or override with any other allowed action.
         */
        proposed_action: DragAction;
    };
    /**
     * Represents an item in a StandardListView and a StandardTableView.
     */
    export type StandardListViewItem = {
        /**
         * The text content of the item
         */
        text: string;
    };
    /**
     * This is used to define the column and the column header of a TableView
     */
    export type TableColumn = {
        /**
         * The title of the column header
         */
        title: string;
        /**
         * The minimum column width (logical length)
         */
        min_width: number;
        /**
         * The horizontal column stretch
         */
        horizontal_stretch: number;
        /**
         * Sorts the column
         */
        sort_order: SortOrder;
        /**
         * the actual width of the column (logical length)
         */
        width: number;
    };
}
