Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
1985e52
feat(apollo-react): add NodeManifestPanel with parameter form (Phase 1)
1980computer Jun 5, 2026
638f5be
feat(apollo-react): add ProbeCard canvas component
1980computer Jun 6, 2026
20039bc
feat(apollo-react): add CanvasPropertiesPanel control component
1980computer May 28, 2026
0c3a761
feat(apollo-react): migrate NodePropertiesPanel to Tailwind CSS
1980computer Jun 5, 2026
dc0cd70
feat(storybook): update Canvas panel IA and rename stories
1980computer Jun 5, 2026
ab0a121
feat(apollo-react): add NodePropertyTrigger canvas control component
1980computer Jun 6, 2026
be0e69d
fix(apollo-react): address PR review comments on ia-and-panel-nodes
1980computer Jun 6, 2026
8804287
feat(apollo-react): refactor NodeManifestPanel to use FormSchema + Me…
1980computer Jun 8, 2026
5071011
fix(apollo-react): resolve lint errors in ProbeCard for PR #760
1980computer Jun 8, 2026
62d61a3
fix(apollo-react): address Copilot review comments on PR #760
1980computer Jun 8, 2026
2bce041
fix(apollo-react): fix input contrast in NodeManifestPanel by remappi…
1980computer Jun 8, 2026
9a11daf
fix(apollo-react): set field labels to foreground-muted (zinc-400) in…
1980computer Jun 8, 2026
c03e682
fix(apollo-react): address Copilot review comments on PR #760
1980computer Jun 10, 2026
9577354
refactor(apollo-react): rename NodeManifestPanel → NodePropertyPanel
1980computer Jun 10, 2026
a1fbe2d
fix(apollo-react): apply biome formatting to CheckboxField
1980computer Jun 10, 2026
8801715
fix(apollo-react): address Copilot review comments on PR #760
1980computer Jun 10, 2026
a987031
refactor(storybook): remove Probe story from Node Flyout Panel
1980computer Jun 10, 2026
f9957c3
feat(apollo-react): scaffold expression editor branch
1980computer Jun 8, 2026
bd8104b
feat(apollo-react): add ExpressionField Phase 1 with Expression Edito…
1980computer Jun 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/storybook/.storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ const preview: Preview = {
'Layout',
'Nodes',
'Panels',
['Node Property Trigger', 'Node Property Panel', 'Node Flyout Panel', '*'],
'Primitives',
'*',
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const collapseConfigManifest = {
};

const meta: Meta = {
title: 'Components/Panels/CollapseConfig',
title: 'Components/Panels/Node Collapse Config',
parameters: { layout: 'fullscreen' },
decorators: [
(Story) => (
Expand Down
108 changes: 0 additions & 108 deletions packages/apollo-react/src/canvas/components/NodeInspector.stories.tsx

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { Meta, StoryObj } from '@storybook/react-vite';
import type { Node } from '@uipath/apollo-react/canvas/xyflow/react';
import { Column } from '@uipath/apollo-react/canvas/layouts';
import type { Edge, Node } from '@uipath/apollo-react/canvas/xyflow/react';
import { Panel } from '@uipath/apollo-react/canvas/xyflow/react';
import { useMemo, useState } from 'react';
import {
Expand All @@ -13,14 +14,15 @@ import { DefaultCanvasTranslations } from '../../types';
import { BaseCanvas } from '../BaseCanvas';
import type { BaseNodeData } from '../BaseNode';
import { CanvasPositionControls } from '../CanvasPositionControls';
import { NodeInspector } from '../NodeInspector';
import { NodePropertiesPanel } from './NodePropertiesPanel';

// ============================================================================
// Meta Configuration
// ============================================================================

const meta: Meta<typeof NodePropertiesPanel> = {
title: 'Components/Panels/NodePropertiesPanel',
title: 'Components/Panels/Node Flyout Panel',
component: NodePropertiesPanel,
parameters: { layout: 'fullscreen' },
decorators: [withCanvasProviders()],
Expand Down Expand Up @@ -87,10 +89,75 @@ function PropertiesPanelStory() {
);
}

// ============================================================================
// Inspector Story Component
// ============================================================================

const inspectorNodes = (): Node<BaseNodeData>[] => [
createNode({
id: 'agent-1',
type: 'uipath.agent',
position: { x: 200, y: 350 },
display: { label: 'AI Agent', subLabel: 'Claude Opus' },
data: {
parameters: {
description: 'An AI agent that can perform tasks and make decisions.',
capabilities: ['Data processing', 'Decision making', 'Integrations'],
},
},
}),
createNode({
id: 'script-1',
type: 'uipath.script',
position: { x: 600, y: 200 },
display: { label: 'Transform Data', subLabel: 'JavaScript' },
}),
createNode({
id: 'decision-1',
type: 'uipath.control-flow.decision',
position: { x: 600, y: 450 },
display: { label: 'Route Response', subLabel: 'Success check' },
}),
];

const inspectorEdges = (): Edge[] => [
{ id: 'e-agent-script', source: 'agent-1', sourceHandle: 'success', target: 'script-1' },
{ id: 'e-agent-decision', source: 'agent-1', sourceHandle: 'error', target: 'decision-1' },
];

function InspectorStory() {
const initialNodes = useMemo(() => inspectorNodes(), []);
const initialEdges = useMemo(() => inspectorEdges(), []);
const { canvasProps } = useCanvasStory({ initialNodes, initialEdges });

return (
<BaseCanvas {...canvasProps} mode="design">
<NodeInspector />
<Panel position="top-left">
<Column
p={20}
gap={8}
style={{
backgroundColor: 'var(--canvas-background-secondary)',
color: 'var(--canvas-foreground)',
}}
>
<span className="text-lg font-bold">Node Inspector</span>
<span className="text-sm">Click on nodes to see their raw data</span>
</Column>
</Panel>
</BaseCanvas>
);
}

// ============================================================================
// Exported Stories
// ============================================================================

export const Default: Story = {
render: () => <PropertiesPanelStory />,
};

export const Inspector: Story = {
render: () => <InspectorStory />,
};
Loading
Loading