From 61dd3b377dcf449faa8a0b66af757e73f2819196 Mon Sep 17 00:00:00 2001 From: dvcolomban Date: Mon, 10 Aug 2026 12:12:17 +0200 Subject: [PATCH 1/4] feat(core): render message actions as buttons on toast notifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Toasts only exposed the dismiss ✕ button; an entry's own `actions` (e.g. an `activate` action that focuses a dock) were only rendered in the messages panel's detail view. Render them as buttons in the toast's `#actions` slot too, dispatching the same way the messages panel does: `switchEntry(action.activate.dockId)`, the local counterpart of the `hub:docks:activate` RPC our shell already handles in `context.ts`. --- .../display/ToastOverlay.stories.ts | 20 +++++++++++++++++++ .../components/display/ToastOverlay.vue | 19 ++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/packages/core/src/client/webcomponents/components/display/ToastOverlay.stories.ts b/packages/core/src/client/webcomponents/components/display/ToastOverlay.stories.ts index 08b291914..46f6b8668 100644 --- a/packages/core/src/client/webcomponents/components/display/ToastOverlay.stories.ts +++ b/packages/core/src/client/webcomponents/components/display/ToastOverlay.stories.ts @@ -36,3 +36,23 @@ export const Stack: Story = { }, }), } + +/** A toast whose message carries an `activate` action, rendered alongside the dismiss control. */ +export const WithAction: Story = { + render: () => ({ + setup() { + onMounted(() => { + addToast(message({ + level: 'info', + message: 'New a11y violation detected', + notify: true, + autoDismiss: 10 ** 7, + actions: [ + { id: 'view', label: 'View', kind: 'activate', activate: { dockId: 'devframes-plugin-messages' } }, + ], + })) + }) + return () => h(ToastOverlay) + }, + }), +} diff --git a/packages/core/src/client/webcomponents/components/display/ToastOverlay.vue b/packages/core/src/client/webcomponents/components/display/ToastOverlay.vue index 9151b1bff..13939ee3a 100644 --- a/packages/core/src/client/webcomponents/components/display/ToastOverlay.vue +++ b/packages/core/src/client/webcomponents/components/display/ToastOverlay.vue @@ -1,4 +1,5 @@