Summary
sheetCreate(body, width, height) opens a sheet at the requested dimensions but the body widget's children are invisible. The sheet appears as a blank white rounded rect.
This was explicitly flagged in the v0.5.345 CHANGELOG entry:
Latent mismatches surfaced during the audit but NOT fixed in this commit (they don't crash today by luck and are tracked separately): Picker / tabbarAddTab / frameSplitCreate / TextArea constructor / sheetCreate arg shapes — each will need a similar dispatch-vs-runtime alignment, but only when those code paths actually exercise the Win64 ABI path.
…but no follow-up issue was filed. Hit it via macOS while building a real app, so the "doesn't crash today by luck" assumption doesn't hold for the body rendering — the dimensions work but the body handle is being misinterpreted.
Environment
- Perry: 0.5.958
- Target: macOS arm64 (perry-ui-macos)
- macOS 26.4 (Darwin 25.4.0)
Minimal repro
import {
App, VStack, HStack, Text, Button, Spacer,
sheetCreate, sheetPresent, sheetDismiss,
widgetSetBackgroundColor, setCornerRadius, setPadding,
textSetFontSize,
} from 'perry/ui';
const titleText = Text('Hello from inside the sheet');
textSetFontSize(titleText, 16);
const okBtn = Button('OK', () => {});
const card = VStack(10, [titleText, okBtn]);
widgetSetBackgroundColor(card, 1.0, 1.0, 1.0, 1.0);
setCornerRadius(card, 12);
setPadding(card, 20, 24, 20, 24);
const open = Button('Open sheet', () => {
const sheet = sheetCreate(card, 400, 240);
sheetPresent(sheet);
});
App({ title: 'Sheet repro', width: 600, height: 400, body: VStack(0, [open]) });
Expected: click "Open sheet" → modal sheet appears with "Hello from inside the sheet" and an OK button.
Actual: modal sheet appears at 400×240, but it is completely blank — the title text and OK button are not rendered. The sheet IS in the AppKit window list (CGWindowListCopyWindowInfo shows a Mango-owned window at the expected size) but contains no visible children.
I verified the card widget is well-formed by adding it to a regular window — the title + button render normally there.
For modal-style dialogs I switched to either:
-
NSAlert via alertWithButtons(title, message, buttons[], cb) — works perfectly for yes/no destructive confirmations (drop collection, bulk delete, etc.).
-
ZStack overlay over appBody for richer panels like the Cmd+K command palette:
const paletteOverlay = VStack(0, []);
widgetSetBackgroundColor(paletteOverlay, 0, 0, 0, 0.45); // dim backdrop
widgetSetHidden(paletteOverlay, 1);
const appRoot = ZStack();
widgetAddChild(appRoot, appBody);
widgetAddChild(appRoot, paletteOverlay);
App({ ..., body: appRoot });
Then showCommandPalette() fills paletteOverlay with the card and flips widgetSetHidden(..., 0).
Both work, but neither gives the native sheet animation/positioning users expect on macOS.
Related (same arg-shape mismatch family)
From the same v0.5.345 CHANGELOG paragraph: Picker, tabbarAddTab, frameSplitCreate, TextArea constructor. Worth checking if these are tracked elsewhere — if not, may be worth one umbrella tracking issue or filing them at the same time.
Cross-link
Worked around in MangoQuery/app commit 8fd84f8 — see the commit message body for context on the user-visible impact (Cmd+K palette and destructive-confirm dialogs were appearing blank on every launch).
Summary
sheetCreate(body, width, height)opens a sheet at the requested dimensions but thebodywidget's children are invisible. The sheet appears as a blank white rounded rect.This was explicitly flagged in the v0.5.345 CHANGELOG entry:
…but no follow-up issue was filed. Hit it via macOS while building a real app, so the "doesn't crash today by luck" assumption doesn't hold for the body rendering — the dimensions work but the body handle is being misinterpreted.
Environment
Minimal repro
Expected: click "Open sheet" → modal sheet appears with "Hello from inside the sheet" and an OK button.
Actual: modal sheet appears at 400×240, but it is completely blank — the title text and OK button are not rendered. The sheet IS in the AppKit window list (
CGWindowListCopyWindowInfoshows a Mango-owned window at the expected size) but contains no visible children.I verified the
cardwidget is well-formed by adding it to a regular window — the title + button render normally there.Workaround I'm using in MangoQuery/app
For modal-style dialogs I switched to either:
NSAlert via
alertWithButtons(title, message, buttons[], cb)— works perfectly for yes/no destructive confirmations (drop collection, bulk delete, etc.).ZStack overlay over
appBodyfor richer panels like the Cmd+K command palette:Then
showCommandPalette()fillspaletteOverlaywith the card and flipswidgetSetHidden(..., 0).Both work, but neither gives the native sheet animation/positioning users expect on macOS.
Related (same arg-shape mismatch family)
From the same v0.5.345 CHANGELOG paragraph:
Picker,tabbarAddTab,frameSplitCreate,TextAreaconstructor. Worth checking if these are tracked elsewhere — if not, may be worth one umbrella tracking issue or filing them at the same time.Cross-link
Worked around in MangoQuery/app commit
8fd84f8— see the commit message body for context on the user-visible impact (Cmd+K palette and destructive-confirm dialogs were appearing blank on every launch).