a million fixes

This commit is contained in:
Dustin Swan 2026-02-11 22:06:26 -07:00
parent b1696499e5
commit c294d7fd6a
No known key found for this signature in database
GPG key ID: 30D46587E2100467
12 changed files with 140 additions and 168 deletions

View file

@ -60,7 +60,6 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
handleEvent(e);
}
}
rerender();
} catch(error) {
console.error('Component event error:', error);
}
@ -102,7 +101,7 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
event: { _tag: 'FocusAndClick', _0: fullKey }
};
}
return expandStateful(viewUI, path, renderedKeys);
return expandStateful(viewUI, [...path, ui.key], renderedKeys);
}
case 'stack':
@ -186,7 +185,6 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
if (event._tag === 'Rebind') {
rt.rebind(event._0, event._1, event._2);
rerender();
return;
}
@ -198,8 +196,13 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
if (event._tag === 'NoOp')
return;
state = app.update(state)(event);
rerender();
const result = app.update(state)(event);
state = result.state;
if (result.emit && Array.isArray(result.emit)) {
for (const e of result.emit) {
handleEvent(e);
}
}
}
canvas.addEventListener('click', (e) => {
@ -221,6 +224,8 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
handleEvent(event);
}
}
rerender();
});
window.addEventListener('keydown', (e) => {
@ -236,20 +241,37 @@ export function runAppCompiled(app: App, canvas: HTMLCanvasElement, rt: any) {
}
};
// always send to OS first
handleEvent(event);
console.log("keydown", e)
console.log("componentInstances", componentInstances)
console.log("focusedComponentKey", focusedComponentKey)
if (focusedComponentKey) {
// send to focused component
handleComponentEvent(focusedComponentKey, event);
// bubble up to ancestors
for (const key of componentInstances.keys()) {
if (key !== focusedComponentKey && focusedComponentKey.startsWith(key + '.')) {
handleComponentEvent(key, event);
}
}
}
// OS root
handleEvent(event);
e.preventDefault();
rerender();
});
let resizeRAF = 0;
window.addEventListener('resize', () => {
setupCanvas();
rerender();
})
cancelAnimationFrame(resizeRAF);
resizeRAF = requestAnimationFrame(() => {
setupCanvas();
rerender();
});
});
rerender();
}