@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.
- package/dist/components/DisabledFeatureButton.cjs.js +44 -0
- package/dist/components/DisabledFeatureButton.cjs.js.map +1 -0
- package/dist/components/DisabledFeatureButton.d.ts +2 -0
- package/dist/components/DisabledFeatureButton.es.js +40 -0
- package/dist/components/DisabledFeatureButton.es.js.map +1 -0
- package/dist/components/LogsDataList.cjs.js +2 -0
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -0
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/Workflow.cjs.js +1 -0
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +2 -1
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -0
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -0
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +2 -0
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +2 -0
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -0
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -0
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/src/domains/traces/hooks/use-trace-query.d.ts +4 -10
- package/dist/src/ds/components/DisabledFeatureButton/disabled-feature-button.d.ts +13 -0
- package/dist/src/ds/components/DisabledFeatureButton/index.d.ts +1 -0
- package/dist/src/ds/components/Workflow/types.d.ts +1 -1
- package/dist/style.css +4 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.es.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'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":["CodeMirror"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Workflow.es.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'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":["CodeMirror"],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
|
|
7
7
|
const dataListSkeleton = require('../../../data-list-skeleton-K_WmrVke.cjs');
|
|
8
|
+
require('react');
|
|
9
|
+
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
8
10
|
const skeleton = require('../../../skeleton-cXUjPrq9.cjs');
|
|
9
11
|
|
|
10
12
|
function TracesPageSkeleton({ columnPreferences = domains_traces_traceListColumns.DEFAULT_TRACE_COLUMN_PREFERENCES }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":"
|
|
1
|
+
{"version":3,"file":"traces-page-skeleton.cjs.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","buildTraceListColumns","jsxs","jsx","Skeleton","DataListSkeleton"],"mappings":";;;;;;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoBA,gEAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAUC,sDAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnDD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACAD,cAAA,CAACE,iCAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns.es.js';
|
|
3
3
|
import { D as DataListSkeleton } from '../../../data-list-skeleton-h4pILqCC.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
4
6
|
import { S as Skeleton } from '../../../skeleton-BsRAXyh5.js';
|
|
5
7
|
|
|
6
8
|
function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traces-page-skeleton.es.js","sources":["../../../../src/domains/traces/components/traces-page-skeleton.tsx"],"sourcesContent":["import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns';\nimport type { TraceColumnPreferences } from '../trace-list-columns';\nimport { DataListSkeleton } from '@/ds/components/DataList';\nimport { Skeleton } from '@/ds/components/Skeleton';\n\nexport type TracesPageSkeletonProps = {\n columnPreferences?: TraceColumnPreferences;\n};\n\n/**\n * Page-level placeholder shown while filter-field discovery is pending: a toolbar-height\n * bar stands in for the FilterBar and the usual list skeleton for the trace rows.\n */\nexport function TracesPageSkeleton({ columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES }: TracesPageSkeletonProps) {\n const columns = buildTraceListColumns(columnPreferences);\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n role=\"status\"\n aria-label=\"Loading traces\"\n data-testid=\"traces-page-skeleton\"\n >\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-control-md min-w-64 flex-1\" />\n <Skeleton className=\"h-control-md w-28\" />\n </div>\n <DataListSkeleton columns={columns} fit=\"container\" />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAaO,SAAS,kBAAA,CAAmB,EAAE,iBAAA,GAAoB,gCAAA,EAAiC,EAA4B;AACpH,EAAA,MAAM,OAAA,GAAU,sBAAsB,iBAAiB,CAAA;AACvD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,aAAA,EAAY,sBAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACnD,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB;AAAA,SAAA,EAC1C,CAAA;AAAA,wBACA,GAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,GAAA,EAAI,WAAA,EAAY;AAAA;AAAA;AAAA,GACtD;AAEJ;;;;"}
|
|
@@ -36,7 +36,7 @@ function useTraceQuery({
|
|
|
36
36
|
queryFn: query ? async ({ pageParam }) => {
|
|
37
37
|
const queryClient = new clientJs.MastraClient({ ...client.options, retries: 0 });
|
|
38
38
|
const response = await queryClient.queryTraces({ ...query, page: { limit, after: pageParam ?? null } });
|
|
39
|
-
if ("page" in response) return response;
|
|
39
|
+
if ("traces" in response && "page" in response) return response;
|
|
40
40
|
throw new Error("Expected a cursor-paginated trace query response");
|
|
41
41
|
} : reactQuery.skipToken,
|
|
42
42
|
initialPageParam: void 0,
|