You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the #403/#404 Phase A push. HLE moves to an explicit-save document model (matching Glider): the .hyperaudio file is the durable copy, OPFS is crash recovery only.
Save button in the navbar with a dirty indicator (dot/filled state), wired to the same save path as FILE → Save Project; ⌘/Ctrl-S binding.
beforeunload warning when dirty — the quit-without-saving guard.
Native bridge hook: before falling back to <a download>, offer the finished archive to a registered bridge (e.g. window.hyperaudioProjectBridge.save(blob, suggestedName) or a cancelable custom event carrying the Blob). An embedding native app registers the bridge at startup and writes through its own filesystem — retiring injected save UI and keeping one save path across web and native. Document the hook's shape alongside the format spec.
The blocking confirm() dialogs in the save/open flow can become in-app modals later — not blocking for Phase A.
Part of the #403/#404 Phase A push. HLE moves to an explicit-save document model (matching Glider): the .hyperaudio file is the durable copy, OPFS is crash recovery only.
beforeunloadwarning when dirty — the quit-without-saving guard.#save-localstorage-filenameas the title; that field was deleted with the legacy dialogs (Simplify the FILE-menu save/load dialogs once Recents autosaves #436/Remove the FILE-menu Save/Load Local Storage dialogs #439). Add an editable project-title field (defaulting from the opened filename or media name) and use it for the suggested save filename.<a download>, offer the finished archive to a registered bridge (e.g.window.hyperaudioProjectBridge.save(blob, suggestedName)or a cancelable custom event carrying the Blob). An embedding native app registers the bridge at startup and writes through its own filesystem — retiring injected save UI and keeping one save path across web and native. Document the hook's shape alongside the format spec.confirm()dialogs in the save/open flow can become in-app modals later — not blocking for Phase A.