From ca84079a21d6ca4301a2ff5b9fc2a54bf5a61df1 Mon Sep 17 00:00:00 2001 From: iris Date: Mon, 17 Aug 2026 21:25:51 +0200 Subject: [PATCH] frontend: add WarnBanner Preact component, compose ApiErrorPanel from it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mara, on review: "i want each component to import its own css file itself[;] if you need a bunch of extra css externally, its not a proper component ... you may need to migrate other components that you would want to use first". WarnBanner is the Preact-component successor to the shadow-DOM custom element (same three-tier info/warning/error visual language, colours copied faithfully from hive-warn.css). ApiErrorPanel now composes it instead of owning a copy of the border/colour/pulse rules itself — its own CSS is back down to just the layout that's actually specific to it (heading, copy button, detail text). Re-verified with a fresh mock-server screenshot: same rendered output as before, now via composition instead of a duplicated banner shape. --- frontend/packages/shared/package.json | 4 +- .../src/api-error-panel/ApiErrorPanel.tsx | 24 ++++++------ .../src/api-error-panel/api-error-panel.css | 27 +++---------- .../shared/src/warn-banner/WarnBanner.css | 36 ++++++++++++++++++ .../shared/src/warn-banner/WarnBanner.tsx | 38 +++++++++++++++++++ 5 files changed, 94 insertions(+), 35 deletions(-) create mode 100644 frontend/packages/shared/src/warn-banner/WarnBanner.css create mode 100644 frontend/packages/shared/src/warn-banner/WarnBanner.tsx diff --git a/frontend/packages/shared/package.json b/frontend/packages/shared/package.json index 8584935c..02bde7a9 100644 --- a/frontend/packages/shared/package.json +++ b/frontend/packages/shared/package.json @@ -34,7 +34,9 @@ "./jobq-rollup.css": "./src/jobq-rollup/jobq-rollup.css", "./api-error.js": "./src/api-error.ts", "./api-error-panel.js": "./src/api-error-panel/ApiErrorPanel.tsx", - "./api-error-panel.css": "./src/api-error-panel/api-error-panel.css" + "./api-error-panel.css": "./src/api-error-panel/api-error-panel.css", + "./warn-banner.js": "./src/warn-banner/WarnBanner.tsx", + "./warn-banner.css": "./src/warn-banner/WarnBanner.css" }, "files": [ "src/" diff --git a/frontend/packages/shared/src/api-error-panel/ApiErrorPanel.tsx b/frontend/packages/shared/src/api-error-panel/ApiErrorPanel.tsx index 8034b42f..f0ebb3ce 100644 --- a/frontend/packages/shared/src/api-error-panel/ApiErrorPanel.tsx +++ b/frontend/packages/shared/src/api-error-panel/ApiErrorPanel.tsx @@ -8,22 +8,20 @@ // *that string was the entire diagnosis* — truncating it defeats the // point) — plus a copy button for pasting straight into a bug report. // -// Deliberately NOT built on ``, despite matching its visual -// language, because that custom element's CSS-as-text import only -// resolves under a build with `loader: 'text'` for `.css` (dashboard's); -// swarm-ui's default `css` loader leaves its shadow `