From 2422a9b22bc0132094d6002daa61869ed4b6bf17 Mon Sep 17 00:00:00 2001 From: stroblme Date: Mon, 31 Aug 2026 10:38:16 +0200 Subject: [PATCH] Move the remaining panel explanations into tooltips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A node setting's description comes off the backend JSON schema, so every node type's panel still printed a paragraph under each field. It moves to the field label, which is the change that makes the node panel read as a list rather than a page. Alerts, Modules and Remote access follow the same shape. A page keeps a one-line description under its h1 — a page is arrived at rather than scanned — and the rest goes behind the heading's tooltip. Verified on the running stack: the tooltip opens on tap in the phone sheet and on hover on the desktop panel. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015YrQnKV3bnQd4K342y8tKj --- frontend/src/components/Flow/NodePanel.tsx | 37 +++++++++++-------- .../components/UserSettings/RemoteAccess.tsx | 23 ++++++++---- frontend/src/routes/_layout/alerts.tsx | 29 +++++++++------ frontend/src/routes/_layout/modules.tsx | 16 +++++--- 4 files changed, 66 insertions(+), 39 deletions(-) diff --git a/frontend/src/components/Flow/NodePanel.tsx b/frontend/src/components/Flow/NodePanel.tsx index 9d7c747..cfafc0b 100644 --- a/frontend/src/components/Flow/NodePanel.tsx +++ b/frontend/src/components/Flow/NodePanel.tsx @@ -49,7 +49,13 @@ import { secretsQueryOptions, useParamSuggestions, } from "./queries" -import { InfoTip, PANEL_SECTION, PanelTitle, SidePanel } from "./SidePanel" +import { + FieldLabel, + InfoTip, + PANEL_SECTION, + PanelTitle, + SidePanel, +} from "./SidePanel" const NodeEditor = lazy(() => import("./NodeEditor")) @@ -782,7 +788,14 @@ function ParamsForm({ const reference = (params[key] ?? null) as { $secret?: string } | null return (
- + + {label} + -

- {secrets.length - ? property.description || - "Stored in the secrets store, never in the flow file." - : "No secrets stored yet."} -

+ {secrets.length ? null : ( +

+ No secrets stored yet. +

+ )}
) } @@ -819,9 +831,9 @@ function ParamsForm({ property.type === "integer" || property.type === "number" return (
- + set(key, numeric ? Number(next) : next)} /> - {property.description ? ( -

- {property.description} -

- ) : null} {key === "cron" ? (
-

Remote users

+
+

Remote users

+ + They get a user of their own here, not yours, and never a + superuser, so they cannot pass access on. + +

- Let someone else reach this instance through the portal. They - get a user of their own here — not yours, and never a - superuser, so they cannot pass access on. + Let someone else reach this instance through the portal.

- +
+ + + Added users appear under Admin → Users; deleting them there + ends their access. + +

They get a code at fluksio.com → Instances → Join an instance. - Added users appear under Admin → Users; deleting them there - ends their access.

diff --git a/frontend/src/routes/_layout/alerts.tsx b/frontend/src/routes/_layout/alerts.tsx index 625172b..b426827 100644 --- a/frontend/src/routes/_layout/alerts.tsx +++ b/frontend/src/routes/_layout/alerts.tsx @@ -4,6 +4,7 @@ import { Bell, BellOff, Plus, Send, Trash2 } from "lucide-react" import { useState } from "react" import { type AlertsConfig, AlertsService, type Channel } from "@/client" +import { InfoTip } from "@/components/Flow/SidePanel" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { Input } from "@/components/ui/input" @@ -161,9 +162,7 @@ function Alerts() {

Alerts

- Where the engine goes when something breaks. A channel is somewhere to - send to; a rule says which failures go to which channels. The same - fault repeating is held back until its cooldown passes. + Where the engine goes when something breaks.

{data ? : null} @@ -229,7 +228,14 @@ function AlertsForm({ initial }: { initial: AlertsConfig }) {
-

Channels

+
+

Channels

+ + Somewhere to send to. A setting can hold{" "} + {`{"$secret": "name"}`} instead + of the value itself, and the stored secret is used. + +
-

Rules

+
+

Rules

+ + Which failures go to which channels. The same fault repeating is + held back until its cooldown passes. + +