@workflow/web-shared 5.0.0-beta.4 → 5.0.0-beta.40
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 +5 -13
- 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 +235 -97
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +8 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -4
- 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 +173 -119
- 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 +37 -71
- 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 +77 -63
- 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-skeleton.d.ts +2 -0
- package/dist/components/stream-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/stream-viewer-skeleton.js +12 -0
- package/dist/components/stream-viewer.d.ts +1 -1
- package/dist/components/stream-viewer.d.ts.map +1 -1
- package/dist/components/stream-viewer.js +9 -26
- package/dist/components/trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/copy-button.js +27 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/trace-viewer/components/event-list.d.ts +10 -0
- package/dist/components/trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/event-list.js +47 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.d.ts +1 -1
- package/dist/components/trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/minimap.js +337 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts +46 -0
- package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-markers.js +85 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts +10 -0
- package/dist/components/trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/split-pane.js +41 -0
- package/dist/components/trace-viewer/components/timeline.d.ts +42 -0
- package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/timeline.js +321 -0
- package/dist/components/trace-viewer/components/timeline.module.css +46 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts +34 -0
- package/dist/components/trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/trace-viewer/context.d.ts +14 -182
- package/dist/components/trace-viewer/context.d.ts.map +1 -1
- package/dist/components/trace-viewer/context.js +44 -351
- package/dist/components/trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/trace-viewer/icons.js +15 -0
- package/dist/components/trace-viewer/search.d.ts +19 -0
- package/dist/components/trace-viewer/search.d.ts.map +1 -0
- package/dist/components/trace-viewer/search.js +134 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts +7 -28
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +306 -356
- package/dist/components/trace-viewer/types.d.ts +2 -211
- package/dist/components/trace-viewer/types.d.ts.map +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +2 -2
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +3 -3
- package/dist/components/trace-viewer/utils.d.ts +111 -0
- package/dist/components/trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/trace-viewer/utils.js +430 -0
- package/dist/components/{trace-viewer-new.d.ts → trace-viewer.d.ts} +7 -3
- package/dist/components/trace-viewer.d.ts.map +1 -0
- package/dist/components/trace-viewer.js +21 -0
- package/dist/components/ui/alert.js +3 -3
- 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.d.ts.map +1 -1
- package/dist/components/ui/card.js +4 -4
- 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 +3 -3
- 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-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-span-construction.d.ts +6 -3
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +71 -30
- 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 +4 -3
- 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 +194 -23
- package/dist/lib/stream-display.js +1 -1
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts +17 -5
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +32 -14
- package/dist/lib/trace-types.d.ts +54 -0
- package/dist/lib/trace-types.d.ts.map +1 -0
- package/dist/lib/trace-types.js +2 -0
- package/dist/lib/utils.d.ts +14 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +46 -6
- 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 +210 -139
- package/package.json +11 -8
- package/src/components/event-list-view.tsx +385 -123
- package/src/components/index.ts +14 -8
- package/src/components/sidebar/attribute-panel.tsx +331 -282
- 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 +92 -126
- package/src/components/sidebar/events-list.tsx +197 -179
- 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/stream-viewer-skeleton.tsx +34 -0
- package/src/components/stream-viewer.tsx +34 -106
- package/src/components/{new-trace-viewer → trace-viewer}/components/copy-button.tsx +2 -2
- package/src/components/trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/trace-viewer/components/detail-panel.tsx +273 -0
- package/src/components/trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/trace-viewer/components/event-list.tsx +144 -0
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.tsx +8 -8
- package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/truncate.ts +1 -1
- package/src/components/trace-viewer/components/minimap.tsx +556 -0
- package/src/components/trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/trace-viewer/components/span-markers.tsx +173 -0
- package/src/components/trace-viewer/components/split-pane.tsx +141 -0
- package/src/components/trace-viewer/components/timeline.module.css +46 -0
- package/src/components/trace-viewer/components/timeline.tsx +850 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/src/components/trace-viewer/components/trace-shortcut-helper.tsx +116 -0
- package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
- package/src/components/trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/trace-viewer/components/use-row-window.ts +140 -0
- package/src/components/trace-viewer/context.tsx +63 -656
- package/src/components/{new-trace-viewer → trace-viewer}/icons.tsx +2 -2
- package/src/components/trace-viewer/search.ts +178 -0
- package/src/components/trace-viewer/trace-viewer.tsx +563 -531
- package/src/components/trace-viewer/types.ts +2 -234
- package/src/components/trace-viewer/util/timing.ts +2 -2
- package/src/components/trace-viewer/utils.test.ts +458 -0
- package/src/components/{new-trace-viewer → trace-viewer}/utils.ts +271 -50
- package/src/components/{trace-viewer-new.tsx → trace-viewer.tsx} +24 -18
- package/src/components/ui/alert.tsx +2 -2
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/card.tsx +3 -10
- 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 +4 -4
- 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-traces/event-colors.ts +15 -11
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +97 -32
- 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 +10 -4
- 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 +210 -30
- package/src/lib/trace-builder.ts +43 -19
- package/src/lib/trace-types.ts +56 -0
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +53 -6
- package/src/lib/zstd-browser-decoder.ts +42 -0
- package/src/styles.css +210 -139
- 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.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js +0 -27
- package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.d.ts +0 -8
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js +0 -38
- package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +0 -54
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +0 -81
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +0 -101
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +0 -114
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -14
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +0 -99
- package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.d.ts +0 -31
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js +0 -138
- package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
- package/dist/components/new-trace-viewer/context.d.ts +0 -15
- package/dist/components/new-trace-viewer/context.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/context.js +0 -47
- 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 -12
- package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
- package/dist/components/new-trace-viewer/icons.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/icons.js +0 -15
- package/dist/components/new-trace-viewer/icons.js.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +0 -8
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +0 -349
- package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/new-trace-viewer/types.d.ts +0 -1
- package/dist/components/new-trace-viewer/types.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/types.js +0 -2
- 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.d.ts +0 -42
- package/dist/components/new-trace-viewer/utils.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/utils.js +0 -305
- package/dist/components/new-trace-viewer/utils.js.map +0 -1
- package/dist/components/run-trace-view.d.ts +0 -25
- package/dist/components/run-trace-view.d.ts.map +0 -1
- package/dist/components/run-trace-view.js +0 -11
- 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.d.ts +0 -8
- package/dist/components/trace-viewer/components/map.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/map.js +0 -162
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.d.ts +0 -23
- package/dist/components/trace-viewer/components/markers.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/markers.js +0 -416
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.d.ts +0 -35
- package/dist/components/trace-viewer/components/node.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/node.js +0 -285
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.d.ts +0 -9
- package/dist/components/trace-viewer/components/search-input.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js +0 -9
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.d.ts +0 -3
- package/dist/components/trace-viewer/components/search.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/search.js +0 -25
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.d.ts +0 -19
- package/dist/components/trace-viewer/components/span-content.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js +0 -137
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts +0 -10
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +0 -285
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.d.ts +0 -50
- package/dist/components/trace-viewer/components/span-segments.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js +0 -445
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.d.ts +0 -46
- package/dist/components/trace-viewer/components/span-strategies.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js +0 -108
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.d.ts +0 -28
- package/dist/components/trace-viewer/components/ui.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/ui.js +0 -39
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.d.ts +0 -3
- package/dist/components/trace-viewer/components/zoom-button.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js +0 -29
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.d.ts +0 -11
- package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +0 -11
- 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.d.ts +0 -5
- package/dist/components/trace-viewer/index.d.ts.map +0 -1
- package/dist/components/trace-viewer/index.js +0 -4
- 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/trace-viewer.module.css +0 -1465
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.d.ts +0 -9
- package/dist/components/trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/constants.js +0 -9
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts +0 -2
- package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +0 -14
- 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.d.ts +0 -13
- package/dist/components/trace-viewer/util/tree.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/tree.js +0 -227
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts +0 -15
- package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +0 -23
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +0 -8
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +0 -345
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts +0 -6
- package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +0 -39
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.d.ts +0 -2
- package/dist/components/trace-viewer/worker.d.ts.map +0 -1
- package/dist/components/trace-viewer/worker.js +0 -109
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/trace-viewer-new.d.ts.map +0 -1
- package/dist/components/trace-viewer-new.js +0 -23
- 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.d.ts +0 -40
- package/dist/components/workflow-trace-view.d.ts.map +0 -1
- package/dist/components/workflow-trace-view.js +0 -695
- 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.d.ts +0 -15
- package/dist/components/workflow-traces/trace-colors.d.ts.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js +0 -87
- 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/components/event-list.tsx +0 -116
- package/src/components/new-trace-viewer/components/split-pane.tsx +0 -185
- package/src/components/new-trace-viewer/components/timeline.tsx +0 -382
- package/src/components/new-trace-viewer/context.tsx +0 -92
- package/src/components/new-trace-viewer/detail-panel.tsx +0 -58
- package/src/components/new-trace-viewer/trace-viewer.tsx +0 -645
- package/src/components/new-trace-viewer/types.ts +0 -0
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/run-trace-view.tsx +0 -84
- package/src/components/sidebar/detail-card.tsx +0 -65
- package/src/components/trace-viewer/components/map.tsx +0 -226
- package/src/components/trace-viewer/components/markers.tsx +0 -612
- package/src/components/trace-viewer/components/node.tsx +0 -505
- package/src/components/trace-viewer/components/search-input.tsx +0 -52
- package/src/components/trace-viewer/components/search.tsx +0 -47
- package/src/components/trace-viewer/components/span-content.tsx +0 -247
- package/src/components/trace-viewer/components/span-detail-panel.tsx +0 -655
- package/src/components/trace-viewer/components/span-segments.ts +0 -585
- package/src/components/trace-viewer/components/span-strategies.ts +0 -205
- package/src/components/trace-viewer/components/ui.tsx +0 -156
- package/src/components/trace-viewer/components/zoom-button.tsx +0 -61
- package/src/components/trace-viewer/components/zoom-icons.tsx +0 -65
- package/src/components/trace-viewer/index.tsx +0 -4
- package/src/components/trace-viewer/trace-viewer.module.css +0 -1465
- package/src/components/trace-viewer/util/constants.ts +0 -8
- package/src/components/trace-viewer/util/scrollbar-width.ts +0 -13
- package/src/components/trace-viewer/util/tree.ts +0 -277
- package/src/components/trace-viewer/util/use-immediate-style.ts +0 -38
- package/src/components/trace-viewer/util/use-streaming-spans.ts +0 -426
- package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +0 -51
- package/src/components/trace-viewer/worker.ts +0 -131
- package/src/components/ui/inspector-theme.ts +0 -110
- package/src/components/workflow-trace-view.tsx +0 -1171
- package/src/components/workflow-traces/trace-colors.ts +0 -112
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/copy-button.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.d.ts +0 -0
- /package/dist/components/{new-trace-viewer → trace-viewer}/icons.d.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/copy-selection.ts +0 -0
- /package/src/components/{new-trace-viewer → trace-viewer}/components/middle-truncate/use-middle-truncate.ts +0 -0
- /package/src/{components/trace-viewer/modules.d.ts → modules.d.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-inspector.js","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\n/**\n * Reusable data inspector component built on react-inspector.\n *\n * All data rendering in the o11y UI should use this component to ensure\n * consistent theming, custom type handling (StreamRef, ClassInstanceRef),\n * and expand behavior.\n */\n\nimport { Lock } from 'lucide-react';\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ObjectInspector,\n ObjectLabel,\n ObjectName,\n ObjectRootLabel,\n ObjectValue,\n} from 'react-inspector';\nimport { useDarkMode } from '../../hooks/use-dark-mode';\nimport { ENCRYPTED_DISPLAY_NAME } from '../../lib/hydration';\nimport {\n type DecodedStreamChunkSource,\n type FormattedStreamChunkDisplay,\n formatArrayBufferViewForDisplay,\n} from '../../lib/stream-display';\nimport {\n type InspectorThemeExtended,\n inspectorThemeDark,\n inspectorThemeExtendedDark,\n inspectorThemeExtendedLight,\n inspectorThemeLight,\n} from './inspector-theme';\nimport { Spinner } from './spinner';\n\n// ---------------------------------------------------------------------------\n// StreamRef / ClassInstanceRef type detection\n// (inline to avoid circular deps with hydration module)\n// ---------------------------------------------------------------------------\n\nconst STREAM_REF_TYPE = '__workflow_stream_ref__';\nconst CLASS_INSTANCE_REF_TYPE = '__workflow_class_instance_ref__';\nconst RUN_REF_TYPE = '__workflow_run_ref__';\nconst BYTES_DISPLAY_TYPE = '__workflow_bytes_display__';\n\ninterface StreamRef {\n __type: typeof STREAM_REF_TYPE;\n streamId: string;\n}\n\ninterface RunRef {\n __type: typeof RUN_REF_TYPE;\n runId: string;\n}\n\ninterface BytesDisplay {\n __type: typeof BYTES_DISPLAY_TYPE;\n text: string;\n decodedFrom?: DecodedStreamChunkSource;\n}\n\nfunction deserializeChunkText(text: string): string {\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n}\n\nfunction parseChunkData(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction isStreamRef(value: unknown): value is StreamRef {\n if (value === null || typeof value !== 'object') return false;\n // Check both enumerable and non-enumerable __type (opaque refs use non-enumerable)\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === STREAM_REF_TYPE;\n}\n\nfunction isRunRef(value: unknown): value is RunRef {\n if (value === null || typeof value !== 'object') return false;\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === RUN_REF_TYPE;\n}\n\nexport function isBytesDisplay(value: unknown): value is BytesDisplay {\n if (value === null || typeof value !== 'object') return false;\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === BYTES_DISPLAY_TYPE;\n}\n\nfunction isClassInstanceRef(value: unknown): value is {\n __type: string;\n className: string;\n classId: string;\n data: unknown;\n} {\n return (\n value !== null &&\n typeof value === 'object' &&\n '__type' in value &&\n (value as Record<string, unknown>).__type === CLASS_INSTANCE_REF_TYPE\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stream click context (passed through from the panel)\n// ---------------------------------------------------------------------------\n\n/**\n * Context for passing stream click handlers down to DataInspector instances.\n * Exported so that parent components (e.g., AttributePanel) can provide the handler.\n */\nexport const StreamClickContext = createContext<\n ((streamId: string) => void) | undefined\n>(undefined);\n\n/**\n * Context for passing a decrypt handler down to DataInspector instances.\n * When provided, encrypted markers become clickable buttons that trigger decryption.\n */\nexport type DecryptClickContextValue = {\n onDecrypt: () => void;\n isDecrypting: boolean;\n};\n\nexport const DecryptClickContext = createContext<\n DecryptClickContextValue | undefined\n>(undefined);\n\nexport const RunClickContext = createContext<\n ((runId: string) => void) | undefined\n>(undefined);\n\nfunction EncryptedInlineLabel() {\n const ctx = useContext(DecryptClickContext);\n if (ctx) {\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] cursor-pointer\"\n style={{\n backgroundColor: 'var(--ds-gray-100)',\n color: 'var(--ds-gray-700)',\n border: '1px solid var(--ds-gray-400)',\n fontStyle: 'italic',\n opacity: ctx.isDecrypting ? 0.6 : 1,\n }}\n disabled={ctx.isDecrypting}\n onClick={(e) => {\n e.stopPropagation();\n ctx.onDecrypt();\n }}\n title=\"Click to decrypt\"\n >\n {ctx.isDecrypting ? (\n <Spinner size={12} />\n ) : (\n <Lock\n className=\"h-3 w-3\"\n style={{ display: 'inline', flexShrink: 0 }}\n />\n )}\n <span>{ctx.isDecrypting ? 'Decrypting…' : 'Decrypt'}</span>\n </button>\n );\n }\n return (\n <span style={{ color: 'var(--ds-gray-600)', fontStyle: 'italic' }}>\n <Lock\n className=\"h-3 w-3\"\n style={{\n display: 'inline',\n verticalAlign: 'middle',\n marginRight: '3px',\n marginTop: '-1px',\n }}\n />\n Encrypted\n </span>\n );\n}\nfunction StreamRefInline({ streamRef }: { streamRef: StreamRef }) {\n const onStreamClick = useContext(StreamClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered ? 'var(--ds-blue-200)' : 'var(--ds-blue-100)',\n color: 'var(--ds-blue-900)',\n border: '1px solid var(--ds-blue-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onStreamClick?.(streamRef.streamId);\n }}\n title={`View stream: ${streamRef.streamId}`}\n >\n <span>📡</span>\n <span>{streamRef.streamId}</span>\n </button>\n );\n}\n\nfunction RunRefInline({ runRef }: { runRef: RunRef }) {\n const onRunClick = useContext(RunClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered\n ? 'var(--ds-purple-200)'\n : 'var(--ds-purple-100)',\n color: 'var(--ds-purple-900)',\n border: '1px solid var(--ds-purple-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onRunClick?.(runRef.runId);\n }}\n title={`View run: ${runRef.runId}`}\n >\n <span>{runRef.runId}</span>\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Extended theme context (for colors react-inspector doesn't support natively)\n// ---------------------------------------------------------------------------\n\nconst ExtendedThemeContext = createContext<InspectorThemeExtended>(\n inspectorThemeExtendedLight\n);\n\nfunction DecodedBytesChunk({\n decodedText,\n source,\n}: {\n decodedText: string;\n source: DecodedStreamChunkSource;\n}) {\n const [selectedView, setSelectedView] = useState<'decoded' | 'bytes'>(\n 'decoded'\n );\n const parsed = parseChunkData(decodedText);\n\n return (\n <div className=\"min-w-0\">\n {selectedView === 'decoded' ? (\n <div className=\"min-w-0\">\n {typeof parsed === 'string' ? (\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-gray-1000)' }}\n >\n {deserializeChunkText(parsed)}\n </span>\n ) : (\n <DataInspector data={parsed} expandLevel={1} />\n )}\n </div>\n ) : (\n <DecodedBytesInspector decodedText={decodedText} source={source} />\n )}\n <div className=\"mt-2 flex\">\n <div\n className=\"inline-flex overflow-hidden rounded border\"\n style={{ borderColor: 'var(--ds-gray-400)' }}\n title={`${source.type} decoded as ${source.encoding.toUpperCase()} text. Switch to Bytes to inspect the summarized raw value.`}\n >\n <button\n type=\"button\"\n className=\"h-5 px-1.5 text-[10px] font-medium\"\n style={{\n backgroundColor:\n selectedView === 'decoded'\n ? 'var(--ds-gray-200)'\n : 'var(--ds-gray-100)',\n color: 'var(--ds-gray-900)',\n }}\n onClick={() => setSelectedView('decoded')}\n aria-pressed={selectedView === 'decoded'}\n aria-label=\"Show decoded text\"\n >\n Decoded\n </button>\n <button\n type=\"button\"\n className=\"h-5 border-l px-1.5 text-[10px] font-medium\"\n style={{\n borderColor: 'var(--ds-gray-400)',\n backgroundColor:\n selectedView === 'bytes'\n ? 'var(--ds-gray-200)'\n : 'var(--ds-gray-100)',\n color: 'var(--ds-gray-900)',\n }}\n onClick={() => setSelectedView('bytes')}\n aria-pressed={selectedView === 'bytes'}\n aria-label=\"Show raw bytes summary\"\n >\n Bytes\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction DecodedBytesInspector({\n decodedText,\n source,\n}: {\n decodedText: string;\n source: DecodedStreamChunkSource;\n}) {\n const [expanded, setExpanded] = useState(false);\n\n return (\n <div className=\"font-mono\">\n <button\n type=\"button\"\n className=\"flex max-w-full items-start gap-1 text-left\"\n style={{ color: 'var(--ds-gray-1000)' }}\n onClick={() => setExpanded((value) => !value)}\n title={`${source.type} decoded as ${source.encoding.toUpperCase()} text`}\n >\n <span className=\"select-none\" style={{ color: 'var(--ds-gray-700)' }}>\n {expanded ? '▼' : '▶'}\n </span>\n <span className=\"min-w-0 break-words\">{source.rawSummary}</span>\n </button>\n {expanded && (\n <div className=\"mt-1 pl-5\">\n <span style={{ color: 'var(--ds-gray-700)' }}>decoded: </span>\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-green-900)' }}\n >\n {JSON.stringify(decodedText)}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nfunction BytesDisplayLabel({\n name,\n display,\n}: {\n name?: string;\n display: BytesDisplay;\n}) {\n return (\n <div className=\"inline-block min-w-0 align-top\">\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n {display.decodedFrom ? (\n <DecodedBytesChunk\n decodedText={display.text}\n source={display.decodedFrom}\n />\n ) : (\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-gray-1000)' }}\n >\n {display.text}\n </span>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Custom nodeRenderer\n// ---------------------------------------------------------------------------\n\n/**\n * Extends the default react-inspector nodeRenderer with special handling\n * for ClassInstanceRef, StreamRef, and Date types.\n *\n * react-inspector renders Date instances as unstyled plain text (no theme\n * key exists for them), so we intercept here and apply the magenta color\n * from our extended theme — matching Node.js util.inspect()'s date style.\n *\n * Default nodeRenderer reference:\n * https://github.com/storybookjs/react-inspector/blob/main/README.md#noderenderer\n */\nfunction NodeRenderer({\n depth,\n name,\n data,\n isNonenumerable,\n}: {\n depth: number;\n name?: string;\n data: unknown;\n isNonenumerable?: boolean;\n expanded?: boolean;\n}) {\n const extendedTheme = useContext(ExtendedThemeContext);\n\n if (isBytesDisplay(data)) {\n return <BytesDisplayLabel name={name} display={data} />;\n }\n\n // Encrypted marker → flat label with Lock icon, clickable when onDecrypt is available\n if (\n data !== null &&\n typeof data === 'object' &&\n data.constructor?.name === ENCRYPTED_DISPLAY_NAME\n ) {\n const label = <EncryptedInlineLabel />;\n if (depth === 0) {\n return label;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n {label}\n </span>\n );\n }\n\n // StreamRef → inline clickable badge\n if (isStreamRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <StreamRefInline streamRef={data} />\n </span>\n );\n }\n\n // RunRef → inline clickable badge linking to the target run\n if (isRunRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <RunRefInline runRef={data} />\n </span>\n );\n }\n\n // ClassInstanceRef → show className as type, data as the inspectable value\n if (isClassInstanceRef(data)) {\n if (depth === 0) {\n return <ObjectRootLabel name={data.className} data={data.data} />;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ fontStyle: 'italic' }}>{data.className} </span>\n <ObjectValue object={data.data} />\n </span>\n );\n }\n\n // Date → magenta color (Node.js: 'date' → 'magenta')\n // react-inspector has no OBJECT_VALUE_DATE_COLOR theme key, so we handle it here.\n if (data instanceof Date) {\n const dateStr = data.toISOString();\n if (depth === 0) {\n return (\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n );\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n </span>\n );\n }\n\n // Default rendering (same as react-inspector's built-in)\n if (depth === 0) {\n return <ObjectRootLabel name={name} data={data} />;\n }\n return (\n <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\n/**\n * Create a non-expandable wrapper that carries ref data as non-enumerable\n * properties. ObjectInspector won't render children for objects with no\n * enumerable keys, but our NodeRenderer can still detect them.\n */\nfunction makeOpaqueRef(ref: Record<string, unknown>): unknown {\n const opaque = Object.create(null);\n for (const [key, value] of Object.entries(ref)) {\n Object.defineProperty(opaque, key, { value, enumerable: false });\n }\n return opaque;\n}\n\nfunction makeBytesDisplay(display: FormattedStreamChunkDisplay): unknown {\n const opaque = Object.create(null);\n Object.defineProperty(opaque, '__type', {\n value: BYTES_DISPLAY_TYPE,\n enumerable: false,\n });\n Object.defineProperty(opaque, 'text', {\n value: display.text,\n enumerable: false,\n });\n Object.defineProperty(opaque, 'decodedFrom', {\n value: display.decodedFrom,\n enumerable: false,\n });\n return opaque;\n}\n\n/**\n * Recursively walk data and replace RunRef/StreamRef/typed array objects with\n * non-expandable versions so ObjectInspector doesn't show their internals.\n * Only recurses into plain objects and arrays to avoid stripping class\n * instances (Date, Error, URL, Headers, etc.) that have their own rendering in\n * NodeRenderer. Map and Set containers are preserved while their contents are\n * prepared for display.\n *\n * Exported for testing the typed-array detection path used by hydrated\n * AI agent stream chunks (e.g. `{ delta: new Uint8Array(...) }`).\n */\nexport function collapseRefs(data: unknown): unknown {\n if (data === null || typeof data !== 'object') return data;\n if (ArrayBuffer.isView(data) && !(data instanceof DataView)) {\n return makeBytesDisplay(formatArrayBufferViewForDisplay(data));\n }\n if (isRunRef(data) || isStreamRef(data))\n return makeOpaqueRef(data as unknown as Record<string, unknown>);\n if (Array.isArray(data)) return data.map(collapseRefs);\n if (data instanceof Map) {\n return new Map(\n Array.from(data.entries(), ([key, value]) => [\n collapseRefs(key),\n collapseRefs(value),\n ])\n );\n }\n if (data instanceof Set) {\n return new Set(Array.from(data.values(), collapseRefs));\n }\n // Only recurse into plain objects — leave class instances untouched\n const proto = Object.getPrototypeOf(data);\n if (proto !== Object.prototype && proto !== null) return data;\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n result[key] = collapseRefs(value);\n }\n return result;\n}\n\nexport interface DataInspectorProps {\n /** The data to inspect */\n data: unknown;\n /** Initial expand depth (default: 2) */\n expandLevel?: number;\n /** Optional name for the root node */\n name?: string;\n /** Callback when a stream reference is clicked */\n onStreamClick?: (streamId: string) => void;\n /** Callback when a run reference is clicked */\n onRunClick?: (runId: string) => void;\n /** Callback when an encrypted marker is clicked (triggers decryption) */\n onDecrypt?: () => void;\n /** Whether decryption is currently in progress */\n isDecrypting?: boolean;\n}\n\nexport function DataInspector({\n data,\n expandLevel = 2,\n name,\n onStreamClick,\n onRunClick,\n onDecrypt,\n isDecrypting = false,\n}: DataInspectorProps) {\n const collapsedData = useMemo(() => collapseRefs(data), [data]);\n const stableData = useStableInspectorData(collapsedData);\n const [initialExpandLevel, setInitialExpandLevel] = useState(expandLevel);\n const isDark = useDarkMode();\n const extendedTheme = isDark\n ? inspectorThemeExtendedDark\n : inspectorThemeExtendedLight;\n\n useEffect(() => {\n // react-inspector reapplies expandLevel on every data change, which can\n // reopen paths the user manually collapsed. Apply it only on mount.\n setInitialExpandLevel(0);\n }, []);\n\n const content = (\n <ExtendedThemeContext.Provider value={extendedTheme}>\n <ObjectInspector\n data={stableData}\n name={name}\n // @ts-expect-error react-inspector accepts theme objects at runtime despite\n // types declaring string only — see https://github.com/storybookjs/react-inspector/blob/main/README.md#theme\n theme={isDark ? inspectorThemeDark : inspectorThemeLight}\n expandLevel={initialExpandLevel}\n nodeRenderer={NodeRenderer}\n />\n </ExtendedThemeContext.Provider>\n );\n\n let wrapped = content;\n\n if (onStreamClick) {\n wrapped = (\n <StreamClickContext.Provider value={onStreamClick}>\n {wrapped}\n </StreamClickContext.Provider>\n );\n }\n if (onRunClick) {\n wrapped = (\n <RunClickContext.Provider value={onRunClick}>\n {wrapped}\n </RunClickContext.Provider>\n );\n }\n if (onDecrypt) {\n wrapped = (\n <DecryptClickContext.Provider value={{ onDecrypt, isDecrypting }}>\n {wrapped}\n </DecryptClickContext.Provider>\n );\n }\n\n return wrapped;\n}\n\nfunction useStableInspectorData<T>(next: T): T {\n const previousRef = useRef<T>(next);\n if (!isDeepEqual(previousRef.current, next)) {\n previousRef.current = next;\n }\n return previousRef.current;\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isSameBytesDisplay(a: BytesDisplay, b: BytesDisplay): boolean {\n return (\n a.text === b.text &&\n a.decodedFrom?.type === b.decodedFrom?.type &&\n a.decodedFrom?.encoding === b.decodedFrom?.encoding &&\n a.decodedFrom?.rawSummary === b.decodedFrom?.rawSummary\n );\n}\n\nfunction isDeepEqual(a: unknown, b: unknown, seen = new WeakMap()): boolean {\n if (Object.is(a, b)) return true;\n\n if (isBytesDisplay(a) || isBytesDisplay(b)) {\n return isBytesDisplay(a) && isBytesDisplay(b) && isSameBytesDisplay(a, b);\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !isDeepEqual(value, b.get(key), seen)) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a.values()) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n if (!isObjectLike(a) || !isObjectLike(b)) {\n return false;\n }\n\n if (seen.get(a) === b) return true;\n seen.set(a, b);\n\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n if (aIsArray !== bIsArray) return false;\n\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (!isDeepEqual(a[i], b[i], seen)) return false;\n }\n return true;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n\n for (const key of aKeys) {\n if (!Object.hasOwn(b, key)) return false;\n if (!isDeepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt-button.js","sourceRoot":"","sources":["../../../src/components/ui/decrypt-button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,GAAG,2lBAA2lB,CAAC;AAW3mB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,KAAK,EACf,OAAO,GACY;IACnB,OAAO,CACL,8BACE,gBAAO,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAI,EACtD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EACxC,QAAQ,EAAE,SAAS,IAAI,OAAO,EAC9B,SAAS,EAAE,kBAAkB,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAAE,aAE/E,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,CACtB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,eACE,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,aAEtB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,GAAG,EAC1D,eAAM,CAAC,EAAC,yBAAyB,GAAG,IAChC,CACP,CAAC,CAAC,CAAC,CACF,eACE,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,aAEtB,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,GAAG,EAC1D,eAAM,CAAC,EAAC,0BAA0B,GAAG,IACjC,CACP,EACA,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IACvD,IACR,CACJ,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\nimport { Spinner } from './spinner';\n\nconst STYLES = `.wf-decrypt-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-decrypt-idle{color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400)}.wf-decrypt-idle:hover{background:var(--ds-gray-alpha-200)}.wf-decrypt-done{color:var(--ds-green-900);background:var(--ds-green-100);box-shadow:0 0 0 1px var(--ds-green-400);cursor:default}`;\n\ninterface DecryptButtonProps {\n /** Whether an encryption key has been obtained (decryption is active). */\n decrypted?: boolean;\n /** Whether the key is currently being fetched. */\n loading?: boolean;\n /** Called when the user clicks to initiate decryption. */\n onClick?: () => void;\n}\n\n/**\n * Decrypt/Decrypted button using Geist secondary style.\n * Three states: idle (secondary gray), decrypting (spinner), decrypted (green success).\n */\nexport function DecryptButton({\n decrypted = false,\n loading = false,\n onClick,\n}: DecryptButtonProps) {\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <button\n type=\"button\"\n onClick={decrypted ? undefined : onClick}\n disabled={decrypted || loading}\n className={`wf-decrypt-btn ${decrypted ? 'wf-decrypt-done' : 'wf-decrypt-idle'}`}\n >\n {loading ? (\n <Spinner size={14} />\n ) : decrypted ? (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 9.9-1\" />\n </svg>\n ) : (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n )}\n {loading ? 'Decrypting…' : decrypted ? 'Decrypted' : 'Decrypt'}\n </button>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-card.js","sourceRoot":"","sources":["../../../src/components/ui/error-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,OAAO,GAAG,eAAe,GACV;IACf,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,CACL,cAAK,SAAS,EAAC,4BAA4B,YACzC,eACE,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,SAAS,CACV,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAE1C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,EACzC,SAAS,EAAC,sFAAsF,EAChG,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAErC,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,WAAW,IAAC,SAAS,EAAC,kBAAkB,GAAG,EAC5C,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,GAAQ,IAChD,EACN,eAAK,SAAS,EAAC,sCAAsC,aACnD,eAAM,SAAS,EAAC,SAAS,sCAA6B,EACtD,KAAC,WAAW,IACV,SAAS,EAAE,EAAE,CACX,2CAA2C,EAC3C,UAAU,IAAI,YAAY,CAC3B,GACD,IACE,IACC,EAER,UAAU,IAAI,OAAO,IAAI,CACxB,cACE,SAAS,EAAC,WAAW,EACrB,KAAK,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,YAEnD,cACE,SAAS,EAAC,qFAAqF,EAC/F,KAAK,EAAE;4BACL,UAAU,EAAE,mBAAmB;4BAC/B,KAAK,EAAE,mBAAmB;yBAC3B,YAEA,OAAO,GACJ,GACF,CACP,IACG,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\nimport { AlertCircle, ChevronDown } from 'lucide-react';\nimport { useState } from 'react';\nimport { cn } from '../../lib/utils';\n\ninterface ErrorCardProps {\n /** Title shown in the header */\n title: string;\n /** Error message or details to show when expanded */\n details?: string;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * A collapsible error card that shows a title with an error icon,\n * and expands to reveal details when clicked.\n */\nexport function ErrorCard({\n title,\n className,\n details = 'Unknown error',\n}: ErrorCardProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <div className=\"flex justify-center w-full\">\n <div\n className={cn(\n 'rounded-lg border border-red-400 w-full max-w-[800px]',\n className\n )}\n style={{ background: 'var(--ds-red-100)' }}\n >\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full px-4 py-3 flex items-center justify-between gap-2 text-left transition-colors\"\n style={{ color: 'var(--ds-red-900)' }}\n >\n <div className=\"flex items-center gap-2\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n <span className=\"font-medium text-sm\">{title}</span>\n </div>\n <div className=\"flex items-center gap-1.5 opacity-70\">\n <span className=\"text-xs\">Click to show details</span>\n <ChevronDown\n className={cn(\n 'h-4 w-4 transition-transform duration-200',\n isExpanded && 'rotate-180'\n )}\n />\n </div>\n </button>\n\n {isExpanded && details && (\n <div\n className=\"px-4 pb-3\"\n style={{ borderTop: '1px solid var(--ds-red-400)' }}\n >\n <pre\n className=\"mt-3 p-3 rounded-md text-xs font-mono whitespace-pre-wrap break-words overflow-auto\"\n style={{\n background: 'var(--ds-red-200)',\n color: 'var(--ds-red-900)',\n }}\n >\n {details}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-stack-block.js","sourceRoot":"","sources":["../../../src/components/ui/error-stack-block.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,IAAI,KAAK;QAChB,OAAQ,KAAiC,CAAC,KAAK,KAAK,QAAQ,CAC7D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,GAGN;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAE5D,OAAO,CACL,eACE,SAAS,EAAC,4CAA4C,EACtD,KAAK,EAAE;YACL,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,mBAAmB;SAChC,aAED,iBACE,IAAI,EAAC,QAAQ,gBACF,YAAY,EACvB,KAAK,EAAC,MAAM,EACZ,SAAS,EAAC,gMAAgM,EAC1M,KAAK,EAAE;oBACL,WAAW,EAAE,mBAAmB;oBAChC,UAAU,EAAE,mBAAmB;oBAC/B,KAAK,EAAE,mBAAmB;iBAC3B,EACD,OAAO,EAAE,GAAG,EAAE;oBACZ,SAAS,CAAC,SAAS;yBAChB,SAAS,CAAC,QAAQ,CAAC;yBACnB,IAAI,CAAC,GAAG,EAAE;wBACT,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;oBACvC,CAAC,CAAC;yBACD,KAAK,CAAC,GAAG,EAAE;wBACV,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;gBACP,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,GACX,EAER,OAAO,IAAI,CACV,eACE,SAAS,EAAC,0CAA0C,EACpD,KAAK,EAAE;oBACL,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,6BAA6B;iBAC5C,aAED,KAAC,WAAW,IAAC,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAI,EACrE,YAAG,SAAS,EAAC,uCAAuC,YAAE,OAAO,GAAK,IAC9D,CACP,EACD,cACE,SAAS,EAAC,iFAAiF,EAC3F,KAAK,EAAE;oBACL,KAAK,EAAE,mBAAmB;oBAC1B,UAAU,EAAE,mBAAmB;iBAChC,YAEA,KAAK,GACF,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\nimport { AlertCircle, Copy } from 'lucide-react';\nimport { useToast } from '../../lib/toast';\n\n/**\n * Check whether `value` looks like a structured error object with a `stack`\n * field that we can render as pre-formatted text.\n */\nexport function isStructuredErrorWithStack(\n value: unknown\n): value is Record<string, unknown> & { stack: string } {\n return (\n value != null &&\n typeof value === 'object' &&\n 'stack' in value &&\n typeof (value as Record<string, unknown>).stack === 'string'\n );\n}\n\n/**\n * Renders an error with a `stack` field as a visually distinct error block.\n * Shows the error message with an alert icon at the top, separated from\n * the stack trace below.\n */\nexport function ErrorStackBlock({\n value,\n}: {\n value: Record<string, unknown> & { stack: string };\n}) {\n const toast = useToast();\n const stack = value.stack;\n const message = typeof value.message === 'string' ? value.message : undefined;\n const copyText = message ? `${message}\\n\\n${stack}` : stack;\n\n return (\n <div\n className=\"relative overflow-hidden rounded-md border\"\n style={{\n borderColor: 'var(--ds-red-400)',\n background: 'var(--ds-red-100)',\n }}\n >\n <button\n type=\"button\"\n aria-label=\"Copy error\"\n title=\"Copy\"\n className=\"!absolute !right-2 !top-2 !flex !h-6 !w-6 !items-center !justify-center !rounded-md !border transition-transform transition-colors duration-100 hover:!bg-[var(--ds-red-200)] active:!scale-95\"\n style={{\n borderColor: 'var(--ds-red-400)',\n background: 'var(--ds-red-100)',\n color: 'var(--ds-red-900)',\n }}\n onClick={() => {\n navigator.clipboard\n .writeText(copyText)\n .then(() => {\n toast.success('Copied to clipboard');\n })\n .catch(() => {\n toast.error('Failed to copy');\n });\n }}\n >\n <Copy size={12} />\n </button>\n\n {message && (\n <div\n className=\"flex items-start gap-2 px-3 py-2.5 pr-10\"\n style={{\n color: 'var(--ds-red-900)',\n borderBottom: '1px solid var(--ds-red-400)',\n }}\n >\n <AlertCircle className=\"h-4 w-4 shrink-0\" style={{ marginTop: 1 }} />\n <p className=\"text-xs font-semibold m-0 break-words\">{message}</p>\n </div>\n )}\n <pre\n className=\"px-3 py-2.5 text-xs font-mono whitespace-pre-wrap break-words overflow-auto m-0\"\n style={{\n color: 'var(--ds-red-900)',\n background: 'var(--ds-red-200)',\n }}\n >\n {stack}\n </pre>\n </div>\n );\n}\n"]}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared theme configuration for react-inspector's ObjectInspector.
|
|
3
|
-
*
|
|
4
|
-
* Colors follow Geist's Shiki JSON palette so the inspector reads the same
|
|
5
|
-
* as highlighted code blocks across the product:
|
|
6
|
-
* - property names / punctuation: --ds-gray-1000 (default foreground)
|
|
7
|
-
* - strings / numbers / booleans: --ds-green-900
|
|
8
|
-
* - null / undefined: --ds-gray-900 (muted)
|
|
9
|
-
* - regexp / function: --ds-purple-900
|
|
10
|
-
* - date: --ds-pink-900
|
|
11
|
-
*
|
|
12
|
-
* Because the `--ds-*` tokens adapt to theme automatically, the light and
|
|
13
|
-
* dark objects are intentionally identical.
|
|
14
|
-
*/
|
|
15
|
-
export interface InspectorThemeExtended {
|
|
16
|
-
/** Color for Date values (Node: 'magenta') */
|
|
17
|
-
OBJECT_VALUE_DATE_COLOR: string;
|
|
18
|
-
}
|
|
19
|
-
export declare const inspectorThemeExtendedLight: InspectorThemeExtended;
|
|
20
|
-
export declare const inspectorThemeExtendedDark: InspectorThemeExtended;
|
|
21
|
-
export declare const inspectorThemeLight: {
|
|
22
|
-
BASE_COLOR: string;
|
|
23
|
-
OBJECT_NAME_COLOR: string;
|
|
24
|
-
OBJECT_VALUE_STRING_COLOR: string;
|
|
25
|
-
OBJECT_VALUE_SYMBOL_COLOR: string;
|
|
26
|
-
OBJECT_VALUE_NUMBER_COLOR: string;
|
|
27
|
-
OBJECT_VALUE_BOOLEAN_COLOR: string;
|
|
28
|
-
OBJECT_VALUE_NULL_COLOR: string;
|
|
29
|
-
OBJECT_VALUE_UNDEFINED_COLOR: string;
|
|
30
|
-
OBJECT_VALUE_REGEXP_COLOR: string;
|
|
31
|
-
OBJECT_VALUE_FUNCTION_PREFIX_COLOR: string;
|
|
32
|
-
HTML_TAG_COLOR: string;
|
|
33
|
-
HTML_TAGNAME_COLOR: string;
|
|
34
|
-
HTML_ATTRIBUTE_NAME_COLOR: string;
|
|
35
|
-
HTML_ATTRIBUTE_VALUE_COLOR: string;
|
|
36
|
-
HTML_COMMENT_COLOR: string;
|
|
37
|
-
HTML_DOCTYPE_COLOR: string;
|
|
38
|
-
ARROW_COLOR: string;
|
|
39
|
-
TABLE_BORDER_COLOR: string;
|
|
40
|
-
TABLE_TH_BACKGROUND_COLOR: string;
|
|
41
|
-
TABLE_TH_HOVER_COLOR: string;
|
|
42
|
-
TABLE_SORT_ICON_COLOR: string;
|
|
43
|
-
BASE_FONT_SIZE: string;
|
|
44
|
-
BASE_LINE_HEIGHT: number;
|
|
45
|
-
BASE_BACKGROUND_COLOR: string;
|
|
46
|
-
OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: number;
|
|
47
|
-
OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: number;
|
|
48
|
-
HTML_TAGNAME_TEXT_TRANSFORM: "lowercase";
|
|
49
|
-
ARROW_MARGIN_RIGHT: number;
|
|
50
|
-
ARROW_FONT_SIZE: number;
|
|
51
|
-
TREENODE_FONT_FAMILY: string;
|
|
52
|
-
TREENODE_FONT_SIZE: string;
|
|
53
|
-
TREENODE_LINE_HEIGHT: number;
|
|
54
|
-
TREENODE_PADDING_LEFT: number;
|
|
55
|
-
TABLE_DATA_BACKGROUND_IMAGE: string;
|
|
56
|
-
TABLE_DATA_BACKGROUND_SIZE: string;
|
|
57
|
-
};
|
|
58
|
-
export declare const inspectorThemeDark: {
|
|
59
|
-
BASE_COLOR: string;
|
|
60
|
-
OBJECT_NAME_COLOR: string;
|
|
61
|
-
OBJECT_VALUE_STRING_COLOR: string;
|
|
62
|
-
OBJECT_VALUE_SYMBOL_COLOR: string;
|
|
63
|
-
OBJECT_VALUE_NUMBER_COLOR: string;
|
|
64
|
-
OBJECT_VALUE_BOOLEAN_COLOR: string;
|
|
65
|
-
OBJECT_VALUE_NULL_COLOR: string;
|
|
66
|
-
OBJECT_VALUE_UNDEFINED_COLOR: string;
|
|
67
|
-
OBJECT_VALUE_REGEXP_COLOR: string;
|
|
68
|
-
OBJECT_VALUE_FUNCTION_PREFIX_COLOR: string;
|
|
69
|
-
HTML_TAG_COLOR: string;
|
|
70
|
-
HTML_TAGNAME_COLOR: string;
|
|
71
|
-
HTML_ATTRIBUTE_NAME_COLOR: string;
|
|
72
|
-
HTML_ATTRIBUTE_VALUE_COLOR: string;
|
|
73
|
-
HTML_COMMENT_COLOR: string;
|
|
74
|
-
HTML_DOCTYPE_COLOR: string;
|
|
75
|
-
ARROW_COLOR: string;
|
|
76
|
-
TABLE_BORDER_COLOR: string;
|
|
77
|
-
TABLE_TH_BACKGROUND_COLOR: string;
|
|
78
|
-
TABLE_TH_HOVER_COLOR: string;
|
|
79
|
-
TABLE_SORT_ICON_COLOR: string;
|
|
80
|
-
BASE_FONT_SIZE: string;
|
|
81
|
-
BASE_LINE_HEIGHT: number;
|
|
82
|
-
BASE_BACKGROUND_COLOR: string;
|
|
83
|
-
OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: number;
|
|
84
|
-
OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: number;
|
|
85
|
-
HTML_TAGNAME_TEXT_TRANSFORM: "lowercase";
|
|
86
|
-
ARROW_MARGIN_RIGHT: number;
|
|
87
|
-
ARROW_FONT_SIZE: number;
|
|
88
|
-
TREENODE_FONT_FAMILY: string;
|
|
89
|
-
TREENODE_FONT_SIZE: string;
|
|
90
|
-
TREENODE_LINE_HEIGHT: number;
|
|
91
|
-
TREENODE_PADDING_LEFT: number;
|
|
92
|
-
TABLE_DATA_BACKGROUND_IMAGE: string;
|
|
93
|
-
TABLE_DATA_BACKGROUND_SIZE: string;
|
|
94
|
-
};
|
|
95
|
-
//# sourceMappingURL=inspector-theme.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspector-theme.d.ts","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,2BAA2B,EAAE,sBAEzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAExC,CAAC;AAwEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAM9C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared theme configuration for react-inspector's ObjectInspector.
|
|
3
|
-
*
|
|
4
|
-
* Colors follow Geist's Shiki JSON palette so the inspector reads the same
|
|
5
|
-
* as highlighted code blocks across the product:
|
|
6
|
-
* - property names / punctuation: --ds-gray-1000 (default foreground)
|
|
7
|
-
* - strings / numbers / booleans: --ds-green-900
|
|
8
|
-
* - null / undefined: --ds-gray-900 (muted)
|
|
9
|
-
* - regexp / function: --ds-purple-900
|
|
10
|
-
* - date: --ds-pink-900
|
|
11
|
-
*
|
|
12
|
-
* Because the `--ds-*` tokens adapt to theme automatically, the light and
|
|
13
|
-
* dark objects are intentionally identical.
|
|
14
|
-
*/
|
|
15
|
-
export const inspectorThemeExtendedLight = {
|
|
16
|
-
OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
|
|
17
|
-
};
|
|
18
|
-
export const inspectorThemeExtendedDark = {
|
|
19
|
-
OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
|
|
20
|
-
};
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Shared structural values (same in both themes)
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
const shared = {
|
|
25
|
-
BASE_FONT_SIZE: '11px',
|
|
26
|
-
BASE_LINE_HEIGHT: 1.4,
|
|
27
|
-
BASE_BACKGROUND_COLOR: 'transparent',
|
|
28
|
-
OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,
|
|
29
|
-
OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,
|
|
30
|
-
HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase',
|
|
31
|
-
ARROW_MARGIN_RIGHT: 3,
|
|
32
|
-
ARROW_FONT_SIZE: 12,
|
|
33
|
-
TREENODE_FONT_FAMILY: 'var(--font-mono)',
|
|
34
|
-
TREENODE_FONT_SIZE: '11px',
|
|
35
|
-
TREENODE_LINE_HEIGHT: 1.4,
|
|
36
|
-
TREENODE_PADDING_LEFT: 12,
|
|
37
|
-
TABLE_DATA_BACKGROUND_IMAGE: 'none',
|
|
38
|
-
TABLE_DATA_BACKGROUND_SIZE: '0',
|
|
39
|
-
};
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
// Light theme
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
const geistTheme = {
|
|
44
|
-
...shared,
|
|
45
|
-
// Base text
|
|
46
|
-
BASE_COLOR: 'var(--ds-gray-1000)',
|
|
47
|
-
// Property names — default foreground (matches JSON key color in Geist Shiki)
|
|
48
|
-
OBJECT_NAME_COLOR: 'var(--ds-gray-1000)',
|
|
49
|
-
// Strings & symbols — green
|
|
50
|
-
OBJECT_VALUE_STRING_COLOR: 'var(--ds-green-900)',
|
|
51
|
-
OBJECT_VALUE_SYMBOL_COLOR: 'var(--ds-green-900)',
|
|
52
|
-
// Numbers & booleans — green (Geist JSON tokens)
|
|
53
|
-
OBJECT_VALUE_NUMBER_COLOR: 'var(--ds-green-900)',
|
|
54
|
-
OBJECT_VALUE_BOOLEAN_COLOR: 'var(--ds-green-900)',
|
|
55
|
-
// null — muted foreground
|
|
56
|
-
OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',
|
|
57
|
-
// undefined — muted foreground
|
|
58
|
-
OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-900)',
|
|
59
|
-
// RegExp — purple
|
|
60
|
-
OBJECT_VALUE_REGEXP_COLOR: 'var(--ds-purple-900)',
|
|
61
|
-
// Functions — purple
|
|
62
|
-
OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'var(--ds-purple-900)',
|
|
63
|
-
// HTML (rarely used here, kept consistent with the palette)
|
|
64
|
-
HTML_TAG_COLOR: 'var(--ds-gray-900)',
|
|
65
|
-
HTML_TAGNAME_COLOR: 'var(--ds-blue-900)',
|
|
66
|
-
HTML_ATTRIBUTE_NAME_COLOR: 'var(--ds-amber-900)',
|
|
67
|
-
HTML_ATTRIBUTE_VALUE_COLOR: 'var(--ds-green-900)',
|
|
68
|
-
HTML_COMMENT_COLOR: 'var(--ds-gray-700)',
|
|
69
|
-
HTML_DOCTYPE_COLOR: 'var(--ds-gray-700)',
|
|
70
|
-
// Structural
|
|
71
|
-
ARROW_COLOR: 'var(--ds-gray-700)',
|
|
72
|
-
TABLE_BORDER_COLOR: 'var(--ds-gray-300)',
|
|
73
|
-
TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',
|
|
74
|
-
TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',
|
|
75
|
-
TABLE_SORT_ICON_COLOR: 'var(--ds-gray-700)',
|
|
76
|
-
};
|
|
77
|
-
export const inspectorThemeLight = geistTheme;
|
|
78
|
-
// ---------------------------------------------------------------------------
|
|
79
|
-
// Dark theme
|
|
80
|
-
// ---------------------------------------------------------------------------
|
|
81
|
-
export const inspectorThemeDark = geistTheme;
|
|
82
|
-
//# sourceMappingURL=inspector-theme.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspector-theme.js","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,uBAAuB,EAAE,oBAAoB;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAA2B;IAChE,uBAAuB,EAAE,oBAAoB;CAC9C,CAAC;AAEF,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,MAAM,MAAM,GAAG;IACb,cAAc,EAAE,MAAM;IACtB,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,aAAa;IACpC,mCAAmC,EAAE,EAAE;IACvC,oCAAoC,EAAE,CAAC;IACvC,2BAA2B,EAAE,WAAoB;IACjD,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,EAAE;IACnB,oBAAoB,EAAE,kBAAkB;IACxC,kBAAkB,EAAE,MAAM;IAC1B,oBAAoB,EAAE,GAAG;IACzB,qBAAqB,EAAE,EAAE;IACzB,2BAA2B,EAAE,MAAM;IACnC,0BAA0B,EAAE,GAAG;CAChC,CAAC;AAEF,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,GAAG;IACjB,GAAG,MAAM;IAET,YAAY;IACZ,UAAU,EAAE,qBAAqB;IAEjC,8EAA8E;IAC9E,iBAAiB,EAAE,qBAAqB;IAExC,4BAA4B;IAC5B,yBAAyB,EAAE,qBAAqB;IAChD,yBAAyB,EAAE,qBAAqB;IAEhD,iDAAiD;IACjD,yBAAyB,EAAE,qBAAqB;IAChD,0BAA0B,EAAE,qBAAqB;IAEjD,0BAA0B;IAC1B,uBAAuB,EAAE,oBAAoB;IAE7C,+BAA+B;IAC/B,4BAA4B,EAAE,oBAAoB;IAElD,kBAAkB;IAClB,yBAAyB,EAAE,sBAAsB;IAEjD,qBAAqB;IACrB,kCAAkC,EAAE,sBAAsB;IAE1D,4DAA4D;IAC5D,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,qBAAqB;IAChD,0BAA0B,EAAE,qBAAqB;IACjD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAExC,aAAa;IACb,WAAW,EAAE,oBAAoB;IACjC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,oBAAoB;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAE9C,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC","sourcesContent":["/**\n * Shared theme configuration for react-inspector's ObjectInspector.\n *\n * Colors follow Geist's Shiki JSON palette so the inspector reads the same\n * as highlighted code blocks across the product:\n * - property names / punctuation: --ds-gray-1000 (default foreground)\n * - strings / numbers / booleans: --ds-green-900\n * - null / undefined: --ds-gray-900 (muted)\n * - regexp / function: --ds-purple-900\n * - date: --ds-pink-900\n *\n * Because the `--ds-*` tokens adapt to theme automatically, the light and\n * dark objects are intentionally identical.\n */\n\n// ---------------------------------------------------------------------------\n// Extended color tokens not supported by react-inspector's built-in theme\n// system, applied via our custom nodeRenderer in data-inspector.tsx.\n// ---------------------------------------------------------------------------\n\nexport interface InspectorThemeExtended {\n /** Color for Date values (Node: 'magenta') */\n OBJECT_VALUE_DATE_COLOR: string;\n}\n\nexport const inspectorThemeExtendedLight: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',\n};\n\nexport const inspectorThemeExtendedDark: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',\n};\n\n// ---------------------------------------------------------------------------\n// Shared structural values (same in both themes)\n// ---------------------------------------------------------------------------\n\nconst shared = {\n BASE_FONT_SIZE: '11px',\n BASE_LINE_HEIGHT: 1.4,\n BASE_BACKGROUND_COLOR: 'transparent',\n OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,\n OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,\n HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase' as const,\n ARROW_MARGIN_RIGHT: 3,\n ARROW_FONT_SIZE: 12,\n TREENODE_FONT_FAMILY: 'var(--font-mono)',\n TREENODE_FONT_SIZE: '11px',\n TREENODE_LINE_HEIGHT: 1.4,\n TREENODE_PADDING_LEFT: 12,\n TABLE_DATA_BACKGROUND_IMAGE: 'none',\n TABLE_DATA_BACKGROUND_SIZE: '0',\n};\n\n// ---------------------------------------------------------------------------\n// Light theme\n// ---------------------------------------------------------------------------\n\nconst geistTheme = {\n ...shared,\n\n // Base text\n BASE_COLOR: 'var(--ds-gray-1000)',\n\n // Property names — default foreground (matches JSON key color in Geist Shiki)\n OBJECT_NAME_COLOR: 'var(--ds-gray-1000)',\n\n // Strings & symbols — green\n OBJECT_VALUE_STRING_COLOR: 'var(--ds-green-900)',\n OBJECT_VALUE_SYMBOL_COLOR: 'var(--ds-green-900)',\n\n // Numbers & booleans — green (Geist JSON tokens)\n OBJECT_VALUE_NUMBER_COLOR: 'var(--ds-green-900)',\n OBJECT_VALUE_BOOLEAN_COLOR: 'var(--ds-green-900)',\n\n // null — muted foreground\n OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',\n\n // undefined — muted foreground\n OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-900)',\n\n // RegExp — purple\n OBJECT_VALUE_REGEXP_COLOR: 'var(--ds-purple-900)',\n\n // Functions — purple\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'var(--ds-purple-900)',\n\n // HTML (rarely used here, kept consistent with the palette)\n HTML_TAG_COLOR: 'var(--ds-gray-900)',\n HTML_TAGNAME_COLOR: 'var(--ds-blue-900)',\n HTML_ATTRIBUTE_NAME_COLOR: 'var(--ds-amber-900)',\n HTML_ATTRIBUTE_VALUE_COLOR: 'var(--ds-green-900)',\n HTML_COMMENT_COLOR: 'var(--ds-gray-700)',\n HTML_DOCTYPE_COLOR: 'var(--ds-gray-700)',\n\n // Structural\n ARROW_COLOR: 'var(--ds-gray-700)',\n TABLE_BORDER_COLOR: 'var(--ds-gray-300)',\n TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',\n TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',\n TABLE_SORT_ICON_COLOR: 'var(--ds-gray-700)',\n};\n\nexport const inspectorThemeLight = geistTheme;\n\n// ---------------------------------------------------------------------------\n// Dark theme\n// ---------------------------------------------------------------------------\n\nexport const inspectorThemeDark = geistTheme;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-more-button.js","sourceRoot":"","sources":["../../../src/components/ui/load-more-button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,GAAG,qjBAAqjB,CAAC;AASrkB;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,GAAG,KAAK,EACf,OAAO,EACP,KAAK,GAAG,WAAW,EACnB,YAAY,GAAG,YAAY,GACP;IACpB,OAAO,CACL,8BACE,gBAAO,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAI,EACtD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAC,cAAc,aAEvB,OAAO,IAAI,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,EAChC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IACxB,IACR,CACJ,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\nimport { Spinner } from './spinner';\n\nconst STYLES = `.wf-load-more{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;border-radius:6px;font-size:13px;font-weight:500;line-height:20px;color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400);cursor:pointer;white-space:nowrap;gap:6px;transition:background 150ms}.wf-load-more:hover{background:var(--ds-gray-alpha-200)}.wf-load-more:disabled{opacity:.6;cursor:default}.wf-load-more:disabled:hover{background:var(--ds-background-100)}`;\n\ninterface LoadMoreButtonProps {\n loading?: boolean;\n onClick?: () => void;\n label?: string;\n loadingLabel?: string;\n}\n\n/**\n * A \"Load more\" button matching Geist's Button type=\"secondary\" size=\"small\"\n * with a spinner prefix when loading.\n */\nexport function LoadMoreButton({\n loading = false,\n onClick,\n label = 'Load more',\n loadingLabel = 'Loading...',\n}: LoadMoreButtonProps) {\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <button\n type=\"button\"\n onClick={onClick}\n disabled={loading}\n className=\"wf-load-more\"\n >\n {loading && <Spinner size={14} />}\n {loading ? loadingLabel : label}\n </button>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-dropdown.js","sourceRoot":"","sources":["../../../src/components/ui/menu-dropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nconst STYLES = `.wf-menu-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400);cursor:pointer;white-space:nowrap;transition:background 150ms}.wf-menu-btn:hover{background:var(--ds-gray-alpha-200)}.wf-menu-item{appearance:none;-webkit-appearance:none;border:none;display:flex;align-items:center;width:100%;height:40px;padding:0 8px;border-radius:6px;font-size:14px;color:var(--ds-gray-1000);background:transparent;cursor:pointer;transition:background 150ms}.wf-menu-item:hover{background:var(--ds-gray-alpha-100)}`;\n\nexport interface MenuDropdownOption<T extends string = string> {\n value: T;\n label: string;\n}\n\ninterface MenuDropdownProps<T extends string = string> {\n options: MenuDropdownOption<T>[];\n value: T;\n onChange: (value: T) => void;\n}\n\n/**\n * A dropdown menu that matches Geist's MenuButton (secondary) + Menu styling.\n * Uses CSS classes with proper :hover specificity (no inline background).\n */\nexport function MenuDropdown<T extends string = string>({\n options,\n value,\n onChange,\n}: MenuDropdownProps<T>) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const label =\n options.find((o) => o.value === value)?.label ?? options[0]?.label ?? '';\n\n useEffect(() => {\n if (!open) return;\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open]);\n\n return (\n <div ref={ref} style={{ position: 'relative', flexShrink: 0 }}>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n\n <button\n type=\"button\"\n className=\"wf-menu-btn\"\n onClick={() => setOpen(!open)}\n >\n <span>{label}</span>\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n style={{\n marginLeft: 16,\n marginRight: -4,\n color: 'var(--ds-gray-900)',\n }}\n >\n <path\n d=\"M4.5 6L8 9.5L11.5 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {open && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: 4,\n minWidth: 140,\n padding: 4,\n borderRadius: 12,\n background: 'var(--ds-background-100)',\n boxShadow: 'var(--ds-shadow-menu, var(--ds-shadow-medium))',\n zIndex: 2001,\n }}\n role=\"menu\"\n >\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitem\"\n className=\"wf-menu-item\"\n style={{\n fontWeight: option.value === value ? 500 : 400,\n }}\n onClick={() => {\n onChange(option.value);\n setOpen(false);\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/components/ui/skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EAC6B;IACrC,OAAO,CACL,iBACM,KAAK,EACT,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EACtC,KAAK,EAAE,EAAE,eAAe,EAAE,oBAAoB,EAAE,GAAG,KAAK,EAAE,GAC1D,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import { cn } from '../../lib/utils';\n\nfunction Skeleton({\n className,\n style,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n {...props}\n className={cn('rounded-md', className)}\n style={{ backgroundColor: 'var(--ds-gray-200)', ...style }}\n />\n );\n}\n\nexport { Skeleton };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":";AAAA,MAAM,SAAS,GAAG,4DAA4D,CAAC;AAE/E;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,GAAG,EAAE,EACT,KAAK,GAIN;IACC,MAAM,MAAM,GACV,IAAI,IAAI,EAAE;QACR,CAAC,CAAC;YACE,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,GAAG;SACX;QACH,CAAC,CAAC,IAAI,IAAI,EAAE;YACV,CAAC,CAAC;gBACE,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjE,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,GAAG;aACX;YACH,CAAC,CAAC;gBACE,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE;oBACN,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;oBAC5D,CAAC,GAAG,EAAE,CAAC;iBACR;gBACD,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI,GAAG,IAAI;gBAClB,KAAK,EAAE,IAAI,GAAG,IAAI;aACnB,CAAC;IAEV,OAAO,CACL,gBACE,KAAK,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,aAED,gBAAO,uBAAuB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAI,EACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC/B,eAEE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,KAAK;oBACX,GAAG,EAAE,KAAK;oBACV,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,KAAK;oBACpB,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;oBAC7B,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;oBAC5B,YAAY,EAAE,CAAC;oBACf,eAAe,EAAE,KAAK,IAAI,oBAAoB;oBAC9C,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,kBAAkB,IAAI,GAAG,IAAI,KAAK;oBACvE,SAAS,EAAE,mBAAmB,MAAM,CAAC,QAAQ,oBAAoB;oBACjE,cAAc,EAAE,GAAG,KAAK,IAAI;iBAC7B,IAdI,KAAK,CAeV,CACH,CAAC,IACG,CACR,CAAC;AACJ,CAAC","sourcesContent":["const KEYFRAMES = `@keyframes wf-spinner-fade{0%{opacity:1}100%{opacity:.15}}`;\n\n/**\n * Spinner matching Geist's multi-line fade spinner.\n * At size ≤12: 8 lines, ≤16: 10 lines, else: 12 lines.\n */\nexport function Spinner({\n size = 14,\n color,\n}: {\n size?: number;\n color?: string;\n}) {\n const config =\n size <= 12\n ? {\n count: 8,\n angle: 45,\n delays: [-875, -750, -625, -500, -375, -250, -125, 0],\n duration: 1000,\n lineW: 3,\n lineH: 1.5,\n }\n : size <= 16\n ? {\n count: 10,\n angle: 36,\n delays: [-900, -800, -700, -600, -500, -400, -300, -200, -100, 0],\n duration: 1000,\n lineW: 4,\n lineH: 1.5,\n }\n : {\n count: 12,\n angle: 30,\n delays: [\n -1100, -1000, -900, -800, -700, -600, -500, -400, -300, -200,\n -100, 0,\n ],\n duration: 1200,\n lineW: size * 0.24,\n lineH: size * 0.08,\n };\n\n return (\n <span\n style={{\n display: 'inline-flex',\n position: 'relative',\n width: size,\n height: size,\n }}\n >\n <style dangerouslySetInnerHTML={{ __html: KEYFRAMES }} />\n {config.delays.map((delay, i) => (\n <span\n key={delay}\n style={{\n position: 'absolute',\n left: '50%',\n top: '50%',\n width: config.lineW,\n height: config.lineH,\n marginLeft: -config.lineW / 2,\n marginTop: -config.lineH / 2,\n borderRadius: 1,\n backgroundColor: color ?? 'var(--ds-gray-700)',\n transform: `rotate(${i * config.angle}deg) translate(${size * 0.36}px)`,\n animation: `wf-spinner-fade ${config.duration}ms linear infinite`,\n animationDelay: `${delay}ms`,\n }}\n />\n ))}\n </span>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timestamp-tooltip.js","sourceRoot":"","sources":["../../../src/components/ui/timestamp-tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\n// ---------------------------------------------------------------------------\n// Time formatting helpers\n// ---------------------------------------------------------------------------\n\ninterface TimeUnit {\n unit: string;\n ms: number;\n}\n\nconst TIME_UNITS: TimeUnit[] = [\n { unit: 'year', ms: 31536000000 },\n { unit: 'month', ms: 2628000000 },\n { unit: 'day', ms: 86400000 },\n { unit: 'hour', ms: 3600000 },\n { unit: 'minute', ms: 60000 },\n { unit: 'second', ms: 1000 },\n];\n\nfunction formatTimeDifference(diff: number): string {\n let remaining = Math.abs(diff);\n const result: string[] = [];\n\n for (const { unit, ms } of TIME_UNITS) {\n const value = Math.floor(remaining / ms);\n if (value > 0 || result.length > 0) {\n result.push(`${value} ${unit}${value !== 1 ? 's' : ''}`);\n remaining %= ms;\n }\n if (result.length === 3) break;\n }\n\n return result.join(', ');\n}\n\nfunction useTimeAgo(date: number): string {\n const [timeAgo, setTimeAgo] = useState<string>('');\n\n useEffect(() => {\n const update = (): void => {\n const diff = Date.now() - date;\n const formatted = formatTimeDifference(diff);\n setTimeAgo(formatted ? `${formatted} ago` : 'Just now');\n };\n update();\n const timer = setInterval(update, 1000);\n return () => clearInterval(timer);\n }, [date]);\n\n return timeAgo;\n}\n\n// ---------------------------------------------------------------------------\n// Timezone row\n// ---------------------------------------------------------------------------\n\nfunction ZoneDateTimeRow({\n date,\n zone,\n}: {\n zone: string;\n date: number;\n}): ReactNode {\n const dateObj = new Date(date);\n\n const formattedZone =\n new Intl.DateTimeFormat('en-US', {\n timeZone: zone,\n timeZoneName: 'short',\n })\n .formatToParts(dateObj)\n .find((part) => part.type === 'timeZoneName')?.value || zone;\n\n const formattedDate = dateObj.toLocaleString('en-US', {\n timeZone: zone,\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n const formattedTime = dateObj.toLocaleTimeString('en-US', {\n timeZone: zone,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 16,\n padding: '0 6px',\n backgroundColor: 'var(--ds-gray-200)',\n borderRadius: 3,\n fontSize: 11,\n fontFamily: 'var(--font-mono, monospace)',\n fontWeight: 500,\n color: 'var(--ds-gray-900)',\n whiteSpace: 'nowrap',\n }}\n >\n {formattedZone}\n </div>\n <span\n style={{\n fontSize: 13,\n color: 'var(--ds-gray-1000)',\n whiteSpace: 'nowrap',\n }}\n >\n {formattedDate}\n </span>\n </div>\n <span\n style={{\n fontSize: 11,\n fontFamily: 'var(--font-mono, monospace)',\n fontVariantNumeric: 'tabular-nums',\n color: 'var(--ds-gray-900)',\n whiteSpace: 'nowrap',\n }}\n >\n {formattedTime}\n </span>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip card content\n// ---------------------------------------------------------------------------\n\nfunction TimestampTooltipContent({ date }: { date: number }): ReactNode {\n const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const timeAgo = useTimeAgo(date);\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n minWidth: 300,\n padding: '12px 14px',\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontVariantNumeric: 'tabular-nums',\n color: 'var(--ds-gray-900)',\n }}\n >\n {timeAgo}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <ZoneDateTimeRow date={date} zone=\"UTC\" />\n <ZoneDateTimeRow date={date} zone={localTimezone} />\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Hover tooltip wrapper\n// ---------------------------------------------------------------------------\n\nconst TOOLTIP_WIDTH = 330;\nconst VIEWPORT_PAD = 8;\n\nfunction TooltipPortal({\n triggerRect,\n onMouseEnter,\n onMouseLeave,\n date,\n}: {\n triggerRect: DOMRect;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n date: number;\n}): ReactNode {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [style, setStyle] = useState<React.CSSProperties>({\n position: 'fixed',\n zIndex: 9999,\n visibility: 'hidden',\n });\n\n useEffect(() => {\n const placement = triggerRect.top > 240 ? 'above' : 'below';\n const centerX = triggerRect.left + triggerRect.width / 2;\n\n const el = tooltipRef.current;\n const w = el ? el.offsetWidth : TOOLTIP_WIDTH;\n const h = el ? el.offsetHeight : 100;\n\n let left = centerX - w / 2;\n left = Math.max(\n VIEWPORT_PAD,\n Math.min(left, window.innerWidth - w - VIEWPORT_PAD)\n );\n\n let top: number;\n if (placement === 'above') {\n top = triggerRect.top - h - 6;\n if (top < VIEWPORT_PAD) {\n top = triggerRect.bottom + 6;\n }\n } else {\n top = triggerRect.bottom + 6;\n if (top + h > window.innerHeight - VIEWPORT_PAD) {\n top = triggerRect.top - h - 6;\n }\n }\n\n setStyle({\n position: 'fixed',\n left,\n top,\n zIndex: 9999,\n borderRadius: 10,\n border: '1px solid var(--ds-gray-alpha-200)',\n backgroundColor: 'var(--ds-background-100)',\n boxShadow: '0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)',\n visibility: 'visible',\n });\n }, [triggerRect]);\n\n return createPortal(\n // biome-ignore lint/a11y/noStaticElementInteractions: tooltip hover zone\n <div\n ref={tooltipRef}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={style}\n >\n <TimestampTooltipContent date={date} />\n </div>,\n document.body\n );\n}\n\nexport function TimestampTooltip({\n date,\n children,\n}: {\n date: number | Date | string | null | undefined;\n children: ReactNode;\n}): ReactNode {\n const [open, setOpen] = useState(false);\n const [triggerRect, setTriggerRect] = useState<DOMRect | null>(null);\n const triggerRef = useRef<HTMLSpanElement>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n };\n }, []);\n\n const ts =\n date == null\n ? null\n : typeof date === 'number'\n ? date\n : new Date(date).getTime();\n\n if (ts == null || Number.isNaN(ts)) return <>{children}</>;\n\n const cancelClose = () => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n };\n\n const scheduleClose = () => {\n cancelClose();\n closeTimer.current = setTimeout(() => setOpen(false), 120);\n };\n\n const handleOpen = () => {\n cancelClose();\n if (triggerRef.current) {\n setTriggerRect(triggerRef.current.getBoundingClientRect());\n }\n setOpen(true);\n };\n\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: tooltip trigger\n <span\n ref={triggerRef}\n onMouseEnter={handleOpen}\n onMouseLeave={scheduleClose}\n style={{ display: 'inline-flex' }}\n >\n {children}\n {open && triggerRect && (\n <TooltipPortal\n triggerRect={triggerRect}\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n date={ts}\n />\n )}\n </span>\n );\n}\n"]}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
|
|
2
|
-
import { type SpanSelectionInfo } from './sidebar/entity-detail-panel';
|
|
3
|
-
/** Re-export SpanSelectionInfo for consumers */
|
|
4
|
-
export type { SpanSelectionInfo };
|
|
5
|
-
export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, encryptionKey, onDecrypt, isDecrypting, }: {
|
|
6
|
-
run: WorkflowRun;
|
|
7
|
-
events: Event[];
|
|
8
|
-
isLoading?: boolean;
|
|
9
|
-
error?: Error | null;
|
|
10
|
-
spanDetailData?: WorkflowRun | Step | Hook | Event | null;
|
|
11
|
-
spanDetailLoading?: boolean;
|
|
12
|
-
spanDetailError?: Error | null;
|
|
13
|
-
onWakeUpSleep?: (runId: string, correlationId: string) => Promise<{
|
|
14
|
-
stoppedCount: number;
|
|
15
|
-
}>;
|
|
16
|
-
onResolveHook?: (hookToken: string, payload: unknown, hook?: Hook) => Promise<void>;
|
|
17
|
-
/** Callback to cancel the current run */
|
|
18
|
-
onCancelRun?: (runId: string) => Promise<void>;
|
|
19
|
-
/** Callback when a stream reference is clicked in the detail panel */
|
|
20
|
-
onStreamClick?: (streamId: string) => void;
|
|
21
|
-
/** Callback when a run reference is clicked in the detail panel */
|
|
22
|
-
onRunClick?: (runId: string) => void;
|
|
23
|
-
/** Callback when a span is selected. */
|
|
24
|
-
onSpanSelect?: (info: SpanSelectionInfo) => void;
|
|
25
|
-
/** Callback to load event data for a specific event (lazy loading in sidebar) */
|
|
26
|
-
onLoadEventData?: (correlationId: string, eventId: string) => Promise<unknown | null>;
|
|
27
|
-
/** Load next trace page when vertical scroll reaches bottom. */
|
|
28
|
-
onLoadMoreSpans?: () => void | Promise<void>;
|
|
29
|
-
/** Whether trace pagination has more data to load. */
|
|
30
|
-
hasMoreSpans?: boolean;
|
|
31
|
-
/** Whether trace pagination is currently fetching another page. */
|
|
32
|
-
isLoadingMoreSpans?: boolean;
|
|
33
|
-
/** Encryption key (available after Decrypt), threaded to event list for re-loading */
|
|
34
|
-
encryptionKey?: Uint8Array;
|
|
35
|
-
/** Callback to initiate decryption of encrypted run data */
|
|
36
|
-
onDecrypt?: () => void;
|
|
37
|
-
/** Whether the encryption key is currently being fetched */
|
|
38
|
-
isDecrypting?: boolean;
|
|
39
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
40
|
-
//# sourceMappingURL=workflow-trace-view.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/workflow-trace-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA2jBvC,gDAAgD;AAChD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAgKlC,eAAO,MAAM,mBAAmB,GAAI,wRAqBjC;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,4CA8VA,CAAC"}
|