Documentation content

Dialogs

The Native SDK provides native file and message dialogs accessible from Zig via Runtime.showOpenDialog(...), Runtime.showSaveDialog(...), and Runtime.showMessageDialog(...), or from JavaScript via the builtin bridge.

Open file dialog

FieldTypeDefault
title[]const u8""
default_path[]const u8""
filters[]const FileFilter&.
allow_directoriesboolfalse
allow_multipleboolfalse

Returns OpenDialogResult with count and paths.

Save file dialog

FieldTypeDefault
title[]const u8""
default_path[]const u8""
default_name[]const u8""
filters[]const FileFilter&.

Returns an optional path string.

Message dialog

FieldTypeDefault
styleMessageDialogStyle.info
title[]const u8""
message[]const u8""
informative_text[]const u8""
primary_button[]const u8"OK"
secondary_button[]const u8""
tertiary_button[]const u8""

MessageDialogStyle: info, warning, critical

MessageDialogResult: primary, secondary, tertiary

FileFilter

const filters = [_]native_sdk.FileFilter{
    .{ .name = "Images", .extensions = &.{ "png", "jpg", "gif" } },
    .{ .name = "All Files", .extensions = &.{ "*" } },
};

From JavaScript

Dialogs require the builtin bridge to be enabled with an explicit policy that grants the dialog permission. JSON field names use camelCase:

const files = await window.zero.invoke("native-sdk.dialog.openFile", {
  title: "Select a file",
  defaultPath: "/home",
  allowMultiple: true,
  allowDirectories: false,
});

const path = await window.zero.invoke("native-sdk.dialog.saveFile", {
  title: "Save as",
  defaultName: "untitled.txt",
});

const result = await window.zero.invoke("native-sdk.dialog.showMessage", {
  style: "warning",
  title: "Confirm",
  message: "Delete this item?",
  informativeText: "This action cannot be undone.",
  primaryButton: "Delete",
  secondaryButton: "Cancel",
});