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:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user