Reverting e8039f9 to diagnose compound rendering regression affecting
all compound types (SPLIT, CHOICE, LOOP, DO_TRY) and error handlers.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
288 lines
19 KiB
HTML
288 lines
19 KiB
HTML
<h2>Detail Panel: Tab Designs</h2>
|
|
<p class="subtitle">Bottom panel content when a processor node is selected</p>
|
|
|
|
<div class="mockup">
|
|
<div class="mockup-header">Info Tab — processor metadata + attributes</div>
|
|
<div class="mockup-body" style="background: #fff; padding: 0;">
|
|
<!-- Processor header -->
|
|
<div style="display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-bottom: 1px solid #E4DFD8; background: #FAFAF8;">
|
|
<span style="font-size: 11px; font-weight: 600; color: #1A1612;">bean:validate</span>
|
|
<span style="font-size: 10px; color: #C0392B; background: #FDF2F0; padding: 1px 6px; border-radius: 8px;">FAILED</span>
|
|
<span style="font-size: 10px; color: #9C9184;">processor-5</span>
|
|
</div>
|
|
<!-- Tabs -->
|
|
<div style="display: flex; gap: 0; border-bottom: 1px solid #E4DFD8; background: #FAFAF8; padding: 0 14px;">
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C6820E; border-bottom: 2px solid #C6820E; font-weight: 600; cursor: pointer;">Info</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Headers</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Input</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Output</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C0392B; cursor: pointer;">Error</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Config</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Timeline</div>
|
|
</div>
|
|
<!-- Info content -->
|
|
<div style="padding: 12px 14px; display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px 24px; font-size: 12px;">
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Processor ID</div>
|
|
<div style="color: #1A1612; font-family: monospace; font-size: 11px;">processor-5</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Type</div>
|
|
<div style="color: #1A1612;">BEAN</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Status</div>
|
|
<div style="color: #C0392B; font-weight: 500;">FAILED</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Start Time</div>
|
|
<div style="color: #1A1612;">14:32:05.123</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">End Time</div>
|
|
<div style="color: #1A1612;">14:32:05.243</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Duration</div>
|
|
<div style="color: #1A1612; font-weight: 500;">120ms</div>
|
|
</div>
|
|
<div>
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Endpoint URI</div>
|
|
<div style="color: #1A1612; font-family: monospace; font-size: 11px;">bean:orderValidator?method=validate</div>
|
|
</div>
|
|
<div style="grid-column: span 2;">
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px;">Resolved URI</div>
|
|
<div style="color: #1A1612; font-family: monospace; font-size: 11px;">bean://com.example.OrderValidator?method=validate</div>
|
|
</div>
|
|
<!-- Attributes from taps -->
|
|
<div style="grid-column: span 3; border-top: 1px solid #E4DFD8; padding-top: 8px; margin-top: 4px;">
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px;">Attributes</div>
|
|
<div style="display: flex; gap: 6px; flex-wrap: wrap;">
|
|
<span style="font-size: 10px; padding: 2px 8px; background: #F5F0EA; border-radius: 10px; color: #5C5347;">orderId: <strong>ORD-1234</strong></span>
|
|
<span style="font-size: 10px; padding: 2px 8px; background: #F5F0EA; border-radius: 10px; color: #5C5347;">customer: <strong>Acme Corp</strong></span>
|
|
<span style="font-size: 10px; padding: 2px 8px; background: #F5F0EA; border-radius: 10px; color: #5C5347;">priority: <strong>HIGH</strong></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="margin-top: 20px;"></div>
|
|
|
|
<div class="mockup">
|
|
<div class="mockup-header">Headers Tab — input vs output side by side</div>
|
|
<div class="mockup-body" style="background: #fff; padding: 0;">
|
|
<div style="display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-bottom: 1px solid #E4DFD8; background: #FAFAF8;">
|
|
<span style="font-size: 11px; font-weight: 600; color: #1A1612;">log:incoming</span>
|
|
<span style="font-size: 10px; color: #3D7C47; background: #F0F9F1; padding: 1px 6px; border-radius: 8px;">COMPLETED</span>
|
|
<span style="font-size: 10px; color: #9C9184;">processor-2</span>
|
|
</div>
|
|
<div style="display: flex; gap: 0; border-bottom: 1px solid #E4DFD8; background: #FAFAF8; padding: 0 14px;">
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Info</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C6820E; border-bottom: 2px solid #C6820E; font-weight: 600; cursor: pointer;">Headers</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Input</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Output</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Error</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Config</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Timeline</div>
|
|
</div>
|
|
<!-- Headers side by side -->
|
|
<div style="display: flex; gap: 0; padding: 0;">
|
|
<!-- Input headers -->
|
|
<div style="flex: 1; padding: 10px 14px; border-right: 1px solid #E4DFD8;">
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px;">Input Headers</div>
|
|
<table style="width: 100%; font-size: 11px; border-collapse: collapse;">
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500; width: 40%;">Content-Type</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">application/json</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">JMSMessageID</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">ID:broker-42</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">breadcrumbId</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">abc-123-def</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">CamelHttpMethod</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">POST</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<!-- Output headers -->
|
|
<div style="flex: 1; padding: 10px 14px;">
|
|
<div style="font-size: 10px; color: #9C9184; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px;">Output Headers</div>
|
|
<table style="width: 100%; font-size: 11px; border-collapse: collapse;">
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500; width: 40%;">Content-Type</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">application/json</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">JMSMessageID</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">ID:broker-42</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">breadcrumbId</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">abc-123-def</td>
|
|
</tr>
|
|
<tr style="border-bottom: 1px solid #F5F0EA;">
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500;">CamelHttpMethod</td>
|
|
<td style="padding: 3px 0; color: #1A1612; font-family: monospace; font-size: 10px;">POST</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding: 3px 0; color: #5C5347; font-weight: 500; color: #3D7C47;">orderStatus</td>
|
|
<td style="padding: 3px 0; color: #3D7C47; font-family: monospace; font-size: 10px;">validated <span style="font-size: 9px; color: #9C9184; font-family: sans-serif;">(new)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="margin-top: 20px;"></div>
|
|
|
|
<div class="mockup">
|
|
<div class="mockup-header">Input Tab — formatted message body</div>
|
|
<div class="mockup-body" style="background: #fff; padding: 0;">
|
|
<div style="display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-bottom: 1px solid #E4DFD8; background: #FAFAF8;">
|
|
<span style="font-size: 11px; font-weight: 600; color: #1A1612;">log:incoming</span>
|
|
<span style="font-size: 10px; color: #3D7C47; background: #F0F9F1; padding: 1px 6px; border-radius: 8px;">COMPLETED</span>
|
|
<span style="font-size: 10px; color: #9C9184;">processor-2 · 5ms</span>
|
|
</div>
|
|
<div style="display: flex; gap: 0; border-bottom: 1px solid #E4DFD8; background: #FAFAF8; padding: 0 14px;">
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Info</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Headers</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C6820E; border-bottom: 2px solid #C6820E; font-weight: 600; cursor: pointer;">Input</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Output</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Error</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Config</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Timeline</div>
|
|
</div>
|
|
<!-- Body content with syntax highlighting -->
|
|
<div style="padding: 10px 14px;">
|
|
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px;">
|
|
<span style="font-size: 10px; color: #9C9184;">JSON · 234 bytes</span>
|
|
<button style="font-size: 9px; padding: 2px 8px; border: 1px solid #E4DFD8; background: #FAFAF8; border-radius: 3px; cursor: pointer; color: #5C5347;">Copy</button>
|
|
</div>
|
|
<pre style="font-size: 11px; background: #1A1612; color: #E4DFD8; padding: 12px; border-radius: 6px; margin: 0; line-height: 1.6; overflow-x: auto;">{
|
|
<span style="color: #1A7F8E;">"orderId"</span>: <span style="color: #C6820E;">"ORD-1234"</span>,
|
|
<span style="color: #1A7F8E;">"customer"</span>: {
|
|
<span style="color: #1A7F8E;">"name"</span>: <span style="color: #C6820E;">"Acme Corp"</span>,
|
|
<span style="color: #1A7F8E;">"id"</span>: <span style="color: #7C3AED;">42</span>
|
|
},
|
|
<span style="color: #1A7F8E;">"items"</span>: [
|
|
{
|
|
<span style="color: #1A7F8E;">"product"</span>: <span style="color: #C6820E;">"Widget A"</span>,
|
|
<span style="color: #1A7F8E;">"quantity"</span>: <span style="color: #7C3AED;">5</span>,
|
|
<span style="color: #1A7F8E;">"price"</span>: <span style="color: #7C3AED;">29.99</span>
|
|
}
|
|
],
|
|
<span style="color: #1A7F8E;">"priority"</span>: <span style="color: #C6820E;">"HIGH"</span>
|
|
}</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="margin-top: 20px;"></div>
|
|
|
|
<div class="mockup">
|
|
<div class="mockup-header">Timeline Tab — Gantt-style processor durations</div>
|
|
<div class="mockup-body" style="background: #fff; padding: 0;">
|
|
<div style="display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-bottom: 1px solid #E4DFD8; background: #FAFAF8;">
|
|
<span style="font-size: 11px; font-weight: 600; color: #1A1612;">content-based-routing</span>
|
|
<span style="font-size: 10px; color: #C0392B; background: #FDF2F0; padding: 1px 6px; border-radius: 8px;">FAILED</span>
|
|
<span style="font-size: 10px; color: #9C9184;">247ms total</span>
|
|
</div>
|
|
<div style="display: flex; gap: 0; border-bottom: 1px solid #E4DFD8; background: #FAFAF8; padding: 0 14px;">
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Info</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Headers</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Input</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Output</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C0392B; cursor: pointer;">Error</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Config</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #C6820E; border-bottom: 2px solid #C6820E; font-weight: 600; cursor: pointer;">Timeline</div>
|
|
</div>
|
|
<!-- Gantt chart -->
|
|
<div style="padding: 10px 14px;">
|
|
<!-- Time axis -->
|
|
<div style="display: flex; justify-content: space-between; font-size: 9px; color: #9C9184; margin-bottom: 4px; padding-left: 110px;">
|
|
<span>0ms</span><span>50ms</span><span>100ms</span><span>150ms</span><span>200ms</span><span>247ms</span>
|
|
</div>
|
|
<!-- Processor rows -->
|
|
<div style="display: flex; flex-direction: column; gap: 3px;">
|
|
<!-- from:jms -->
|
|
<div style="display: flex; align-items: center; gap: 8px;">
|
|
<span style="font-size: 10px; color: #5C5347; width: 100px; text-align: right; flex-shrink: 0;">from:jms</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px; position: relative;">
|
|
<div style="position: absolute; left: 0%; width: 0.8%; height: 100%; background: #3D7C47; border-radius: 2px; min-width: 3px;"></div>
|
|
</div>
|
|
<span style="font-size: 9px; color: #9C9184; width: 36px; flex-shrink: 0;">2ms</span>
|
|
</div>
|
|
<!-- log -->
|
|
<div style="display: flex; align-items: center; gap: 8px;">
|
|
<span style="font-size: 10px; color: #5C5347; width: 100px; text-align: right; flex-shrink: 0;">log</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px; position: relative;">
|
|
<div style="position: absolute; left: 0.8%; width: 2%; height: 100%; background: #3D7C47; border-radius: 2px; min-width: 3px;"></div>
|
|
</div>
|
|
<span style="font-size: 9px; color: #9C9184; width: 36px; flex-shrink: 0;">5ms</span>
|
|
</div>
|
|
<!-- setHeader -->
|
|
<div style="display: flex; align-items: center; gap: 8px;">
|
|
<span style="font-size: 10px; color: #5C5347; width: 100px; text-align: right; flex-shrink: 0;">setHeader</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px; position: relative;">
|
|
<div style="position: absolute; left: 2.8%; width: 0.4%; height: 100%; background: #3D7C47; border-radius: 2px; min-width: 3px;"></div>
|
|
</div>
|
|
<span style="font-size: 9px; color: #9C9184; width: 36px; flex-shrink: 0;">1ms</span>
|
|
</div>
|
|
<!-- bean:validate (FAILED - long) -->
|
|
<div style="display: flex; align-items: center; gap: 8px;">
|
|
<span style="font-size: 10px; color: #C0392B; font-weight: 600; width: 100px; text-align: right; flex-shrink: 0;">bean:validate</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px; position: relative;">
|
|
<div style="position: absolute; left: 3.2%; width: 48.6%; height: 100%; background: #C0392B; border-radius: 2px; opacity: 0.8;"></div>
|
|
</div>
|
|
<span style="font-size: 9px; color: #C0392B; font-weight: 500; width: 36px; flex-shrink: 0;">120ms</span>
|
|
</div>
|
|
<!-- to:http (skipped) -->
|
|
<div style="display: flex; align-items: center; gap: 8px; opacity: 0.35;">
|
|
<span style="font-size: 10px; color: #5C5347; width: 100px; text-align: right; flex-shrink: 0;">to:http</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px;"></div>
|
|
<span style="font-size: 9px; color: #9C9184; width: 36px; flex-shrink: 0;">—</span>
|
|
</div>
|
|
<!-- to:jms (skipped) -->
|
|
<div style="display: flex; align-items: center; gap: 8px; opacity: 0.35;">
|
|
<span style="font-size: 10px; color: #5C5347; width: 100px; text-align: right; flex-shrink: 0;">to:jms</span>
|
|
<div style="flex: 1; height: 16px; background: #F5F0EA; border-radius: 2px;"></div>
|
|
<span style="font-size: 9px; color: #9C9184; width: 36px; flex-shrink: 0;">—</span>
|
|
</div>
|
|
</div>
|
|
<div style="margin-top: 8px; font-size: 10px; color: #9C9184;">Click a bar to select that processor in the diagram</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="margin-top: 20px;"></div>
|
|
|
|
<div class="mockup">
|
|
<div class="mockup-header">Error Tab — grayed out when no error on selected processor</div>
|
|
<div class="mockup-body" style="background: #fff; padding: 0;">
|
|
<div style="display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-bottom: 1px solid #E4DFD8; background: #FAFAF8;">
|
|
<span style="font-size: 11px; font-weight: 600; color: #1A1612;">log:incoming</span>
|
|
<span style="font-size: 10px; color: #3D7C47; background: #F0F9F1; padding: 1px 6px; border-radius: 8px;">COMPLETED</span>
|
|
<span style="font-size: 10px; color: #9C9184;">processor-2 · 5ms</span>
|
|
</div>
|
|
<div style="display: flex; gap: 0; border-bottom: 1px solid #E4DFD8; background: #FAFAF8; padding: 0 14px;">
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Info</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Headers</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Input</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Output</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4; cursor: not-allowed;">Error</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer; opacity: 0.4;">Config</div>
|
|
<div style="font-size: 11px; padding: 6px 12px; color: #9C9184; cursor: pointer;">Timeline</div>
|
|
</div>
|
|
<div style="padding: 20px 14px; text-align: center; color: #9C9184; font-size: 12px;">
|
|
No error on this processor
|
|
</div>
|
|
</div>
|
|
</div>
|