Move the remaining panel explanations into tooltips

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YrQnKV3bnQd4K342y8tKj
This commit is contained in:
2026-08-31 10:38:16 +02:00
co-authored by Claude Opus 5
parent 954d90fbf7
commit 2422a9b22b
4 changed files with 66 additions and 39 deletions
+22 -15
View File
@@ -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 (
<div key={key} className="grid gap-1.5">
<Label className="text-sm font-normal">{label}</Label>
<FieldLabel
help={
property.description ||
"Stored in the secrets store, never in the flow file."
}
>
{label}
</FieldLabel>
<Select
value={reference?.$secret ?? ""}
onValueChange={(name) =>
@@ -801,12 +814,11 @@ function ParamsForm({
))}
</SelectContent>
</Select>
<p className="text-xs text-muted-foreground">
{secrets.length
? property.description ||
"Stored in the secrets store, never in the flow file."
: "No secrets stored yet."}
</p>
{secrets.length ? null : (
<p className="text-xs text-muted-foreground">
No secrets stored yet.
</p>
)}
</div>
)
}
@@ -819,9 +831,9 @@ function ParamsForm({
property.type === "integer" || property.type === "number"
return (
<div key={key} className="grid gap-1.5">
<Label htmlFor={`param-${key}`} className="text-sm font-normal">
<FieldLabel htmlFor={`param-${key}`} help={property.description}>
{label}
</Label>
</FieldLabel>
<SuggestInput
id={`param-${key}`}
className="h-8 text-sm"
@@ -831,11 +843,6 @@ function ParamsForm({
empty="Nothing like that in use yet."
onChange={(next) => set(key, numeric ? Number(next) : next)}
/>
{property.description ? (
<p className="text-xs text-muted-foreground">
{property.description}
</p>
) : null}
{key === "cron" ? (
<CronHelp
params={params}
@@ -2,6 +2,7 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import { useState } from "react"
import { CloudService } from "@/client"
import { InfoTip } from "@/components/Flow/SidePanel"
import { Button } from "@/components/ui/button"
import {
Card,
@@ -154,15 +155,25 @@ export function RemoteAccess() {
<div className="flex flex-col gap-4">
<div>
<h3 className="font-medium">Remote users</h3>
<div className="flex items-center gap-1">
<h3 className="font-medium">Remote users</h3>
<InfoTip label="Remote users">
They get a user of their own here, not yours, and never a
superuser, so they cannot pass access on.
</InfoTip>
</div>
<p className="text-sm text-muted-foreground">
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.
</p>
</div>
<div className="grid gap-2">
<Label htmlFor="join-code">Code</Label>
<div className="flex items-center gap-1">
<Label htmlFor="join-code">Code</Label>
<InfoTip label="Code">
Added users appear under Admin → Users; deleting them there
ends their access.
</InfoTip>
</div>
<Input
id="join-code"
value={joinCode}
@@ -174,8 +185,6 @@ export function RemoteAccess() {
/>
<p className="text-xs text-muted-foreground">
They get a code at fluksio.com → Instances → Join an instance.
Added users appear under Admin → Users; deleting them there
ends their access.
</p>
</div>
<div>