Skip to content

feat: tabbed node property panel (MetadataForm stepVariant="tabs" + NodePropertyPanel)#835

Open
CalinaCristian wants to merge 2 commits into
mainfrom
feat/apollo-wind-metadata-form-tabs
Open

feat: tabbed node property panel (MetadataForm stepVariant="tabs" + NodePropertyPanel)#835
CalinaCristian wants to merge 2 commits into
mainfrom
feat/apollo-wind-metadata-form-tabs

Conversation

@CalinaCristian

@CalinaCristian CalinaCristian commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

What

Adds a tabbed presentation for node property forms, in two layers.

1. apollo-windMetadataForm stepVariant="tabs"

  • New stepVariant?: 'wizard' | 'tabs' (default 'wizard'; no change to existing forms).
  • 'tabs' renders a multi-step FormSchema's steps as a tab bar over a single RHF instance — values and validation are shared across tabs (no per-tab form state loss). Hides empty / conditioned-out steps, clamps the active tab to a still-visible step (and persists the clamp so a reappearing step doesn't snap back), and offers an opt-in full-bleed underline via --mf-content-inset (default 0 → underline at content width, safe for any consumer).
  • Unit tests + a Forms/Examples → Tabbed Steps story.

2. apollo-reactNodePropertyPanel

  • Presentational docked properties panel: optional title bar, node identity row (icon / label / category + an action slot), and one MetadataForm (stepVariant="tabs").
  • Caller-driven: takes schema + plugins directly (no manifest fetch / no NodeRegistryProvider requirement), forwards plugins so real-time change handling and custom field components stay consumer-side, resetKey for per-node remount, disabled, and a single contentInset controlling content padding + the tab underline. No Submit button by default (live-edit surface).
  • Unit tests + stories (with / without title bar, and a no-parameters trigger).

Relationship to #809

Supersedes the NodePropertyPanel from #809. That version fetched manifest.form via useNodeManifest (required a NodeRegistryProvider) and rendered one MetadataForm per tab — losing field state on tab switch, dropping initialData, and showing a per-tab Submit. This branch moves the tab presentation into MetadataForm (single instance) and makes NodePropertyPanel a thin chrome wrapper that takes schema + plugins. That contract is what makes it consumable from flow-workbench (validated in a dev-published POC).

Test plan

  • apollo-wind: 17/17 metadata-form tests (incl. tabs render + value retention across tab switch).
  • apollo-react: 7/7 NodePropertyPanel tests.
  • Typecheck + Biome clean on both packages.
  • Storybook: Forms/Examples → Tabbed Steps, Components/Panels/Node Property Panel.

Note: local storybook dev is currently broken on main (vite 8.0.16 → rolldown 1.0.3 dev-optimizer init_*-not-defined crash). That's pre-existing and unrelated to this feature; CI's storybook build is unaffected. Tracking the rolldown fix separately.

🤖 Generated with Claude Code

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a tabbed presentation for multi-step node property forms by introducing MetadataForm stepVariant="tabs" in @uipath/apollo-wind, then composing it into a new NodePropertyPanel chrome component in @uipath/apollo-react. Also pins Vite to 8.0.13 in the Storybook/Landing apps to avoid the reported storybook dev crash.

Changes:

  • Add stepVariant?: 'wizard' | 'tabs' to MetadataForm, implementing a single-RHF-instance tabbed steps UI (with tests + story).
  • Introduce NodePropertyPanel (optional title bar, node identity header, action slot) rendering one tabbed MetadataForm from caller-provided schema + plugins (with tests + stories).
  • Pin Vite to 8.0.13 for Storybook/Landing (and lockfile) to restore local dev behavior.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pnpm-lock.yaml Updates lockfile to reflect Vite 8.0.13 pin (and associated dependency graph).
packages/apollo-wind/src/components/forms/metadata-form.tsx Adds stepVariant="tabs" rendering path and new TabbedStepForm implementation.
packages/apollo-wind/src/components/forms/metadata-form.test.tsx Adds unit coverage for tab rendering + value retention across tab switches.
packages/apollo-wind/src/components/forms/metadata-form.stories.tsx Adds a “Tabbed Steps” Storybook example schema and story.
packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.types.ts Defines the new panel’s public prop contract (schema/plugins/resetKey/contentInset/etc.).
packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.tsx Implements the panel chrome and embeds MetadataForm stepVariant="tabs".
packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.test.tsx Adds unit tests for title bar, close behavior, header, tabs, empty state, and submit suppression.
packages/apollo-react/src/canvas/components/NodePropertyPanel/NodePropertyPanel.stories.tsx Adds Storybook stories for common panel configurations (with/without title bar, no-parameters schema).
packages/apollo-react/src/canvas/components/NodePropertyPanel/index.ts Adds barrel exports for the new component and its props type.
packages/apollo-react/src/canvas/components/index.ts Re-exports NodePropertyPanel from the canvas components entrypoint.
apps/storybook/package.json Pins Vite to 8.0.13 for Storybook app devDependencies.
apps/landing/package.json Pins Vite to 8.0.13 for Landing app devDependencies.
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

Comment thread packages/apollo-wind/src/components/forms/metadata-form.tsx
@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Review Updated (PT)
apollo-design 🟢 Ready Preview, Logs Jun 18, 2026, 02:06:58 AM
apollo-docs 🟢 Ready Preview, Logs Jun 18, 2026, 02:06:58 AM
apollo-landing 🟢 Ready Preview, Logs Jun 18, 2026, 02:06:58 AM
apollo-vertex 🟢 Ready Preview, Logs Jun 18, 2026, 02:06:58 AM

@github-actions github-actions Bot added the size:XXL 1,000+ changed lines. label Jun 18, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Dependency License Review

  • 1942 package(s) scanned
  • ✅ No license issues found
  • ⚠️ 2 package(s) excluded (see details below)
License distribution
License Packages
MIT 1712
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

@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage + size by package

Per-package coverage and bundle size on this PR. New-line coverage = of the source lines this PR adds or changes, the % hit by tests.

Package Coverage New-line coverage Packed (gzip) Unpacked vs main
@uipath/apollo-core 9.0% 43.82 MB 57.31 MB ±0
@uipath/apollo-react 34.8% 22.7% (5/22) 7.24 MB 27.47 MB +3.2 KB
@uipath/apollo-wind 38.6% 93.8% (15/16) 324.5 KB 2.23 MB +1.4 KB
@uipath/ap-chat 85.8% 43.36 MB 55.68 MB ±0

"Coverage" is each package's own coverage.include scope (e.g. apollo-core instruments only scripts/). "Packed"/"Unpacked" come from npm pack --dry-run and only cover built packages — "—" means not measured this run (package not affected / not built). "vs main" is the packed (gzipped) delta against the last successful main build (the package-sizes artifact from the Release workflow); "—" there means no main baseline was available this run. The baseline is main's latest build, not this PR's exact merge-base, so it includes any drift since the branch diverged. Packages with no vitest config are omitted.

Copilot AI review requested due to automatic review settings June 18, 2026 08:50
@CalinaCristian CalinaCristian force-pushed the feat/apollo-wind-metadata-form-tabs branch from 2d2d9e4 to 49a4e28 Compare June 18, 2026 08:50
@github-actions github-actions Bot added size:XL 500-999 changed lines. and removed app:storybook app:landing size:XXL 1,000+ changed lines. labels Jun 18, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Comment thread packages/apollo-wind/src/components/forms/metadata-form.tsx
Comment thread packages/apollo-wind/src/components/forms/metadata-form.tsx Outdated
CalinaCristian and others added 2 commits June 18, 2026 02:02
Render a multi-step FormSchema as a tab bar over a single form instance (values and
validation shared across tabs), alongside the existing wizard presentation. Hides
empty/conditioned-out steps, clamps the active tab to a still-visible step, and supports
an optional full-bleed underline via the --mf-content-inset CSS var (default 0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Presentational docked properties panel: optional title bar, node identity row
(icon/label/category + action slot), and a single MetadataForm rendered with
stepVariant="tabs". The caller supplies schema + plugins, so real-time change handling
and custom fields stay consumer-side; no Submit by default (live-edit surface). Tab and
content padding plus the underline full-bleed derive from one contentInset prop.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@CalinaCristian CalinaCristian force-pushed the feat/apollo-wind-metadata-form-tabs branch from 49a4e28 to 9bfc3f8 Compare June 18, 2026 09:02
@UiPath UiPath deleted a comment from github-actions Bot Jun 18, 2026
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