@mastra/playground-ui 57.0.0-alpha.3 → 57.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/components/DisabledFeatureButton.cjs.js +44 -0
  2. package/dist/components/DisabledFeatureButton.cjs.js.map +1 -0
  3. package/dist/components/DisabledFeatureButton.d.ts +2 -0
  4. package/dist/components/DisabledFeatureButton.es.js +40 -0
  5. package/dist/components/DisabledFeatureButton.es.js.map +1 -0
  6. package/dist/components/LogsDataList.cjs.js +2 -0
  7. package/dist/components/LogsDataList.cjs.js.map +1 -1
  8. package/dist/components/LogsDataList.es.js +2 -0
  9. package/dist/components/LogsDataList.es.js.map +1 -1
  10. package/dist/components/Workflow.cjs.js +1 -0
  11. package/dist/components/Workflow.cjs.js.map +1 -1
  12. package/dist/components/Workflow.es.js +2 -1
  13. package/dist/components/Workflow.es.js.map +1 -1
  14. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -0
  15. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  16. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -0
  17. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  18. package/dist/domains/traces/hooks/use-trace-query.cjs.js +1 -1
  19. package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
  20. package/dist/domains/traces/hooks/use-trace-query.es.js +1 -1
  21. package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
  22. package/dist/ee/signals/components/entity-index-list.cjs.js +2 -0
  23. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  24. package/dist/ee/signals/components/entity-index-list.es.js +2 -0
  25. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  26. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -0
  27. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  28. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -0
  29. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  30. package/dist/src/domains/traces/hooks/use-trace-query.d.ts +4 -10
  31. package/dist/src/ds/components/DisabledFeatureButton/disabled-feature-button.d.ts +13 -0
  32. package/dist/src/ds/components/DisabledFeatureButton/index.d.ts +1 -0
  33. package/dist/src/ds/components/Workflow/types.d.ts +1 -1
  34. package/dist/style.css +4 -0
  35. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Workflow.cjs.js","sources":["../../src/ds/components/Workflow/workflow-canvas-inset.ts","../../src/ds/components/Workflow/cards/workflow-card-kind.ts","../../src/ds/components/Workflow/cards/workflow-type-badge.tsx","../../src/ds/components/Workflow/cards/workflow-card-badge-utils.ts","../../src/ds/components/Workflow/cards/workflow-clock.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-expression.ts","../../src/ds/components/Workflow/cards/condition/workflow-condition-source.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-card-view.tsx","../../src/ds/components/Workflow/cards/timing/workflow-time-dial.tsx","../../src/ds/components/Workflow/cards/timing/workflow-timing.tsx","../../src/ds/components/Workflow/cards/step/workflow-step-card-view.tsx","../../src/ds/components/Workflow/data/workflow-code-dialog-content.tsx","../../src/ds/components/Workflow/data/workflow-edge-data-button.tsx","../../src/ds/components/Workflow/graph/types.ts","../../src/ds/components/Workflow/graph/workflow-boundary-node.tsx","../../src/ds/components/Workflow/graph/workflow-data-edge-view.tsx","../../src/ds/components/Workflow/graph/workflow-camera-duration.ts","../../src/ds/components/Workflow/graph/workflow-graph-groups.tsx","../../src/ds/components/Workflow/graph/zoom-slider.tsx","../../src/ds/components/Workflow/graph/workflow-graph-canvas.tsx","../../src/ds/components/Workflow/graph/workflow-node-frame.tsx","../../src/ds/components/Workflow/controls/workflow-debug-controls.tsx","../../src/ds/components/Workflow/graph/workflow-graph-placeholder.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-card.tsx","../../src/ds/components/Workflow/controls/workflow-step-actions.tsx","../../src/ds/components/Workflow/controls/workflow-step-action.tsx"],"sourcesContent":["import type { FitViewOptions } from '@xyflow/react';\nimport { createContext } from 'react';\n\nexport const WorkflowCanvasInsetContext = createContext(0);\n\nexport function workflowFitOptions(leftInset: number, isInline = false): FitViewOptions {\n return {\n maxZoom: 1,\n padding: isInline ? '20px' : { left: `${leftInset + 40}px`, right: '40px', top: '40px', bottom: '64px' },\n };\n}\n","import { ArrowRightLeft, Bot, Braces, CalendarClock, GitFork, Repeat2, Timer, Workflow, Wrench } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport type { WorkflowStepCardViewProps } from '../types';\nimport type { BadgeVariant } from '@/ds/components/Badge';\n\nexport type WorkflowTypeBadgeProps = Pick<\n WorkflowStepCardViewProps,\n 'nodeKind' | 'isForEach' | 'isNestedWorkflowStep' | 'stepGraph' | 'isParallel' | 'mapConfig' | 'date' | 'duration'\n>;\n\nexport function getWorkflowCardBadge(props: WorkflowTypeBadgeProps): {\n label: string;\n Icon: LucideIcon;\n tone: BadgeVariant;\n indicator?: string;\n} {\n if (props.isForEach) return { label: 'For each', tone: 'orange', Icon: Repeat2, indicator: 'foreach' };\n if (props.isNestedWorkflowStep || props.stepGraph)\n return { label: 'Workflow', tone: 'purple', Icon: Workflow, indicator: 'workflow' };\n if (props.isParallel && !props.nodeKind)\n return { label: 'Parallel', tone: 'blue', Icon: GitFork, indicator: 'parallel' };\n if (props.nodeKind === 'map' || props.mapConfig)\n return { label: 'Map', tone: 'orange', Icon: ArrowRightLeft, indicator: 'map' };\n if (props.nodeKind === 'wait-until' || props.date)\n return { label: 'Wait until', tone: 'purple', Icon: CalendarClock, indicator: 'sleep-until' };\n if (props.nodeKind === 'delay' || props.duration !== undefined)\n return { label: 'Delay', tone: 'purple', Icon: Timer, indicator: 'sleep' };\n if (props.nodeKind === 'agent') return { label: 'Agent', tone: 'cyan', Icon: Bot };\n if (props.nodeKind === 'tool') return { label: 'Tool', tone: 'pink', Icon: Wrench };\n return { label: 'Step', tone: 'neutral', Icon: Braces };\n}\n","import { getWorkflowCardBadge } from './workflow-card-kind';\nimport type { WorkflowTypeBadgeProps } from './workflow-card-kind';\nimport { Badge } from '@/ds/components/Badge';\n\nexport function WorkflowTypeBadge(props: WorkflowTypeBadgeProps) {\n const { label, Icon, tone } = getWorkflowCardBadge(props);\n return (\n <Badge size=\"xs\" variant={tone} icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n );\n}\n","import {\n CalendarClock,\n Clock,\n CornerDownRight,\n GitBranch,\n Layers,\n List,\n Network,\n PlayCircle,\n RefreshCw,\n Repeat,\n Repeat1,\n Timer,\n Workflow,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nexport const BADGE_COLORS = {\n sleep: '#A855F7',\n forEach: '#F97316',\n map: '#F97316',\n parallel: '#3B82F6',\n suspend: '#EC4899',\n after: '#14B8A6',\n workflow: '#8B5CF6',\n when: '#ECB047',\n dountil: '#8B5CF6',\n dowhile: '#06B6D4',\n until: '#F59E0B',\n while: '#10B981',\n if: '#3B82F6',\n else: '#6B7280',\n} as const;\n\nexport const BADGE_ICONS = {\n sleep: Timer,\n sleepUntil: CalendarClock,\n forEach: List,\n map: List,\n parallel: Workflow,\n suspend: PlayCircle,\n after: Clock,\n workflow: Layers,\n when: Network,\n dountil: Repeat1,\n dowhile: Repeat,\n until: Timer,\n while: RefreshCw,\n if: GitBranch,\n else: CornerDownRight,\n} as const;\n\nexport interface ConditionIconConfig {\n icon: LucideIcon | undefined;\n color: string | undefined;\n}\n\nexport interface WorkflowCardIndicator {\n id: string;\n label: string;\n icon: LucideIcon;\n color: string;\n}\n\nconst CONDITION_LABELS: Record<string, string> = {\n when: 'When condition',\n dountil: 'Do until condition',\n dowhile: 'Do while condition',\n until: 'Until condition',\n while: 'While condition',\n if: 'If condition',\n else: 'Else condition',\n and: 'And condition',\n or: 'Or condition',\n not: 'Not condition',\n};\n\nexport const getConditionIconAndColor = (type?: string): ConditionIconConfig => {\n switch (type) {\n case 'when':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n case 'dountil':\n return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };\n case 'dowhile':\n return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };\n case 'until':\n return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };\n case 'while':\n return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };\n case 'if':\n return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };\n case 'else':\n return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };\n case 'and':\n case 'or':\n case 'not':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n default:\n return { icon: undefined, color: undefined };\n }\n};\n\nexport const getConditionIndicator = (type?: string): WorkflowCardIndicator | undefined => {\n const { icon, color } = getConditionIconAndColor(type);\n\n if (!type || !icon || !color) {\n return undefined;\n }\n\n return {\n id: `condition-${type}`,\n label: CONDITION_LABELS[type] ?? `${type} condition`,\n icon,\n color,\n };\n};\n\nexport interface WorkflowNodeBadgeInfo {\n isSleepNode: boolean;\n isForEachNode: boolean;\n isMapNode: boolean;\n isNestedWorkflow: boolean;\n hasSpecialBadge: boolean;\n}\n\nexport interface WorkflowCardBadgesProps {\n duration?: number;\n date?: Date;\n isForEach?: boolean;\n mapConfig?: string;\n canSuspend?: boolean;\n isParallel?: boolean;\n stepGraph?: unknown;\n}\n\nexport const getNodeBadgeInfo = ({\n duration,\n date,\n isForEach,\n mapConfig,\n canSuspend,\n isParallel,\n stepGraph,\n}: WorkflowCardBadgesProps): WorkflowNodeBadgeInfo => {\n const isSleepNode = Boolean(duration || date);\n const isForEachNode = Boolean(isForEach);\n const isMapNode = Boolean(mapConfig && !isForEach);\n const isNestedWorkflow = Boolean(stepGraph);\n const hasSpecialBadge =\n isSleepNode || Boolean(canSuspend || isParallel) || isForEachNode || isMapNode || isNestedWorkflow;\n\n return {\n isSleepNode,\n isForEachNode,\n isMapNode,\n isNestedWorkflow,\n hasSpecialBadge,\n };\n};\n\nexport const getNodeIndicators = (props: WorkflowCardBadgesProps): WorkflowCardIndicator[] => {\n const { isSleepNode, isForEachNode, isMapNode, isNestedWorkflow } = getNodeBadgeInfo(props);\n const indicators: WorkflowCardIndicator[] = [];\n\n if (isSleepNode) {\n indicators.push({\n id: props.date ? 'sleep-until' : 'sleep',\n label: props.date ? 'Sleep until step' : 'Sleep step',\n icon: props.date ? BADGE_ICONS.sleepUntil : BADGE_ICONS.sleep,\n color: BADGE_COLORS.sleep,\n });\n }\n\n if (props.canSuspend) {\n indicators.push({\n id: 'suspend',\n label: 'Suspend/resume step',\n icon: BADGE_ICONS.suspend,\n color: BADGE_COLORS.suspend,\n });\n }\n\n if (props.isParallel) {\n indicators.push({\n id: 'parallel',\n label: 'Parallel step',\n icon: BADGE_ICONS.parallel,\n color: BADGE_COLORS.parallel,\n });\n }\n\n if (isNestedWorkflow) {\n indicators.push({\n id: 'workflow',\n label: 'Nested workflow step',\n icon: BADGE_ICONS.workflow,\n color: BADGE_COLORS.workflow,\n });\n }\n\n if (isForEachNode) {\n indicators.push({\n id: 'foreach',\n label: 'Foreach step',\n icon: BADGE_ICONS.forEach,\n color: BADGE_COLORS.forEach,\n });\n }\n\n if (isMapNode) {\n indicators.push({\n id: 'map',\n label: 'Map step',\n icon: BADGE_ICONS.map,\n color: BADGE_COLORS.map,\n });\n }\n\n return indicators;\n};\n","import { useEffect, useState } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDuration } from '@/utils/duration';\n\ninterface WorkflowClockProps {\n startedAt: number;\n endedAt?: number;\n isRunning?: boolean;\n spansSuspension?: boolean;\n}\n\nexport const WorkflowClock = ({ startedAt, endedAt, isRunning = false, spansSuspension }: WorkflowClockProps) => {\n if (isRunning && endedAt === undefined && Number.isFinite(startedAt)) {\n return <RunningWorkflowClock key={startedAt} startedAt={startedAt} spansSuspension={spansSuspension} />;\n }\n return <ElapsedTime startedAt={startedAt} endedAt={endedAt} spansSuspension={spansSuspension} />;\n};\n\nfunction RunningWorkflowClock({ startedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const [time, setTime] = useState(() => Date.now());\n useEffect(() => {\n const interval = setInterval(() => setTime(Date.now()), 100);\n return () => clearInterval(interval);\n }, []);\n return <ElapsedTime startedAt={startedAt} endedAt={time} spansSuspension={spansSuspension} />;\n}\n\nfunction ElapsedTime({ startedAt, endedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const elapsed = endedAt === undefined ? undefined : formatDuration(endedAt - startedAt);\n\n return (\n <Txt\n variant=\"meta\"\n tone=\"muted\"\n className=\"font-mono whitespace-nowrap\"\n title={elapsed && spansSuspension ? 'Includes time spent suspended waiting for input' : undefined}\n >\n {elapsed === undefined ? <span aria-label=\"Timing unavailable\">—</span> : elapsed}\n </Txt>\n );\n}\n","import type { WorkflowCardCondition } from '../../types';\n\nexport function conditionExpression(condition: WorkflowCardCondition) {\n if (condition.fnString !== undefined) return condition.fnString;\n return JSON.stringify({ ref: condition.ref, query: condition.query, conj: condition.conj }, null, 2);\n}\n","import { useEffect, useState } from 'react';\nimport { Code } from '@/ds/components/Code';\nimport { formatTypeScript } from '@/utils/formatting';\n\nconst MAX_FORMATTED_SOURCE_CHARS = 10_000;\n\nexport function WorkflowConditionSource({ source }: { source: string }) {\n if (source.length > MAX_FORMATTED_SOURCE_CHARS) return <Code code={source} />;\n return <FormattedConditionSource key={source} source={source} />;\n}\n\nfunction FormattedConditionSource({ source }: { source: string }) {\n const [formatted, setFormatted] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n formatTypeScript(source)\n .then(expression => {\n if (!cancelled) setFormatted(expression.trim());\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [source]);\n\n return <Code code={formatted ?? source} lang={formatted === undefined ? undefined : 'typescript'} />;\n}\n","import { Braces } from 'lucide-react';\nimport type { WorkflowConditionCardViewProps } from '../../types';\nimport { getConditionIndicator } from '../workflow-card-badge-utils';\nimport { conditionExpression } from './workflow-condition-expression';\nimport { WorkflowConditionSource } from './workflow-condition-source';\nimport { Badge } from '@/ds/components/Badge';\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\n\nconst surfaceClasses = 'rounded-[calc(var(--radius-xl)-2px)] bg-card text-meta';\n\nexport function WorkflowConditionCardView({\n type,\n conditions,\n previousDisplayStatus,\n actionBar,\n}: WorkflowConditionCardViewProps) {\n const indicator = getConditionIndicator(type);\n const Icon = indicator?.icon ?? Braces;\n const label = indicator?.label.replace(/ condition$/, '') ?? 'Condition';\n const occurrences = new Map<string, number>();\n const sources = conditions.map(condition => {\n const expression = conditionExpression(condition);\n const identity = `${condition.type}:${expression}`;\n const occurrence = occurrences.get(identity) ?? 0;\n occurrences.set(identity, occurrence + 1);\n return { condition, expression, key: `${identity}:${occurrence}` };\n });\n const copyContent =\n conditions.length > 1 ? JSON.stringify(conditions, null, 2) : sources.map(source => source.expression).join('\\n');\n const hasExpression = type !== 'else' && sources.some(({ expression }) => expression.trim().length > 0);\n\n return (\n <div\n className={`${raisedSurfaceStyle} w-[274px] overflow-hidden rounded-xl p-0.5 has-focus-visible:outline-2 has-focus-visible:outline-offset-4 has-focus-visible:outline-accent3`}\n data-workflow-node\n data-testid=\"workflow-condition-node\"\n data-workflow-step-status={previousDisplayStatus ?? 'idle'}\n >\n <div className=\"flex h-[46px] items-center gap-2 px-2.5 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant={type === 'else' ? 'neutral' : 'yellow'} emphasis=\"muted\" icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n {hasExpression && (\n <>\n <span className=\"ml-auto\">Expression</span>\n <CopyButton content={copyContent} tooltip=\"Copy expression\" size=\"sm\" className=\"nodrag nopan\" />\n </>\n )}\n </div>\n {hasExpression ? (\n <div\n role=\"region\"\n aria-label=\"Condition details\"\n tabIndex={0}\n className={`${surfaceClasses} nodrag nopan nowheel max-h-55 overflow-auto p-3.5 text-foreground [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap`}\n >\n {sources.map(({ condition, expression, key }) => (\n <div key={key}>\n {condition.conj && (\n <Badge size=\"xs\" variant=\"neutral\">\n {condition.conj.toUpperCase()}\n </Badge>\n )}\n {condition.fnString !== undefined ? (\n <WorkflowConditionSource source={condition.fnString} />\n ) : (\n <Code code={expression} />\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className={`${surfaceClasses} p-3 text-muted-foreground`}>\n {type === 'else' ? 'When no other branch matches' : 'Condition expression unavailable'}\n </p>\n )}\n {actionBar && <div className=\"nodrag nopan flex justify-end px-2.5 py-1.5 empty:hidden\">{actionBar}</div>}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\n\nexport type DurationUnit = 'ms' | 's' | 'min' | 'h';\n\nconst DIAL_CENTER = 58;\nconst CLOCK_TICK_ANGLES = Array.from({ length: 60 }, (_, index) => index * 6);\nconst DURATION_TICK_ANGLES = Array.from({ length: 41 }, (_, index) => -120 + index * 6);\n\nfunction pointAt(angle: number, radius: number) {\n const radians = (angle * Math.PI) / 180;\n return {\n x: DIAL_CENTER + Math.sin(radians) * radius,\n y: DIAL_CENTER - Math.cos(radians) * radius,\n };\n}\n\nfunction DialTick({ angle, major, className, ...props }: ComponentProps<'line'> & { angle: number; major: boolean }) {\n const outer = pointAt(angle, 49);\n const inner = pointAt(angle, major ? 38 : 43);\n return (\n <line\n x1={inner.x}\n y1={inner.y}\n x2={outer.x}\n y2={outer.y}\n className={cn(major ? 'stroke-placeholder' : 'stroke-border-strong', className)}\n {...props}\n />\n );\n}\n\nfunction DialHand({ angle, length }: { angle: number; length: number }) {\n const tip = pointAt(angle, length);\n return (\n <line\n x1={DIAL_CENTER}\n y1={DIAL_CENTER}\n x2={tip.x}\n y2={tip.y}\n className=\"stroke-1.5 stroke-muted-foreground\"\n strokeLinecap=\"round\"\n />\n );\n}\n\nfunction DialFace({ tickAngles, children }: { tickAngles: number[]; children: ReactNode }) {\n return (\n <span className=\"block size-28 shrink-0 text-muted-foreground\" aria-hidden>\n <svg viewBox=\"0 0 116 116\" fill=\"none\" className=\"block size-full overflow-visible\">\n {tickAngles.map((angle, index) => (\n <DialTick key={angle} angle={angle} major={index % 5 === 0} />\n ))}\n {children}\n </svg>\n </span>\n );\n}\n\nexport function ClockDial({ date }: { date: Date }) {\n const minutes = date.getUTCMinutes();\n return (\n <DialFace tickAngles={CLOCK_TICK_ANGLES}>\n <DialHand angle={((date.getUTCHours() % 12) + minutes / 60) * 30} length={26} />\n <DialHand angle={minutes * 6} length={37} />\n <circle cx={DIAL_CENTER} cy={DIAL_CENTER} r={2} fill=\"currentColor\" />\n </DialFace>\n );\n}\n\nexport function DurationDial({ amount, unit }: { amount: number; unit: DurationUnit }) {\n const scale = Math.max({ h: 24, ms: 1000, s: 60, min: 60 }[unit], Math.ceil(amount / 10) * 10);\n return (\n <DialFace tickAngles={DURATION_TICK_ANGLES}>\n <DialTick\n angle={-120 + (amount / scale) * 240}\n major\n className=\"stroke-foreground stroke-2\"\n strokeLinecap=\"round\"\n />\n <text x={DIAL_CENTER} y={94} textAnchor=\"middle\" className=\"fill-muted-foreground font-body text-meta\">\n {scale} {unit}\n </text>\n <text x={DIAL_CENTER} y={106} textAnchor=\"middle\" className=\"fill-placeholder font-body text-meta\">\n scale\n </text>\n </DialFace>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { WorkflowStepCardViewProps } from '../../types';\nimport { ClockDial, DurationDial } from './workflow-time-dial';\nimport type { DurationUnit } from './workflow-time-dial';\n\nconst captionClasses = 'text-meta tracking-wider whitespace-nowrap text-muted-foreground uppercase';\n\nfunction durationReading(duration: number): { amount: number; unit: DurationUnit } {\n if (duration < 1000) return { amount: duration, unit: 'ms' };\n if (duration < 60000) return { amount: duration / 1000, unit: 's' };\n if (duration < 3600000) return { amount: duration / 60000, unit: 'min' };\n return { amount: duration / 3600000, unit: 'h' };\n}\n\nfunction TimingReading({\n value,\n unit,\n caption,\n dial,\n}: {\n value: string;\n unit: string;\n caption: string;\n dial: ReactNode;\n}) {\n return (\n <span className=\"mt-1 flex min-h-27 items-center justify-between gap-1 text-foreground\">\n <span className=\"z-10 flex min-w-0 flex-col gap-2\">\n <span className=\"flex items-baseline gap-1 text-display leading-none tracking-tighter whitespace-nowrap tabular-nums\">\n {value}\n <small className=\"text-meta tracking-normal text-muted-foreground\">{unit}</small>\n </span>\n <span className={captionClasses}>{caption}</span>\n </span>\n {dial}\n </span>\n );\n}\n\nexport function WorkflowTiming({ duration, date }: Pick<WorkflowStepCardViewProps, 'duration' | 'date'>) {\n if (date) {\n const scheduled = new Date(date);\n if (!Number.isFinite(scheduled.getTime())) {\n return <span className={captionClasses}>Schedule unavailable</span>;\n }\n return (\n <TimingReading\n value={scheduled.toLocaleTimeString(undefined, { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' })}\n unit=\"UTC\"\n caption={scheduled.toLocaleDateString(undefined, {\n timeZone: 'UTC',\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n })}\n dial={<ClockDial date={scheduled} />}\n />\n );\n }\n if (duration === undefined) return null;\n if (!Number.isFinite(duration) || duration < 0) {\n return <span className={captionClasses}>Delay unavailable</span>;\n }\n const reading = durationReading(duration);\n return (\n <TimingReading\n value={reading.amount.toLocaleString(undefined, { maximumFractionDigits: 3 })}\n unit={reading.unit}\n caption=\"Configured delay\"\n dial={<DurationDial {...reading} />}\n />\n );\n}\n","import { ChevronRight } from 'lucide-react';\nimport { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { WorkflowCardDisplayStatus, WorkflowStepCardViewProps } from '../../types';\nimport { WorkflowTiming } from '../timing/workflow-timing';\nimport { getNodeIndicators } from '../workflow-card-badge-utils';\nimport { getWorkflowCardBadge } from '../workflow-card-kind';\nimport { WorkflowClock } from '../workflow-clock';\nimport { WorkflowTypeBadge } from '../workflow-type-badge';\nimport { ActivityWick } from '@/ds/components/Activity';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/utils/cn';\n\ntype ReportedStatus = NonNullable<WorkflowCardDisplayStatus>;\n\nconst statusLabels = {\n running: 'Running',\n success: 'Completed',\n failed: 'Failed',\n suspended: 'Needs input',\n waiting: 'Waiting',\n paused: 'Paused',\n skipped: 'Skipped',\n canceled: 'Canceled',\n tripwire: 'Tripwire blocked',\n} satisfies Record<ReportedStatus, string>;\n\nconst statusLineClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'after:bg-positive1',\n failed: 'after:bg-negative1',\n tripwire: 'after:bg-warning1',\n waiting: 'after:bg-accent5',\n paused: 'after:bg-muted-foreground',\n skipped: 'after:bg-muted-foreground',\n};\n\nconst footerStatusClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'text-positive1',\n failed: 'text-negative1',\n suspended: 'text-warning1',\n tripwire: 'text-warning1',\n};\n\nconst suspendedWickStyle: CSSProperties & { '--belt-hue': string } = { '--belt-hue': 'var(--warning1)' };\n\nexport function WorkflowStepCardView(props: WorkflowStepCardViewProps) {\n const {\n label,\n description,\n displayStatus,\n stepKey,\n isSelected,\n isWaiting,\n isHovered,\n onHoverChange,\n onSelect,\n isForEach,\n foreachProgress,\n startedAt,\n endedAt,\n actionBar,\n body,\n } = props;\n const [expanded, setExpanded] = useState(props.initiallyOpen ?? false);\n const isRunning = displayStatus === 'running';\n const isSuspended = displayStatus === 'suspended';\n const reportedStatusLabel =\n displayStatus && Object.hasOwn(statusLabels, displayStatus) ? statusLabels[displayStatus] : undefined;\n const statusLabel = displayStatus ? (reportedStatusLabel ?? 'Status unavailable') : 'Not started';\n const kind = getWorkflowCardBadge(props);\n const capabilities = getNodeIndicators(props)\n .filter(indicator => indicator.id !== kind.indicator)\n .map(indicator => indicator.label.replace(/ step$/, ''));\n const hasActivity = isRunning || isSuspended;\n const isStacked = isForEach && !expanded;\n const isBodyExpanded = Boolean(body) && expanded;\n const Summary = onSelect ? 'button' : 'div';\n\n return (\n <div\n className={cn(\n 'relative isolate w-[274px]',\n isBodyExpanded && 'w-172',\n isStacked &&\n 'pb-3 before:absolute before:inset-x-1.5 before:top-2 before:bottom-1.5 before:-z-10 before:rounded-xl before:border before:border-border before:bg-card after:absolute after:inset-x-3 after:top-3.5 after:bottom-0 after:-z-20 after:rounded-xl after:border after:border-border after:bg-card',\n )}\n >\n <Collapsible\n open={expanded}\n onOpenChange={setExpanded}\n className={cn(\n raisedSurfaceStyle,\n 'relative rounded-xl border border-transparent text-foreground transition-[border-color,background-color,box-shadow] [--card-radius:calc(var(--radius-xl)-2px)] motion-reduce:transition-none',\n 'after:pointer-events-none after:absolute after:inset-x-4 after:-top-px after:h-px after:mask-x-from-76%',\n displayStatus && statusLineClasses[displayStatus],\n 'has-focus-visible:outline-2 has-focus-visible:outline-offset-4 has-focus-visible:outline-accent3',\n isSelected && 'outline-1 outline-offset-4 outline-border-focus',\n isBodyExpanded && 'border-dashed border-muted-foreground/40 shadow-none',\n isWaiting && 'border-accent3',\n isHovered && !isSelected && 'bg-muted',\n )}\n data-workflow-node\n data-workflow-step-key={stepKey}\n data-workflow-step-status={displayStatus ?? 'idle'}\n data-workflow-step-active={isSelected || undefined}\n data-workflow-step-waiting={isWaiting || undefined}\n data-workflow-step-hovered={isHovered || undefined}\n data-testid={props.isNestedWorkflowStep ? 'workflow-nested-node' : 'workflow-default-node'}\n onMouseEnter={() => onHoverChange?.(true)}\n onMouseLeave={() => onHoverChange?.(false)}\n >\n <div className=\"m-0.5 overflow-hidden rounded-(--card-radius)\">\n <Summary\n className={cn(\n 'nodrag nopan flex w-full flex-col text-left',\n onSelect && 'group cursor-pointer focus-visible:outline-hidden',\n )}\n type={onSelect ? 'button' : undefined}\n aria-label={onSelect ? `Inspect ${label}` : undefined}\n aria-pressed={onSelect ? Boolean(isSelected) : undefined}\n onClick={onSelect}\n >\n <span className=\"flex items-start justify-between gap-2.5 rounded-(--card-radius) px-3.5 py-3 group-hover:bg-fill-subtle\">\n <span className=\"min-w-0 text-column wrap-anywhere text-foreground\" title={label}>\n <Shimmer active={isRunning}>{label}</Shimmer>\n </span>\n <WorkflowTypeBadge {...props} />\n </span>\n <span className=\"flex flex-col gap-2 rounded-t-(--card-radius) bg-card px-3.5 py-3 empty:py-1.5\">\n {description && <span className=\"text-caption wrap-anywhere text-muted-foreground\">{description}</span>}\n <WorkflowTiming duration={props.duration} date={props.date} />\n {isWaiting && <span className=\"text-meta text-accent3\">Next step in debug</span>}\n {isForEach && foreachProgress && (\n <span className=\"flex flex-col gap-2 py-1 text-meta\">\n <span>\n <strong>{foreachProgress.completedCount}</strong> of {foreachProgress.totalCount} items complete\n </span>\n {foreachProgress.totalCount > 0 ? (\n <progress\n className=\"h-1 w-full appearance-none border-0 bg-muted accent-positive1 [&::-moz-progress-bar]:bg-positive1 [&::-webkit-progress-bar]:bg-muted [&::-webkit-progress-value]:bg-positive1\"\n aria-label={`${label} completed items`}\n value={foreachProgress.completedCount}\n max={foreachProgress.totalCount}\n />\n ) : (\n <span>No items to process</span>\n )}\n </span>\n )}\n {capabilities.length > 0 && (\n <span className=\"text-meta text-muted-foreground\">{capabilities.join(' · ')}</span>\n )}\n </span>\n </Summary>\n <div\n className={cn(\n 'nodrag nopan flex min-h-7 items-center justify-between gap-2 bg-card px-3.5 pb-2.5 text-meta text-muted-foreground',\n displayStatus && footerStatusClasses[displayStatus],\n )}\n >\n <span role=\"status\" className={isRunning ? 'sr-only motion-reduce:not-sr-only' : undefined}>\n {statusLabel}\n </span>\n {startedAt !== undefined && (\n <span className=\"ml-auto\">\n <WorkflowClock\n startedAt={startedAt}\n endedAt={endedAt}\n isRunning={isRunning}\n spansSuspension={props.spansSuspension}\n />\n </span>\n )}\n {actionBar}\n </div>\n\n {body && (\n <>\n <CollapsibleTrigger\n className={cn(\n surfaceStateLayerStyle,\n 'nodrag nopan flex min-h-11 w-full items-center justify-between border-t border-border bg-card px-3.5 py-2.5 text-caption focus-visible:shadow-none focus-visible:ring-0',\n )}\n >\n <span>\n {expanded ? 'Collapse' : 'Expand'} {isForEach ? 'loop' : 'workflow'}\n </span>\n <ChevronRight aria-hidden size={14} />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"h-155 overflow-hidden border-t border-dashed border-border\">\n {body}\n </CollapsibleContent>\n </>\n )}\n </div>\n {hasActivity && (\n <ActivityWick\n status={isSuspended ? 'ready' : 'working'}\n aria-hidden\n className=\"before:hidden\"\n style={isSuspended ? suspendedWickStyle : undefined}\n />\n )}\n </Collapsible>\n </div>\n );\n}\n","import { javascript } from '@codemirror/lang-javascript';\nimport { jsonLanguage } from '@codemirror/lang-json';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { useCodemirrorTheme } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nexport const WorkflowCodeContent = ({\n data,\n language = 'auto',\n}: {\n data: unknown;\n language?: 'json' | 'javascript' | 'auto';\n}) => {\n const theme = useCodemirrorTheme();\n\n const getExtensions = (content: string) => {\n if (language === 'javascript') {\n return [javascript(), EditorView.lineWrapping];\n }\n if (language === 'json') {\n return [jsonLanguage, EditorView.lineWrapping];\n }\n\n try {\n JSON.parse(content);\n return [jsonLanguage, EditorView.lineWrapping];\n } catch {\n if (\n content.includes('=>') ||\n content.includes('function') ||\n content.includes('const ') ||\n content.includes('return ')\n ) {\n return [javascript(), EditorView.lineWrapping];\n }\n return [EditorView.lineWrapping];\n }\n };\n\n if (typeof data !== 'string') {\n const content = JSON.stringify(data, null, 2);\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={content} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror value={content} theme={theme} extensions={[jsonLanguage, EditorView.lineWrapping]} />\n </div>\n </div>\n );\n }\n\n const extensions = getExtensions(data);\n\n let displayContent = data;\n try {\n const json = JSON.parse(data);\n displayContent = JSON.stringify(json, null, 2);\n } catch {}\n\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={data} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror value={displayContent} theme={theme} extensions={extensions} />\n </div>\n </div>\n );\n};\n","import { Database } from 'lucide-react';\nimport { useState } from 'react';\nimport type { MouseEventHandler } from 'react';\nimport { WorkflowCodeContent } from './workflow-code-dialog-content';\nimport { Button } from '@/ds/components/Button';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface WorkflowEdgeDataButtonProps {\n previousStepId?: string;\n output?: unknown;\n label?: string;\n selected?: boolean;\n onInspect?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const WorkflowEdgeDataButton = ({\n previousStepId,\n output,\n label,\n selected,\n onInspect,\n}: WorkflowEdgeDataButtonProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const dataLabel = label ?? (previousStepId ? `${previousStepId} output` : 'Previous output');\n\n if (output === undefined) {\n return null;\n }\n\n return (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onInspect ?? (() => setIsOpen(true))}\n aria-label={`View ${dataLabel}`}\n aria-pressed={selected}\n className={cn(\n raisedSurfaceStyle,\n surfaceStateLayerStyle,\n 'h-7 rounded-lg px-2 text-foreground aria-pressed:before:bg-fill',\n )}\n icon={<Database className=\"text-accent1\" />}\n >\n Data\n </Button>\n\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent className=\"w-full max-w-3xl\">\n <DialogHeader>\n <DialogTitle>Step output</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"overflow-auto\" style={{ maxHeight: 700 }}>\n <div className=\"min-w-0 rounded-lg border border-border bg-background p-3\">\n <Txt variant=\"caption\" tone=\"ink\" className=\"mb-2 block\">\n {dataLabel}\n </Txt>\n <WorkflowCodeContent data={output} />\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import type { Edge, Node } from '@xyflow/react';\n\nexport const WORKFLOW_DATA_EDGE_TYPE = 'workflow-data-edge';\nexport const WORKFLOW_BOUNDARY_NODE_TYPE = 'workflow-boundary-node';\n\nexport interface WorkflowDataEdgeData {\n [key: string]: unknown;\n previousStepId?: string;\n nextStepId?: string;\n conditionNode?: boolean;\n boundaryPayload?: 'workflow-input' | 'workflow-output';\n edgeStatus?: 'success' | 'idle';\n dataLabelPlacement?: 'source' | 'hidden';\n}\n\nexport type WorkflowDataEdgeModel = Edge<WorkflowDataEdgeData, typeof WORKFLOW_DATA_EDGE_TYPE>;\n\nexport type WorkflowBoundaryNodeData = {\n boundaryRole: 'start' | 'end';\n label: string;\n};\n\nexport type WorkflowBoundaryNodeModel = Node<WorkflowBoundaryNodeData, typeof WORKFLOW_BOUNDARY_NODE_TYPE>;\n","import { Handle, Position } from '@xyflow/react';\nimport type { NodeProps } from '@xyflow/react';\n\nimport type { WorkflowBoundaryNodeModel } from './types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/utils/cn';\n\nexport const WorkflowBoundaryNode = ({ data }: NodeProps<WorkflowBoundaryNodeModel>) => {\n const isStart = data.boundaryRole === 'start';\n\n return (\n <>\n {!isStart && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div\n data-workflow-boundary-node\n data-testid={`workflow-boundary-${data.boundaryRole}`}\n className={cn(\n 'relative flex h-[38px] w-28 items-center justify-center text-muted-foreground after:absolute after:inset-x-0 after:mask-x-from-60%',\n isStart\n ? 'after:bottom-0 after:h-px after:bg-muted-foreground'\n : 'after:top-0 after:h-1 after:border-y after:border-muted-foreground',\n )}\n >\n <Txt variant=\"meta\">{data.label}</Txt>\n </div>\n {isStart && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n};\n","import { BaseEdge, EdgeLabelRenderer, getBezierPath, Position, useInternalNode } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\nimport { useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { WorkflowEdgeDataButton } from '../data/workflow-edge-data-button';\nimport type { WorkflowDataEdgeModel } from './types';\n\nexport interface WorkflowDataEdgeViewProps extends EdgeProps<WorkflowDataEdgeModel> {\n output?: unknown;\n label?: string;\n dataControl?: ReactNode;\n}\n\nexport function WorkflowDataEdgeView({ output, label, dataControl, ...props }: WorkflowDataEdgeViewProps) {\n const source = useInternalNode(props.source);\n const target = useInternalNode(props.target);\n const sourceWidth = source?.measured?.width ?? source?.width;\n const sourceHeight = source?.measured?.height ?? source?.height;\n const targetWidth = target?.measured?.width ?? target?.width;\n const hasBottomSource =\n source && sourceWidth !== undefined && sourceHeight !== undefined && props.sourcePosition === Position.Bottom;\n const hasTopTarget = target && targetWidth !== undefined && props.targetPosition === Position.Top;\n // Nested canvases scale DOM handle measurements twice; route in graph coordinates.\n const sourceX = hasBottomSource ? source.internals.positionAbsolute.x + sourceWidth / 2 : props.sourceX;\n const sourceY = hasBottomSource ? source.internals.positionAbsolute.y + sourceHeight : props.sourceY;\n const targetX = hasTopTarget ? target.internals.positionAbsolute.x + targetWidth / 2 : props.targetX;\n const targetY = hasTopTarget ? target.internals.positionAbsolute.y : props.targetY;\n const [edgePath, midpointX, midpointY] = getBezierPath({\n ...props,\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n const labelPlacement = props.data?.dataLabelPlacement;\n const labelX = labelPlacement === 'source' ? sourceX : midpointX;\n const labelY = labelPlacement === 'source' ? sourceY + Math.min(24, Math.max(0, (targetY - sourceY) / 4)) : midpointY;\n const arrowId = useId();\n const isExecuted = props.data?.edgeStatus === 'success';\n const pathColor = isExecuted\n ? 'color-mix(in oklab, var(--positive1) 82%, var(--foreground))'\n : 'var(--muted-foreground)';\n\n return (\n <>\n <defs>\n <marker id={arrowId} viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto\">\n <path d=\"M1 1 L9 5 L1 9 Z\" fill={pathColor} />\n </marker>\n </defs>\n <BaseEdge\n id={props.id}\n path={edgePath}\n markerEnd={`url(#${arrowId})`}\n style={{\n ...props.style,\n stroke: pathColor,\n strokeWidth: isExecuted ? 2 : 1,\n strokeLinecap: 'round',\n strokeDasharray: isExecuted ? 'none' : '5 6',\n }}\n vectorEffect=\"non-scaling-stroke\"\n data-edge-status={props.data?.edgeStatus ?? 'idle'}\n data-edge-from={props.data?.previousStepId}\n data-edge-to={props.data?.nextStepId}\n />\n {labelPlacement !== 'hidden' && (\n <EdgeLabelRenderer>\n <div\n className=\"nodrag nopan flex items-center justify-center\"\n style={{\n position: 'absolute',\n pointerEvents: 'all',\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n }}\n >\n {dataControl ?? (\n <WorkflowEdgeDataButton\n previousStepId={props.data?.boundaryPayload ? undefined : props.data?.previousStepId}\n output={output}\n label={label}\n />\n )}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","export function workflowCameraDuration() {\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 0 : 300;\n}\n","import { useViewport } from '@xyflow/react';\nimport type { Node } from '@xyflow/react';\nimport { GitFork } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface WorkflowGraphGroup {\n id: string;\n label: string;\n description: string;\n nodeIds: string[];\n}\n\nexport function WorkflowGraphGroups({ nodes, groups }: { nodes: Node[]; groups: WorkflowGraphGroup[] }) {\n const { x, y, zoom } = useViewport();\n return (\n <div\n className=\"pointer-events-none absolute inset-0 z-0 origin-top-left\"\n style={{ transform: `translate(${x}px, ${y}px) scale(${zoom})` }}\n >\n {groups.map(group => {\n const members = nodes.flatMap(node => {\n if (!group.nodeIds.includes(node.id) || !node.measured?.width || !node.measured.height) return [];\n return [{ x: node.position.x, y: node.position.y, width: node.measured.width, height: node.measured.height }];\n });\n if (!members.length || members.length !== group.nodeIds.length) return null;\n const left = Math.min(...members.map(node => node.x)) - 20;\n const top = Math.min(...members.map(node => node.y)) - 54;\n const right = Math.max(...members.map(node => node.x + node.width)) + 20;\n const bottom = Math.max(...members.map(node => node.y + node.height)) + 20;\n return (\n <div\n key={group.id}\n className=\"absolute rounded-xl border border-dashed border-muted-foreground/25 bg-muted-foreground/3\"\n style={{ transform: `translate(${left}px, ${top}px)`, width: right - left, height: bottom - top }}\n >\n <div className=\"flex items-center gap-2 px-5 py-4 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant=\"blue\" emphasis=\"muted\" icon={<GitFork aria-hidden />}>\n {group.label}\n </Badge>\n <span>{group.description}</span>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { PanelProps } from '@xyflow/react';\nimport { Panel, useViewport, useReactFlow, useStore } from '@xyflow/react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { Button } from '@/ds/components/Button';\nimport { Slider } from '@/ds/components/Slider';\nimport { cn } from '@/utils/cn';\n\nexport const ZoomSlider = forwardRef<\n HTMLDivElement,\n Omit<PanelProps, 'children'> & { compact?: boolean; onFitView?: () => void }\n>(({ className, compact = false, onFitView, ...props }, ref) => {\n const { zoom } = useViewport();\n const { zoomTo, zoomIn, zoomOut, fitView } = useReactFlow();\n const minZoom = useStore(state => state.minZoom);\n const maxZoom = useStore(state => state.maxZoom);\n\n return (\n <Panel\n ref={ref}\n className={cn(\n 'flex items-center gap-1 rounded-full border border-border bg-background p-1 text-foreground',\n className,\n )}\n {...props}\n >\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom out\"\n disabled={zoom <= minZoom}\n onClick={() => zoomOut({ duration: workflowCameraDuration() })}\n >\n <Minus />\n </Button>\n {!compact && (\n <Slider\n className=\"w-[140px]\"\n aria-label=\"Canvas zoom\"\n value={[zoom]}\n min={minZoom}\n max={maxZoom}\n step={0.01}\n largeStep={0.25}\n format={{ style: 'percent' }}\n onValueChange={values => {\n const [nextZoom] = values;\n if (nextZoom !== undefined) void zoomTo(nextZoom);\n }}\n />\n )}\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom in\"\n disabled={zoom >= maxZoom}\n onClick={() => zoomIn({ duration: workflowCameraDuration() })}\n >\n <Plus />\n </Button>\n <Button\n size=\"sm\"\n className=\"min-w-16 tabular-nums\"\n tooltip=\"Reset to actual size (100%)\"\n onClick={() => zoomTo(1, { duration: workflowCameraDuration() })}\n >\n {(100 * zoom).toFixed(0)}%\n </Button>\n <Button\n size=\"icon-sm\"\n tooltip=\"Fit view\"\n onClick={onFitView ?? (() => fitView({ duration: workflowCameraDuration(), maxZoom: 1 }))}\n >\n <Maximize />\n </Button>\n </Panel>\n );\n});\n\nZoomSlider.displayName = 'ZoomSlider';\n","import { Background, BackgroundVariant, ReactFlow, useNodesInitialized, useReactFlow, useStore } from '@xyflow/react';\nimport type { Edge, Node, ReactFlowProps } from '@xyflow/react';\nimport { useContext, useEffect, useId, useRef } from 'react';\nimport { WorkflowCanvasInsetContext, workflowFitOptions } from '../workflow-canvas-inset';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { WorkflowGraphGroups } from './workflow-graph-groups';\nimport type { WorkflowGraphGroup } from './workflow-graph-groups';\nimport { ZoomSlider } from './zoom-slider';\nimport { cn } from '@/utils/cn';\nimport '@xyflow/react/dist/style.css';\n\nexport type { WorkflowGraphGroup } from './workflow-graph-groups';\n\nexport interface WorkflowGraphCanvasProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> extends Pick<\n ReactFlowProps<NodeType, EdgeType>,\n 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onNodesChange' | 'onNodeClick'\n> {\n focusNodeId?: string;\n variant?: 'default' | 'nested' | 'inline';\n groups?: WorkflowGraphGroup[];\n}\n\nexport function WorkflowGraphCanvas<NodeType extends Node, EdgeType extends Edge>({\n nodes,\n edges,\n nodeTypes,\n edgeTypes,\n onNodesChange,\n onNodeClick,\n focusNodeId,\n groups,\n variant = 'default',\n}: WorkflowGraphCanvasProps<NodeType, EdgeType>) {\n const graphRef = useRef<HTMLDivElement>(null);\n const backgroundId = useId();\n const panelInset = useContext(WorkflowCanvasInsetContext);\n const leftInset = variant === 'default' ? panelInset : 0;\n const isInline = variant === 'inline';\n const { getNodes, setCenter, fitView } = useReactFlow<NodeType, EdgeType>();\n const nodesInitialized = useNodesInitialized();\n const canvasWidth = useStore(state => state.width);\n const canvasHeight = useStore(state => state.height);\n const hasCompactZoom = canvasWidth - leftInset < 560;\n const inlineNodeLayout = isInline\n ? JSON.stringify(\n nodes?.map(node => [\n node.id,\n node.position.x,\n node.position.y,\n node.measured?.width ?? node.width,\n node.measured?.height ?? node.height,\n ]),\n )\n : undefined;\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized) return;\n if (variant === 'default') return;\n void fitView({ ...workflowFitOptions(leftInset, isInline), duration: 0 });\n }, [canvasWidth, canvasHeight, nodesInitialized, inlineNodeLayout, fitView, leftInset, isInline, variant]);\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized || !focusNodeId) return;\n const focusNode = getNodes().find(node => node.id === focusNodeId);\n if (!focusNode) return;\n if (!graphRef.current?.contains(document.activeElement)) {\n graphRef.current?.focus({ preventScroll: true });\n }\n const width = focusNode.measured?.width ?? focusNode.width ?? 274;\n const height = focusNode.measured?.height ?? focusNode.height ?? 100;\n const duration = workflowCameraDuration();\n const exceedsVisibleWidth = canvasWidth > 0 && width > canvasWidth - leftInset - 80;\n const exceedsVisibleHeight = canvasHeight > 0 && height > canvasHeight - 104;\n if (exceedsVisibleWidth || exceedsVisibleHeight) {\n void fitView({ ...workflowFitOptions(leftInset), nodes: [{ id: focusNode.id }], duration });\n return;\n }\n void setCenter(focusNode.position.x + width / 2 - leftInset / 2, focusNode.position.y + height / 2, {\n duration,\n zoom: 1,\n });\n }, [canvasWidth, canvasHeight, nodesInitialized, focusNodeId, getNodes, setCenter, fitView, leftInset]);\n\n return (\n <div\n ref={graphRef}\n tabIndex={-1}\n data-testid=\"workflow-graph-viewport\"\n className={cn('size-full outline-none', variant === 'nested' ? 'bg-sidebar' : 'bg-background')}\n >\n <ReactFlow\n fitView={variant === 'default'}\n fitViewOptions={workflowFitOptions(leftInset)}\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n deleteKeyCode={null}\n panOnScroll={!isInline}\n panOnDrag={!isInline}\n zoomOnPinch={!isInline}\n zoomOnDoubleClick={!isInline}\n preventScrolling={!isInline}\n proOptions={isInline ? { hideAttribution: true } : undefined}\n zoomOnScroll={false}\n minZoom={0.1}\n maxZoom={4}\n >\n {!isInline && (\n <ZoomSlider\n position=\"top-right\"\n className=\"m-2!\"\n compact={hasCompactZoom}\n onFitView={() => fitView({ ...workflowFitOptions(leftInset), duration: workflowCameraDuration() })}\n />\n )}\n {groups && <WorkflowGraphGroups nodes={nodes ?? []} groups={groups} />}\n {!isInline && <Background id={backgroundId} variant={BackgroundVariant.Dots} gap={12} size={0.5} />}\n </ReactFlow>\n </div>\n );\n}\n","import { Handle, Position } from '@xyflow/react';\nimport type { ReactNode } from 'react';\n\nexport interface WorkflowNodeFrameProps {\n withoutTopHandle?: boolean;\n withoutBottomHandle?: boolean;\n children: ReactNode;\n}\n\nexport function WorkflowNodeFrame({ withoutTopHandle, withoutBottomHandle, children }: WorkflowNodeFrameProps) {\n return (\n <>\n {!withoutTopHandle && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div className=\"nodrag pointer-events-auto\">{children}</div>\n {!withoutBottomHandle && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n}\n","import { Loader2, Pause, PlayIcon, StepForwardIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\n\nexport interface WorkflowDebugControlsProps {\n isStreaming?: boolean;\n canRunNextStep: boolean;\n nextStepLabel?: string;\n disabled?: boolean;\n children?: ReactNode;\n onRunNextStep: () => void;\n onContinueRun: () => void;\n}\n\nexport function WorkflowDebugControls({\n isStreaming,\n canRunNextStep,\n nextStepLabel,\n disabled,\n children,\n onRunNextStep,\n onContinueRun,\n}: WorkflowDebugControlsProps) {\n const nextStepFallback = canRunNextStep ? 'Ready to advance' : 'Next step unavailable';\n const actionsDisabled = !canRunNextStep || isStreaming || disabled;\n\n return (\n <div className=\"flex min-w-0 flex-col gap-3\" data-testid=\"workflow-debug-step-controls\">\n <div className=\"rounded-xl border border-border/50 bg-background p-3\">\n <div className=\"mb-2 flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-meta text-muted-foreground\">Next step</span>\n <Badge size=\"sm\" icon={<Pause />} emphasis=\"muted\">\n Step by step\n </Badge>\n </div>\n <div className=\"text-subheading break-words text-foreground\" aria-live=\"polite\">\n {nextStepLabel || nextStepFallback}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"min-w-0 flex-1\"\n aria-label=\"Run next step\"\n onClick={onRunNextStep}\n disabled={actionsDisabled}\n icon={isStreaming ? <Loader2 className=\"motion-safe:animate-spin\" /> : <StepForwardIcon />}\n >\n {isStreaming ? 'Running step…' : 'Run next step'}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"Continue full run\"\n onClick={onContinueRun}\n disabled={actionsDisabled}\n >\n <PlayIcon />\n </Button>\n {children}\n </div>\n </div>\n );\n}\n","import { AlertCircleIcon } from 'lucide-react';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type WorkflowGraphPlaceholderProps = { isLoading: true } | { isLoading?: false; workflowName: string };\n\nexport function WorkflowGraphPlaceholder(props: WorkflowGraphPlaceholderProps) {\n if (props.isLoading) {\n return (\n <div className=\"p-4\">\n <Skeleton className=\"h-full\" />\n </div>\n );\n }\n\n return (\n <div className=\"grid h-full place-items-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <AlertCircleIcon />\n <div>We couldn&apos;t find {props.workflowName} workflow.</div>\n </div>\n </div>\n );\n}\n","import type { WorkflowConditionCardViewProps } from '../../types';\nimport { WorkflowConditionCardView } from './workflow-condition-card-view';\n\nexport type WorkflowConditionCardProps = Omit<WorkflowConditionCardViewProps, 'type'>;\n\nexport function WorkflowConditionCard({ conditions, ...props }: WorkflowConditionCardProps) {\n return <WorkflowConditionCardView {...props} type={conditions[0]?.type} conditions={conditions} />;\n}\n","import { MoreVerticalIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nexport function WorkflowStepActions({ children }: { children: ReactNode }) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n aria-label=\"Step actions\"\n title=\"Step actions\"\n className=\"nodrag nopan\"\n >\n <MoreVerticalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">{children}</DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import {\n AlertCircleIcon,\n BracesIcon,\n Clock3Icon,\n PanelRightIcon,\n PlayIcon,\n RotateCcwIcon,\n ShieldAlertIcon,\n StepForwardIcon,\n} from 'lucide-react';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst actions = {\n nested: { icon: PanelRightIcon, label: 'View nested graph', activeLabel: 'Hide nested graph' },\n map: { icon: BracesIcon, label: 'Map config', activeLabel: 'Hide map config' },\n timeTravel: { icon: Clock3Icon, label: 'Time travel' },\n runStep: { icon: PlayIcon, label: 'Run step' },\n continueRun: { icon: StepForwardIcon, label: 'Continue run' },\n resumeData: { icon: RotateCcwIcon, label: 'Resume data' },\n error: { icon: AlertCircleIcon, label: 'Error' },\n tripwire: { icon: ShieldAlertIcon, label: 'Tripwire' },\n};\n\nexport interface WorkflowStepActionProps {\n action: keyof typeof actions;\n isActive?: boolean;\n onSelect: () => void;\n}\n\nexport function WorkflowStepAction({ action, isActive, onSelect }: WorkflowStepActionProps) {\n const definition = actions[action];\n const ActionIcon = definition.icon;\n const label = isActive && 'activeLabel' in definition ? definition.activeLabel : definition.label;\n return (\n <DropdownMenu.Item onSelect={onSelect} className={action === 'tripwire' ? 'text-amber-400' : undefined}>\n <ActionIcon />\n <span>{label}</span>\n </DropdownMenu.Item>\n );\n}\n"],"names":["createContext","Repeat2","Workflow","GitFork","ArrowRightLeft","CalendarClock","Timer","Bot","Wrench","Braces","jsx","Badge","List","PlayCircle","Clock","Layers","Network","Repeat1","Repeat","RefreshCw","GitBranch","CornerDownRight","useState","useEffect","formatDuration","Txt","Code","formatTypeScript","jsxs","raisedSurfaceStyle","Fragment","CopyButton","cn","Collapsible","Shimmer","CollapsibleTrigger","surfaceStateLayerStyle","ChevronRight","CollapsibleContent","ActivityWick","useCodemirrorTheme","javascript","EditorView","jsonLanguage","CodeMirror","Button","Database","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Handle","Position","useInternalNode","getBezierPath","useId","BaseEdge","EdgeLabelRenderer","useViewport","forwardRef","useReactFlow","useStore","Panel","Minus","Slider","Plus","Maximize","useRef","useContext","useNodesInitialized","ReactFlow","Background","BackgroundVariant","Pause","Loader2","StepForwardIcon","PlayIcon","Skeleton","AlertCircleIcon","DropdownMenu","MoreVerticalIcon","PanelRightIcon","BracesIcon","Clock3Icon","RotateCcwIcon","ShieldAlertIcon"],"mappings":"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"}
1
+ {"version":3,"file":"Workflow.cjs.js","sources":["../../src/ds/components/Workflow/workflow-canvas-inset.ts","../../src/ds/components/Workflow/cards/workflow-card-kind.ts","../../src/ds/components/Workflow/cards/workflow-type-badge.tsx","../../src/ds/components/Workflow/cards/workflow-card-badge-utils.ts","../../src/ds/components/Workflow/cards/workflow-clock.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-expression.ts","../../src/ds/components/Workflow/cards/condition/workflow-condition-source.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-card-view.tsx","../../src/ds/components/Workflow/cards/timing/workflow-time-dial.tsx","../../src/ds/components/Workflow/cards/timing/workflow-timing.tsx","../../src/ds/components/Workflow/cards/step/workflow-step-card-view.tsx","../../src/ds/components/Workflow/data/workflow-code-dialog-content.tsx","../../src/ds/components/Workflow/data/workflow-edge-data-button.tsx","../../src/ds/components/Workflow/graph/types.ts","../../src/ds/components/Workflow/graph/workflow-boundary-node.tsx","../../src/ds/components/Workflow/graph/workflow-data-edge-view.tsx","../../src/ds/components/Workflow/graph/workflow-camera-duration.ts","../../src/ds/components/Workflow/graph/workflow-graph-groups.tsx","../../src/ds/components/Workflow/graph/zoom-slider.tsx","../../src/ds/components/Workflow/graph/workflow-graph-canvas.tsx","../../src/ds/components/Workflow/graph/workflow-node-frame.tsx","../../src/ds/components/Workflow/controls/workflow-debug-controls.tsx","../../src/ds/components/Workflow/graph/workflow-graph-placeholder.tsx","../../src/ds/components/Workflow/cards/condition/workflow-condition-card.tsx","../../src/ds/components/Workflow/controls/workflow-step-actions.tsx","../../src/ds/components/Workflow/controls/workflow-step-action.tsx"],"sourcesContent":["import type { FitViewOptions } from '@xyflow/react';\nimport { createContext } from 'react';\n\nexport const WorkflowCanvasInsetContext = createContext(0);\n\nexport function workflowFitOptions(leftInset: number, isInline = false): FitViewOptions {\n return {\n maxZoom: 1,\n padding: isInline ? '20px' : { left: `${leftInset + 40}px`, right: '40px', top: '40px', bottom: '64px' },\n };\n}\n","import {\n ArrowRightLeft,\n Bot,\n Braces,\n CalendarClock,\n GitBranch,\n GitFork,\n Repeat2,\n Timer,\n Workflow,\n Wrench,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport type { WorkflowStepCardViewProps } from '../types';\nimport type { BadgeVariant } from '@/ds/components/Badge';\n\nexport type WorkflowTypeBadgeProps = Pick<\n WorkflowStepCardViewProps,\n 'nodeKind' | 'isForEach' | 'isNestedWorkflowStep' | 'stepGraph' | 'isParallel' | 'mapConfig' | 'date' | 'duration'\n>;\n\nexport function getWorkflowCardBadge(props: WorkflowTypeBadgeProps): {\n label: string;\n Icon: LucideIcon;\n tone: BadgeVariant;\n indicator?: string;\n} {\n if (props.isForEach) return { label: 'For each', tone: 'orange', Icon: Repeat2, indicator: 'foreach' };\n if (props.isNestedWorkflowStep || props.stepGraph)\n return { label: 'Workflow', tone: 'purple', Icon: Workflow, indicator: 'workflow' };\n if (props.isParallel && !props.nodeKind)\n return { label: 'Parallel', tone: 'blue', Icon: GitFork, indicator: 'parallel' };\n if (props.nodeKind === 'map' || props.mapConfig)\n return { label: 'Map', tone: 'orange', Icon: ArrowRightLeft, indicator: 'map' };\n if (props.nodeKind === 'wait-until' || props.date)\n return { label: 'Wait until', tone: 'purple', Icon: CalendarClock, indicator: 'sleep-until' };\n if (props.nodeKind === 'delay' || props.duration !== undefined)\n return { label: 'Delay', tone: 'purple', Icon: Timer, indicator: 'sleep' };\n if (props.nodeKind === 'agent') return { label: 'Agent', tone: 'cyan', Icon: Bot };\n if (props.nodeKind === 'tool') return { label: 'Tool', tone: 'pink', Icon: Wrench };\n if (props.nodeKind === 'classifier') return { label: 'Classifier', tone: 'blue', Icon: GitBranch };\n return { label: 'Step', tone: 'neutral', Icon: Braces };\n}\n","import { getWorkflowCardBadge } from './workflow-card-kind';\nimport type { WorkflowTypeBadgeProps } from './workflow-card-kind';\nimport { Badge } from '@/ds/components/Badge';\n\nexport function WorkflowTypeBadge(props: WorkflowTypeBadgeProps) {\n const { label, Icon, tone } = getWorkflowCardBadge(props);\n return (\n <Badge size=\"xs\" variant={tone} icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n );\n}\n","import {\n CalendarClock,\n Clock,\n CornerDownRight,\n GitBranch,\n Layers,\n List,\n Network,\n PlayCircle,\n RefreshCw,\n Repeat,\n Repeat1,\n Timer,\n Workflow,\n} from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nexport const BADGE_COLORS = {\n sleep: '#A855F7',\n forEach: '#F97316',\n map: '#F97316',\n parallel: '#3B82F6',\n suspend: '#EC4899',\n after: '#14B8A6',\n workflow: '#8B5CF6',\n when: '#ECB047',\n dountil: '#8B5CF6',\n dowhile: '#06B6D4',\n until: '#F59E0B',\n while: '#10B981',\n if: '#3B82F6',\n else: '#6B7280',\n} as const;\n\nexport const BADGE_ICONS = {\n sleep: Timer,\n sleepUntil: CalendarClock,\n forEach: List,\n map: List,\n parallel: Workflow,\n suspend: PlayCircle,\n after: Clock,\n workflow: Layers,\n when: Network,\n dountil: Repeat1,\n dowhile: Repeat,\n until: Timer,\n while: RefreshCw,\n if: GitBranch,\n else: CornerDownRight,\n} as const;\n\nexport interface ConditionIconConfig {\n icon: LucideIcon | undefined;\n color: string | undefined;\n}\n\nexport interface WorkflowCardIndicator {\n id: string;\n label: string;\n icon: LucideIcon;\n color: string;\n}\n\nconst CONDITION_LABELS: Record<string, string> = {\n when: 'When condition',\n dountil: 'Do until condition',\n dowhile: 'Do while condition',\n until: 'Until condition',\n while: 'While condition',\n if: 'If condition',\n else: 'Else condition',\n and: 'And condition',\n or: 'Or condition',\n not: 'Not condition',\n};\n\nexport const getConditionIconAndColor = (type?: string): ConditionIconConfig => {\n switch (type) {\n case 'when':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n case 'dountil':\n return { icon: BADGE_ICONS.dountil, color: BADGE_COLORS.dountil };\n case 'dowhile':\n return { icon: BADGE_ICONS.dowhile, color: BADGE_COLORS.dowhile };\n case 'until':\n return { icon: BADGE_ICONS.until, color: BADGE_COLORS.until };\n case 'while':\n return { icon: BADGE_ICONS.while, color: BADGE_COLORS.while };\n case 'if':\n return { icon: BADGE_ICONS.if, color: BADGE_COLORS.if };\n case 'else':\n return { icon: BADGE_ICONS.else, color: BADGE_COLORS.else };\n case 'and':\n case 'or':\n case 'not':\n return { icon: BADGE_ICONS.when, color: BADGE_COLORS.when };\n default:\n return { icon: undefined, color: undefined };\n }\n};\n\nexport const getConditionIndicator = (type?: string): WorkflowCardIndicator | undefined => {\n const { icon, color } = getConditionIconAndColor(type);\n\n if (!type || !icon || !color) {\n return undefined;\n }\n\n return {\n id: `condition-${type}`,\n label: CONDITION_LABELS[type] ?? `${type} condition`,\n icon,\n color,\n };\n};\n\nexport interface WorkflowNodeBadgeInfo {\n isSleepNode: boolean;\n isForEachNode: boolean;\n isMapNode: boolean;\n isNestedWorkflow: boolean;\n hasSpecialBadge: boolean;\n}\n\nexport interface WorkflowCardBadgesProps {\n duration?: number;\n date?: Date;\n isForEach?: boolean;\n mapConfig?: string;\n canSuspend?: boolean;\n isParallel?: boolean;\n stepGraph?: unknown;\n}\n\nexport const getNodeBadgeInfo = ({\n duration,\n date,\n isForEach,\n mapConfig,\n canSuspend,\n isParallel,\n stepGraph,\n}: WorkflowCardBadgesProps): WorkflowNodeBadgeInfo => {\n const isSleepNode = Boolean(duration || date);\n const isForEachNode = Boolean(isForEach);\n const isMapNode = Boolean(mapConfig && !isForEach);\n const isNestedWorkflow = Boolean(stepGraph);\n const hasSpecialBadge =\n isSleepNode || Boolean(canSuspend || isParallel) || isForEachNode || isMapNode || isNestedWorkflow;\n\n return {\n isSleepNode,\n isForEachNode,\n isMapNode,\n isNestedWorkflow,\n hasSpecialBadge,\n };\n};\n\nexport const getNodeIndicators = (props: WorkflowCardBadgesProps): WorkflowCardIndicator[] => {\n const { isSleepNode, isForEachNode, isMapNode, isNestedWorkflow } = getNodeBadgeInfo(props);\n const indicators: WorkflowCardIndicator[] = [];\n\n if (isSleepNode) {\n indicators.push({\n id: props.date ? 'sleep-until' : 'sleep',\n label: props.date ? 'Sleep until step' : 'Sleep step',\n icon: props.date ? BADGE_ICONS.sleepUntil : BADGE_ICONS.sleep,\n color: BADGE_COLORS.sleep,\n });\n }\n\n if (props.canSuspend) {\n indicators.push({\n id: 'suspend',\n label: 'Suspend/resume step',\n icon: BADGE_ICONS.suspend,\n color: BADGE_COLORS.suspend,\n });\n }\n\n if (props.isParallel) {\n indicators.push({\n id: 'parallel',\n label: 'Parallel step',\n icon: BADGE_ICONS.parallel,\n color: BADGE_COLORS.parallel,\n });\n }\n\n if (isNestedWorkflow) {\n indicators.push({\n id: 'workflow',\n label: 'Nested workflow step',\n icon: BADGE_ICONS.workflow,\n color: BADGE_COLORS.workflow,\n });\n }\n\n if (isForEachNode) {\n indicators.push({\n id: 'foreach',\n label: 'Foreach step',\n icon: BADGE_ICONS.forEach,\n color: BADGE_COLORS.forEach,\n });\n }\n\n if (isMapNode) {\n indicators.push({\n id: 'map',\n label: 'Map step',\n icon: BADGE_ICONS.map,\n color: BADGE_COLORS.map,\n });\n }\n\n return indicators;\n};\n","import { useEffect, useState } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { formatDuration } from '@/utils/duration';\n\ninterface WorkflowClockProps {\n startedAt: number;\n endedAt?: number;\n isRunning?: boolean;\n spansSuspension?: boolean;\n}\n\nexport const WorkflowClock = ({ startedAt, endedAt, isRunning = false, spansSuspension }: WorkflowClockProps) => {\n if (isRunning && endedAt === undefined && Number.isFinite(startedAt)) {\n return <RunningWorkflowClock key={startedAt} startedAt={startedAt} spansSuspension={spansSuspension} />;\n }\n return <ElapsedTime startedAt={startedAt} endedAt={endedAt} spansSuspension={spansSuspension} />;\n};\n\nfunction RunningWorkflowClock({ startedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const [time, setTime] = useState(() => Date.now());\n useEffect(() => {\n const interval = setInterval(() => setTime(Date.now()), 100);\n return () => clearInterval(interval);\n }, []);\n return <ElapsedTime startedAt={startedAt} endedAt={time} spansSuspension={spansSuspension} />;\n}\n\nfunction ElapsedTime({ startedAt, endedAt, spansSuspension }: Omit<WorkflowClockProps, 'isRunning'>) {\n const elapsed = endedAt === undefined ? undefined : formatDuration(endedAt - startedAt);\n\n return (\n <Txt\n variant=\"meta\"\n tone=\"muted\"\n className=\"font-mono whitespace-nowrap\"\n title={elapsed && spansSuspension ? 'Includes time spent suspended waiting for input' : undefined}\n >\n {elapsed === undefined ? <span aria-label=\"Timing unavailable\">—</span> : elapsed}\n </Txt>\n );\n}\n","import type { WorkflowCardCondition } from '../../types';\n\nexport function conditionExpression(condition: WorkflowCardCondition) {\n if (condition.fnString !== undefined) return condition.fnString;\n return JSON.stringify({ ref: condition.ref, query: condition.query, conj: condition.conj }, null, 2);\n}\n","import { useEffect, useState } from 'react';\nimport { Code } from '@/ds/components/Code';\nimport { formatTypeScript } from '@/utils/formatting';\n\nconst MAX_FORMATTED_SOURCE_CHARS = 10_000;\n\nexport function WorkflowConditionSource({ source }: { source: string }) {\n if (source.length > MAX_FORMATTED_SOURCE_CHARS) return <Code code={source} />;\n return <FormattedConditionSource key={source} source={source} />;\n}\n\nfunction FormattedConditionSource({ source }: { source: string }) {\n const [formatted, setFormatted] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n formatTypeScript(source)\n .then(expression => {\n if (!cancelled) setFormatted(expression.trim());\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [source]);\n\n return <Code code={formatted ?? source} lang={formatted === undefined ? undefined : 'typescript'} />;\n}\n","import { Braces } from 'lucide-react';\nimport type { WorkflowConditionCardViewProps } from '../../types';\nimport { getConditionIndicator } from '../workflow-card-badge-utils';\nimport { conditionExpression } from './workflow-condition-expression';\nimport { WorkflowConditionSource } from './workflow-condition-source';\nimport { Badge } from '@/ds/components/Badge';\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\n\nconst surfaceClasses = 'rounded-[calc(var(--radius-xl)-2px)] bg-card text-meta';\n\nexport function WorkflowConditionCardView({\n type,\n conditions,\n previousDisplayStatus,\n actionBar,\n}: WorkflowConditionCardViewProps) {\n const indicator = getConditionIndicator(type);\n const Icon = indicator?.icon ?? Braces;\n const label = indicator?.label.replace(/ condition$/, '') ?? 'Condition';\n const occurrences = new Map<string, number>();\n const sources = conditions.map(condition => {\n const expression = conditionExpression(condition);\n const identity = `${condition.type}:${expression}`;\n const occurrence = occurrences.get(identity) ?? 0;\n occurrences.set(identity, occurrence + 1);\n return { condition, expression, key: `${identity}:${occurrence}` };\n });\n const copyContent =\n conditions.length > 1 ? JSON.stringify(conditions, null, 2) : sources.map(source => source.expression).join('\\n');\n const hasExpression = type !== 'else' && sources.some(({ expression }) => expression.trim().length > 0);\n\n return (\n <div\n className={`${raisedSurfaceStyle} w-[274px] overflow-hidden rounded-xl p-0.5 has-focus-visible:outline-2 has-focus-visible:outline-offset-4 has-focus-visible:outline-accent3`}\n data-workflow-node\n data-testid=\"workflow-condition-node\"\n data-workflow-step-status={previousDisplayStatus ?? 'idle'}\n >\n <div className=\"flex h-[46px] items-center gap-2 px-2.5 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant={type === 'else' ? 'neutral' : 'yellow'} emphasis=\"muted\" icon={<Icon aria-hidden />}>\n {label}\n </Badge>\n {hasExpression && (\n <>\n <span className=\"ml-auto\">Expression</span>\n <CopyButton content={copyContent} tooltip=\"Copy expression\" size=\"sm\" className=\"nodrag nopan\" />\n </>\n )}\n </div>\n {hasExpression ? (\n <div\n role=\"region\"\n aria-label=\"Condition details\"\n tabIndex={0}\n className={`${surfaceClasses} nodrag nopan nowheel max-h-55 overflow-auto p-3.5 text-foreground [&_pre]:leading-relaxed [&_pre]:whitespace-pre-wrap`}\n >\n {sources.map(({ condition, expression, key }) => (\n <div key={key}>\n {condition.conj && (\n <Badge size=\"xs\" variant=\"neutral\">\n {condition.conj.toUpperCase()}\n </Badge>\n )}\n {condition.fnString !== undefined ? (\n <WorkflowConditionSource source={condition.fnString} />\n ) : (\n <Code code={expression} />\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className={`${surfaceClasses} p-3 text-muted-foreground`}>\n {type === 'else' ? 'When no other branch matches' : 'Condition expression unavailable'}\n </p>\n )}\n {actionBar && <div className=\"nodrag nopan flex justify-end px-2.5 py-1.5 empty:hidden\">{actionBar}</div>}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '@/utils/cn';\n\nexport type DurationUnit = 'ms' | 's' | 'min' | 'h';\n\nconst DIAL_CENTER = 58;\nconst CLOCK_TICK_ANGLES = Array.from({ length: 60 }, (_, index) => index * 6);\nconst DURATION_TICK_ANGLES = Array.from({ length: 41 }, (_, index) => -120 + index * 6);\n\nfunction pointAt(angle: number, radius: number) {\n const radians = (angle * Math.PI) / 180;\n return {\n x: DIAL_CENTER + Math.sin(radians) * radius,\n y: DIAL_CENTER - Math.cos(radians) * radius,\n };\n}\n\nfunction DialTick({ angle, major, className, ...props }: ComponentProps<'line'> & { angle: number; major: boolean }) {\n const outer = pointAt(angle, 49);\n const inner = pointAt(angle, major ? 38 : 43);\n return (\n <line\n x1={inner.x}\n y1={inner.y}\n x2={outer.x}\n y2={outer.y}\n className={cn(major ? 'stroke-placeholder' : 'stroke-border-strong', className)}\n {...props}\n />\n );\n}\n\nfunction DialHand({ angle, length }: { angle: number; length: number }) {\n const tip = pointAt(angle, length);\n return (\n <line\n x1={DIAL_CENTER}\n y1={DIAL_CENTER}\n x2={tip.x}\n y2={tip.y}\n className=\"stroke-1.5 stroke-muted-foreground\"\n strokeLinecap=\"round\"\n />\n );\n}\n\nfunction DialFace({ tickAngles, children }: { tickAngles: number[]; children: ReactNode }) {\n return (\n <span className=\"block size-28 shrink-0 text-muted-foreground\" aria-hidden>\n <svg viewBox=\"0 0 116 116\" fill=\"none\" className=\"block size-full overflow-visible\">\n {tickAngles.map((angle, index) => (\n <DialTick key={angle} angle={angle} major={index % 5 === 0} />\n ))}\n {children}\n </svg>\n </span>\n );\n}\n\nexport function ClockDial({ date }: { date: Date }) {\n const minutes = date.getUTCMinutes();\n return (\n <DialFace tickAngles={CLOCK_TICK_ANGLES}>\n <DialHand angle={((date.getUTCHours() % 12) + minutes / 60) * 30} length={26} />\n <DialHand angle={minutes * 6} length={37} />\n <circle cx={DIAL_CENTER} cy={DIAL_CENTER} r={2} fill=\"currentColor\" />\n </DialFace>\n );\n}\n\nexport function DurationDial({ amount, unit }: { amount: number; unit: DurationUnit }) {\n const scale = Math.max({ h: 24, ms: 1000, s: 60, min: 60 }[unit], Math.ceil(amount / 10) * 10);\n return (\n <DialFace tickAngles={DURATION_TICK_ANGLES}>\n <DialTick\n angle={-120 + (amount / scale) * 240}\n major\n className=\"stroke-foreground stroke-2\"\n strokeLinecap=\"round\"\n />\n <text x={DIAL_CENTER} y={94} textAnchor=\"middle\" className=\"fill-muted-foreground font-body text-meta\">\n {scale} {unit}\n </text>\n <text x={DIAL_CENTER} y={106} textAnchor=\"middle\" className=\"fill-placeholder font-body text-meta\">\n scale\n </text>\n </DialFace>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { WorkflowStepCardViewProps } from '../../types';\nimport { ClockDial, DurationDial } from './workflow-time-dial';\nimport type { DurationUnit } from './workflow-time-dial';\n\nconst captionClasses = 'text-meta tracking-wider whitespace-nowrap text-muted-foreground uppercase';\n\nfunction durationReading(duration: number): { amount: number; unit: DurationUnit } {\n if (duration < 1000) return { amount: duration, unit: 'ms' };\n if (duration < 60000) return { amount: duration / 1000, unit: 's' };\n if (duration < 3600000) return { amount: duration / 60000, unit: 'min' };\n return { amount: duration / 3600000, unit: 'h' };\n}\n\nfunction TimingReading({\n value,\n unit,\n caption,\n dial,\n}: {\n value: string;\n unit: string;\n caption: string;\n dial: ReactNode;\n}) {\n return (\n <span className=\"mt-1 flex min-h-27 items-center justify-between gap-1 text-foreground\">\n <span className=\"z-10 flex min-w-0 flex-col gap-2\">\n <span className=\"flex items-baseline gap-1 text-display leading-none tracking-tighter whitespace-nowrap tabular-nums\">\n {value}\n <small className=\"text-meta tracking-normal text-muted-foreground\">{unit}</small>\n </span>\n <span className={captionClasses}>{caption}</span>\n </span>\n {dial}\n </span>\n );\n}\n\nexport function WorkflowTiming({ duration, date }: Pick<WorkflowStepCardViewProps, 'duration' | 'date'>) {\n if (date) {\n const scheduled = new Date(date);\n if (!Number.isFinite(scheduled.getTime())) {\n return <span className={captionClasses}>Schedule unavailable</span>;\n }\n return (\n <TimingReading\n value={scheduled.toLocaleTimeString(undefined, { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' })}\n unit=\"UTC\"\n caption={scheduled.toLocaleDateString(undefined, {\n timeZone: 'UTC',\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n })}\n dial={<ClockDial date={scheduled} />}\n />\n );\n }\n if (duration === undefined) return null;\n if (!Number.isFinite(duration) || duration < 0) {\n return <span className={captionClasses}>Delay unavailable</span>;\n }\n const reading = durationReading(duration);\n return (\n <TimingReading\n value={reading.amount.toLocaleString(undefined, { maximumFractionDigits: 3 })}\n unit={reading.unit}\n caption=\"Configured delay\"\n dial={<DurationDial {...reading} />}\n />\n );\n}\n","import { ChevronRight } from 'lucide-react';\nimport { useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { WorkflowCardDisplayStatus, WorkflowStepCardViewProps } from '../../types';\nimport { WorkflowTiming } from '../timing/workflow-timing';\nimport { getNodeIndicators } from '../workflow-card-badge-utils';\nimport { getWorkflowCardBadge } from '../workflow-card-kind';\nimport { WorkflowClock } from '../workflow-clock';\nimport { WorkflowTypeBadge } from '../workflow-type-badge';\nimport { ActivityWick } from '@/ds/components/Activity';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/utils/cn';\n\ntype ReportedStatus = NonNullable<WorkflowCardDisplayStatus>;\n\nconst statusLabels = {\n running: 'Running',\n success: 'Completed',\n failed: 'Failed',\n suspended: 'Needs input',\n waiting: 'Waiting',\n paused: 'Paused',\n skipped: 'Skipped',\n canceled: 'Canceled',\n tripwire: 'Tripwire blocked',\n} satisfies Record<ReportedStatus, string>;\n\nconst statusLineClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'after:bg-positive1',\n failed: 'after:bg-negative1',\n tripwire: 'after:bg-warning1',\n waiting: 'after:bg-accent5',\n paused: 'after:bg-muted-foreground',\n skipped: 'after:bg-muted-foreground',\n};\n\nconst footerStatusClasses: Partial<Record<ReportedStatus, string>> = {\n success: 'text-positive1',\n failed: 'text-negative1',\n suspended: 'text-warning1',\n tripwire: 'text-warning1',\n};\n\nconst suspendedWickStyle: CSSProperties & { '--belt-hue': string } = { '--belt-hue': 'var(--warning1)' };\n\nexport function WorkflowStepCardView(props: WorkflowStepCardViewProps) {\n const {\n label,\n description,\n displayStatus,\n stepKey,\n isSelected,\n isWaiting,\n isHovered,\n onHoverChange,\n onSelect,\n isForEach,\n foreachProgress,\n startedAt,\n endedAt,\n actionBar,\n body,\n } = props;\n const [expanded, setExpanded] = useState(props.initiallyOpen ?? false);\n const isRunning = displayStatus === 'running';\n const isSuspended = displayStatus === 'suspended';\n const reportedStatusLabel =\n displayStatus && Object.hasOwn(statusLabels, displayStatus) ? statusLabels[displayStatus] : undefined;\n const statusLabel = displayStatus ? (reportedStatusLabel ?? 'Status unavailable') : 'Not started';\n const kind = getWorkflowCardBadge(props);\n const capabilities = getNodeIndicators(props)\n .filter(indicator => indicator.id !== kind.indicator)\n .map(indicator => indicator.label.replace(/ step$/, ''));\n const hasActivity = isRunning || isSuspended;\n const isStacked = isForEach && !expanded;\n const isBodyExpanded = Boolean(body) && expanded;\n const Summary = onSelect ? 'button' : 'div';\n\n return (\n <div\n className={cn(\n 'relative isolate w-[274px]',\n isBodyExpanded && 'w-172',\n isStacked &&\n 'pb-3 before:absolute before:inset-x-1.5 before:top-2 before:bottom-1.5 before:-z-10 before:rounded-xl before:border before:border-border before:bg-card after:absolute after:inset-x-3 after:top-3.5 after:bottom-0 after:-z-20 after:rounded-xl after:border after:border-border after:bg-card',\n )}\n >\n <Collapsible\n open={expanded}\n onOpenChange={setExpanded}\n className={cn(\n raisedSurfaceStyle,\n 'relative rounded-xl border border-transparent text-foreground transition-[border-color,background-color,box-shadow] [--card-radius:calc(var(--radius-xl)-2px)] motion-reduce:transition-none',\n 'after:pointer-events-none after:absolute after:inset-x-4 after:-top-px after:h-px after:mask-x-from-76%',\n displayStatus && statusLineClasses[displayStatus],\n 'has-focus-visible:outline-2 has-focus-visible:outline-offset-4 has-focus-visible:outline-accent3',\n isSelected && 'outline-1 outline-offset-4 outline-border-focus',\n isBodyExpanded && 'border-dashed border-muted-foreground/40 shadow-none',\n isWaiting && 'border-accent3',\n isHovered && !isSelected && 'bg-muted',\n )}\n data-workflow-node\n data-workflow-step-key={stepKey}\n data-workflow-step-status={displayStatus ?? 'idle'}\n data-workflow-step-active={isSelected || undefined}\n data-workflow-step-waiting={isWaiting || undefined}\n data-workflow-step-hovered={isHovered || undefined}\n data-testid={props.isNestedWorkflowStep ? 'workflow-nested-node' : 'workflow-default-node'}\n onMouseEnter={() => onHoverChange?.(true)}\n onMouseLeave={() => onHoverChange?.(false)}\n >\n <div className=\"m-0.5 overflow-hidden rounded-(--card-radius)\">\n <Summary\n className={cn(\n 'nodrag nopan flex w-full flex-col text-left',\n onSelect && 'group cursor-pointer focus-visible:outline-hidden',\n )}\n type={onSelect ? 'button' : undefined}\n aria-label={onSelect ? `Inspect ${label}` : undefined}\n aria-pressed={onSelect ? Boolean(isSelected) : undefined}\n onClick={onSelect}\n >\n <span className=\"flex items-start justify-between gap-2.5 rounded-(--card-radius) px-3.5 py-3 group-hover:bg-fill-subtle\">\n <span className=\"min-w-0 text-column wrap-anywhere text-foreground\" title={label}>\n <Shimmer active={isRunning}>{label}</Shimmer>\n </span>\n <WorkflowTypeBadge {...props} />\n </span>\n <span className=\"flex flex-col gap-2 rounded-t-(--card-radius) bg-card px-3.5 py-3 empty:py-1.5\">\n {description && <span className=\"text-caption wrap-anywhere text-muted-foreground\">{description}</span>}\n <WorkflowTiming duration={props.duration} date={props.date} />\n {isWaiting && <span className=\"text-meta text-accent3\">Next step in debug</span>}\n {isForEach && foreachProgress && (\n <span className=\"flex flex-col gap-2 py-1 text-meta\">\n <span>\n <strong>{foreachProgress.completedCount}</strong> of {foreachProgress.totalCount} items complete\n </span>\n {foreachProgress.totalCount > 0 ? (\n <progress\n className=\"h-1 w-full appearance-none border-0 bg-muted accent-positive1 [&::-moz-progress-bar]:bg-positive1 [&::-webkit-progress-bar]:bg-muted [&::-webkit-progress-value]:bg-positive1\"\n aria-label={`${label} completed items`}\n value={foreachProgress.completedCount}\n max={foreachProgress.totalCount}\n />\n ) : (\n <span>No items to process</span>\n )}\n </span>\n )}\n {capabilities.length > 0 && (\n <span className=\"text-meta text-muted-foreground\">{capabilities.join(' · ')}</span>\n )}\n </span>\n </Summary>\n <div\n className={cn(\n 'nodrag nopan flex min-h-7 items-center justify-between gap-2 bg-card px-3.5 pb-2.5 text-meta text-muted-foreground',\n displayStatus && footerStatusClasses[displayStatus],\n )}\n >\n <span role=\"status\" className={isRunning ? 'sr-only motion-reduce:not-sr-only' : undefined}>\n {statusLabel}\n </span>\n {startedAt !== undefined && (\n <span className=\"ml-auto\">\n <WorkflowClock\n startedAt={startedAt}\n endedAt={endedAt}\n isRunning={isRunning}\n spansSuspension={props.spansSuspension}\n />\n </span>\n )}\n {actionBar}\n </div>\n\n {body && (\n <>\n <CollapsibleTrigger\n className={cn(\n surfaceStateLayerStyle,\n 'nodrag nopan flex min-h-11 w-full items-center justify-between border-t border-border bg-card px-3.5 py-2.5 text-caption focus-visible:shadow-none focus-visible:ring-0',\n )}\n >\n <span>\n {expanded ? 'Collapse' : 'Expand'} {isForEach ? 'loop' : 'workflow'}\n </span>\n <ChevronRight aria-hidden size={14} />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"h-155 overflow-hidden border-t border-dashed border-border\">\n {body}\n </CollapsibleContent>\n </>\n )}\n </div>\n {hasActivity && (\n <ActivityWick\n status={isSuspended ? 'ready' : 'working'}\n aria-hidden\n className=\"before:hidden\"\n style={isSuspended ? suspendedWickStyle : undefined}\n />\n )}\n </Collapsible>\n </div>\n );\n}\n","import { javascript } from '@codemirror/lang-javascript';\nimport { jsonLanguage } from '@codemirror/lang-json';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { useCodemirrorTheme } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\n\nexport const WorkflowCodeContent = ({\n data,\n language = 'auto',\n}: {\n data: unknown;\n language?: 'json' | 'javascript' | 'auto';\n}) => {\n const theme = useCodemirrorTheme();\n\n const getExtensions = (content: string) => {\n if (language === 'javascript') {\n return [javascript(), EditorView.lineWrapping];\n }\n if (language === 'json') {\n return [jsonLanguage, EditorView.lineWrapping];\n }\n\n try {\n JSON.parse(content);\n return [jsonLanguage, EditorView.lineWrapping];\n } catch {\n if (\n content.includes('=>') ||\n content.includes('function') ||\n content.includes('const ') ||\n content.includes('return ')\n ) {\n return [javascript(), EditorView.lineWrapping];\n }\n return [EditorView.lineWrapping];\n }\n };\n\n if (typeof data !== 'string') {\n const content = JSON.stringify(data, null, 2);\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={content} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror value={content} theme={theme} extensions={[jsonLanguage, EditorView.lineWrapping]} />\n </div>\n </div>\n );\n }\n\n const extensions = getExtensions(data);\n\n let displayContent = data;\n try {\n const json = JSON.parse(data);\n displayContent = JSON.stringify(json, null, 2);\n } catch {}\n\n return (\n <div className=\"relative overflow-auto\" style={{ maxHeight: 500 }}>\n <div className=\"absolute top-2 right-2 z-10 rounded-full bg-muted\">\n <CopyButton content={data} />\n </div>\n <div className=\"rounded-lg bg-muted p-4\">\n <CodeMirror value={displayContent} theme={theme} extensions={extensions} />\n </div>\n </div>\n );\n};\n","import { Database } from 'lucide-react';\nimport { useState } from 'react';\nimport type { MouseEventHandler } from 'react';\nimport { WorkflowCodeContent } from './workflow-code-dialog-content';\nimport { Button } from '@/ds/components/Button';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle, surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface WorkflowEdgeDataButtonProps {\n previousStepId?: string;\n output?: unknown;\n label?: string;\n selected?: boolean;\n onInspect?: MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const WorkflowEdgeDataButton = ({\n previousStepId,\n output,\n label,\n selected,\n onInspect,\n}: WorkflowEdgeDataButtonProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const dataLabel = label ?? (previousStepId ? `${previousStepId} output` : 'Previous output');\n\n if (output === undefined) {\n return null;\n }\n\n return (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={onInspect ?? (() => setIsOpen(true))}\n aria-label={`View ${dataLabel}`}\n aria-pressed={selected}\n className={cn(\n raisedSurfaceStyle,\n surfaceStateLayerStyle,\n 'h-7 rounded-lg px-2 text-foreground aria-pressed:before:bg-fill',\n )}\n icon={<Database className=\"text-accent1\" />}\n >\n Data\n </Button>\n\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent className=\"w-full max-w-3xl\">\n <DialogHeader>\n <DialogTitle>Step output</DialogTitle>\n </DialogHeader>\n <DialogBody className=\"overflow-auto\" style={{ maxHeight: 700 }}>\n <div className=\"min-w-0 rounded-lg border border-border bg-background p-3\">\n <Txt variant=\"caption\" tone=\"ink\" className=\"mb-2 block\">\n {dataLabel}\n </Txt>\n <WorkflowCodeContent data={output} />\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import type { Edge, Node } from '@xyflow/react';\n\nexport const WORKFLOW_DATA_EDGE_TYPE = 'workflow-data-edge';\nexport const WORKFLOW_BOUNDARY_NODE_TYPE = 'workflow-boundary-node';\n\nexport interface WorkflowDataEdgeData {\n [key: string]: unknown;\n previousStepId?: string;\n nextStepId?: string;\n conditionNode?: boolean;\n boundaryPayload?: 'workflow-input' | 'workflow-output';\n edgeStatus?: 'success' | 'idle';\n dataLabelPlacement?: 'source' | 'hidden';\n}\n\nexport type WorkflowDataEdgeModel = Edge<WorkflowDataEdgeData, typeof WORKFLOW_DATA_EDGE_TYPE>;\n\nexport type WorkflowBoundaryNodeData = {\n boundaryRole: 'start' | 'end';\n label: string;\n};\n\nexport type WorkflowBoundaryNodeModel = Node<WorkflowBoundaryNodeData, typeof WORKFLOW_BOUNDARY_NODE_TYPE>;\n","import { Handle, Position } from '@xyflow/react';\nimport type { NodeProps } from '@xyflow/react';\n\nimport type { WorkflowBoundaryNodeModel } from './types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/utils/cn';\n\nexport const WorkflowBoundaryNode = ({ data }: NodeProps<WorkflowBoundaryNodeModel>) => {\n const isStart = data.boundaryRole === 'start';\n\n return (\n <>\n {!isStart && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div\n data-workflow-boundary-node\n data-testid={`workflow-boundary-${data.boundaryRole}`}\n className={cn(\n 'relative flex h-[38px] w-28 items-center justify-center text-muted-foreground after:absolute after:inset-x-0 after:mask-x-from-60%',\n isStart\n ? 'after:bottom-0 after:h-px after:bg-muted-foreground'\n : 'after:top-0 after:h-1 after:border-y after:border-muted-foreground',\n )}\n >\n <Txt variant=\"meta\">{data.label}</Txt>\n </div>\n {isStart && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n};\n","import { BaseEdge, EdgeLabelRenderer, getBezierPath, Position, useInternalNode } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\nimport { useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { WorkflowEdgeDataButton } from '../data/workflow-edge-data-button';\nimport type { WorkflowDataEdgeModel } from './types';\n\nexport interface WorkflowDataEdgeViewProps extends EdgeProps<WorkflowDataEdgeModel> {\n output?: unknown;\n label?: string;\n dataControl?: ReactNode;\n}\n\nexport function WorkflowDataEdgeView({ output, label, dataControl, ...props }: WorkflowDataEdgeViewProps) {\n const source = useInternalNode(props.source);\n const target = useInternalNode(props.target);\n const sourceWidth = source?.measured?.width ?? source?.width;\n const sourceHeight = source?.measured?.height ?? source?.height;\n const targetWidth = target?.measured?.width ?? target?.width;\n const hasBottomSource =\n source && sourceWidth !== undefined && sourceHeight !== undefined && props.sourcePosition === Position.Bottom;\n const hasTopTarget = target && targetWidth !== undefined && props.targetPosition === Position.Top;\n // Nested canvases scale DOM handle measurements twice; route in graph coordinates.\n const sourceX = hasBottomSource ? source.internals.positionAbsolute.x + sourceWidth / 2 : props.sourceX;\n const sourceY = hasBottomSource ? source.internals.positionAbsolute.y + sourceHeight : props.sourceY;\n const targetX = hasTopTarget ? target.internals.positionAbsolute.x + targetWidth / 2 : props.targetX;\n const targetY = hasTopTarget ? target.internals.positionAbsolute.y : props.targetY;\n const [edgePath, midpointX, midpointY] = getBezierPath({\n ...props,\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n const labelPlacement = props.data?.dataLabelPlacement;\n const labelX = labelPlacement === 'source' ? sourceX : midpointX;\n const labelY = labelPlacement === 'source' ? sourceY + Math.min(24, Math.max(0, (targetY - sourceY) / 4)) : midpointY;\n const arrowId = useId();\n const isExecuted = props.data?.edgeStatus === 'success';\n const pathColor = isExecuted\n ? 'color-mix(in oklab, var(--positive1) 82%, var(--foreground))'\n : 'var(--muted-foreground)';\n\n return (\n <>\n <defs>\n <marker id={arrowId} viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto\">\n <path d=\"M1 1 L9 5 L1 9 Z\" fill={pathColor} />\n </marker>\n </defs>\n <BaseEdge\n id={props.id}\n path={edgePath}\n markerEnd={`url(#${arrowId})`}\n style={{\n ...props.style,\n stroke: pathColor,\n strokeWidth: isExecuted ? 2 : 1,\n strokeLinecap: 'round',\n strokeDasharray: isExecuted ? 'none' : '5 6',\n }}\n vectorEffect=\"non-scaling-stroke\"\n data-edge-status={props.data?.edgeStatus ?? 'idle'}\n data-edge-from={props.data?.previousStepId}\n data-edge-to={props.data?.nextStepId}\n />\n {labelPlacement !== 'hidden' && (\n <EdgeLabelRenderer>\n <div\n className=\"nodrag nopan flex items-center justify-center\"\n style={{\n position: 'absolute',\n pointerEvents: 'all',\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n }}\n >\n {dataControl ?? (\n <WorkflowEdgeDataButton\n previousStepId={props.data?.boundaryPayload ? undefined : props.data?.previousStepId}\n output={output}\n label={label}\n />\n )}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","export function workflowCameraDuration() {\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 0 : 300;\n}\n","import { useViewport } from '@xyflow/react';\nimport type { Node } from '@xyflow/react';\nimport { GitFork } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface WorkflowGraphGroup {\n id: string;\n label: string;\n description: string;\n nodeIds: string[];\n}\n\nexport function WorkflowGraphGroups({ nodes, groups }: { nodes: Node[]; groups: WorkflowGraphGroup[] }) {\n const { x, y, zoom } = useViewport();\n return (\n <div\n className=\"pointer-events-none absolute inset-0 z-0 origin-top-left\"\n style={{ transform: `translate(${x}px, ${y}px) scale(${zoom})` }}\n >\n {groups.map(group => {\n const members = nodes.flatMap(node => {\n if (!group.nodeIds.includes(node.id) || !node.measured?.width || !node.measured.height) return [];\n return [{ x: node.position.x, y: node.position.y, width: node.measured.width, height: node.measured.height }];\n });\n if (!members.length || members.length !== group.nodeIds.length) return null;\n const left = Math.min(...members.map(node => node.x)) - 20;\n const top = Math.min(...members.map(node => node.y)) - 54;\n const right = Math.max(...members.map(node => node.x + node.width)) + 20;\n const bottom = Math.max(...members.map(node => node.y + node.height)) + 20;\n return (\n <div\n key={group.id}\n className=\"absolute rounded-xl border border-dashed border-muted-foreground/25 bg-muted-foreground/3\"\n style={{ transform: `translate(${left}px, ${top}px)`, width: right - left, height: bottom - top }}\n >\n <div className=\"flex items-center gap-2 px-5 py-4 text-meta text-muted-foreground\">\n <Badge size=\"xs\" variant=\"blue\" emphasis=\"muted\" icon={<GitFork aria-hidden />}>\n {group.label}\n </Badge>\n <span>{group.description}</span>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { PanelProps } from '@xyflow/react';\nimport { Panel, useViewport, useReactFlow, useStore } from '@xyflow/react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { Button } from '@/ds/components/Button';\nimport { Slider } from '@/ds/components/Slider';\nimport { cn } from '@/utils/cn';\n\nexport const ZoomSlider = forwardRef<\n HTMLDivElement,\n Omit<PanelProps, 'children'> & { compact?: boolean; onFitView?: () => void }\n>(({ className, compact = false, onFitView, ...props }, ref) => {\n const { zoom } = useViewport();\n const { zoomTo, zoomIn, zoomOut, fitView } = useReactFlow();\n const minZoom = useStore(state => state.minZoom);\n const maxZoom = useStore(state => state.maxZoom);\n\n return (\n <Panel\n ref={ref}\n className={cn(\n 'flex items-center gap-1 rounded-full border border-border bg-background p-1 text-foreground',\n className,\n )}\n {...props}\n >\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom out\"\n disabled={zoom <= minZoom}\n onClick={() => zoomOut({ duration: workflowCameraDuration() })}\n >\n <Minus />\n </Button>\n {!compact && (\n <Slider\n className=\"w-[140px]\"\n aria-label=\"Canvas zoom\"\n value={[zoom]}\n min={minZoom}\n max={maxZoom}\n step={0.01}\n largeStep={0.25}\n format={{ style: 'percent' }}\n onValueChange={values => {\n const [nextZoom] = values;\n if (nextZoom !== undefined) void zoomTo(nextZoom);\n }}\n />\n )}\n <Button\n size=\"icon-sm\"\n tooltip=\"Zoom in\"\n disabled={zoom >= maxZoom}\n onClick={() => zoomIn({ duration: workflowCameraDuration() })}\n >\n <Plus />\n </Button>\n <Button\n size=\"sm\"\n className=\"min-w-16 tabular-nums\"\n tooltip=\"Reset to actual size (100%)\"\n onClick={() => zoomTo(1, { duration: workflowCameraDuration() })}\n >\n {(100 * zoom).toFixed(0)}%\n </Button>\n <Button\n size=\"icon-sm\"\n tooltip=\"Fit view\"\n onClick={onFitView ?? (() => fitView({ duration: workflowCameraDuration(), maxZoom: 1 }))}\n >\n <Maximize />\n </Button>\n </Panel>\n );\n});\n\nZoomSlider.displayName = 'ZoomSlider';\n","import { Background, BackgroundVariant, ReactFlow, useNodesInitialized, useReactFlow, useStore } from '@xyflow/react';\nimport type { Edge, Node, ReactFlowProps } from '@xyflow/react';\nimport { useContext, useEffect, useId, useRef } from 'react';\nimport { WorkflowCanvasInsetContext, workflowFitOptions } from '../workflow-canvas-inset';\nimport { workflowCameraDuration } from './workflow-camera-duration';\nimport { WorkflowGraphGroups } from './workflow-graph-groups';\nimport type { WorkflowGraphGroup } from './workflow-graph-groups';\nimport { ZoomSlider } from './zoom-slider';\nimport { cn } from '@/utils/cn';\nimport '@xyflow/react/dist/style.css';\n\nexport type { WorkflowGraphGroup } from './workflow-graph-groups';\n\nexport interface WorkflowGraphCanvasProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> extends Pick<\n ReactFlowProps<NodeType, EdgeType>,\n 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onNodesChange' | 'onNodeClick'\n> {\n focusNodeId?: string;\n variant?: 'default' | 'nested' | 'inline';\n groups?: WorkflowGraphGroup[];\n}\n\nexport function WorkflowGraphCanvas<NodeType extends Node, EdgeType extends Edge>({\n nodes,\n edges,\n nodeTypes,\n edgeTypes,\n onNodesChange,\n onNodeClick,\n focusNodeId,\n groups,\n variant = 'default',\n}: WorkflowGraphCanvasProps<NodeType, EdgeType>) {\n const graphRef = useRef<HTMLDivElement>(null);\n const backgroundId = useId();\n const panelInset = useContext(WorkflowCanvasInsetContext);\n const leftInset = variant === 'default' ? panelInset : 0;\n const isInline = variant === 'inline';\n const { getNodes, setCenter, fitView } = useReactFlow<NodeType, EdgeType>();\n const nodesInitialized = useNodesInitialized();\n const canvasWidth = useStore(state => state.width);\n const canvasHeight = useStore(state => state.height);\n const hasCompactZoom = canvasWidth - leftInset < 560;\n const inlineNodeLayout = isInline\n ? JSON.stringify(\n nodes?.map(node => [\n node.id,\n node.position.x,\n node.position.y,\n node.measured?.width ?? node.width,\n node.measured?.height ?? node.height,\n ]),\n )\n : undefined;\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized) return;\n if (variant === 'default') return;\n void fitView({ ...workflowFitOptions(leftInset, isInline), duration: 0 });\n }, [canvasWidth, canvasHeight, nodesInitialized, inlineNodeLayout, fitView, leftInset, isInline, variant]);\n\n useEffect(() => {\n if (!canvasWidth || !canvasHeight || !nodesInitialized || !focusNodeId) return;\n const focusNode = getNodes().find(node => node.id === focusNodeId);\n if (!focusNode) return;\n if (!graphRef.current?.contains(document.activeElement)) {\n graphRef.current?.focus({ preventScroll: true });\n }\n const width = focusNode.measured?.width ?? focusNode.width ?? 274;\n const height = focusNode.measured?.height ?? focusNode.height ?? 100;\n const duration = workflowCameraDuration();\n const exceedsVisibleWidth = canvasWidth > 0 && width > canvasWidth - leftInset - 80;\n const exceedsVisibleHeight = canvasHeight > 0 && height > canvasHeight - 104;\n if (exceedsVisibleWidth || exceedsVisibleHeight) {\n void fitView({ ...workflowFitOptions(leftInset), nodes: [{ id: focusNode.id }], duration });\n return;\n }\n void setCenter(focusNode.position.x + width / 2 - leftInset / 2, focusNode.position.y + height / 2, {\n duration,\n zoom: 1,\n });\n }, [canvasWidth, canvasHeight, nodesInitialized, focusNodeId, getNodes, setCenter, fitView, leftInset]);\n\n return (\n <div\n ref={graphRef}\n tabIndex={-1}\n data-testid=\"workflow-graph-viewport\"\n className={cn('size-full outline-none', variant === 'nested' ? 'bg-sidebar' : 'bg-background')}\n >\n <ReactFlow\n fitView={variant === 'default'}\n fitViewOptions={workflowFitOptions(leftInset)}\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n deleteKeyCode={null}\n panOnScroll={!isInline}\n panOnDrag={!isInline}\n zoomOnPinch={!isInline}\n zoomOnDoubleClick={!isInline}\n preventScrolling={!isInline}\n proOptions={isInline ? { hideAttribution: true } : undefined}\n zoomOnScroll={false}\n minZoom={0.1}\n maxZoom={4}\n >\n {!isInline && (\n <ZoomSlider\n position=\"top-right\"\n className=\"m-2!\"\n compact={hasCompactZoom}\n onFitView={() => fitView({ ...workflowFitOptions(leftInset), duration: workflowCameraDuration() })}\n />\n )}\n {groups && <WorkflowGraphGroups nodes={nodes ?? []} groups={groups} />}\n {!isInline && <Background id={backgroundId} variant={BackgroundVariant.Dots} gap={12} size={0.5} />}\n </ReactFlow>\n </div>\n );\n}\n","import { Handle, Position } from '@xyflow/react';\nimport type { ReactNode } from 'react';\n\nexport interface WorkflowNodeFrameProps {\n withoutTopHandle?: boolean;\n withoutBottomHandle?: boolean;\n children: ReactNode;\n}\n\nexport function WorkflowNodeFrame({ withoutTopHandle, withoutBottomHandle, children }: WorkflowNodeFrameProps) {\n return (\n <>\n {!withoutTopHandle && <Handle type=\"target\" position={Position.Top} style={{ visibility: 'hidden' }} />}\n <div className=\"nodrag pointer-events-auto\">{children}</div>\n {!withoutBottomHandle && <Handle type=\"source\" position={Position.Bottom} style={{ visibility: 'hidden' }} />}\n </>\n );\n}\n","import { Loader2, Pause, PlayIcon, StepForwardIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\n\nexport interface WorkflowDebugControlsProps {\n isStreaming?: boolean;\n canRunNextStep: boolean;\n nextStepLabel?: string;\n disabled?: boolean;\n children?: ReactNode;\n onRunNextStep: () => void;\n onContinueRun: () => void;\n}\n\nexport function WorkflowDebugControls({\n isStreaming,\n canRunNextStep,\n nextStepLabel,\n disabled,\n children,\n onRunNextStep,\n onContinueRun,\n}: WorkflowDebugControlsProps) {\n const nextStepFallback = canRunNextStep ? 'Ready to advance' : 'Next step unavailable';\n const actionsDisabled = !canRunNextStep || isStreaming || disabled;\n\n return (\n <div className=\"flex min-w-0 flex-col gap-3\" data-testid=\"workflow-debug-step-controls\">\n <div className=\"rounded-xl border border-border/50 bg-background p-3\">\n <div className=\"mb-2 flex flex-wrap items-center justify-between gap-2\">\n <span className=\"text-meta text-muted-foreground\">Next step</span>\n <Badge size=\"sm\" icon={<Pause />} emphasis=\"muted\">\n Step by step\n </Badge>\n </div>\n <div className=\"text-subheading break-words text-foreground\" aria-live=\"polite\">\n {nextStepLabel || nextStepFallback}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"min-w-0 flex-1\"\n aria-label=\"Run next step\"\n onClick={onRunNextStep}\n disabled={actionsDisabled}\n icon={isStreaming ? <Loader2 className=\"motion-safe:animate-spin\" /> : <StepForwardIcon />}\n >\n {isStreaming ? 'Running step…' : 'Run next step'}\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"Continue full run\"\n onClick={onContinueRun}\n disabled={actionsDisabled}\n >\n <PlayIcon />\n </Button>\n {children}\n </div>\n </div>\n );\n}\n","import { AlertCircleIcon } from 'lucide-react';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type WorkflowGraphPlaceholderProps = { isLoading: true } | { isLoading?: false; workflowName: string };\n\nexport function WorkflowGraphPlaceholder(props: WorkflowGraphPlaceholderProps) {\n if (props.isLoading) {\n return (\n <div className=\"p-4\">\n <Skeleton className=\"h-full\" />\n </div>\n );\n }\n\n return (\n <div className=\"grid h-full place-items-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <AlertCircleIcon />\n <div>We couldn&apos;t find {props.workflowName} workflow.</div>\n </div>\n </div>\n );\n}\n","import type { WorkflowConditionCardViewProps } from '../../types';\nimport { WorkflowConditionCardView } from './workflow-condition-card-view';\n\nexport type WorkflowConditionCardProps = Omit<WorkflowConditionCardViewProps, 'type'>;\n\nexport function WorkflowConditionCard({ conditions, ...props }: WorkflowConditionCardProps) {\n return <WorkflowConditionCardView {...props} type={conditions[0]?.type} conditions={conditions} />;\n}\n","import { MoreVerticalIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nexport function WorkflowStepActions({ children }: { children: ReactNode }) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n size=\"icon-sm\"\n variant=\"ghost\"\n aria-label=\"Step actions\"\n title=\"Step actions\"\n className=\"nodrag nopan\"\n >\n <MoreVerticalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">{children}</DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import {\n AlertCircleIcon,\n BracesIcon,\n Clock3Icon,\n PanelRightIcon,\n PlayIcon,\n RotateCcwIcon,\n ShieldAlertIcon,\n StepForwardIcon,\n} from 'lucide-react';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst actions = {\n nested: { icon: PanelRightIcon, label: 'View nested graph', activeLabel: 'Hide nested graph' },\n map: { icon: BracesIcon, label: 'Map config', activeLabel: 'Hide map config' },\n timeTravel: { icon: Clock3Icon, label: 'Time travel' },\n runStep: { icon: PlayIcon, label: 'Run step' },\n continueRun: { icon: StepForwardIcon, label: 'Continue run' },\n resumeData: { icon: RotateCcwIcon, label: 'Resume data' },\n error: { icon: AlertCircleIcon, label: 'Error' },\n tripwire: { icon: ShieldAlertIcon, label: 'Tripwire' },\n};\n\nexport interface WorkflowStepActionProps {\n action: keyof typeof actions;\n isActive?: boolean;\n onSelect: () => void;\n}\n\nexport function WorkflowStepAction({ action, isActive, onSelect }: WorkflowStepActionProps) {\n const definition = actions[action];\n const ActionIcon = definition.icon;\n const label = isActive && 'activeLabel' in definition ? definition.activeLabel : definition.label;\n return (\n <DropdownMenu.Item onSelect={onSelect} className={action === 'tripwire' ? 'text-amber-400' : undefined}>\n <ActionIcon />\n <span>{label}</span>\n </DropdownMenu.Item>\n );\n}\n"],"names":["createContext","Repeat2","Workflow","GitFork","ArrowRightLeft","CalendarClock","Timer","Bot","Wrench","GitBranch","Braces","jsx","Badge","List","PlayCircle","Clock","Layers","Network","Repeat1","Repeat","RefreshCw","CornerDownRight","useState","useEffect","formatDuration","Txt","Code","formatTypeScript","jsxs","raisedSurfaceStyle","Fragment","CopyButton","cn","Collapsible","Shimmer","CollapsibleTrigger","surfaceStateLayerStyle","ChevronRight","CollapsibleContent","ActivityWick","useCodemirrorTheme","javascript","EditorView","jsonLanguage","CodeMirror","Button","Database","Dialog","DialogContent","DialogHeader","DialogTitle","DialogBody","Handle","Position","useInternalNode","getBezierPath","useId","BaseEdge","EdgeLabelRenderer","useViewport","forwardRef","useReactFlow","useStore","Panel","Minus","Slider","Plus","Maximize","useRef","useContext","useNodesInitialized","ReactFlow","Background","BackgroundVariant","Pause","Loader2","StepForwardIcon","PlayIcon","Skeleton","AlertCircleIcon","DropdownMenu","MoreVerticalIcon","PanelRightIcon","BracesIcon","Clock3Icon","RotateCcwIcon","ShieldAlertIcon"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { createContext, useState, useEffect, useId, forwardRef, useRef, useContext } from 'react';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
- import { Repeat2, Workflow, GitFork, ArrowRightLeft, CalendarClock, Timer, Bot, Wrench, Braces, CornerDownRight, GitBranch, RefreshCw, Repeat, Repeat1, Network, Layers, Clock, PlayCircle, List, ChevronRight, Database, Minus, Plus, Maximize, Pause, Loader2, StepForwardIcon, PlayIcon, AlertCircleIcon, MoreVerticalIcon, ShieldAlertIcon, RotateCcwIcon, Clock3Icon, BracesIcon, PanelRightIcon } from 'lucide-react';
3
+ import { Repeat2, Workflow, GitFork, ArrowRightLeft, CalendarClock, Timer, Bot, Wrench, GitBranch, Braces, CornerDownRight, RefreshCw, Repeat, Repeat1, Network, Layers, Clock, PlayCircle, List, ChevronRight, Database, Minus, Plus, Maximize, Pause, Loader2, StepForwardIcon, PlayIcon, AlertCircleIcon, MoreVerticalIcon, ShieldAlertIcon, RotateCcwIcon, Clock3Icon, BracesIcon, PanelRightIcon } from 'lucide-react';
4
4
  import { B as Badge } from '../Badge-TD55_qZJ.js';
5
5
  import { T as Txt } from '../Txt-DTh3Pa_a.js';
6
6
  import { formatDuration } from '../utils/duration.es.js';
@@ -47,6 +47,7 @@ function getWorkflowCardBadge(props) {
47
47
  return { label: "Delay", tone: "purple", Icon: Timer, indicator: "sleep" };
48
48
  if (props.nodeKind === "agent") return { label: "Agent", tone: "cyan", Icon: Bot };
49
49
  if (props.nodeKind === "tool") return { label: "Tool", tone: "pink", Icon: Wrench };
50
+ if (props.nodeKind === "classifier") return { label: "Classifier", tone: "blue", Icon: GitBranch };
50
51
  return { label: "Step", tone: "neutral", Icon: Braces };
51
52
  }
52
53