Skip to content

feat(apollo-react): add NodeManifestPanel with parameter form (Phase 1)#760

Draft
1980computer wants to merge 3 commits into
mainfrom
add-properties-panel-form-manifest
Draft

feat(apollo-react): add NodeManifestPanel with parameter form (Phase 1)#760
1980computer wants to merge 3 commits into
mainfrom
add-properties-panel-form-manifest

Conversation

@1980computer
Copy link
Copy Markdown
Collaborator

Summary

  • New NodeManifestPanel — a docked, main-UI panel (not floating) for editing node parameters. Takes a PropertiesManifest with a parameters array and renders tab-based form with Parameters / Error handling / Advanced tabs.
  • New ParameterField — manifest-driven field row component supporting text, number, boolean (toggle), and select types. Phase 1 is UI only; variable binding (Phase 2) will add the {x} bind button and variable picker.
  • Migrated NodePropertiesPanel from @emotion/styled to Tailwind CSS as required by CLAUDE.md when significantly editing a component. The NodePropertiesPanel.styles.ts file is deleted.
  • Story titles updated — existing NodePropertiesPanel story renamed to Canvas/Components/Panels/Node Flyout Panel to distinguish from the new Canvas/Components/Panels/Node Manifest Panel.

What this is NOT (Phase 2)

The ParameterField deliberately has no variable binding in this PR. Phase 2 will add:

  • {x} bind button that opens a variable picker popover
  • Drag-and-drop from a variables list
  • Bound value display as a variable pill (varName = value)

Variables architecture decision: React context (matching flow-workbench's VariablesContext pattern), not component props, so the schema stays static as the variable list changes.

Test plan

  • View Canvas/Components/Panels/Node Manifest Panel > HttpRequest — see node header, three tabs, five parameter fields with correct types
  • View Canvas/Components/Panels/Node Manifest Panel > HumanTask — see required field asterisk
  • View Canvas/Components/Panels/Node Manifest Panel > Interactive — edit fields and watch live state update below
  • View Canvas/Components/Panels/Node Manifest Panel > NoParameters — see empty state message
  • View Canvas/Components/Panels/Node Flyout Panel > Default — existing story still works, panel opens on node click

🤖 Generated with Claude Code

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (PT)
apollo-design 🟢 Ready Preview, Logs May 29, 2026, 03:35:12 PM
apollo-docs 🟢 Ready Preview, Logs May 29, 2026, 03:35:12 PM
apollo-landing 🟢 Ready Preview, Logs May 29, 2026, 03:35:12 PM
apollo-ui-react 🟢 Ready Preview, Logs May 29, 2026, 03:35:12 PM
apollo-vertex 🟢 Ready Preview, Logs May 29, 2026, 03:35:12 PM

@github-actions github-actions Bot added the size:XL 500-999 changed lines. label May 29, 2026
@1980computer 1980computer marked this pull request as draft May 29, 2026 18:07
@github-actions
Copy link
Copy Markdown
Contributor

Dependency License Review

  • 1901 package(s) scanned
  • ✅ No license issues found
  • ⚠️ 2 package(s) excluded (see details below)
License distribution
License Packages
MIT 1671
ISC 89
Apache-2.0 55
BSD-3-Clause 27
BSD-2-Clause 23
BlueOak-1.0.0 8
MPL-2.0 4
MIT-0 3
CC0-1.0 3
MIT OR Apache-2.0 2
(MIT OR Apache-2.0) 2
Unlicense 2
LGPL-3.0-or-later 1
Python-2.0 1
CC-BY-4.0 1
(MPL-2.0 OR Apache-2.0) 1
Unknown 1
Artistic-2.0 1
(WTFPL OR MIT) 1
(BSD-2-Clause OR MIT OR Apache-2.0) 1
CC-BY-3.0 1
0BSD 1
(MIT OR CC0-1.0) 1
MIT AND ISC 1
Excluded packages
Package Version License Reason
@img/sharp-libvips-linux-x64 1.2.4 LGPL-3.0-or-later LGPL pre-built binary, not linked
khroma 2.1.0 Unknown MIT per GitHub repo, missing license field in package.json

@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch 3 times, most recently from a9b2cfc to c862813 Compare May 29, 2026 18:34
@github-actions github-actions Bot added size:XXL 1,000+ changed lines. app:storybook and removed size:XL 500-999 changed lines. labels May 29, 2026
@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch 2 times, most recently from b12cb77 to b0f7264 Compare May 29, 2026 18:47
@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch 9 times, most recently from 96c6e06 to aaf1f3f Compare May 29, 2026 20:05
@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch 2 times, most recently from 5705e3b to 3b7ae8b Compare May 29, 2026 20:29
render: () => {
const [panels, setPanels] = useState<NodePropertyPanelItem[]>(DEFAULT_PANELS);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('auto-hide');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>(undefined);
render: () => {
const [panels, setPanels] = useState<NodePropertyPanelItem[]>(DEFAULT_PANELS);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('auto-hide');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>(undefined);
{ label: 'Output', enabled: true },
]);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('always-persist');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>('right');
render: () => {
const [panels, setPanels] = useState<NodePropertyPanelItem[]>(DEFAULT_PANELS);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('auto-hide');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>(undefined);
render: () => {
const [panels, setPanels] = useState<NodePropertyPanelItem[]>(DEFAULT_PANELS);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('auto-hide');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>(undefined);
{ label: 'Output', enabled: true },
]);
const [behavior, setBehavior] = useState<NodePropertyPanelBehavior>('always-persist');
const [layout, setLayout] = useState<NodePropertyPanelLayout | undefined>('right');
@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch from 3b7ae8b to 38b0e57 Compare May 29, 2026 22:17
1980computer and others added 3 commits May 29, 2026 15:30
…anel to Tailwind

Phase 1 of the Properties Panel form manifest feature:

- New NodeManifestPanel — docked main-UI panel with Parameters / Error
  handling / Advanced tabs and manifest-driven ParameterField list
  supporting text, number, boolean, and select types
- NodePropertiesPanel migrated from @emotion/styled to Tailwind CSS;
  story title updated to "Node Flyout Panel" to distinguish it from
  the new main-UI panel variant
- ParameterField component (UI-only; variable binding in Phase 2)
- Storybook stories: HttpRequest, HumanTask, AiAgent, NoParameters,
  Interactive with live state output

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a new pill-trigger + popover control for configuring canvas panel
visibility, behavior (auto-hide / always-persist), default layout, and
saved presets. Pixel-matched to the flow-prototype reference using
apollo-wind Future design tokens. Pure Tailwind, no Emotion.

Story registered under Canvas/Components/Controls/CanvasPropertiesPanel
with Default, States, and WithPresets variants.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… > Panels

Move CanvasPropertiesPanel story to Canvas/Components/Panels/Node Property Panel
alongside Node Manifest Panel and Node Flyout Panel, and add explicit storySort
order so they appear as: Node Property Panel → Node Manifest Panel → Node Flyout Panel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@1980computer 1980computer force-pushed the add-properties-panel-form-manifest branch from 38b0e57 to 346eab9 Compare May 29, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants