.{ .id = "dev.native_sdk.mobile_shell", .name = "mobile-shell", .display_name = "Mobile Shell", .version = "0.1.0", .platforms = .{ "ios", "android" }, .permissions = .{}, .capabilities = .{ "webview", "native_views", "native_module" }, .commands = .{ .{ .id = "mobile.back", .title = "Back" }, .{ .id = "mobile.refresh", .title = "Refresh" }, }, .shell = .{ // Declared platform chrome: on hosts that project it (the iOS // canvas host today) the tab set becomes a REAL system tab bar // and the primary action a real button; taps dispatch the ids // below through the same command path as the header buttons. // Hosts without a projection (this fixed WebView shell's // hand-written hosts, desktop, Android for now) leave it inert. .chrome = .{ .tabs = .{ .{ .id = "mobile.tab.workspace", .label = "Workspace", .icon = "menu" }, .{ .id = "mobile.tab.status", .label = "Status", .icon = "info" }, }, .primary_action = .{ .id = "mobile.refresh", .label = "Refresh", .icon = "refresh-cw" }, }, .windows = .{ .{ .label = "main", .title = "Mobile Shell", .views = .{ .{ .label = "mobile-header", .kind = "toolbar", .edge = "top", .height = 104, .role = "toolbar" }, .{ .label = "mobile-title", .kind = "label", .parent = "mobile-header", .text = "Mobile Shell", .accessibility_label = "Mobile Shell" }, .{ .label = "mobile-status", .kind = "statusbar", .edge = "bottom", .height = 28, .text = "Native commands ready" }, .{ .label = "mobile-back", .kind = "button", .parent = "mobile-header", .text = "Back", .command = "mobile.back" }, .{ .label = "mobile-refresh", .kind = "button", .parent = "mobile-header", .text = "Refresh", .command = "mobile.refresh" }, .{ .label = "workspace", .kind = "webview", .url = "zero://app/index.html", .fill = true }, }, }, }, }, .web_engine = "system", }