Dialogs
zero-native provides native file and message dialogs accessible from Zig via PlatformServices or from JavaScript via the builtin bridge.
Open file dialog
| Field | Type | Default |
|---|---|---|
title | []const u8 | "" |
default_path | []const u8 | "" |
filters | []const FileFilter | &. |
allow_directories | bool | false |
allow_multiple | bool | false |
Returns OpenDialogResult with count and paths.
Save file dialog
| Field | Type | Default |
|---|---|---|
title | []const u8 | "" |
default_path | []const u8 | "" |
default_name | []const u8 | "" |
filters | []const FileFilter | &. |
Returns an optional path string.
Message dialog
| Field | Type | Default |
|---|---|---|
style | MessageDialogStyle | .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 = [_]zero_native.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. JSON field names use camelCase:
const files = await window.zero.invoke("zero-native.dialog.openFile", {
title: "Select a file",
defaultPath: "/home",
allowMultiple: true,
allowDirectories: false,
});
const path = await window.zero.invoke("zero-native.dialog.saveFile", {
title: "Save as",
defaultName: "untitled.txt",
});
const result = await window.zero.invoke("zero-native.dialog.showMessage", {
style: "warning",
title: "Confirm",
message: "Delete this item?",
informativeText: "This action cannot be undone.",
primaryButton: "Delete",
secondaryButton: "Cancel",
});