@workflow/web-shared 5.0.0-beta.3 → 5.0.0-beta.4

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/new-trace-viewer/components/event-list.d.ts.map +1 -1
  2. package/dist/components/new-trace-viewer/components/event-list.js +7 -4
  3. package/dist/components/new-trace-viewer/components/event-list.js.map +1 -1
  4. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
  5. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  6. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  7. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +1 -0
  8. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
  9. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  10. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  11. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +1 -0
  12. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
  13. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  14. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
  15. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +1 -0
  16. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
  17. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  18. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  19. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +1 -0
  20. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  21. package/dist/components/new-trace-viewer/components/split-pane.js +2 -3
  22. package/dist/components/new-trace-viewer/components/split-pane.js.map +1 -1
  23. package/dist/components/new-trace-viewer/components/timeline.d.ts +10 -11
  24. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  25. package/dist/components/new-trace-viewer/components/timeline.js +57 -53
  26. package/dist/components/new-trace-viewer/components/timeline.js.map +1 -1
  27. package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
  28. package/dist/components/new-trace-viewer/context.js +5 -7
  29. package/dist/components/new-trace-viewer/context.js.map +1 -1
  30. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -1
  31. package/dist/components/new-trace-viewer/detail-panel.js +2 -1
  32. package/dist/components/new-trace-viewer/detail-panel.js.map +1 -1
  33. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  34. package/dist/components/new-trace-viewer/trace-viewer.js +37 -17
  35. package/dist/components/new-trace-viewer/trace-viewer.js.map +1 -1
  36. package/dist/components/new-trace-viewer/utils.d.ts +3 -8
  37. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  38. package/dist/components/new-trace-viewer/utils.js +12 -65
  39. package/dist/components/new-trace-viewer/utils.js.map +1 -1
  40. package/dist/components/trace-viewer/util/timing.d.ts +1 -1
  41. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  42. package/dist/components/trace-viewer/util/timing.js +5 -8
  43. package/dist/components/trace-viewer/util/timing.js.map +1 -1
  44. package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
  45. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  46. package/dist/components/workflow-traces/trace-span-construction.js +16 -3
  47. package/dist/components/workflow-traces/trace-span-construction.js.map +1 -1
  48. package/dist/lib/trace-builder.d.ts.map +1 -1
  49. package/dist/lib/trace-builder.js +2 -1
  50. package/dist/lib/trace-builder.js.map +1 -1
  51. package/dist/lib/utils.d.ts +9 -7
  52. package/dist/lib/utils.d.ts.map +1 -1
  53. package/dist/lib/utils.js +27 -27
  54. package/dist/lib/utils.js.map +1 -1
  55. package/package.json +2 -2
  56. package/src/components/new-trace-viewer/components/event-list.tsx +27 -20
  57. package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
  58. package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
  59. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
  60. package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
  61. package/src/components/new-trace-viewer/components/split-pane.tsx +2 -3
  62. package/src/components/new-trace-viewer/components/timeline.tsx +119 -115
  63. package/src/components/new-trace-viewer/context.tsx +7 -9
  64. package/src/components/new-trace-viewer/detail-panel.tsx +2 -1
  65. package/src/components/new-trace-viewer/trace-viewer.tsx +120 -60
  66. package/src/components/new-trace-viewer/utils.ts +19 -93
  67. package/src/components/trace-viewer/util/timing.ts +5 -9
  68. package/src/components/workflow-traces/trace-span-construction.ts +22 -4
  69. package/src/lib/trace-builder.ts +2 -1
  70. package/src/lib/utils.ts +29 -29
package/src/lib/utils.ts CHANGED
@@ -7,15 +7,6 @@ export function cn(...inputs: ClassValue[]) {
7
7
  return twMerge(clsx(inputs));
8
8
  }
9
9
 
10
- // const compactFormatter = new Intl.NumberFormat(undefined, {
11
- // maximumFractionDigits: 2,
12
- // });
13
-
14
- const secondsFormatter = new Intl.NumberFormat(undefined, {
15
- minimumFractionDigits: 2,
16
- maximumFractionDigits: 2,
17
- });
18
-
19
10
  const MS_IN_SECOND = 1000;
20
11
  const MS_IN_MINUTE = 60 * MS_IN_SECOND;
21
12
  const MS_IN_HOUR = 60 * MS_IN_MINUTE;
@@ -25,44 +16,53 @@ const MS_IN_DAY = 24 * MS_IN_HOUR;
25
16
  * Formats a duration in milliseconds to a human-readable string.
26
17
  *
27
18
  * @param ms - Duration in milliseconds
28
- * @param compact - If true, returns a single-unit format (e.g., "0.38s", "2.5m").
29
- * If false (default), returns multi-part format (e.g., "1m 13.21s", "2d 5h 3m 12.00s").
19
+ * @param compact - If true, returns a compact format (e.g., "380ms", "2m 30s").
20
+ * If false (default), returns multi-part format (e.g., "1m 13s", "2d 5h 3m 12s").
30
21
  *
31
22
  * Compact format (timeline markers):
32
- * - < 1m: shows seconds (e.g., "0.38s", "45s")
33
- * - < 1h: shows minutes (e.g., "2.5m")
34
- * - >= 1h: shows hours (e.g., "2.5h")
23
+ * - < 1s: shows milliseconds (e.g., "380ms")
24
+ * - < 1m: shows seconds (e.g., "45s")
25
+ * - < 1h: shows minutes and seconds (e.g., "2m 30s")
26
+ * - >= 1h: shows hours and minutes (e.g., "2h 30m")
35
27
  *
36
28
  * Full format:
37
- * - < 1m: shows seconds (e.g., "0.38s", "2.71s")
38
- * - >= 1m: shows decomposed format with fractional seconds (e.g., "1m 13.21s", "2m 13.04s")
29
+ * - < 1s: shows milliseconds (e.g., "380ms")
30
+ * - < 1m: shows seconds (e.g., "45s")
31
+ * - >= 1m: shows decomposed format with whole seconds (e.g., "1m 13s", "2m 13s")
39
32
  */
40
33
  export function formatDuration(ms: number, compact = false): string {
41
34
  if (ms === 0) {
42
35
  return '0s';
43
36
  }
44
37
 
45
- if (ms < MS_IN_MINUTE) {
46
- return `${secondsFormatter.format(ms / MS_IN_SECOND)}s`;
38
+ if (ms < MS_IN_SECOND) {
39
+ const roundedMs = Math.round(ms);
40
+ return roundedMs < MS_IN_SECOND ? `${roundedMs}ms` : '1s';
41
+ }
42
+
43
+ const roundedMs = Math.round(ms / MS_IN_SECOND) * MS_IN_SECOND;
44
+
45
+ if (roundedMs < MS_IN_MINUTE) {
46
+ return `${Math.floor(roundedMs / MS_IN_SECOND)}s`;
47
47
  }
48
48
 
49
49
  // Compact format: multi-unit without decimals (e.g. "8m 20s", "2h 30m")
50
50
  if (compact) {
51
- if (ms < MS_IN_HOUR) {
52
- const m = Math.floor(ms / MS_IN_MINUTE);
53
- const s = Math.floor((ms % MS_IN_MINUTE) / MS_IN_SECOND);
51
+ if (roundedMs < MS_IN_HOUR) {
52
+ const m = Math.floor(roundedMs / MS_IN_MINUTE);
53
+ const s = Math.floor((roundedMs % MS_IN_MINUTE) / MS_IN_SECOND);
54
54
  return s > 0 ? `${m}m ${s}s` : `${m}m`;
55
55
  }
56
- const h = Math.floor(ms / MS_IN_HOUR);
57
- const m = Math.floor((ms % MS_IN_HOUR) / MS_IN_MINUTE);
56
+ const h = Math.floor(roundedMs / MS_IN_HOUR);
57
+ const m = Math.floor((roundedMs % MS_IN_HOUR) / MS_IN_MINUTE);
58
58
  return m > 0 ? `${h}h ${m}m` : `${h}h`;
59
59
  }
60
60
 
61
- // Full format: decompose into larger units + fractional seconds
62
- const days = Math.floor(ms / MS_IN_DAY);
63
- const hours = Math.floor((ms % MS_IN_DAY) / MS_IN_HOUR);
64
- const minutes = Math.floor((ms % MS_IN_HOUR) / MS_IN_MINUTE);
65
- const seconds = (ms % MS_IN_MINUTE) / MS_IN_SECOND;
61
+ // Full format: decompose into larger units + whole seconds.
62
+ const days = Math.floor(roundedMs / MS_IN_DAY);
63
+ const hours = Math.floor((roundedMs % MS_IN_DAY) / MS_IN_HOUR);
64
+ const minutes = Math.floor((roundedMs % MS_IN_HOUR) / MS_IN_MINUTE);
65
+ const seconds = Math.floor((roundedMs % MS_IN_MINUTE) / MS_IN_SECOND);
66
66
 
67
67
  const parts: string[] = [];
68
68
 
@@ -75,7 +75,7 @@ export function formatDuration(ms: number, compact = false): string {
75
75
  if (minutes > 0) {
76
76
  parts.push(`${minutes}m`);
77
77
  }
78
- parts.push(`${secondsFormatter.format(seconds)}s`);
78
+ parts.push(`${seconds}s`);
79
79
 
80
80
  return parts.join(' ');
81
81
  }