mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 03:38:47 +00:00
hp-confirm sat at the end of a chain of early returns, so in onboarding («no spaces yet»), in the fixed-floor states and without a space it did not exist at all: the trash button next to a saved plan was dead and the promise hung forever, because the decision event had no source in the DOM. An already open dialog vanished the moment the card slipped into one of those branches, leaving the caller waiting for a resolution that could never come. Before #32 a browser confirm() worked there. render() is now a wrapper: it takes the body — the old chain, unchanged, as _renderBody — and renders the confirmation beside it. That fixes the class rather than the instance: a branch added later cannot lose the dialog again. noChange and nothing are passed through untouched, since neither may be wrapped in a template; in those states _confirmDanger refuses the request outright instead of leaving it pending, which is the honest answer while the card is not on screen and the user has pressed nothing. _tapConfirm and _vacCalConfirm deliberately stay where they are. They share the same final branch, but they have no promise (a synchronous exec, a dialog closed by hp-close), so the defect cannot occur there, and their entry points require a drawn plan. Proven by a separate smoke rather than an addition to smoke_danger_confirmation: that file keeps deliberately incomplete dialog fixtures open, and the extra re-renders this change needs make them throw. The new smoke runs under touch emulation, because TOUCH-SUPPORT § Safety floor forbids bypassing a destructive confirmation and the broken branch pierced that floor on finger as surely as on mouse. Reverting the wrapper reddens it. User-Visible: yes Issue: #402