Slint Kit Documentation

Dialogs

Dialog Panel for Slint

KitDialogPanel · Slint Kit 0.3.0

Dialog content surface with an accessible name.

Dialog content surface with an accessible name.
Native app built from the example below.

Try the component

Download the complete project, extract it and run cargo run --locked in its folder. Rust 1.92+; Slint Kit 0.3.0 from crates.io. You can also copy the four files below.

Compose the dialog sections inside a panel, then archive the project through a Rust callback.

ui/app.slint

export { KitFormValidation, HtmlInputKind, NumberInputFormat, KitInputConstraints, KitValidationResult, KitValidityState } from "@kit/kit.slint";
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitDialogPanel, KitDialogHeader, KitDialogBody, KitDialogFooter, KitButton, KitTheme, KitThemes } from "@kit/kit.slint";
export component App inherits Window {
    title: "KitDialogPanel example";
    preferred-width: 520px;
    preferred-height: 300px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in property <bool> archived;
    callback archive();
    VerticalLayout {
        padding: 24px;
        spacing: 16px;
        alignment: start;
        panel := KitDialogPanel {
            theme: root.theme; accessible-name: "Archive project";
            height: content.preferred-height;
            content := VerticalLayout {
                padding: 20px; spacing: 14px;
                header := KitDialogHeader { theme: root.theme; height: self.preferred-height; Text { text: "Archive this project?"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; wrap: word-wrap; } }
                body := KitDialogBody { theme: root.theme; height: self.preferred-height; Text { text: "You can restore it from the archive."; color: root.theme.text-primary; wrap: word-wrap; } }
                footer := KitDialogFooter { theme: root.theme; height: 48px; KitButton { theme: root.theme; text: "Archive project"; disabled: root.archived; activated => { root.archive(); } } }
            }
        }
        result := Text { text: root.archived ? "Project archived" : "Project active"; color: root.theme.text-primary; }
    }

}

src/main.rs

// SPDX-License-Identifier: GPL-3.0-or-later
use slint::ComponentHandle;

mod ui { slint::include_modules!(); }
fn main() -> Result<(), slint::PlatformError> {
    let app = ui::App::new()?;
    slint_kit::init_form_validation!(ui, app);
    let weak = app.as_weak();
    app.on_archive(move || { if let Some(app) = weak.upgrade() { app.set_archived(true); } });
    app.run()
}

Cargo.toml and build.rs

Cargo.toml

[package]
name = "slint-kit-dialog-panel-example"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
license = "GPL-3.0-or-later"
publish = false

[dependencies]
slint-kit = "=0.3.0"
slint = { version = "=1.18.1", default-features = false, features = ["std", "compat-1-18", "backend-winit", "renderer-skia", "accessibility"] }

[build-dependencies]
slint-kit-build = "=0.3.0"

[workspace]

build.rs

fn main() { slint_kit_build::compile("ui/app.slint").expect("compile component example"); }

Files: Cargo.toml · build.rs · ui/app.slint · src/main.rs

Place it inside KitDialogSurface and set its geometry, accessible-name and description. Compose header, body and footer in a child layout.

It paints a raised surface and consumes clicks that would reach the backdrop. It decides neither dialog placement nor close policy.

Visual composition

The file below produces the screenshot. For controller-driven components, it shows the displayed state without supplying the Rust wiring. Create a project.

Show the screenshot source
Dialog content surface with an accessible name.
Native screenshot of the same example, rendered with Skia.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitButton, KitDialogPanel, KitTheme, KitThemes } from "@kit/kit.slint";

export component Example inherits Window {
    title: "KitDialogPanel example";
    preferred-width: 480px;
    preferred-height: 260px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in-out property <string> status;
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Dialog Panel"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitDialogPanel { theme: root.theme; width: 420px; height: dialog-content.preferred-height; horizontal-stretch: 0; vertical-stretch: 0; accessible-name: "Archive project"; dialog-content := VerticalLayout { padding: 24px; spacing: 16px; alignment: start; Text { text: "Archive this project?"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; wrap: word-wrap; vertical-stretch: 0; }Text { text: "You can restore it later from the archive."; color: root.theme.text-primary; font-size: 14px * root.theme.text-scale; wrap: word-wrap; vertical-stretch: 0; }KitButton { theme: root.theme; text: "Archive project"; activated => { root.status = "Action requested"; } }if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; vertical-stretch: 0; } } }
        if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; }
    }
}

Download this example

Public API

Inherits Rectangle.

Properties

Name Type Direction
theme KitTheme in
accessible-name string in
accessible-description-text string in

See also