@workflow/web-shared 5.0.0-beta.1 → 5.0.0-beta.11
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 +1 -1
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +18 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +219 -125
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +5 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -2
- package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
- package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts +10 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/event-list.js +44 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +15 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/split-pane.js +105 -0
- package/dist/components/new-trace-viewer/components/timeline.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/timeline.js +221 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +19 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-row-window.js +69 -0
- package/dist/components/new-trace-viewer/context.d.ts +15 -0
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/context.js +47 -0
- package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/detail-panel.js +13 -0
- package/dist/components/new-trace-viewer/icons.d.ts +6 -0
- package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/icons.js +15 -0
- package/dist/components/new-trace-viewer/search.d.ts +19 -0
- package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/search.js +134 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +11 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/trace-viewer.js +400 -0
- package/dist/components/new-trace-viewer/types.d.ts +1 -0
- package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/types.js +2 -0
- package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/util/constants.js +2 -0
- package/dist/components/new-trace-viewer/utils.d.ts +46 -0
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/utils.js +330 -0
- package/dist/components/run-trace-view.d.ts +2 -1
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +3 -3
- package/dist/components/sidebar/attribute-panel.d.ts +7 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +131 -70
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +16 -15
- package/dist/components/sidebar/detail-card.d.ts +5 -6
- package/dist/components/sidebar/detail-card.d.ts.map +1 -1
- package/dist/components/sidebar/detail-card.js +32 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +20 -37
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +21 -15
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
- package/dist/components/sidebar/sidebar-data-context.js +19 -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 +3 -27
- package/dist/components/trace-viewer/components/map.js +1 -1
- package/dist/components/trace-viewer/components/markers.js +1 -1
- package/dist/components/trace-viewer/components/node.js +1 -1
- package/dist/components/trace-viewer/components/search-input.js +1 -1
- package/dist/components/trace-viewer/components/search.js +1 -1
- package/dist/components/trace-viewer/components/span-content.js +1 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
- package/dist/components/trace-viewer/components/span-segments.js +1 -1
- package/dist/components/trace-viewer/components/span-strategies.js +1 -1
- package/dist/components/trace-viewer/components/ui.js +1 -1
- package/dist/components/trace-viewer/components/zoom-button.js +1 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
- package/dist/components/trace-viewer/context.js +1 -1
- package/dist/components/trace-viewer/index.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +1 -1
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/constants.js +1 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +6 -9
- package/dist/components/trace-viewer/util/tree.js +1 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
- package/dist/components/trace-viewer/worker.js +1 -1
- package/dist/components/trace-viewer-new.d.ts +14 -0
- package/dist/components/trace-viewer-new.d.ts.map +1 -0
- package/dist/components/trace-viewer-new.js +22 -0
- package/dist/components/ui/alert.js +1 -1
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/data-inspector.d.ts +39 -1
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +207 -22
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +1 -1
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +27 -19
- 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/inspector-theme.d.ts +9 -10
- package/dist/components/ui/inspector-theme.d.ts.map +1 -1
- package/dist/components/ui/inspector-theme.js +39 -72
- package/dist/components/ui/kbd.d.ts +6 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +6 -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 +1 -1
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.js +1 -1
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-trace-view.d.ts +3 -1
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +10 -5
- package/dist/components/workflow-traces/event-colors.js +1 -1
- package/dist/components/workflow-traces/trace-colors.js +1 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +19 -6
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/lib/event-analysis.js +1 -1
- package/dist/lib/event-materialization.js +1 -1
- 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 +14 -1
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +157 -4
- package/dist/lib/stream-display.d.ts +18 -0
- package/dist/lib/stream-display.d.ts.map +1 -0
- package/dist/lib/stream-display.js +30 -0
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +3 -2
- package/dist/lib/utils.d.ts +9 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +27 -32
- package/dist/styles.css +475 -1
- package/package.json +6 -4
- package/src/components/event-list-view.tsx +421 -262
- package/src/components/index.ts +13 -1
- package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +135 -0
- package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
- package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
- package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
- package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
- package/src/components/new-trace-viewer/components/split-pane.tsx +198 -0
- package/src/components/new-trace-viewer/components/timeline.tsx +560 -0
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +94 -0
- package/src/components/new-trace-viewer/components/use-row-window.ts +93 -0
- package/src/components/new-trace-viewer/context.tsx +90 -0
- package/src/components/new-trace-viewer/detail-panel.tsx +55 -0
- package/src/components/new-trace-viewer/icons.tsx +79 -0
- package/src/components/new-trace-viewer/search.ts +178 -0
- package/src/components/new-trace-viewer/trace-viewer.tsx +762 -0
- package/src/components/new-trace-viewer/types.ts +0 -0
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/new-trace-viewer/utils.ts +482 -0
- package/src/components/run-trace-view.tsx +3 -0
- package/src/components/sidebar/attribute-panel.tsx +240 -196
- package/src/components/sidebar/copyable-data-block.tsx +49 -27
- package/src/components/sidebar/detail-card.tsx +119 -59
- package/src/components/sidebar/entity-detail-panel.tsx +92 -148
- package/src/components/sidebar/events-list.tsx +51 -76
- package/src/components/sidebar/sidebar-data-context.tsx +62 -0
- package/src/components/stream-viewer.tsx +18 -40
- package/src/components/trace-viewer/util/timing.ts +5 -9
- package/src/components/trace-viewer-new.tsx +57 -0
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/data-inspector.tsx +427 -31
- package/src/components/ui/error-stack-block.tsx +39 -30
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/inspector-theme.ts +39 -81
- package/src/components/ui/kbd.tsx +21 -0
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-trace-view.tsx +12 -2
- package/src/components/workflow-traces/trace-span-construction.ts +24 -6
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +9 -0
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +169 -1
- package/src/lib/stream-display.ts +48 -0
- package/src/lib/trace-builder.ts +2 -1
- package/src/lib/utils.ts +27 -32
- package/src/styles.css +475 -1
- 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/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.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/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/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.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
|
@@ -1,8 +1,48 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { Lock } from 'lucide-react';
|
|
4
|
+
import { useContext } from 'react';
|
|
5
|
+
import { CopyButton } from '../new-trace-viewer/components/copy-button';
|
|
6
|
+
import { Button } from '../ui/button';
|
|
7
|
+
import { DataInspector, DecryptClickContext } from '../ui/data-inspector';
|
|
8
|
+
import { Spinner } from '../ui/spinner';
|
|
9
|
+
|
|
10
|
+
const encryptedPlaceholderPreview = `{
|
|
11
|
+
"input": "[encrypted]",
|
|
12
|
+
"result": "[encrypted]"
|
|
13
|
+
}`;
|
|
14
|
+
|
|
15
|
+
export function EncryptedDataBlock() {
|
|
16
|
+
const ctx = useContext(DecryptClickContext);
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div className="relative min-h-20 overflow-hidden rounded-md border border-gray-alpha-400 bg-background-100">
|
|
20
|
+
<pre
|
|
21
|
+
aria-hidden="true"
|
|
22
|
+
className="pointer-events-none m-0 select-none p-3 font-mono text-label-12 text-gray-900 blur-[4px]"
|
|
23
|
+
>
|
|
24
|
+
{encryptedPlaceholderPreview}
|
|
25
|
+
</pre>
|
|
26
|
+
<div className="absolute inset-0 flex items-center justify-center">
|
|
27
|
+
{ctx ? (
|
|
28
|
+
<Button onClick={ctx.onDecrypt} disabled={ctx.isDecrypting} size="xs">
|
|
29
|
+
{ctx.isDecrypting ? (
|
|
30
|
+
<Spinner size={10} />
|
|
31
|
+
) : (
|
|
32
|
+
<Lock className="h-3 w-3" />
|
|
33
|
+
)}
|
|
34
|
+
<span>Decrypt</span>
|
|
35
|
+
</Button>
|
|
36
|
+
) : (
|
|
37
|
+
<span className="inline-flex items-center gap-1 rounded border border-gray-alpha-400 bg-gray-100 px-1.5 py-0.5 text-button-12 font-medium text-gray-700">
|
|
38
|
+
<Lock className="h-3 w-3" />
|
|
39
|
+
Encrypted
|
|
40
|
+
</span>
|
|
41
|
+
)}
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
6
46
|
|
|
7
47
|
const serializeForClipboard = (value: unknown): string => {
|
|
8
48
|
if (typeof value === 'string') return value;
|
|
@@ -21,31 +61,13 @@ const serializeForClipboard = (value: unknown): string => {
|
|
|
21
61
|
};
|
|
22
62
|
|
|
23
63
|
export function CopyableDataBlock({ data }: { data: unknown }) {
|
|
24
|
-
const toast = useToast();
|
|
25
64
|
return (
|
|
26
|
-
<div
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
aria-label="Copy data"
|
|
33
|
-
title="Copy"
|
|
34
|
-
className="!absolute !right-2 !top-2 !flex !h-6 !w-6 !items-center !justify-center !rounded-md !border !bg-[var(--ds-background-100)] !text-[var(--ds-gray-800)] transition-transform transition-colors duration-100 hover:!bg-[var(--ds-gray-alpha-200)] active:!scale-95 active:!bg-[var(--ds-gray-alpha-300)]"
|
|
35
|
-
style={{ borderColor: 'var(--ds-gray-300)' }}
|
|
36
|
-
onClick={() => {
|
|
37
|
-
navigator.clipboard
|
|
38
|
-
.writeText(serializeForClipboard(data))
|
|
39
|
-
.then(() => {
|
|
40
|
-
toast.success('Copied to clipboard');
|
|
41
|
-
})
|
|
42
|
-
.catch(() => {
|
|
43
|
-
toast.error('Failed to copy');
|
|
44
|
-
});
|
|
45
|
-
}}
|
|
46
|
-
>
|
|
47
|
-
<Copy size={12} />
|
|
48
|
-
</button>
|
|
65
|
+
<div className="relative overflow-x-auto rounded-md border border-gray-alpha-400 p-3">
|
|
66
|
+
<CopyButton
|
|
67
|
+
copyText={serializeForClipboard(data)}
|
|
68
|
+
ariaLabel="Copy data"
|
|
69
|
+
className="absolute right-2 top-2 z-10 flex h-6 w-6 items-center justify-center rounded-md border border-gray-alpha-400 !bg-background-100 p-0 text-gray-900 transition-transform transition-colors duration-100 hover:bg-gray-200 active:scale-95 active:bg-gray-300"
|
|
70
|
+
/>
|
|
49
71
|
<DataInspector data={data} />
|
|
50
72
|
</div>
|
|
51
73
|
);
|
|
@@ -1,83 +1,143 @@
|
|
|
1
|
-
import { ChevronRight } from 'lucide-react';
|
|
2
|
-
import type
|
|
1
|
+
import { ChevronDown, ChevronRight } from 'lucide-react';
|
|
2
|
+
import { type ReactNode, useState } from 'react';
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
3
4
|
|
|
4
5
|
export function DetailCard({
|
|
5
6
|
summary,
|
|
6
7
|
children,
|
|
7
8
|
onToggle,
|
|
8
9
|
disabled = false,
|
|
10
|
+
defaultOpen = false,
|
|
11
|
+
variant = 'section',
|
|
12
|
+
trailing,
|
|
9
13
|
summaryClassName,
|
|
10
14
|
contentClassName,
|
|
11
15
|
}: {
|
|
12
16
|
summary: ReactNode;
|
|
13
17
|
children?: ReactNode;
|
|
14
|
-
/** Called when the detail card is expanded/collapsed */
|
|
15
18
|
onToggle?: (open: boolean) => void;
|
|
16
|
-
/** Renders a non-expandable summary card when true. */
|
|
17
19
|
disabled?: boolean;
|
|
18
|
-
|
|
20
|
+
defaultOpen?: boolean;
|
|
21
|
+
variant?: 'section' | 'card';
|
|
22
|
+
trailing?: ReactNode;
|
|
19
23
|
summaryClassName?: string;
|
|
20
|
-
/** Extra classes for expanded content wrapper. */
|
|
21
24
|
contentClassName?: string;
|
|
22
25
|
}) {
|
|
23
|
-
|
|
26
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
27
|
+
|
|
28
|
+
const handleToggle = (e: React.SyntheticEvent<HTMLDetailsElement>) => {
|
|
29
|
+
// React surfaces `toggle` as a bubbling synthetic event even though the
|
|
30
|
+
// native event doesn't bubble. Without this guard, a nested <details>
|
|
31
|
+
// (e.g. an event card inside the Events section) collapsing would flip
|
|
32
|
+
// the outer DetailCard's state. Only react to direct toggles.
|
|
33
|
+
if (e.target !== e.currentTarget) return;
|
|
34
|
+
const next = e.currentTarget.open;
|
|
35
|
+
setOpen(next);
|
|
36
|
+
onToggle?.(next);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
if (variant === 'card') {
|
|
40
|
+
if (disabled) {
|
|
41
|
+
return (
|
|
42
|
+
<div
|
|
43
|
+
className={cn(
|
|
44
|
+
'list-none px-3 py-4 bg-background-200 [&::-webkit-details-marker]:hidden',
|
|
45
|
+
summaryClassName
|
|
46
|
+
)}
|
|
47
|
+
style={{ cursor: 'not-allowed', opacity: 0.8 }}
|
|
48
|
+
>
|
|
49
|
+
{summary}
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
24
53
|
return (
|
|
25
|
-
<
|
|
26
|
-
className=
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
backgroundColor: 'var(--ds-gray-100)',
|
|
30
|
-
color: 'var(--ds-gray-700)',
|
|
31
|
-
cursor: 'not-allowed',
|
|
32
|
-
opacity: 0.8,
|
|
33
|
-
}}
|
|
54
|
+
<details
|
|
55
|
+
className="group/card last:border-b border-gray-alpha-400"
|
|
56
|
+
open={open}
|
|
57
|
+
onToggle={handleToggle}
|
|
34
58
|
>
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
<summary
|
|
60
|
+
className={cn(
|
|
61
|
+
'list-none cursor-pointer px-3 py-4 border-t border-gray-alpha-400 bg-background-200 hover:bg-gray-100 [&::-webkit-details-marker]:hidden',
|
|
62
|
+
summaryClassName
|
|
63
|
+
)}
|
|
64
|
+
>
|
|
65
|
+
<span className="flex items-center gap-1.5">
|
|
66
|
+
<ChevronRight
|
|
67
|
+
size={14}
|
|
68
|
+
className={cn(
|
|
69
|
+
'shrink-0 text-gray-700 group-hover/card:text-gray-1000',
|
|
70
|
+
open && 'rotate-90'
|
|
71
|
+
)}
|
|
72
|
+
/>
|
|
73
|
+
{summary}
|
|
74
|
+
</span>
|
|
75
|
+
</summary>
|
|
76
|
+
<div className={contentClassName}>{children}</div>
|
|
77
|
+
</details>
|
|
37
78
|
);
|
|
38
79
|
}
|
|
39
80
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
className="absolute left-3 -top-3 w-px h-3"
|
|
67
|
-
style={{ backgroundColor: 'var(--ds-gray-400)' }}
|
|
68
|
-
/>
|
|
69
|
-
{/* Curved corner */}
|
|
70
|
-
<div
|
|
71
|
-
className="absolute left-3 top-0 w-3 h-3 border-l border-b rounded-bl-lg"
|
|
72
|
-
style={{ borderColor: 'var(--ds-gray-400)' }}
|
|
73
|
-
/>
|
|
74
|
-
{/* Horizontal part to content */}
|
|
81
|
+
// Shared height with the expandable summary row. Keeps the trailing /
|
|
82
|
+
// disabled / chevron variants visually identical in height regardless of
|
|
83
|
+
// what's in the trailing slot.
|
|
84
|
+
const rowClasses =
|
|
85
|
+
'flex h-9 items-center gap-2 px-2 -mx-2 text-heading-14 font-medium my-2';
|
|
86
|
+
|
|
87
|
+
if (trailing) {
|
|
88
|
+
return (
|
|
89
|
+
<section className="-mx-4 border-t px-4 border-gray-alpha-400">
|
|
90
|
+
<div className={cn(rowClasses, summaryClassName)}>
|
|
91
|
+
<div className="isolate relative shrink-0 w-3.5 h-3.5 text-gray-700">
|
|
92
|
+
<ChevronRight
|
|
93
|
+
size={14}
|
|
94
|
+
className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
<span className="min-w-0 flex-1">{summary}</span>
|
|
98
|
+
<div className="shrink-0 pr-1">{trailing}</div>
|
|
99
|
+
</div>
|
|
100
|
+
</section>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (disabled) {
|
|
105
|
+
return (
|
|
106
|
+
<section className="-mx-4 border-t px-4 border-gray-alpha-400">
|
|
75
107
|
<div
|
|
76
|
-
className=
|
|
77
|
-
style={{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
108
|
+
className={cn(rowClasses, summaryClassName)}
|
|
109
|
+
style={{ color: 'var(--ds-gray-700)', cursor: 'not-allowed' }}
|
|
110
|
+
>
|
|
111
|
+
<span className="min-w-0 flex-1">{summary}</span>
|
|
112
|
+
</div>
|
|
113
|
+
</section>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<section className="-mx-4 border-t px-4 border-gray-alpha-400">
|
|
119
|
+
<details className="group" open={open} onToggle={handleToggle}>
|
|
120
|
+
<summary
|
|
121
|
+
className={cn(
|
|
122
|
+
'group/trigger list-none cursor-pointer rounded hover:bg-gray-alpha-100 [&::-webkit-details-marker]:hidden',
|
|
123
|
+
rowClasses,
|
|
124
|
+
summaryClassName
|
|
125
|
+
)}
|
|
126
|
+
>
|
|
127
|
+
<div className="isolate relative shrink-0 text-gray-700 group-hover/trigger:text-gray-1000 w-3.5 h-3.5">
|
|
128
|
+
<ChevronRight
|
|
129
|
+
size={14}
|
|
130
|
+
className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 opacity-100 group-open:opacity-0"
|
|
131
|
+
/>
|
|
132
|
+
<ChevronDown
|
|
133
|
+
size={14}
|
|
134
|
+
className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 opacity-0 group-open:opacity-100"
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
137
|
+
<span className="min-w-0 flex-1">{summary}</span>
|
|
138
|
+
</summary>
|
|
139
|
+
<div className={cn('mb-3', contentClassName)}>{children}</div>
|
|
140
|
+
</details>
|
|
141
|
+
</section>
|
|
82
142
|
);
|
|
83
143
|
}
|
|
@@ -5,11 +5,11 @@ import clsx from 'clsx';
|
|
|
5
5
|
import { Send, Zap } from 'lucide-react';
|
|
6
6
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
7
7
|
import { useToast } from '../../lib/toast';
|
|
8
|
-
import {
|
|
9
|
-
import { DecryptButton } from '../ui/decrypt-button';
|
|
8
|
+
import { DecryptClickContext } from '../ui/data-inspector';
|
|
10
9
|
import { AttributePanel } from './attribute-panel';
|
|
11
10
|
import { EventsList } from './events-list';
|
|
12
11
|
import { ResolveHookModal } from './resolve-hook-modal';
|
|
12
|
+
import { useSidebarDataOptional } from './sidebar-data-context';
|
|
13
13
|
|
|
14
14
|
// Type guards for runtime validation of span attribute data
|
|
15
15
|
function isStep(data: unknown): data is Step {
|
|
@@ -56,6 +56,7 @@ export interface SelectedSpanInfo {
|
|
|
56
56
|
export function EntityDetailPanel({
|
|
57
57
|
run,
|
|
58
58
|
onStreamClick,
|
|
59
|
+
onRunClick,
|
|
59
60
|
spanDetailData,
|
|
60
61
|
spanDetailError,
|
|
61
62
|
spanDetailLoading,
|
|
@@ -71,6 +72,8 @@ export function EntityDetailPanel({
|
|
|
71
72
|
run: WorkflowRun;
|
|
72
73
|
/** Callback when a stream reference is clicked */
|
|
73
74
|
onStreamClick?: (streamId: string) => void;
|
|
75
|
+
/** Callback when a run reference is clicked */
|
|
76
|
+
onRunClick?: (runId: string) => void;
|
|
74
77
|
/** Pre-fetched span detail data for the selected span. */
|
|
75
78
|
spanDetailData: WorkflowRun | Step | Hook | Event | null;
|
|
76
79
|
/** Error from external span detail fetch. */
|
|
@@ -114,6 +117,9 @@ export function EntityDetailPanel({
|
|
|
114
117
|
new Set()
|
|
115
118
|
);
|
|
116
119
|
|
|
120
|
+
const sidebar = useSidebarDataOptional();
|
|
121
|
+
const hasEncryptedData = Boolean(sidebar?.hasEncryptedData && !encryptionKey);
|
|
122
|
+
|
|
117
123
|
const data = selectedSpan?.data;
|
|
118
124
|
const rawEvents = selectedSpan?.rawEvents;
|
|
119
125
|
const rawEventsLength = rawEvents?.length ?? 0;
|
|
@@ -209,17 +215,6 @@ export function EntityDetailPanel({
|
|
|
209
215
|
const error = spanDetailError ?? undefined;
|
|
210
216
|
const loading = spanDetailLoading ?? false;
|
|
211
217
|
|
|
212
|
-
const hasEncryptedFields = useMemo(() => {
|
|
213
|
-
if (!spanDetailData) return false;
|
|
214
|
-
const d = spanDetailData as Record<string, unknown>;
|
|
215
|
-
return (
|
|
216
|
-
isEncryptedMarker(d.input) ||
|
|
217
|
-
isEncryptedMarker(d.output) ||
|
|
218
|
-
isEncryptedMarker(d.error) ||
|
|
219
|
-
isEncryptedMarker(d.metadata)
|
|
220
|
-
);
|
|
221
|
-
}, [spanDetailData]);
|
|
222
|
-
|
|
223
218
|
// Get the hook token for resolving (prefer fetched data, then hooks array fallback)
|
|
224
219
|
const hookToken = useMemo(() => {
|
|
225
220
|
if (resource !== 'hook' || !resourceId) return undefined;
|
|
@@ -347,155 +342,104 @@ export function EntityDetailPanel({
|
|
|
347
342
|
return null;
|
|
348
343
|
}
|
|
349
344
|
|
|
350
|
-
const resourceLabel = resource.charAt(0).toUpperCase() + resource.slice(1);
|
|
351
345
|
const hasPendingActions =
|
|
352
346
|
(resource === 'sleep' && canWakeUp) ||
|
|
353
347
|
(resource === 'hook' && canResolveHook);
|
|
354
|
-
const runStateLabel = run.completedAt ? 'Completed' : 'Live';
|
|
355
348
|
|
|
356
349
|
return (
|
|
357
350
|
<div className="flex h-full flex-col">
|
|
358
|
-
<
|
|
359
|
-
|
|
360
|
-
|
|
351
|
+
<DecryptClickContext.Provider
|
|
352
|
+
value={
|
|
353
|
+
onDecrypt ? { onDecrypt, isDecrypting, hasEncryptedData } : undefined
|
|
354
|
+
}
|
|
361
355
|
>
|
|
362
|
-
<div className="flex
|
|
363
|
-
|
|
364
|
-
<div
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
{
|
|
374
|
-
</span>
|
|
375
|
-
<span
|
|
376
|
-
className="text-[13px]"
|
|
377
|
-
style={{
|
|
378
|
-
color: run.completedAt
|
|
379
|
-
? 'var(--ds-gray-700)'
|
|
380
|
-
: 'var(--ds-green-800)',
|
|
381
|
-
}}
|
|
356
|
+
<div className="flex-1 overflow-y-auto px-4 pb-8">
|
|
357
|
+
{hasPendingActions && (
|
|
358
|
+
<div
|
|
359
|
+
className="mb-4 rounded-lg border p-2"
|
|
360
|
+
style={{
|
|
361
|
+
borderColor: 'var(--ds-gray-300)',
|
|
362
|
+
backgroundColor: 'var(--ds-gray-100)',
|
|
363
|
+
}}
|
|
364
|
+
>
|
|
365
|
+
<p
|
|
366
|
+
className="mb-2 px-1 text-[13px] font-medium uppercase tracking-wide"
|
|
367
|
+
style={{ color: 'var(--ds-gray-700)' }}
|
|
382
368
|
>
|
|
383
|
-
|
|
384
|
-
</
|
|
369
|
+
Actions
|
|
370
|
+
</p>
|
|
371
|
+
<div className="flex flex-col gap-2">
|
|
372
|
+
{/* Wake up button for pending sleep calls */}
|
|
373
|
+
{resource === 'sleep' && canWakeUp && (
|
|
374
|
+
<button
|
|
375
|
+
type="button"
|
|
376
|
+
onClick={handleWakeUp}
|
|
377
|
+
disabled={stoppingSleep}
|
|
378
|
+
className={clsx(
|
|
379
|
+
'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
|
|
380
|
+
'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
|
|
381
|
+
stoppingSleep
|
|
382
|
+
? 'opacity-50 cursor-not-allowed'
|
|
383
|
+
: 'cursor-pointer'
|
|
384
|
+
)}
|
|
385
|
+
style={{
|
|
386
|
+
background: 'var(--ds-amber-200)',
|
|
387
|
+
color: 'var(--ds-amber-900)',
|
|
388
|
+
}}
|
|
389
|
+
>
|
|
390
|
+
<Zap className="h-4 w-4" />
|
|
391
|
+
{stoppingSleep ? 'Waking up...' : 'Wake Up Sleep'}
|
|
392
|
+
</button>
|
|
393
|
+
)}
|
|
394
|
+
|
|
395
|
+
{/* Resolve hook button for pending hooks */}
|
|
396
|
+
{resource === 'hook' && canResolveHook && (
|
|
397
|
+
<button
|
|
398
|
+
type="button"
|
|
399
|
+
onClick={() => setShowResolveHookModal(true)}
|
|
400
|
+
disabled={resolvingHook}
|
|
401
|
+
className={clsx(
|
|
402
|
+
'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
|
|
403
|
+
'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
|
|
404
|
+
resolvingHook
|
|
405
|
+
? 'opacity-50 cursor-not-allowed'
|
|
406
|
+
: 'cursor-pointer'
|
|
407
|
+
)}
|
|
408
|
+
style={{
|
|
409
|
+
background: 'var(--ds-gray-1000)',
|
|
410
|
+
color: 'var(--ds-background-100)',
|
|
411
|
+
}}
|
|
412
|
+
>
|
|
413
|
+
<Send className="h-4 w-4" />
|
|
414
|
+
Resolve Hook
|
|
415
|
+
</button>
|
|
416
|
+
)}
|
|
417
|
+
</div>
|
|
385
418
|
</div>
|
|
386
|
-
<p
|
|
387
|
-
className="mt-1 truncate font-mono text-[13px]"
|
|
388
|
-
style={{ color: 'var(--ds-gray-700)' }}
|
|
389
|
-
title={resourceId}
|
|
390
|
-
>
|
|
391
|
-
{resourceId}
|
|
392
|
-
</p>
|
|
393
|
-
</div>
|
|
394
|
-
{(hasEncryptedFields || encryptionKey) && onDecrypt && (
|
|
395
|
-
<DecryptButton
|
|
396
|
-
decrypted={!!encryptionKey}
|
|
397
|
-
loading={isDecrypting}
|
|
398
|
-
onClick={onDecrypt}
|
|
399
|
-
/>
|
|
400
419
|
)}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
className="mb-2 px-1 text-[13px] font-medium uppercase tracking-wide"
|
|
415
|
-
style={{ color: 'var(--ds-gray-700)' }}
|
|
416
|
-
>
|
|
417
|
-
Actions
|
|
418
|
-
</p>
|
|
419
|
-
<div className="flex flex-col gap-2">
|
|
420
|
-
{/* Wake up button for pending sleep calls */}
|
|
421
|
-
{resource === 'sleep' && canWakeUp && (
|
|
422
|
-
<button
|
|
423
|
-
type="button"
|
|
424
|
-
onClick={handleWakeUp}
|
|
425
|
-
disabled={stoppingSleep}
|
|
426
|
-
className={clsx(
|
|
427
|
-
'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
|
|
428
|
-
'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
|
|
429
|
-
stoppingSleep
|
|
430
|
-
? 'opacity-50 cursor-not-allowed'
|
|
431
|
-
: 'cursor-pointer'
|
|
432
|
-
)}
|
|
433
|
-
style={{
|
|
434
|
-
background: 'var(--ds-amber-200)',
|
|
435
|
-
color: 'var(--ds-amber-900)',
|
|
436
|
-
}}
|
|
437
|
-
>
|
|
438
|
-
<Zap className="h-4 w-4" />
|
|
439
|
-
{stoppingSleep ? 'Waking up...' : 'Wake Up Sleep'}
|
|
440
|
-
</button>
|
|
441
|
-
)}
|
|
442
|
-
|
|
443
|
-
{/* Resolve hook button for pending hooks */}
|
|
444
|
-
{resource === 'hook' && canResolveHook && (
|
|
445
|
-
<button
|
|
446
|
-
type="button"
|
|
447
|
-
onClick={() => setShowResolveHookModal(true)}
|
|
448
|
-
disabled={resolvingHook}
|
|
449
|
-
className={clsx(
|
|
450
|
-
'flex items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium',
|
|
451
|
-
'disabled:opacity-50 disabled:cursor-not-allowed transition-colors',
|
|
452
|
-
resolvingHook
|
|
453
|
-
? 'opacity-50 cursor-not-allowed'
|
|
454
|
-
: 'cursor-pointer'
|
|
455
|
-
)}
|
|
456
|
-
style={{
|
|
457
|
-
background: 'var(--ds-gray-1000)',
|
|
458
|
-
color: 'var(--ds-background-100)',
|
|
459
|
-
}}
|
|
460
|
-
>
|
|
461
|
-
<Send className="h-4 w-4" />
|
|
462
|
-
Resolve Hook
|
|
463
|
-
</button>
|
|
464
|
-
)}
|
|
465
|
-
</div>
|
|
466
|
-
</div>
|
|
467
|
-
)}
|
|
468
|
-
|
|
469
|
-
<div className="space-y-4">
|
|
470
|
-
<section>
|
|
471
|
-
<h3
|
|
472
|
-
className="mb-2 text-[13px] font-medium uppercase tracking-wide"
|
|
473
|
-
style={{ color: 'var(--ds-gray-700)' }}
|
|
474
|
-
>
|
|
475
|
-
Details
|
|
476
|
-
</h3>
|
|
477
|
-
<AttributePanel
|
|
478
|
-
data={displayData}
|
|
479
|
-
moduleSpecifier={moduleSpecifier}
|
|
480
|
-
expiredAt={run.expiredAt}
|
|
481
|
-
isLoading={loading}
|
|
482
|
-
error={error ?? undefined}
|
|
483
|
-
onStreamClick={onStreamClick}
|
|
484
|
-
resource={resource}
|
|
485
|
-
/>
|
|
486
|
-
</section>
|
|
420
|
+
|
|
421
|
+
<AttributePanel
|
|
422
|
+
data={displayData}
|
|
423
|
+
moduleSpecifier={moduleSpecifier}
|
|
424
|
+
expiredAt={run.expiredAt}
|
|
425
|
+
isLoading={loading}
|
|
426
|
+
error={error ?? undefined}
|
|
427
|
+
onStreamClick={onStreamClick}
|
|
428
|
+
onRunClick={onRunClick}
|
|
429
|
+
onDecrypt={onDecrypt}
|
|
430
|
+
isDecrypting={isDecrypting}
|
|
431
|
+
resource={resource}
|
|
432
|
+
/>
|
|
487
433
|
|
|
488
434
|
{resource !== 'run' && rawEvents && (
|
|
489
|
-
<
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
/>
|
|
495
|
-
</section>
|
|
435
|
+
<EventsList
|
|
436
|
+
events={rawEvents}
|
|
437
|
+
onLoadEventData={onLoadEventData}
|
|
438
|
+
encryptionKey={encryptionKey}
|
|
439
|
+
/>
|
|
496
440
|
)}
|
|
497
441
|
</div>
|
|
498
|
-
</
|
|
442
|
+
</DecryptClickContext.Provider>
|
|
499
443
|
|
|
500
444
|
{/* Resolve Hook Modal */}
|
|
501
445
|
<ResolveHookModal
|