Skip to content

feat(apollo-react): IA updates, Node Flyout Panel migration, and NodePropertyTrigger#781

Merged
CalinaCristian merged 17 commits into
mainfrom
ia-and-panel-nodes
Jun 12, 2026
Merged

feat(apollo-react): IA updates, Node Flyout Panel migration, and NodePropertyTrigger#781
CalinaCristian merged 17 commits into
mainfrom
ia-and-panel-nodes

Conversation

@1980computer

@1980computer 1980computer commented Jun 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

Focused PR covering Canvas panel IA reorganisation, Node Flyout Panel Tailwind migration, and the new NodePropertyTrigger control component. Intentionally scoped — Node Manifest Panel and Expression Editor are in a separate PR (#760).

NodePropertyTrigger (new)

A pill trigger (label + sliders button) whose popover is built on @uipath/apollo-wind's Radix DropdownMenu — the same primitive the canvas already composes in CanvasDropdownMenu / NodeContextMenu (modal={false} for the React Flow foreignObject reason documented there). Positioning, dismissal (outside click / Escape), focus management, arrow-key navigation, typeahead, and aria-* wiring all come from the primitive instead of hand-rolled listeners.

Two-tier API:

  • Prefab (data props)panels, behavior/behaviorOptions, layout/layoutOptions, presets, canSavePreset + callbacks render the canonical panel-options menu. Empty sections collapse entirely (heading + separator); the presets empty state stays while canSavePreset is true. Uncontrolled behavior/layout selections clamp to the current option set at render time, so dynamic option changes can't strand the radio group.
  • Composition (children) — fully replaces the built-in sections for custom structure/ordering/text. Exported design-matched subcomponents: NodePropertyTriggerCheckboxItem (keeps the menu open by default; closeOnSelect opt-out), NodePropertyTriggerRadioItem, NodePropertyTriggerSectionLabel, NodePropertyTriggerSeparator — composable with any wind DropdownMenu* primitive.

Details:

  • Panel items carry an optional stable id; onPanelToggle receives id ?? label, so localized display labels are never the toggle identity.
  • Panel rows are menuitemcheckbox and keep the menu open so several panels can be toggled in one visit; radios and preset apply close on select.
  • Preset apply, rename, and delete are first-class menu items. Rename/delete call preventDefault() so the menu stays open after the action.
  • showMenu={false} renders a label-only pill for secondary triggers (e.g. a Variables pill). The label renders as a non-interactive span when no onPropertiesClick is supplied.
  • Controlled open/onOpenChange supported; uncontrolled by default.
  • Localized via useSafeLingui (same pattern as CanvasZoomControls/StageNode): section headings, presets empty state, save/apply/rename/delete labels, and the Properties/Panel options/option-label defaults all go through canvas.property_trigger.* ids with baked English fallback; entries added to the canvas en.json source catalog. (Note: lingui extract currently fails repo-wide on a pre-existing duplicate message in ap-chat/attachments.tsx — catalog entries were added manually in the same shape as loop-node/stage-node.)
  • All types exported from @uipath/apollo-react/canvas/controls.

NodePropertiesPanel → Node Flyout Panel

  • Migrated from @emotion/styled to Tailwind CSS
  • NodePropertiesPanel.styles.ts deleted
  • All field components (CheckboxField, NumberField, SelectField, TextField) migrated
  • Story renamed to Node Flyout Panel
  • Field colors use documented Canvas CSS variables (--canvas-*) so Canvas theme overrides continue to apply

Panel IA + story renames

  • All panel stories co-located under Canvas > Components > Panels with explicit storySort
  • CollapseConfig story updated to reflect renamed component
  • Orphaned NodeInspector story removed (was at old Components/Panels path)

What this is NOT

Node Manifest Panel, ParameterField, and ExpressionField are in PR #760.

Test plan

  • Canvas > Components > Panels shows Node Property Trigger → Node Flyout Panel in correct order
  • Node Property Trigger: popover opens from the sliders button (right-aligned, 8px offset), closes on outside click / Escape / re-click; arrow keys navigate items
  • Prefab: behaviorOptions / layoutOptions / panels / presets props reflected; empty sections collapse (no orphan headings)
  • Composition: Composed story renders custom sections via children; LabelOnlyPill story renders the menu-less pill
  • Panel toggles keep the menu open; radios and preset apply close it; preset rename/delete keep it open
  • Node Flyout Panel renders correctly after Tailwind migration — no visual regressions
  • Unit: NodePropertyTrigger.test.tsx — 27 tests passing
  • No CI format/lint failures

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings June 5, 2026 13:51
@github-actions

github-actions Bot commented Jun 5, 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 11, 2026, 05:54:56 PM
apollo-docs 🟢 Ready Preview, Logs Jun 11, 2026, 05:54:56 PM
apollo-landing 🟢 Ready Preview, Logs Jun 11, 2026, 05:54:56 PM
apollo-vertex 🟢 Ready Preview, Logs Jun 11, 2026, 05:54:56 PM

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Dependency License Review

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

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

This PR introduces a new Canvas panel control UI and continues the Canvas panel IA re-organization, while migrating the existing NodePropertiesPanel (now “Node Flyout Panel” in Storybook) off Emotion and onto Tailwind/AP Wind conventions.

Changes:

  • Added the new NodePropertyPanel control (pill trigger + popover/portal menu) and Storybook stories.
  • Migrated NodePropertiesPanel and its field components from Emotion-styled wrappers to Tailwind classes.
  • Updated Storybook panel naming / ordering and removed the standalone NodeInspector story file (but reintroduced an inspector story inside the flyout panel stories).

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
packages/apollo-react/src/canvas/controls/NodePropertyPanel/NodePropertyPanel.tsx New NodePropertyPanel control with portaled options menu
packages/apollo-react/src/canvas/controls/NodePropertyPanel/NodePropertyPanel.stories.tsx Stories for the new Node Property Panel
packages/apollo-react/src/canvas/controls/NodePropertyPanel/index.ts Barrel exports for the new control
packages/apollo-react/src/canvas/controls/index.ts Re-export NodePropertyPanel from canvas controls
packages/apollo-react/src/canvas/components/NodePropertiesPanel/NodePropertiesPanel.tsx Tailwind migration of section/field layout wrappers
packages/apollo-react/src/canvas/components/NodePropertiesPanel/NodePropertiesPanel.styles.ts Deleted Emotion styles for the panel/fields
packages/apollo-react/src/canvas/components/NodePropertiesPanel/NodePropertiesPanel.stories.tsx Renamed story + added an “Inspector” story implementation
packages/apollo-react/src/canvas/components/NodePropertiesPanel/index.ts Removed re-export of deleted Emotion styles
packages/apollo-react/src/canvas/components/NodePropertiesPanel/fields/TextField.tsx Tailwind migration of text/textarea field
packages/apollo-react/src/canvas/components/NodePropertiesPanel/fields/SelectField.tsx Tailwind migration of select field
packages/apollo-react/src/canvas/components/NodePropertiesPanel/fields/NumberField.tsx Tailwind migration of number field
packages/apollo-react/src/canvas/components/NodePropertiesPanel/fields/CheckboxField.tsx Tailwind migration of checkbox field
packages/apollo-react/src/canvas/components/NodeInspector.stories.tsx Removed standalone Node Inspector story file
packages/apollo-react/src/canvas/components/CollapseConfig/CollapseConfig.stories.tsx Renamed story title
apps/storybook/.storybook/preview.tsx Updated storySort order for Canvas panel IA
Comments suppressed due to low confidence (1)

packages/apollo-react/src/canvas/components/NodePropertiesPanel/NodePropertiesPanel.stories.tsx:29

  • Story title is still under Components/Panels/..., but panel IA sorting in apps/storybook/.storybook/preview.tsx is defined under Canvas > Components > Panels. As-is, this story won’t land in (or be ordered within) the intended Canvas panel section.
const meta: Meta<typeof NodePropertiesPanel> = {
  title: 'Components/Panels/Node Flyout Panel',
  component: NodePropertiesPanel,
  parameters: { layout: 'fullscreen' },
  decorators: [withCanvasProviders()],
};

@1980computer 1980computer changed the title feat(apollo-react): IA updates and panel node components feat(apollo-react): IA updates, Node Flyout Panel migration, and NodePropertyTrigger Jun 6, 2026
@1980computer 1980computer marked this pull request as ready for review June 6, 2026 03:31
Copilot AI review requested due to automatic review settings June 6, 2026 03:31

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 15 out of 15 changed files in this pull request and generated 6 comments.

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 15 out of 15 changed files in this pull request and generated 9 comments.

Comments suppressed due to low confidence (1)

packages/apollo-react/src/canvas/components/NodePropertiesPanel/NodePropertiesPanel.stories.tsx:29

  • NodePropertiesPanel.stories.tsx declares component: NodePropertiesPanel, but the Inspector story renders NodeInspector instead. This mixes unrelated stories under the "Node Flyout Panel" group and can break autodocs/controls that assume stories render the meta component. The inspector demo should live in its own NodeInspector.stories.tsx (with the updated Panels IA title), or be removed from this meta file.
const meta: Meta<typeof NodePropertiesPanel> = {
  title: 'Components/Panels/Node Flyout Panel',
  component: NodePropertiesPanel,
  parameters: { layout: 'fullscreen' },
  decorators: [withCanvasProviders()],
};

CalinaCristian

This comment was marked as off-topic.

Copilot AI review requested due to automatic review settings June 10, 2026 19:16
Copilot AI review requested due to automatic review settings June 11, 2026 10:51

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 17 out of 17 changed files in this pull request and generated 4 comments.

…o current options

In uncontrolled mode the internal behavior/layout state initializes from
options[0] once; if the option set later changes to one that no longer
contains the selection, the radio group rendered with no checked item.
Clamp at render time (no effect/state-sync) so the selection falls back
to the first available option. Addresses the remaining Copilot review
thread on PR #781.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@CalinaCristian CalinaCristian added the dev-packages Adds dev package publishing on pushes to this PR label Jun 11, 2026
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

📦 Dev Packages

🧹 Dev packages cleaned up after PR close.

Last updated: 2026-06-11 18:20:17 PT

Adds optional onPresetRename — when provided, each preset row renders a
pencil button (before delete) that emits the preset and keeps the menu
open, with the same pointerdown/up stoppers so Radix's pointerup-select
doesn't apply the preset. The naming/rename dialog itself is consumer
UX (fires the callback only). Localized via the established
useSafeLingui pattern (canvas.property_trigger.rename_preset).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 11, 2026 12:43

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 17 out of 17 changed files in this pull request and generated 2 comments.

CalinaCristian added a commit that referenced this pull request Jun 11, 2026
Backs out the two commits merged from PR #760 so PR #781 no longer carries the approved

NodePropertyPanel and ProbeCard work.
Copilot AI review requested due to automatic review settings June 11, 2026 23:55

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 17 out of 17 changed files in this pull request and generated 5 comments.

Comment thread apps/storybook/.storybook/preview.tsx
Copilot AI review requested due to automatic review settings June 12, 2026 00:23

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 17 out of 17 changed files in this pull request and generated 5 comments.

@CalinaCristian CalinaCristian merged commit d22ec4b into main Jun 12, 2026
42 of 43 checks passed
CalinaCristian added a commit that referenced this pull request Jun 12, 2026
…o current options

In uncontrolled mode the internal behavior/layout state initializes from
options[0] once; if the option set later changes to one that no longer
contains the selection, the radio group rendered with no checked item.
Clamp at render time (no effect/state-sync) so the selection falls back
to the first available option. Addresses the remaining Copilot review
thread on PR #781.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@CalinaCristian CalinaCristian deleted the ia-and-panel-nodes branch June 12, 2026 01:19
CalinaCristian added a commit that referenced this pull request Jun 12, 2026
…ePropertyTrigger

The review-feedback pass on #781 replaced the inline pencil/trash buttons on
preset rows with indented per-preset 'Rename {label}' / 'Delete {label}' menu
items. Product/design prefers the inline affordance — restore it:

- preset rows render pencil/trash icon buttons inline (pointer events stopped
  so the Radix item's pointerup-select doesn't apply the preset)
- truncated preset labels get a native title tooltip
- catalog: rename_preset / delete_preset ids replace the *_with_label pair
- story: wire onPresetRename (the pencil only renders when provided) with a
  bounded '(n)' counter demo handler

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app:storybook dev-packages Adds dev package publishing on pushes to this PR pkg:apollo-react size:XXL 1,000+ changed lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants