@workflow/web-shared 4.1.0-beta.65 → 4.1.0-beta.67

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.
Files changed (70) hide show
  1. package/dist/components/event-list-view.d.ts.map +1 -1
  2. package/dist/components/event-list-view.js +52 -16
  3. package/dist/components/event-list-view.js.map +1 -1
  4. package/dist/components/hook-actions.d.ts.map +1 -1
  5. package/dist/components/hook-actions.js +2 -1
  6. package/dist/components/hook-actions.js.map +1 -1
  7. package/dist/components/sidebar/attribute-panel.d.ts +3 -1
  8. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  9. package/dist/components/sidebar/attribute-panel.js +77 -40
  10. package/dist/components/sidebar/attribute-panel.js.map +1 -1
  11. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  12. package/dist/components/sidebar/copyable-data-block.js +2 -1
  13. package/dist/components/sidebar/copyable-data-block.js.map +1 -1
  14. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  15. package/dist/components/sidebar/entity-detail-panel.js +12 -6
  16. package/dist/components/sidebar/entity-detail-panel.js.map +1 -1
  17. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  18. package/dist/components/sidebar/events-list.js +33 -5
  19. package/dist/components/sidebar/events-list.js.map +1 -1
  20. package/dist/components/trace-viewer/components/span-segments.d.ts.map +1 -1
  21. package/dist/components/trace-viewer/components/span-segments.js +54 -1
  22. package/dist/components/trace-viewer/components/span-segments.js.map +1 -1
  23. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  24. package/dist/components/trace-viewer/util/timing.js +1 -2
  25. package/dist/components/trace-viewer/util/timing.js.map +1 -1
  26. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  27. package/dist/components/ui/error-stack-block.js +2 -1
  28. package/dist/components/ui/error-stack-block.js.map +1 -1
  29. package/dist/components/ui/timestamp-tooltip.d.ts +6 -0
  30. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -0
  31. package/dist/components/ui/timestamp-tooltip.js +200 -0
  32. package/dist/components/ui/timestamp-tooltip.js.map +1 -0
  33. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  34. package/dist/components/workflow-trace-view.js +8 -1
  35. package/dist/components/workflow-trace-view.js.map +1 -1
  36. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  37. package/dist/components/workflow-traces/trace-span-construction.js +10 -7
  38. package/dist/components/workflow-traces/trace-span-construction.js.map +1 -1
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/lib/hydration.d.ts +3 -0
  44. package/dist/lib/hydration.d.ts.map +1 -1
  45. package/dist/lib/hydration.js +36 -10
  46. package/dist/lib/hydration.js.map +1 -1
  47. package/dist/lib/toast.d.ts +25 -0
  48. package/dist/lib/toast.d.ts.map +1 -0
  49. package/dist/lib/toast.js +24 -0
  50. package/dist/lib/toast.js.map +1 -0
  51. package/dist/lib/utils.d.ts.map +1 -1
  52. package/dist/lib/utils.js +7 -3
  53. package/dist/lib/utils.js.map +1 -1
  54. package/package.json +6 -4
  55. package/src/components/event-list-view.tsx +125 -35
  56. package/src/components/hook-actions.tsx +2 -1
  57. package/src/components/sidebar/attribute-panel.tsx +85 -35
  58. package/src/components/sidebar/copyable-data-block.tsx +2 -1
  59. package/src/components/sidebar/entity-detail-panel.tsx +13 -5
  60. package/src/components/sidebar/events-list.tsx +51 -13
  61. package/src/components/trace-viewer/components/span-segments.ts +70 -1
  62. package/src/components/trace-viewer/util/timing.ts +1 -2
  63. package/src/components/ui/error-stack-block.tsx +2 -1
  64. package/src/components/ui/timestamp-tooltip.tsx +326 -0
  65. package/src/components/workflow-trace-view.tsx +8 -1
  66. package/src/components/workflow-traces/trace-span-construction.ts +12 -7
  67. package/src/index.ts +2 -0
  68. package/src/lib/hydration.ts +43 -9
  69. package/src/lib/toast.tsx +42 -0
  70. package/src/lib/utils.ts +7 -3
@@ -1 +1 @@
1
- {"version":3,"file":"hydration.js","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hydration.js","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface ToastAdapter {
3
+ success: (message: string, opts?: {
4
+ description?: string;
5
+ }) => void;
6
+ error: (message: string, opts?: {
7
+ description?: string;
8
+ }) => void;
9
+ info: (message: string, opts?: {
10
+ description?: string;
11
+ }) => void;
12
+ }
13
+ /**
14
+ * Provide a custom toast implementation to web-shared components.
15
+ *
16
+ * When not provided, falls back to sonner (works in packages/web).
17
+ * Host apps like vercel-site can supply their own adapter
18
+ * (e.g. Geist useToasts) so toasts render in the host's toast system.
19
+ */
20
+ export declare function ToastProvider({ toast, children, }: {
21
+ toast: ToastAdapter;
22
+ children: ReactNode;
23
+ }): ReactNode;
24
+ export declare function useToast(): ToastAdapter;
25
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../src/lib/toast.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClE;AAUD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAIZ;AAED,wBAAgB,QAAQ,IAAI,YAAY,CAEvC"}
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext } from 'react';
4
+ import { toast as sonnerToast } from 'sonner';
5
+ const defaultAdapter = {
6
+ success: (msg, opts) => sonnerToast.success(msg, opts),
7
+ error: (msg, opts) => sonnerToast.error(msg, opts),
8
+ info: (msg, opts) => sonnerToast.info(msg, opts),
9
+ };
10
+ const ToastContext = createContext(defaultAdapter);
11
+ /**
12
+ * Provide a custom toast implementation to web-shared components.
13
+ *
14
+ * When not provided, falls back to sonner (works in packages/web).
15
+ * Host apps like vercel-site can supply their own adapter
16
+ * (e.g. Geist useToasts) so toasts render in the host's toast system.
17
+ */
18
+ export function ToastProvider({ toast, children, }) {
19
+ return (_jsx(ToastContext.Provider, { value: toast, children: children }));
20
+ }
21
+ export function useToast() {
22
+ return useContext(ToastContext);
23
+ }
24
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/lib/toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAQ9C,MAAM,cAAc,GAAiB;IACnC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IACtD,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;IAClD,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;CACjD,CAAC;AAEF,MAAM,YAAY,GAAG,aAAa,CAAe,cAAc,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAyB,CACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CA6ClE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAiDlE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
package/dist/lib/utils.js CHANGED
@@ -40,12 +40,16 @@ export function formatDuration(ms, compact = false) {
40
40
  if (ms < MS_IN_MINUTE) {
41
41
  return `${durationFormatter.format(ms / MS_IN_SECOND)}s`;
42
42
  }
43
- // Compact format: single unit
43
+ // Compact format: multi-unit without decimals (e.g. "8m 20s", "2h 30m")
44
44
  if (compact) {
45
45
  if (ms < MS_IN_HOUR) {
46
- return `${durationFormatter.format(ms / MS_IN_MINUTE)}m`;
46
+ const m = Math.floor(ms / MS_IN_MINUTE);
47
+ const s = Math.floor((ms % MS_IN_MINUTE) / MS_IN_SECOND);
48
+ return s > 0 ? `${m}m ${s}s` : `${m}m`;
47
49
  }
48
- return `${durationFormatter.format(ms / MS_IN_HOUR)}h`;
50
+ const h = Math.floor(ms / MS_IN_HOUR);
51
+ const m = Math.floor((ms % MS_IN_HOUR) / MS_IN_MINUTE);
52
+ return m > 0 ? `${h}h ${m}m` : `${h}h`;
49
53
  }
50
54
  // Full format: human-readable multi-part
51
55
  const days = Math.floor(ms / MS_IN_DAY);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web-shared",
3
3
  "description": "Shared components for Workflow Observability UI",
4
- "version": "4.1.0-beta.65",
4
+ "version": "4.1.0-beta.67",
5
5
  "private": false,
6
6
  "files": [
7
7
  "dist",
@@ -52,23 +52,25 @@
52
52
  "streamdown": "2.3.0",
53
53
  "tailwind-merge": "3.5.0",
54
54
  "tailwindcss": "4",
55
- "@workflow/core": "4.2.0-beta.70",
55
+ "@workflow/core": "4.2.0-beta.72",
56
56
  "@workflow/utils": "4.1.0-beta.13",
57
- "@workflow/world": "4.1.0-beta.12"
57
+ "@workflow/world": "4.1.0-beta.14"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@biomejs/biome": "^2.4.4",
61
61
  "@types/node": "22.19.0",
62
62
  "@types/react": "19",
63
63
  "@types/react-dom": "19",
64
- "ai": "5.0.104",
64
+ "ai": "6.0.116",
65
65
  "typescript": "^5.9.3",
66
+ "vitest": "^4.0.18",
66
67
  "@workflow/tsconfig": "4.0.1-beta.0"
67
68
  },
68
69
  "scripts": {
69
70
  "build": "tsc && cp -r src/components/trace-viewer/*.css dist/components/trace-viewer/ && cp src/styles.css dist/styles.css",
70
71
  "dev": "tsc --watch",
71
72
  "clean": "tsc --build --clean && rm -r dist ||:",
73
+ "test": "vitest run",
72
74
  "typecheck": "tsc --noEmit",
73
75
  "lint": "biome check",
74
76
  "format": "biome format --write"
@@ -17,6 +17,7 @@ import {
17
17
  import { LoadMoreButton } from './ui/load-more-button';
18
18
  import { MenuDropdown } from './ui/menu-dropdown';
19
19
  import { Skeleton } from './ui/skeleton';
20
+ import { TimestampTooltip } from './ui/timestamp-tooltip';
20
21
 
21
22
  /**
22
23
  * Event types whose eventData contains an error field with a StructuredError.
@@ -211,6 +212,15 @@ function buildDurationMap(events: Event[]): Map<string, DurationInfo> {
211
212
  return durations;
212
213
  }
213
214
 
215
+ /** Check if a loaded eventData object contains any encrypted marker values. */
216
+ function hasEncryptedValues(data: unknown): boolean {
217
+ if (!data || typeof data !== 'object') return false;
218
+ for (const val of Object.values(data as Record<string, unknown>)) {
219
+ if (isEncryptedMarker(val)) return true;
220
+ }
221
+ return false;
222
+ }
223
+
214
224
  function isRunLevel(eventType: string): boolean {
215
225
  return (
216
226
  eventType === 'run_created' ||
@@ -602,21 +612,67 @@ const SORT_OPTIONS = [
602
612
  function RowsSkeleton() {
603
613
  return (
604
614
  <div className="flex-1 overflow-hidden">
605
- {Array.from({ length: 8 }, (_, i) => (
606
- <div
607
- key={i}
608
- className="flex items-center gap-3 px-4"
609
- style={{ height: 40 }}
610
- >
611
- <Skeleton
612
- className="h-2 w-2 flex-shrink-0"
613
- style={{ borderRadius: '50%' }}
614
- />
615
- <Skeleton className="h-3" style={{ width: 90 }} />
616
- <Skeleton className="h-3" style={{ width: 100 }} />
617
- <Skeleton className="h-3" style={{ width: 80 }} />
618
- <Skeleton className="h-3 flex-1" />
619
- <Skeleton className="h-3 flex-1" />
615
+ {Array.from({ length: 16 }, (_, i) => (
616
+ <div key={i} className="flex items-center gap-0" style={{ height: 40 }}>
617
+ {/* Gutter area */}
618
+ <div
619
+ className="relative flex-shrink-0 self-stretch flex items-center"
620
+ style={{ width: GUTTER_WIDTH }}
621
+ >
622
+ {/* Vertical line skeleton */}
623
+ <div
624
+ style={{
625
+ position: 'absolute',
626
+ left: 8,
627
+ top: i === 0 ? '50%' : 0,
628
+ bottom: 0,
629
+ width: 2,
630
+ }}
631
+ >
632
+ <Skeleton className="w-full h-full" style={{ borderRadius: 1 }} />
633
+ </div>
634
+ {/* Dot skeleton */}
635
+ <Skeleton
636
+ className="flex-shrink-0"
637
+ style={{
638
+ width: i % 4 === 0 ? 8 : 6,
639
+ height: i % 4 === 0 ? 8 : 6,
640
+ borderRadius: '50%',
641
+ marginLeft: i % 4 === 0 ? 5 : 6,
642
+ }}
643
+ />
644
+ </div>
645
+ {/* Chevron placeholder */}
646
+ <div className="w-5 flex-shrink-0 flex items-center justify-center">
647
+ <Skeleton className="w-5 h-5" style={{ borderRadius: 4 }} />
648
+ </div>
649
+ {/* Time */}
650
+ <div className="min-w-0 px-4" style={{ flex: '2 1 0%' }}>
651
+ <Skeleton className="h-3" style={{ width: '70%' }} />
652
+ </div>
653
+ {/* Event Type */}
654
+ <div
655
+ className="min-w-0 px-4 flex items-center gap-1.5"
656
+ style={{ flex: '2 1 0%' }}
657
+ >
658
+ <Skeleton
659
+ className="flex-shrink-0"
660
+ style={{ width: 6, height: 6, borderRadius: '50%' }}
661
+ />
662
+ <Skeleton className="h-3" style={{ width: '60%' }} />
663
+ </div>
664
+ {/* Name */}
665
+ <div className="min-w-0 px-4" style={{ flex: '2 1 0%' }}>
666
+ <Skeleton className="h-3" style={{ width: '50%' }} />
667
+ </div>
668
+ {/* Correlation ID */}
669
+ <div className="min-w-0 px-4" style={{ flex: '3 1 0%' }}>
670
+ <Skeleton className="h-3" style={{ width: '75%' }} />
671
+ </div>
672
+ {/* Event ID */}
673
+ <div className="min-w-0 px-4" style={{ flex: '3 1 0%' }}>
674
+ <Skeleton className="h-3" style={{ width: '75%' }} />
675
+ </div>
620
676
  </div>
621
677
  ))}
622
678
  </div>
@@ -668,6 +724,7 @@ function EventRow({
668
724
  cachedEventData,
669
725
  onCacheEventData,
670
726
  encryptionKey,
727
+ onEncryptedDataDetected,
671
728
  }: {
672
729
  event: Event;
673
730
  index: number;
@@ -687,6 +744,7 @@ function EventRow({
687
744
  cachedEventData: unknown | null;
688
745
  onCacheEventData: (eventId: string, data: unknown) => void;
689
746
  encryptionKey?: Uint8Array;
747
+ onEncryptedDataDetected?: () => void;
690
748
  }) {
691
749
  const [isLoading, setIsLoading] = useState(false);
692
750
  const [loadedEventData, setLoadedEventData] = useState<unknown | null>(
@@ -697,6 +755,18 @@ function EventRow({
697
755
  cachedEventData !== null
698
756
  );
699
757
 
758
+ // Notify parent if cached data has encrypted markers on mount
759
+ useEffect(() => {
760
+ if (
761
+ cachedEventData !== null &&
762
+ !encryptionKey &&
763
+ hasEncryptedValues(cachedEventData)
764
+ ) {
765
+ onEncryptedDataDetected?.();
766
+ }
767
+ // eslint-disable-next-line react-hooks/exhaustive-deps
768
+ }, []);
769
+
700
770
  const rowGroupKey = isRunLevel(event.eventType)
701
771
  ? '__run__'
702
772
  : (event.correlationId ?? undefined);
@@ -745,6 +815,9 @@ function EventRow({
745
815
  if (data !== null && data !== undefined) {
746
816
  setLoadedEventData(data);
747
817
  onCacheEventData(event.eventId, data);
818
+ if (!encryptionKey && hasEncryptedValues(data)) {
819
+ onEncryptedDataDetected?.();
820
+ }
748
821
  }
749
822
  } catch (err) {
750
823
  setLoadError(
@@ -760,6 +833,8 @@ function EventRow({
760
833
  hasExistingEventData,
761
834
  onLoadEventData,
762
835
  onCacheEventData,
836
+ encryptionKey,
837
+ onEncryptedDataDetected,
763
838
  ]);
764
839
 
765
840
  // Auto-load event data when remounting in expanded state without cached data
@@ -877,7 +952,9 @@ function EventRow({
877
952
  className="tabular-nums min-w-0 px-4"
878
953
  style={{ color: 'var(--ds-gray-900)', flex: '2 1 0%' }}
879
954
  >
880
- {formatEventTime(createdAt)}
955
+ <TimestampTooltip date={createdAt}>
956
+ <span>{formatEventTime(createdAt)}</span>
957
+ </TimestampTooltip>
881
958
  </div>
882
959
 
883
960
  {/* Event Type */}
@@ -1079,22 +1156,26 @@ export function EventListView({
1079
1156
  );
1080
1157
  }, [events, effectiveSortOrder]);
1081
1158
 
1082
- // Detect encrypted fields across all loaded events.
1083
- // Only checks top-level eventData values (input, output, result, etc.) —
1084
- // the current data model guarantees encrypted markers appear at this level.
1085
- const hasEncryptedData = useMemo(() => {
1159
+ // Detect encrypted fields across all loaded events (inline eventData).
1160
+ const hasEncryptedInlineData = useMemo(() => {
1086
1161
  if (!events) return false;
1087
1162
  for (const event of events) {
1088
1163
  const ed = (event as Record<string, unknown>).eventData;
1089
- if (!ed || typeof ed !== 'object') continue;
1090
- const data = ed as Record<string, unknown>;
1091
- for (const val of Object.values(data)) {
1092
- if (isEncryptedMarker(val)) return true;
1093
- }
1164
+ if (hasEncryptedValues(ed)) return true;
1094
1165
  }
1095
1166
  return false;
1096
1167
  }, [events]);
1097
1168
 
1169
+ // Tracks whether any expanded row's lazy-loaded data contained encrypted markers.
1170
+ // Set to true by EventRow via onEncryptedDataDetected; never reset (sticky).
1171
+ const [foundEncryptedInLazyData, setFoundEncryptedInLazyData] =
1172
+ useState(false);
1173
+ const handleEncryptedDataDetected = useCallback(() => {
1174
+ setFoundEncryptedInLazyData(true);
1175
+ }, []);
1176
+
1177
+ const hasEncryptedData = hasEncryptedInlineData || foundEncryptedInLazyData;
1178
+
1098
1179
  const { correlationNameMap, workflowName } = useMemo(
1099
1180
  () => buildNameMaps(events ?? null, run ?? null),
1100
1181
  [events, run]
@@ -1268,18 +1349,26 @@ export function EventListView({
1268
1349
  </div>
1269
1350
  {/* Skeleton header */}
1270
1351
  <div
1271
- className="flex items-center gap-0 h-10 border-b flex-shrink-0 px-4"
1352
+ className="flex items-center gap-0 h-10 border-b flex-shrink-0"
1272
1353
  style={{ borderColor: 'var(--ds-gray-alpha-200)' }}
1273
1354
  >
1274
- <Skeleton className="h-3" style={{ width: 60 }} />
1275
- <div style={{ flex: 1 }} />
1276
- <Skeleton className="h-3" style={{ width: 80 }} />
1277
- <div style={{ flex: 1 }} />
1278
- <Skeleton className="h-3" style={{ width: 50 }} />
1279
- <div style={{ flex: 1 }} />
1280
- <Skeleton className="h-3" style={{ width: 90 }} />
1281
- <div style={{ flex: 1 }} />
1282
- <Skeleton className="h-3" style={{ width: 70 }} />
1355
+ <div className="flex-shrink-0" style={{ width: GUTTER_WIDTH }} />
1356
+ <div className="w-5 flex-shrink-0" />
1357
+ <div className="min-w-0 px-4" style={{ flex: '2 1 0%' }}>
1358
+ <Skeleton className="h-3" style={{ width: 40 }} />
1359
+ </div>
1360
+ <div className="min-w-0 px-4" style={{ flex: '2 1 0%' }}>
1361
+ <Skeleton className="h-3" style={{ width: 72 }} />
1362
+ </div>
1363
+ <div className="min-w-0 px-4" style={{ flex: '2 1 0%' }}>
1364
+ <Skeleton className="h-3" style={{ width: 44 }} />
1365
+ </div>
1366
+ <div className="min-w-0 px-4" style={{ flex: '3 1 0%' }}>
1367
+ <Skeleton className="h-3" style={{ width: 92 }} />
1368
+ </div>
1369
+ <div className="min-w-0 px-4" style={{ flex: '3 1 0%' }}>
1370
+ <Skeleton className="h-3" style={{ width: 60 }} />
1371
+ </div>
1283
1372
  </div>
1284
1373
  <RowsSkeleton />
1285
1374
  </div>
@@ -1455,6 +1544,7 @@ export function EventListView({
1455
1544
  }
1456
1545
  onCacheEventData={cacheEventData}
1457
1546
  encryptionKey={encryptionKey}
1547
+ onEncryptedDataDetected={handleEncryptedDataDetected}
1458
1548
  />
1459
1549
  );
1460
1550
  }}
@@ -3,7 +3,7 @@
3
3
  import type { Hook, WorkflowRunStatus } from '@workflow/world';
4
4
  import { Send } from 'lucide-react';
5
5
  import { useCallback, useState } from 'react';
6
- import { toast } from 'sonner';
6
+ import { useToast } from '../lib/toast';
7
7
  import { ResolveHookModal } from './sidebar/resolve-hook-modal';
8
8
 
9
9
  // ============================================================================
@@ -45,6 +45,7 @@ export function useHookActions({
45
45
  onResolve,
46
46
  callbacks,
47
47
  }: UseHookActionsOptions): UseHookActionsReturn {
48
+ const toast = useToast();
48
49
  const [isResolving, setIsResolving] = useState(false);
49
50
  const [selectedHook, setSelectedHook] = useState<Hook | null>(null);
50
51