@workflow/web-shared 5.0.0-beta.3 → 5.0.0-beta.30
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/README.md +2 -10
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +46 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +228 -90
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -2
- package/dist/components/new-trace-viewer/components/copy-button.js +3 -3
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts +4 -2
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/event-list.js +22 -13
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/new-trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/minimap.js +337 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/new-trace-viewer/components/span-markers.d.ts +46 -0
- package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/span-markers.js +85 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +3 -7
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +25 -84
- package/dist/components/new-trace-viewer/components/timeline.d.ts +19 -15
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +229 -111
- package/dist/components/new-trace-viewer/components/timeline.module.css +46 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/new-trace-viewer/context.d.ts +3 -1
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/context.js +9 -10
- package/dist/components/new-trace-viewer/icons.js +3 -3
- package/dist/components/new-trace-viewer/search.d.ts +19 -0
- package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/search.js +134 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +6 -3
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +167 -162
- package/dist/components/new-trace-viewer/types.d.ts +2 -0
- package/dist/components/new-trace-viewer/types.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/types.js +2 -2
- package/dist/components/new-trace-viewer/utils.d.ts +48 -13
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/utils.js +135 -107
- package/dist/components/run-trace-view.d.ts +5 -7
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +3 -3
- package/dist/components/sidebar/attribute-panel.d.ts +4 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +133 -113
- package/dist/components/sidebar/attributes-block.d.ts +40 -0
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
- package/dist/components/sidebar/attributes-block.js +140 -0
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +17 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +35 -69
- package/dist/components/sidebar/events-list.d.ts +6 -2
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +76 -62
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
- package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
- package/dist/components/sidebar/span-detail-merge.js +92 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
- package/dist/components/sidebar/use-selected-span-detail.js +93 -0
- package/dist/components/stream-viewer.js +1 -1
- package/dist/components/trace-viewer/components/map.d.ts +2 -2
- package/dist/components/trace-viewer/components/map.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/map.js +1 -1
- package/dist/components/trace-viewer/components/markers.js +1 -1
- package/dist/components/trace-viewer/components/node.d.ts +7 -7
- package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/node.js +2 -1
- package/dist/components/trace-viewer/components/search-input.js +1 -1
- package/dist/components/trace-viewer/components/search.js +1 -1
- package/dist/components/trace-viewer/components/span-content.js +1 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
- package/dist/components/trace-viewer/components/span-segments.js +1 -1
- package/dist/components/trace-viewer/components/span-strategies.js +1 -1
- package/dist/components/trace-viewer/components/ui.js +1 -1
- package/dist/components/trace-viewer/components/zoom-button.js +1 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
- package/dist/components/trace-viewer/context.js +1 -1
- package/dist/components/trace-viewer/index.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.module.css +4 -4
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/constants.js +1 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +3 -3
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +8 -11
- package/dist/components/trace-viewer/util/tree.js +1 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
- package/dist/components/trace-viewer/worker.js +1 -1
- package/dist/components/trace-viewer-new.d.ts +5 -1
- package/dist/components/trace-viewer-new.d.ts.map +1 -1
- package/dist/components/trace-viewer-new.js +8 -10
- package/dist/components/ui/alert.js +2 -2
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/collapsible.d.ts +46 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/context-card.d.ts +47 -0
- package/dist/components/ui/context-card.d.ts.map +1 -0
- package/dist/components/ui/context-card.js +471 -0
- package/dist/components/ui/data-inspector.d.ts +7 -6
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +232 -99
- package/dist/components/ui/data-inspector.styles.d.ts +29 -0
- package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
- package/dist/components/ui/data-inspector.styles.js +95 -0
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +2 -2
- package/dist/components/ui/error-stack-block.d.ts +17 -10
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +49 -30
- package/dist/components/ui/icon-button.d.ts +19 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +29 -0
- package/dist/components/ui/kbd.d.ts +10 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +25 -0
- package/dist/components/ui/load-more-button.js +1 -1
- package/dist/components/ui/menu-dropdown.js +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +80 -132
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-trace-view.d.ts +7 -8
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +11 -16
- package/dist/components/workflow-traces/event-colors.d.ts +2 -1
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +15 -7
- package/dist/components/workflow-traces/trace-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-colors.js +3 -4
- package/dist/components/workflow-traces/trace-span-construction.d.ts +7 -4
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +87 -33
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/lib/cn.d.ts +10 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +83 -0
- package/dist/lib/event-analysis.d.ts +1 -1
- package/dist/lib/event-analysis.d.ts.map +1 -1
- package/dist/lib/event-analysis.js +3 -2
- package/dist/lib/event-materialization.d.ts +1 -1
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +29 -21
- package/dist/lib/exact-event-search-id.d.ts +25 -0
- package/dist/lib/exact-event-search-id.d.ts.map +1 -0
- package/dist/lib/exact-event-search-id.js +39 -0
- package/dist/lib/hydration.d.ts +17 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +185 -22
- package/dist/lib/stream-display.js +1 -1
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts +16 -4
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +34 -15
- package/dist/lib/utils.d.ts +23 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +73 -33
- package/dist/lib/zstd-browser-decoder.d.ts +7 -0
- package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
- package/dist/lib/zstd-browser-decoder.js +41 -0
- package/dist/styles.css +14 -0
- package/package.json +10 -7
- package/src/components/event-list-view.tsx +375 -116
- package/src/components/index.ts +12 -5
- package/src/components/new-trace-viewer/components/copy-button.tsx +2 -2
- package/src/components/new-trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/new-trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/new-trace-viewer/components/detail-panel.tsx +273 -0
- package/src/components/new-trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +57 -32
- package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
- package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
- package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
- package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
- package/src/components/new-trace-viewer/components/minimap.tsx +559 -0
- package/src/components/new-trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/new-trace-viewer/components/span-markers.tsx +173 -0
- package/src/components/new-trace-viewer/components/split-pane.tsx +80 -135
- package/src/components/new-trace-viewer/components/timeline.module.css +46 -0
- package/src/components/new-trace-viewer/components/timeline.tsx +603 -239
- package/src/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/src/components/new-trace-viewer/components/trace-shortcut-helper.tsx +116 -0
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
- package/src/components/new-trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/new-trace-viewer/components/use-row-window.ts +140 -0
- package/src/components/new-trace-viewer/context.tsx +13 -14
- package/src/components/new-trace-viewer/icons.tsx +2 -2
- package/src/components/new-trace-viewer/search.ts +178 -0
- package/src/components/new-trace-viewer/trace-viewer.tsx +336 -293
- package/src/components/new-trace-viewer/types.ts +2 -0
- package/src/components/new-trace-viewer/utils.test.ts +247 -0
- package/src/components/new-trace-viewer/utils.ts +203 -134
- package/src/components/run-trace-view.tsx +10 -14
- package/src/components/sidebar/attribute-panel.tsx +276 -275
- package/src/components/sidebar/attributes-block.tsx +326 -0
- package/src/components/sidebar/copyable-data-block.tsx +50 -28
- package/src/components/sidebar/entity-detail-panel.tsx +89 -123
- package/src/components/sidebar/events-list.tsx +196 -178
- package/src/components/sidebar/sidebar-data-context.tsx +11 -11
- package/src/components/sidebar/span-detail-merge.ts +134 -0
- package/src/components/sidebar/use-selected-span-detail.ts +146 -0
- package/src/components/trace-viewer/components/node.tsx +3 -2
- package/src/components/trace-viewer/trace-viewer.module.css +4 -4
- package/src/components/trace-viewer/util/timing.ts +7 -11
- package/src/components/trace-viewer-new.tsx +21 -15
- package/src/components/ui/alert.tsx +1 -1
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/collapsible.tsx +219 -0
- package/src/components/ui/context-card.tsx +784 -0
- package/src/components/ui/data-inspector.styles.ts +96 -0
- package/src/components/ui/data-inspector.tsx +501 -204
- package/src/components/ui/error-card.tsx +1 -1
- package/src/components/ui/error-stack-block.tsx +84 -55
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/kbd.tsx +43 -0
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/timestamp-tooltip.tsx +132 -194
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-trace-view.tsx +31 -36
- package/src/components/workflow-traces/event-colors.ts +15 -11
- package/src/components/workflow-traces/trace-colors.ts +6 -6
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +118 -35
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +9 -0
- package/src/lib/cn.ts +93 -0
- package/src/lib/event-analysis.ts +6 -4
- package/src/lib/event-materialization.ts +35 -21
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +203 -29
- package/src/lib/trace-builder.ts +44 -19
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +82 -35
- package/src/lib/zstd-browser-decoder.ts +42 -0
- package/src/styles.css +14 -0
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/event-list-view.js.map +0 -1
- package/dist/components/hook-actions.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
- package/dist/components/new-trace-viewer/context.js.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.js +0 -11
- package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
- package/dist/components/new-trace-viewer/icons.js.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/new-trace-viewer/types.js.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.js +0 -2
- package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
- package/dist/components/new-trace-viewer/utils.js.map +0 -1
- package/dist/components/run-trace-view.js.map +0 -1
- package/dist/components/sidebar/attribute-panel.js.map +0 -1
- package/dist/components/sidebar/conversation-view.js.map +0 -1
- package/dist/components/sidebar/copyable-data-block.js.map +0 -1
- package/dist/components/sidebar/detail-card.d.ts +0 -14
- package/dist/components/sidebar/detail-card.d.ts.map +0 -1
- package/dist/components/sidebar/detail-card.js +0 -20
- package/dist/components/sidebar/detail-card.js.map +0 -1
- package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
- package/dist/components/sidebar/events-list.js.map +0 -1
- package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
- package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
- package/dist/components/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/trace-viewer-new.js.map +0 -1
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/data-inspector.js.map +0 -1
- package/dist/components/ui/decrypt-button.js.map +0 -1
- package/dist/components/ui/error-card.js.map +0 -1
- package/dist/components/ui/error-stack-block.js.map +0 -1
- package/dist/components/ui/inspector-theme.d.ts +0 -95
- package/dist/components/ui/inspector-theme.d.ts.map +0 -1
- package/dist/components/ui/inspector-theme.js +0 -82
- package/dist/components/ui/inspector-theme.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/stream-display.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/src/components/new-trace-viewer/detail-panel.tsx +0 -57
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/sidebar/detail-card.tsx +0 -65
- package/src/components/ui/inspector-theme.ts +0 -110
|
@@ -1,39 +1,43 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { useCallback,
|
|
5
|
-
import { isExpiredMarker } from '../../lib/hydration';
|
|
6
|
-
import { ErrorCard } from '../ui/error-card';
|
|
3
|
+
import { type Event, getEventDataRefFields } from '@workflow/world';
|
|
4
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { hasEncryptedFields, isExpiredMarker } from '../../lib/hydration';
|
|
7
6
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
Collapsible,
|
|
8
|
+
CollapsibleContent,
|
|
9
|
+
CollapsibleRoot,
|
|
10
|
+
CollapsibleTrigger,
|
|
11
|
+
} from '../ui/collapsible';
|
|
12
|
+
import { RunClickContext, StreamClickContext } from '../ui/data-inspector';
|
|
13
|
+
import { ErrorCard } from '../ui/error-card';
|
|
14
|
+
import { ErrorStackBlock, isStructuredError } from '../ui/error-stack-block';
|
|
11
15
|
import { Skeleton } from '../ui/skeleton';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
16
|
+
import { TimestampTooltip } from '../ui/timestamp-tooltip';
|
|
17
|
+
import { AttrSetEventBlock } from './attributes-block';
|
|
18
|
+
import { CopyableDataBlock, EncryptedDataBlock } from './copyable-data-block';
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
const ERROR_EVENT_TYPES = new Set(['step_failed', 'step_retrying']);
|
|
20
|
+
const parseDateValue = (value: unknown): Date | null => {
|
|
21
|
+
if (value == null) return null;
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
'
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
const date = value instanceof Date ? value : new Date(String(value));
|
|
24
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const getEffectiveEventDate = (
|
|
28
|
+
event: Pick<Event, 'createdAt' | 'occurredAt'>
|
|
29
|
+
): Date => parseDateValue(event.occurredAt) ?? new Date(event.createdAt);
|
|
30
|
+
|
|
31
|
+
const formatEventTimestamp = (date: Date): string =>
|
|
32
|
+
date.toLocaleString(undefined, {
|
|
33
|
+
month: 'short',
|
|
34
|
+
day: 'numeric',
|
|
35
|
+
hour: 'numeric',
|
|
36
|
+
minute: 'numeric',
|
|
37
|
+
second: 'numeric',
|
|
38
|
+
fractionalSecondDigits: 3,
|
|
39
|
+
timeZoneName: 'short',
|
|
40
|
+
});
|
|
37
41
|
|
|
38
42
|
/**
|
|
39
43
|
* A single event row that can lazy-load its eventData when expanded.
|
|
@@ -42,14 +46,14 @@ function EventItem({
|
|
|
42
46
|
event,
|
|
43
47
|
onLoadEventData,
|
|
44
48
|
encryptionKey,
|
|
49
|
+
showSeparateEventOccurrenceTimestamps = false,
|
|
45
50
|
}: {
|
|
46
51
|
event: Event;
|
|
47
|
-
onLoadEventData?: (
|
|
48
|
-
correlationId: string,
|
|
49
|
-
eventId: string
|
|
50
|
-
) => Promise<unknown | null>;
|
|
52
|
+
onLoadEventData?: (event: Event) => Promise<unknown | null>;
|
|
51
53
|
/** When this changes (e.g., Decrypt was clicked), invalidate cached data */
|
|
52
54
|
encryptionKey?: Uint8Array;
|
|
55
|
+
/** Show occurredAt separately instead of folding it into the Created timestamp. */
|
|
56
|
+
showSeparateEventOccurrenceTimestamps?: boolean;
|
|
53
57
|
}) {
|
|
54
58
|
const [loadedData, setLoadedData] = useState<unknown | null>(null);
|
|
55
59
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -62,19 +66,20 @@ function EventItem({
|
|
|
62
66
|
const existingData =
|
|
63
67
|
'eventData' in event && event.eventData != null ? event.eventData : null;
|
|
64
68
|
const mergedDisplay = loadedData ?? existingData;
|
|
65
|
-
const canHaveData =
|
|
69
|
+
const canHaveData =
|
|
70
|
+
existingData !== null || getEventDataRefFields(event.eventType).length > 0;
|
|
66
71
|
|
|
67
72
|
const loadEventData = useCallback(
|
|
68
|
-
async (
|
|
69
|
-
if (!onLoadEventData
|
|
70
|
-
if (!
|
|
73
|
+
async (force: boolean) => {
|
|
74
|
+
if (!onLoadEventData) return;
|
|
75
|
+
if (!force && loadedDataRef.current !== null) {
|
|
71
76
|
return;
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
try {
|
|
75
80
|
setIsLoading(true);
|
|
76
81
|
setLoadError(null);
|
|
77
|
-
const data = await onLoadEventData(event
|
|
82
|
+
const data = await onLoadEventData(event);
|
|
78
83
|
loadedDataRef.current = data;
|
|
79
84
|
setLoadedData(data);
|
|
80
85
|
} catch (err) {
|
|
@@ -83,46 +88,44 @@ function EventItem({
|
|
|
83
88
|
setIsLoading(false);
|
|
84
89
|
}
|
|
85
90
|
},
|
|
86
|
-
[onLoadEventData, event
|
|
91
|
+
[onLoadEventData, event]
|
|
87
92
|
);
|
|
88
93
|
|
|
89
|
-
const handleExpand = useCallback(
|
|
94
|
+
const handleExpand = useCallback(() => {
|
|
90
95
|
if (isLoading) return;
|
|
91
96
|
wasExpandedRef.current = true;
|
|
92
|
-
|
|
97
|
+
void loadEventData(false);
|
|
93
98
|
}, [isLoading, loadEventData]);
|
|
94
99
|
|
|
95
100
|
// When the encryption key changes and this event was previously expanded,
|
|
96
101
|
// re-load the data so it gets decrypted
|
|
97
|
-
|
|
102
|
+
useLayoutEffect(() => {
|
|
98
103
|
if (!encryptionKey || !wasExpandedRef.current) return;
|
|
99
104
|
loadedDataRef.current = null;
|
|
100
105
|
setLoadedData(null);
|
|
101
|
-
void loadEventData(
|
|
106
|
+
void loadEventData(true);
|
|
102
107
|
}, [encryptionKey, loadEventData]);
|
|
103
108
|
|
|
104
109
|
const createdAt = new Date(event.createdAt);
|
|
110
|
+
const occurredAt = parseDateValue(event.occurredAt);
|
|
111
|
+
const displayedCreatedAt = showSeparateEventOccurrenceTimestamps
|
|
112
|
+
? createdAt
|
|
113
|
+
: getEffectiveEventDate(event);
|
|
114
|
+
const displayedCreatedAtTime = displayedCreatedAt.toLocaleTimeString(
|
|
115
|
+
undefined,
|
|
116
|
+
{
|
|
117
|
+
hour: 'numeric',
|
|
118
|
+
minute: 'numeric',
|
|
119
|
+
second: 'numeric',
|
|
120
|
+
}
|
|
121
|
+
);
|
|
105
122
|
|
|
106
123
|
const displayPayload = isLoading ? loadedData : mergedDisplay;
|
|
107
124
|
|
|
108
125
|
return (
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
<>
|
|
113
|
-
<span
|
|
114
|
-
className="font-medium"
|
|
115
|
-
style={{ color: 'var(--ds-gray-1000)' }}
|
|
116
|
-
>
|
|
117
|
-
{event.eventType}
|
|
118
|
-
</span>{' '}
|
|
119
|
-
-{' '}
|
|
120
|
-
<span style={{ color: 'var(--ds-gray-700)' }}>
|
|
121
|
-
{localMillisecondTime(createdAt.getTime())}
|
|
122
|
-
</span>
|
|
123
|
-
</>
|
|
124
|
-
}
|
|
125
|
-
onToggle={
|
|
126
|
+
<CollapsibleRoot
|
|
127
|
+
variant="card"
|
|
128
|
+
onOpenChange={
|
|
126
129
|
canHaveData
|
|
127
130
|
? (open) => {
|
|
128
131
|
if (open) handleExpand();
|
|
@@ -130,90 +133,79 @@ function EventItem({
|
|
|
130
133
|
: undefined
|
|
131
134
|
}
|
|
132
135
|
>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
borderColor: 'var(--ds-gray-300)',
|
|
138
|
-
backgroundColor: 'var(--ds-gray-100)',
|
|
139
|
-
}}
|
|
140
|
-
>
|
|
141
|
-
<div
|
|
142
|
-
className="flex min-h-[32px] items-center justify-between gap-4 px-2.5 py-1.5"
|
|
143
|
-
style={{ borderColor: 'var(--ds-gray-300)' }}
|
|
144
|
-
>
|
|
145
|
-
<span
|
|
146
|
-
className="text-[13px] font-medium"
|
|
147
|
-
style={{ color: 'var(--ds-gray-700)' }}
|
|
148
|
-
>
|
|
149
|
-
Event ID
|
|
136
|
+
<CollapsibleTrigger className="px-3 py-2">
|
|
137
|
+
<div className="flex w-full items-center justify-between gap-3">
|
|
138
|
+
<span className="text-gray-1000 text-label-12 font-mono">
|
|
139
|
+
{event.eventType}
|
|
150
140
|
</span>
|
|
151
|
-
<span
|
|
152
|
-
|
|
153
|
-
style={{ color: 'var(--ds-gray-1000)' }}
|
|
154
|
-
title={event.eventId}
|
|
155
|
-
>
|
|
156
|
-
{event.eventId}
|
|
141
|
+
<span className="shrink-0 text-label-13 text-gray-900">
|
|
142
|
+
{displayedCreatedAtTime}
|
|
157
143
|
</span>
|
|
158
144
|
</div>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
<
|
|
165
|
-
className="text-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
>
|
|
175
|
-
|
|
145
|
+
</CollapsibleTrigger>
|
|
146
|
+
<CollapsibleContent>
|
|
147
|
+
{/* Event attributes */}
|
|
148
|
+
<div className="flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400">
|
|
149
|
+
{showSeparateEventOccurrenceTimestamps && occurredAt && (
|
|
150
|
+
<div className="flex items-center justify-between gap-2 py-2 px-3">
|
|
151
|
+
<span className="text-label-12 text-gray-900">Occurred</span>
|
|
152
|
+
<TimestampTooltip date={occurredAt}>
|
|
153
|
+
<span className="max-w-[70%] truncate text-right text-label-12 font-mono">
|
|
154
|
+
{formatEventTimestamp(occurredAt)}
|
|
155
|
+
</span>
|
|
156
|
+
</TimestampTooltip>
|
|
157
|
+
</div>
|
|
158
|
+
)}
|
|
159
|
+
<div className="flex items-center justify-between gap-2 py-2 px-3">
|
|
160
|
+
<span className="text-label-12 text-gray-900">Event ID</span>
|
|
161
|
+
<span className="max-w-[70%] truncate text-right text-label-12 font-mono">
|
|
162
|
+
{event.eventId}
|
|
176
163
|
</span>
|
|
177
164
|
</div>
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
>
|
|
189
|
-
<Skeleton className="h-4 w-[35%]" />
|
|
190
|
-
<Skeleton className="mt-2 h-4 w-[90%]" />
|
|
191
|
-
<Skeleton className="mt-2 h-4 w-[75%]" />
|
|
165
|
+
{event.correlationId && (
|
|
166
|
+
<div className="flex items-center justify-between gap-2 py-2 px-3">
|
|
167
|
+
<span className="text-label-12 text-gray-900">
|
|
168
|
+
Correlation ID
|
|
169
|
+
</span>
|
|
170
|
+
<span className="max-w-[70%] truncate text-right text-label-12 font-mono">
|
|
171
|
+
{event.correlationId}
|
|
172
|
+
</span>
|
|
173
|
+
</div>
|
|
174
|
+
)}
|
|
192
175
|
</div>
|
|
193
|
-
)}
|
|
194
176
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
177
|
+
{/* Loading state */}
|
|
178
|
+
{isLoading && (
|
|
179
|
+
<div className="p-3">
|
|
180
|
+
<Skeleton className="h-4 w-[35%]" />
|
|
181
|
+
<Skeleton className="mt-2 h-4 w-[90%]" />
|
|
182
|
+
<Skeleton className="mt-2 h-4 w-[75%]" />
|
|
183
|
+
</div>
|
|
184
|
+
)}
|
|
185
|
+
|
|
186
|
+
{/* Error state */}
|
|
187
|
+
{loadError && (
|
|
188
|
+
<ErrorCard
|
|
189
|
+
title="Failed to load event data"
|
|
190
|
+
details={loadError}
|
|
191
|
+
className="mt-2"
|
|
192
|
+
/>
|
|
193
|
+
)}
|
|
203
194
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
195
|
+
{/* Event data */}
|
|
196
|
+
{displayPayload != null && (
|
|
197
|
+
<div className="[&>div]:border-none [&>div]:rounded-none">
|
|
198
|
+
<EventDataBlock eventType={event.eventType} data={displayPayload} />
|
|
199
|
+
</div>
|
|
200
|
+
)}
|
|
201
|
+
</CollapsibleContent>
|
|
202
|
+
</CollapsibleRoot>
|
|
211
203
|
);
|
|
212
204
|
}
|
|
213
205
|
|
|
214
206
|
/**
|
|
215
207
|
* Check if an eventData object has only expired marker values in ref/payload
|
|
216
|
-
* fields for this event type (see {@link
|
|
208
|
+
* fields for this event type (see {@link getEventDataRefFields}). Other keys
|
|
217
209
|
* (e.g. `resumeAt`, `stepName`) are ignored.
|
|
218
210
|
*/
|
|
219
211
|
function hasOnlyExpiredFields(data: unknown, eventType: string): boolean {
|
|
@@ -221,7 +213,7 @@ function hasOnlyExpiredFields(data: unknown, eventType: string): boolean {
|
|
|
221
213
|
return false;
|
|
222
214
|
}
|
|
223
215
|
const record = data as Record<string, unknown>;
|
|
224
|
-
const refKeys =
|
|
216
|
+
const refKeys = getEventDataRefFields(eventType);
|
|
225
217
|
const presentKeys = refKeys.filter((k) => k in record);
|
|
226
218
|
return (
|
|
227
219
|
presentKeys.length > 0 &&
|
|
@@ -230,8 +222,8 @@ function hasOnlyExpiredFields(data: unknown, eventType: string): boolean {
|
|
|
230
222
|
}
|
|
231
223
|
|
|
232
224
|
/**
|
|
233
|
-
* Renders event data, using ErrorStackBlock for error events that contain
|
|
234
|
-
*
|
|
225
|
+
* Renders event data, using ErrorStackBlock for error events that contain a
|
|
226
|
+
* structured error, and CopyableDataBlock otherwise.
|
|
235
227
|
*/
|
|
236
228
|
function EventDataBlock({
|
|
237
229
|
eventType,
|
|
@@ -258,23 +250,32 @@ function EventDataBlock({
|
|
|
258
250
|
);
|
|
259
251
|
}
|
|
260
252
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
253
|
+
if (hasEncryptedFields({ eventType, eventData: data })) {
|
|
254
|
+
return <EncryptedDataBlock />;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Attribute changes — render the changed keys and the writer instead of
|
|
258
|
+
// the raw JSON payload.
|
|
259
|
+
if (eventType === 'attr_set') {
|
|
260
|
+
return <AttrSetEventBlock data={data} />;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Error events carry a StructuredError in eventData.error. Check both the
|
|
264
|
+
// nested field and the top-level value for legacy payloads.
|
|
264
265
|
if (
|
|
265
|
-
|
|
266
|
+
getEventDataRefFields(eventType).includes('error') &&
|
|
266
267
|
data != null &&
|
|
267
268
|
typeof data === 'object'
|
|
268
269
|
) {
|
|
269
270
|
const record = data as Record<string, unknown>;
|
|
270
271
|
|
|
271
272
|
// Check the nested `error` field first (the StructuredError)
|
|
272
|
-
if (
|
|
273
|
+
if (isStructuredError(record.error)) {
|
|
273
274
|
return <ErrorStackBlock value={record.error} />;
|
|
274
275
|
}
|
|
275
276
|
|
|
276
|
-
// Some error formats put the stack at the top level of eventData
|
|
277
|
-
if (
|
|
277
|
+
// Some error formats put the message/stack at the top level of eventData.
|
|
278
|
+
if (isStructuredError(record)) {
|
|
278
279
|
return <ErrorStackBlock value={record} />;
|
|
279
280
|
}
|
|
280
281
|
}
|
|
@@ -289,58 +290,75 @@ export function EventsList({
|
|
|
289
290
|
isLoading = false,
|
|
290
291
|
error,
|
|
291
292
|
onLoadEventData,
|
|
293
|
+
onStreamClick,
|
|
294
|
+
onRunClick,
|
|
292
295
|
encryptionKey,
|
|
296
|
+
showSeparateEventOccurrenceTimestamps = false,
|
|
293
297
|
}: {
|
|
294
298
|
events: Event[];
|
|
295
299
|
isLoading?: boolean;
|
|
296
300
|
error?: Error | null;
|
|
297
|
-
onLoadEventData?: (
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
) => Promise<unknown | null>;
|
|
301
|
+
onLoadEventData?: (event: Event) => Promise<unknown | null>;
|
|
302
|
+
onStreamClick?: (streamId: string) => void;
|
|
303
|
+
onRunClick?: (runId: string) => void;
|
|
301
304
|
/** When provided, signals that decryption is active (triggers re-load of expanded events) */
|
|
302
305
|
encryptionKey?: Uint8Array;
|
|
306
|
+
/** Show occurredAt separately instead of folding it into the Created timestamp. */
|
|
307
|
+
showSeparateEventOccurrenceTimestamps?: boolean;
|
|
303
308
|
}) {
|
|
304
|
-
// Sort by
|
|
309
|
+
// Sort by the timestamp shown as Created by default.
|
|
305
310
|
const sortedEvents = useMemo(
|
|
306
311
|
() =>
|
|
307
312
|
[...events].sort(
|
|
308
313
|
(a, b) =>
|
|
309
|
-
|
|
314
|
+
getEffectiveEventDate(a).getTime() -
|
|
315
|
+
getEffectiveEventDate(b).getTime()
|
|
310
316
|
),
|
|
311
317
|
[events]
|
|
312
318
|
);
|
|
313
319
|
|
|
320
|
+
const hasEvents = sortedEvents.length > 0 && !error;
|
|
321
|
+
|
|
322
|
+
if (!hasEvents && !isLoading) {
|
|
323
|
+
return <Collapsible label="Events" disabled />;
|
|
324
|
+
}
|
|
325
|
+
|
|
314
326
|
return (
|
|
315
|
-
<
|
|
316
|
-
<
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
327
|
+
<RunClickContext.Provider value={onRunClick}>
|
|
328
|
+
<StreamClickContext.Provider value={onStreamClick}>
|
|
329
|
+
<CollapsibleRoot defaultOpen>
|
|
330
|
+
<CollapsibleTrigger>Events</CollapsibleTrigger>
|
|
331
|
+
<CollapsibleContent className="mb-0">
|
|
332
|
+
{isLoading ? (
|
|
333
|
+
<div className="flex flex-col -mx-4">
|
|
334
|
+
{[0, 1, 2].map((i) => (
|
|
335
|
+
<div
|
|
336
|
+
key={i}
|
|
337
|
+
className="flex items-center justify-between gap-3 bg-background-200 px-4 py-2"
|
|
338
|
+
>
|
|
339
|
+
<Skeleton className="h-4 w-32 rounded" />
|
|
340
|
+
<Skeleton className="h-3 w-16 rounded" />
|
|
341
|
+
</div>
|
|
342
|
+
))}
|
|
343
|
+
</div>
|
|
344
|
+
) : (
|
|
345
|
+
<div className="flex flex-col -mx-4">
|
|
346
|
+
{sortedEvents.map((event) => (
|
|
347
|
+
<EventItem
|
|
348
|
+
key={event.eventId}
|
|
349
|
+
event={event}
|
|
350
|
+
onLoadEventData={onLoadEventData}
|
|
351
|
+
encryptionKey={encryptionKey}
|
|
352
|
+
showSeparateEventOccurrenceTimestamps={
|
|
353
|
+
showSeparateEventOccurrenceTimestamps
|
|
354
|
+
}
|
|
355
|
+
/>
|
|
356
|
+
))}
|
|
357
|
+
</div>
|
|
358
|
+
)}
|
|
359
|
+
</CollapsibleContent>
|
|
360
|
+
</CollapsibleRoot>
|
|
361
|
+
</StreamClickContext.Provider>
|
|
362
|
+
</RunClickContext.Provider>
|
|
345
363
|
);
|
|
346
364
|
}
|
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
3
|
+
import type { Event, Hook, WorkflowRun } from '@workflow/world';
|
|
4
|
+
import { createContext, type ReactNode, useContext } from 'react';
|
|
5
|
+
import type { FetchSpanDetail } from './use-selected-span-detail';
|
|
6
6
|
|
|
7
7
|
export interface SidebarDataContextValue {
|
|
8
8
|
run: WorkflowRun;
|
|
9
9
|
events: Event[];
|
|
10
|
-
|
|
11
|
-
spanDetailError?: Error | null;
|
|
12
|
-
spanDetailLoading?: boolean;
|
|
13
|
-
onSpanSelect: (info: SpanSelectionInfo) => void;
|
|
10
|
+
fetchSpanDetail: FetchSpanDetail;
|
|
14
11
|
onStreamClick?: (streamId: string) => void;
|
|
15
12
|
onRunClick?: (runId: string) => void;
|
|
16
13
|
onWakeUpSleep?: (
|
|
17
14
|
runId: string,
|
|
18
15
|
correlationId: string
|
|
19
16
|
) => Promise<{ stoppedCount: number }>;
|
|
20
|
-
onLoadEventData?: (
|
|
21
|
-
correlationId: string,
|
|
22
|
-
eventId: string
|
|
23
|
-
) => Promise<unknown | null>;
|
|
17
|
+
onLoadEventData?: (event: Event) => Promise<unknown | null>;
|
|
24
18
|
onResolveHook?: (
|
|
25
19
|
hookToken: string,
|
|
26
20
|
payload: unknown,
|
|
@@ -30,6 +24,12 @@ export interface SidebarDataContextValue {
|
|
|
30
24
|
onDecrypt?: () => void;
|
|
31
25
|
isDecrypting?: boolean;
|
|
32
26
|
hasEncryptedData?: boolean;
|
|
27
|
+
/** Show occurredAt separately instead of folding it into the Created timestamp. */
|
|
28
|
+
showSeparateEventOccurrenceTimestamps?: boolean;
|
|
29
|
+
getModuleSourceUrl?: (info: {
|
|
30
|
+
moduleSpecifier: string;
|
|
31
|
+
deploymentId: string;
|
|
32
|
+
}) => string | undefined;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
const SidebarDataContext = createContext<SidebarDataContextValue | null>(null);
|