From 34e0064f2cb91ee027bf45610cb4db21abad6061 Mon Sep 17 00:00:00 2001 From: dev Date: Tue, 26 May 2026 19:57:46 +0200 Subject: [PATCH] feat(toast): explicit persistence: 'transient' on signal-announce event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documents the deliberate choice to keep the announce event's perceptual projection transient even though the canonical book §6.2 table would suggest `untilFix` for `signal + risk` or `untilAction` for `signal + threat`. Rationale: the Toast component owns its own lifecycle via `Toast.Provider`'s auto-dismiss timer + user dismiss. The `data-event-*` projection is a one-shot pulse when the toast enters. Persistence of the toast surface itself lives in `data-state` (open/closed) on the Item, not in the signal projection. Found via audit of all `verb: 'warn' | 'alert' | 'notify'` events across `src/uix/morfo/components/*`. Toast was the only one without an explicit persistence declaration — annotated now so the choice is intentional rather than implicit-default. (`words.signal-invalid-input` also lacks persistence but it belongs to the in-flight words editor work tracked separately by the user.) Co-Authored-By: Claude Opus 4.7 (1M context) --- src/uix/morfo/components/toast.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/uix/morfo/components/toast.ts b/src/uix/morfo/components/toast.ts index 640587d57..4739f6cca 100644 --- a/src/uix/morfo/components/toast.ts +++ b/src/uix/morfo/components/toast.ts @@ -21,6 +21,14 @@ export const toastMorfo = { } }, { + // Persistence: explicit `transient` even though the book §6.2 + // canon would imply `untilFix` / `untilAction` for `signal + + // risk` / `signal + threat`. The Toast component owns its own + // lifecycle via `Toast.Provider`'s auto-dismiss timer + user + // dismiss; the `data-event-*` projection is a one-shot pulse + // when the toast enters. Persistence of the toast surface + // itself lives in `data-state` (open/closed) on the Item, not + // in the signal projection. name: 'announce', semantic: { family: 'signal', @@ -31,7 +39,8 @@ export const toastMorfo = { fromProp: 'intent', default: 'neutral', supported: INTENTS - } + }, + persistence: 'transient' } }, {