@workflow/web-shared 4.1.0-beta.47 → 4.1.0-beta.49

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 (301) hide show
  1. package/README.md +26 -52
  2. package/dist/components/error-boundary.d.ts.map +1 -0
  3. package/dist/{error-boundary.js → components/error-boundary.js} +1 -1
  4. package/dist/components/error-boundary.js.map +1 -0
  5. package/dist/{event-list-view.d.ts → components/event-list-view.d.ts} +2 -3
  6. package/dist/components/event-list-view.d.ts.map +1 -0
  7. package/dist/{event-list-view.js → components/event-list-view.js} +9 -17
  8. package/dist/components/event-list-view.js.map +1 -0
  9. package/dist/{hook-actions.d.ts → components/hook-actions.d.ts} +2 -3
  10. package/dist/components/hook-actions.d.ts.map +1 -0
  11. package/dist/{hook-actions.js → components/hook-actions.js} +3 -4
  12. package/dist/components/hook-actions.js.map +1 -0
  13. package/dist/components/index.d.ts +10 -0
  14. package/dist/components/index.d.ts.map +1 -0
  15. package/dist/components/index.js +8 -0
  16. package/dist/components/index.js.map +1 -0
  17. package/dist/components/run-trace-view.d.ts +22 -0
  18. package/dist/components/run-trace-view.d.ts.map +1 -0
  19. package/dist/components/run-trace-view.js +11 -0
  20. package/dist/components/run-trace-view.js.map +1 -0
  21. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -0
  22. package/dist/{sidebar → components/sidebar}/attribute-panel.js +3 -3
  23. package/dist/components/sidebar/attribute-panel.js.map +1 -0
  24. package/dist/components/sidebar/conversation-view.d.ts.map +1 -0
  25. package/dist/components/sidebar/conversation-view.js.map +1 -0
  26. package/dist/components/sidebar/detail-card.d.ts.map +1 -0
  27. package/dist/components/sidebar/detail-card.js.map +1 -0
  28. package/dist/components/sidebar/entity-detail-panel.d.ts +32 -0
  29. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -0
  30. package/dist/{sidebar → components/sidebar}/entity-detail-panel.js +61 -49
  31. package/dist/components/sidebar/entity-detail-panel.js.map +1 -0
  32. package/dist/components/sidebar/events-list.d.ts +8 -0
  33. package/dist/components/sidebar/events-list.d.ts.map +1 -0
  34. package/dist/components/sidebar/events-list.js +16 -0
  35. package/dist/components/sidebar/events-list.js.map +1 -0
  36. package/dist/components/sidebar/resolve-hook-modal.d.ts.map +1 -0
  37. package/dist/components/sidebar/resolve-hook-modal.js.map +1 -0
  38. package/dist/components/stream-viewer.d.ts +18 -0
  39. package/dist/components/stream-viewer.d.ts.map +1 -0
  40. package/dist/{stream-viewer.js → components/stream-viewer.js} +1 -59
  41. package/dist/components/stream-viewer.js.map +1 -0
  42. package/dist/components/trace-viewer/components/map.d.ts.map +1 -0
  43. package/dist/components/trace-viewer/components/map.js.map +1 -0
  44. package/dist/components/trace-viewer/components/markers.d.ts.map +1 -0
  45. package/dist/components/trace-viewer/components/markers.js.map +1 -0
  46. package/dist/components/trace-viewer/components/node.d.ts.map +1 -0
  47. package/dist/components/trace-viewer/components/node.js.map +1 -0
  48. package/dist/components/trace-viewer/components/search-input.d.ts.map +1 -0
  49. package/dist/components/trace-viewer/components/search-input.js.map +1 -0
  50. package/dist/components/trace-viewer/components/search.d.ts.map +1 -0
  51. package/dist/components/trace-viewer/components/search.js.map +1 -0
  52. package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +1 -0
  53. package/dist/components/trace-viewer/components/span-detail-panel.js.map +1 -0
  54. package/dist/components/trace-viewer/components/ui.d.ts.map +1 -0
  55. package/dist/components/trace-viewer/components/ui.js.map +1 -0
  56. package/dist/components/trace-viewer/components/zoom-button.d.ts.map +1 -0
  57. package/dist/components/trace-viewer/components/zoom-button.js.map +1 -0
  58. package/dist/components/trace-viewer/components/zoom-icons.d.ts.map +1 -0
  59. package/dist/components/trace-viewer/components/zoom-icons.js.map +1 -0
  60. package/dist/components/trace-viewer/context.d.ts.map +1 -0
  61. package/dist/components/trace-viewer/context.js.map +1 -0
  62. package/dist/components/trace-viewer/index.d.ts.map +1 -0
  63. package/dist/components/trace-viewer/index.js.map +1 -0
  64. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -0
  65. package/dist/components/trace-viewer/trace-viewer.js.map +1 -0
  66. package/dist/components/trace-viewer/types.d.ts.map +1 -0
  67. package/dist/components/trace-viewer/types.js.map +1 -0
  68. package/dist/components/trace-viewer/util/constants.d.ts.map +1 -0
  69. package/dist/components/trace-viewer/util/constants.js.map +1 -0
  70. package/dist/components/trace-viewer/util/scrollbar-width.d.ts.map +1 -0
  71. package/dist/components/trace-viewer/util/scrollbar-width.js.map +1 -0
  72. package/dist/{trace-viewer → components/trace-viewer}/util/timing.d.ts +1 -1
  73. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -0
  74. package/dist/{trace-viewer → components/trace-viewer}/util/timing.js +1 -1
  75. package/dist/components/trace-viewer/util/timing.js.map +1 -0
  76. package/dist/components/trace-viewer/util/tree.d.ts.map +1 -0
  77. package/dist/components/trace-viewer/util/tree.js.map +1 -0
  78. package/dist/components/trace-viewer/util/use-immediate-style.d.ts.map +1 -0
  79. package/dist/components/trace-viewer/util/use-immediate-style.js.map +1 -0
  80. package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +1 -0
  81. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +1 -0
  82. package/dist/components/trace-viewer/util/use-trackpad-zoom.d.ts.map +1 -0
  83. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +1 -0
  84. package/dist/components/trace-viewer/worker.d.ts.map +1 -0
  85. package/dist/components/trace-viewer/worker.js.map +1 -0
  86. package/dist/components/workflow-trace-view.d.ts +24 -0
  87. package/dist/components/workflow-trace-view.d.ts.map +1 -0
  88. package/dist/components/workflow-trace-view.js +152 -0
  89. package/dist/components/workflow-trace-view.js.map +1 -0
  90. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -0
  91. package/dist/components/workflow-traces/event-colors.js.map +1 -0
  92. package/dist/components/workflow-traces/trace-colors.d.ts.map +1 -0
  93. package/dist/components/workflow-traces/trace-colors.js.map +1 -0
  94. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -0
  95. package/dist/components/workflow-traces/trace-span-construction.js.map +1 -0
  96. package/dist/components/workflow-traces/trace-time-utils.d.ts.map +1 -0
  97. package/dist/components/workflow-traces/trace-time-utils.js.map +1 -0
  98. package/dist/index.d.ts +3 -13
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +2 -9
  101. package/dist/index.js.map +1 -1
  102. package/package.json +15 -11
  103. package/src/components/error-boundary.tsx +79 -0
  104. package/src/components/event-list-view.tsx +429 -0
  105. package/src/components/hook-actions.tsx +167 -0
  106. package/src/components/index.d.ts +1 -0
  107. package/src/components/index.ts +23 -0
  108. package/src/components/run-trace-view.tsx +75 -0
  109. package/src/components/sidebar/attribute-panel.tsx +938 -0
  110. package/src/components/sidebar/conversation-view.tsx +235 -0
  111. package/src/components/sidebar/detail-card.tsx +43 -0
  112. package/src/components/sidebar/entity-detail-panel.tsx +338 -0
  113. package/src/components/sidebar/events-list.tsx +119 -0
  114. package/src/components/sidebar/resolve-hook-modal.tsx +219 -0
  115. package/src/components/stream-viewer.tsx +143 -0
  116. package/src/components/trace-viewer/components/map.tsx +226 -0
  117. package/src/components/trace-viewer/components/markers.tsx +564 -0
  118. package/src/components/trace-viewer/components/node.tsx +259 -0
  119. package/src/components/trace-viewer/components/search-input.tsx +52 -0
  120. package/src/components/trace-viewer/components/search.tsx +47 -0
  121. package/src/components/trace-viewer/components/span-detail-panel.tsx +650 -0
  122. package/src/components/trace-viewer/components/ui.tsx +156 -0
  123. package/src/components/trace-viewer/components/zoom-button.tsx +61 -0
  124. package/src/components/trace-viewer/components/zoom-icons.tsx +65 -0
  125. package/src/components/trace-viewer/context.tsx +633 -0
  126. package/src/components/trace-viewer/index.tsx +4 -0
  127. package/src/components/trace-viewer/modules.d.ts +16 -0
  128. package/src/components/trace-viewer/trace-viewer.module.css +1292 -0
  129. package/src/components/trace-viewer/trace-viewer.tsx +448 -0
  130. package/src/components/trace-viewer/types.ts +234 -0
  131. package/src/components/trace-viewer/util/constants.ts +8 -0
  132. package/src/components/trace-viewer/util/scrollbar-width.ts +13 -0
  133. package/src/components/trace-viewer/util/timing.ts +33 -0
  134. package/src/components/trace-viewer/util/tree.ts +277 -0
  135. package/src/components/trace-viewer/util/use-immediate-style.ts +38 -0
  136. package/src/components/trace-viewer/util/use-streaming-spans.ts +415 -0
  137. package/src/components/trace-viewer/util/use-trackpad-zoom.tsx +51 -0
  138. package/src/components/trace-viewer/worker.ts +128 -0
  139. package/src/components/ui/alert.tsx +59 -0
  140. package/src/components/ui/card.tsx +88 -0
  141. package/src/components/ui/error-card.tsx +65 -0
  142. package/src/components/ui/skeleton.tsx +15 -0
  143. package/src/components/workflow-trace-view.tsx +306 -0
  144. package/src/components/workflow-traces/event-colors.ts +94 -0
  145. package/src/components/workflow-traces/trace-colors.ts +112 -0
  146. package/src/components/workflow-traces/trace-span-construction.ts +299 -0
  147. package/src/components/workflow-traces/trace-time-utils.ts +50 -0
  148. package/src/hooks/use-dark-mode.ts +34 -0
  149. package/src/index.d.ts +1 -0
  150. package/src/index.ts +29 -0
  151. package/src/lib/event-analysis.ts +231 -0
  152. package/src/lib/utils.ts +166 -0
  153. package/dist/api/workflow-api-client.d.ts +0 -543
  154. package/dist/api/workflow-api-client.d.ts.map +0 -1
  155. package/dist/api/workflow-api-client.js +0 -953
  156. package/dist/api/workflow-api-client.js.map +0 -1
  157. package/dist/api/workflow-server-actions.d.ts +0 -230
  158. package/dist/api/workflow-server-actions.d.ts.map +0 -1
  159. package/dist/api/workflow-server-actions.js +0 -861
  160. package/dist/api/workflow-server-actions.js.map +0 -1
  161. package/dist/error-boundary.d.ts.map +0 -1
  162. package/dist/error-boundary.js.map +0 -1
  163. package/dist/event-list-view.d.ts.map +0 -1
  164. package/dist/event-list-view.js.map +0 -1
  165. package/dist/hook-actions.d.ts.map +0 -1
  166. package/dist/hook-actions.js.map +0 -1
  167. package/dist/run-trace-view.d.ts +0 -8
  168. package/dist/run-trace-view.d.ts.map +0 -1
  169. package/dist/run-trace-view.js +0 -15
  170. package/dist/run-trace-view.js.map +0 -1
  171. package/dist/sidebar/attribute-panel.d.ts.map +0 -1
  172. package/dist/sidebar/attribute-panel.js.map +0 -1
  173. package/dist/sidebar/conversation-view.d.ts.map +0 -1
  174. package/dist/sidebar/conversation-view.js.map +0 -1
  175. package/dist/sidebar/detail-card.d.ts.map +0 -1
  176. package/dist/sidebar/detail-card.js.map +0 -1
  177. package/dist/sidebar/entity-detail-panel.d.ts +0 -12
  178. package/dist/sidebar/entity-detail-panel.d.ts.map +0 -1
  179. package/dist/sidebar/entity-detail-panel.js.map +0 -1
  180. package/dist/sidebar/events-list.d.ts +0 -9
  181. package/dist/sidebar/events-list.d.ts.map +0 -1
  182. package/dist/sidebar/events-list.js +0 -36
  183. package/dist/sidebar/events-list.js.map +0 -1
  184. package/dist/sidebar/resolve-hook-modal.d.ts.map +0 -1
  185. package/dist/sidebar/resolve-hook-modal.js.map +0 -1
  186. package/dist/stream-viewer.d.ts +0 -13
  187. package/dist/stream-viewer.d.ts.map +0 -1
  188. package/dist/stream-viewer.js.map +0 -1
  189. package/dist/trace-viewer/components/map.d.ts.map +0 -1
  190. package/dist/trace-viewer/components/map.js.map +0 -1
  191. package/dist/trace-viewer/components/markers.d.ts.map +0 -1
  192. package/dist/trace-viewer/components/markers.js.map +0 -1
  193. package/dist/trace-viewer/components/node.d.ts.map +0 -1
  194. package/dist/trace-viewer/components/node.js.map +0 -1
  195. package/dist/trace-viewer/components/search-input.d.ts.map +0 -1
  196. package/dist/trace-viewer/components/search-input.js.map +0 -1
  197. package/dist/trace-viewer/components/search.d.ts.map +0 -1
  198. package/dist/trace-viewer/components/search.js.map +0 -1
  199. package/dist/trace-viewer/components/span-detail-panel.d.ts.map +0 -1
  200. package/dist/trace-viewer/components/span-detail-panel.js.map +0 -1
  201. package/dist/trace-viewer/components/ui.d.ts.map +0 -1
  202. package/dist/trace-viewer/components/ui.js.map +0 -1
  203. package/dist/trace-viewer/components/zoom-button.d.ts.map +0 -1
  204. package/dist/trace-viewer/components/zoom-button.js.map +0 -1
  205. package/dist/trace-viewer/components/zoom-icons.d.ts.map +0 -1
  206. package/dist/trace-viewer/components/zoom-icons.js.map +0 -1
  207. package/dist/trace-viewer/context.d.ts.map +0 -1
  208. package/dist/trace-viewer/context.js.map +0 -1
  209. package/dist/trace-viewer/index.d.ts.map +0 -1
  210. package/dist/trace-viewer/index.js.map +0 -1
  211. package/dist/trace-viewer/trace-viewer.d.ts.map +0 -1
  212. package/dist/trace-viewer/trace-viewer.js.map +0 -1
  213. package/dist/trace-viewer/types.d.ts.map +0 -1
  214. package/dist/trace-viewer/types.js.map +0 -1
  215. package/dist/trace-viewer/util/constants.d.ts.map +0 -1
  216. package/dist/trace-viewer/util/constants.js.map +0 -1
  217. package/dist/trace-viewer/util/scrollbar-width.d.ts.map +0 -1
  218. package/dist/trace-viewer/util/scrollbar-width.js.map +0 -1
  219. package/dist/trace-viewer/util/timing.d.ts.map +0 -1
  220. package/dist/trace-viewer/util/timing.js.map +0 -1
  221. package/dist/trace-viewer/util/tree.d.ts.map +0 -1
  222. package/dist/trace-viewer/util/tree.js.map +0 -1
  223. package/dist/trace-viewer/util/use-immediate-style.d.ts.map +0 -1
  224. package/dist/trace-viewer/util/use-immediate-style.js.map +0 -1
  225. package/dist/trace-viewer/util/use-streaming-spans.d.ts.map +0 -1
  226. package/dist/trace-viewer/util/use-streaming-spans.js.map +0 -1
  227. package/dist/trace-viewer/util/use-trackpad-zoom.d.ts.map +0 -1
  228. package/dist/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  229. package/dist/trace-viewer/worker.d.ts.map +0 -1
  230. package/dist/trace-viewer/worker.js.map +0 -1
  231. package/dist/workflow-trace-view.d.ts +0 -14
  232. package/dist/workflow-trace-view.d.ts.map +0 -1
  233. package/dist/workflow-trace-view.js +0 -135
  234. package/dist/workflow-trace-view.js.map +0 -1
  235. package/dist/workflow-traces/event-colors.d.ts.map +0 -1
  236. package/dist/workflow-traces/event-colors.js.map +0 -1
  237. package/dist/workflow-traces/trace-colors.d.ts.map +0 -1
  238. package/dist/workflow-traces/trace-colors.js.map +0 -1
  239. package/dist/workflow-traces/trace-span-construction.d.ts.map +0 -1
  240. package/dist/workflow-traces/trace-span-construction.js.map +0 -1
  241. package/dist/workflow-traces/trace-time-utils.d.ts.map +0 -1
  242. package/dist/workflow-traces/trace-time-utils.js.map +0 -1
  243. package/server/README.md +0 -1
  244. package/server/package.json +0 -4
  245. /package/dist/{error-boundary.d.ts → components/error-boundary.d.ts} +0 -0
  246. /package/dist/{sidebar → components/sidebar}/attribute-panel.d.ts +0 -0
  247. /package/dist/{sidebar → components/sidebar}/conversation-view.d.ts +0 -0
  248. /package/dist/{sidebar → components/sidebar}/conversation-view.js +0 -0
  249. /package/dist/{sidebar → components/sidebar}/detail-card.d.ts +0 -0
  250. /package/dist/{sidebar → components/sidebar}/detail-card.js +0 -0
  251. /package/dist/{sidebar → components/sidebar}/resolve-hook-modal.d.ts +0 -0
  252. /package/dist/{sidebar → components/sidebar}/resolve-hook-modal.js +0 -0
  253. /package/dist/{trace-viewer → components/trace-viewer}/components/map.d.ts +0 -0
  254. /package/dist/{trace-viewer → components/trace-viewer}/components/map.js +0 -0
  255. /package/dist/{trace-viewer → components/trace-viewer}/components/markers.d.ts +0 -0
  256. /package/dist/{trace-viewer → components/trace-viewer}/components/markers.js +0 -0
  257. /package/dist/{trace-viewer → components/trace-viewer}/components/node.d.ts +0 -0
  258. /package/dist/{trace-viewer → components/trace-viewer}/components/node.js +0 -0
  259. /package/dist/{trace-viewer → components/trace-viewer}/components/search-input.d.ts +0 -0
  260. /package/dist/{trace-viewer → components/trace-viewer}/components/search-input.js +0 -0
  261. /package/dist/{trace-viewer → components/trace-viewer}/components/search.d.ts +0 -0
  262. /package/dist/{trace-viewer → components/trace-viewer}/components/search.js +0 -0
  263. /package/dist/{trace-viewer → components/trace-viewer}/components/span-detail-panel.d.ts +0 -0
  264. /package/dist/{trace-viewer → components/trace-viewer}/components/span-detail-panel.js +0 -0
  265. /package/dist/{trace-viewer → components/trace-viewer}/components/ui.d.ts +0 -0
  266. /package/dist/{trace-viewer → components/trace-viewer}/components/ui.js +0 -0
  267. /package/dist/{trace-viewer → components/trace-viewer}/components/zoom-button.d.ts +0 -0
  268. /package/dist/{trace-viewer → components/trace-viewer}/components/zoom-button.js +0 -0
  269. /package/dist/{trace-viewer → components/trace-viewer}/components/zoom-icons.d.ts +0 -0
  270. /package/dist/{trace-viewer → components/trace-viewer}/components/zoom-icons.js +0 -0
  271. /package/dist/{trace-viewer → components/trace-viewer}/context.d.ts +0 -0
  272. /package/dist/{trace-viewer → components/trace-viewer}/context.js +0 -0
  273. /package/dist/{trace-viewer → components/trace-viewer}/index.d.ts +0 -0
  274. /package/dist/{trace-viewer → components/trace-viewer}/index.js +0 -0
  275. /package/dist/{trace-viewer → components/trace-viewer}/trace-viewer.d.ts +0 -0
  276. /package/dist/{trace-viewer → components/trace-viewer}/trace-viewer.js +0 -0
  277. /package/dist/{trace-viewer → components/trace-viewer}/trace-viewer.module.css +0 -0
  278. /package/dist/{trace-viewer → components/trace-viewer}/types.d.ts +0 -0
  279. /package/dist/{trace-viewer → components/trace-viewer}/types.js +0 -0
  280. /package/dist/{trace-viewer → components/trace-viewer}/util/constants.d.ts +0 -0
  281. /package/dist/{trace-viewer → components/trace-viewer}/util/constants.js +0 -0
  282. /package/dist/{trace-viewer → components/trace-viewer}/util/scrollbar-width.d.ts +0 -0
  283. /package/dist/{trace-viewer → components/trace-viewer}/util/scrollbar-width.js +0 -0
  284. /package/dist/{trace-viewer → components/trace-viewer}/util/tree.d.ts +0 -0
  285. /package/dist/{trace-viewer → components/trace-viewer}/util/tree.js +0 -0
  286. /package/dist/{trace-viewer → components/trace-viewer}/util/use-immediate-style.d.ts +0 -0
  287. /package/dist/{trace-viewer → components/trace-viewer}/util/use-immediate-style.js +0 -0
  288. /package/dist/{trace-viewer → components/trace-viewer}/util/use-streaming-spans.d.ts +0 -0
  289. /package/dist/{trace-viewer → components/trace-viewer}/util/use-streaming-spans.js +0 -0
  290. /package/dist/{trace-viewer → components/trace-viewer}/util/use-trackpad-zoom.d.ts +0 -0
  291. /package/dist/{trace-viewer → components/trace-viewer}/util/use-trackpad-zoom.js +0 -0
  292. /package/dist/{trace-viewer → components/trace-viewer}/worker.d.ts +0 -0
  293. /package/dist/{trace-viewer → components/trace-viewer}/worker.js +0 -0
  294. /package/dist/{workflow-traces → components/workflow-traces}/event-colors.d.ts +0 -0
  295. /package/dist/{workflow-traces → components/workflow-traces}/event-colors.js +0 -0
  296. /package/dist/{workflow-traces → components/workflow-traces}/trace-colors.d.ts +0 -0
  297. /package/dist/{workflow-traces → components/workflow-traces}/trace-colors.js +0 -0
  298. /package/dist/{workflow-traces → components/workflow-traces}/trace-span-construction.d.ts +0 -0
  299. /package/dist/{workflow-traces → components/workflow-traces}/trace-span-construction.js +0 -0
  300. /package/dist/{workflow-traces → components/workflow-traces}/trace-time-utils.d.ts +0 -0
  301. /package/dist/{workflow-traces → components/workflow-traces}/trace-time-utils.js +0 -0
@@ -0,0 +1,1292 @@
1
+ .traceNode {
2
+ position: relative;
3
+ }
4
+
5
+ .childRow {
6
+ display: flex;
7
+ flex-direction: row;
8
+ align-items: flex-start;
9
+ }
10
+
11
+ .spanNode {
12
+ position: absolute;
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-items: center;
16
+ padding: 0;
17
+ background-color: var(--span-background);
18
+ color: var(--span-text);
19
+ border: 1px solid var(--span-border);
20
+ border-radius: 8px;
21
+ text-overflow: ellipsis;
22
+ white-space: nowrap;
23
+ box-shadow: var(--ds-shadow-small);
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ content-visibility: auto;
27
+ cursor: pointer;
28
+ user-select: none;
29
+ z-index: 2;
30
+
31
+ &.huge {
32
+ overflow: visible;
33
+
34
+ & .spanName {
35
+ flex: 0 1 auto;
36
+ position: sticky;
37
+ left: 0;
38
+ }
39
+
40
+ & .spanSpacer {
41
+ flex: 1 0 0;
42
+ }
43
+
44
+ & .spanDuration {
45
+ position: sticky;
46
+ right: 0;
47
+ background-color: var(--span-background);
48
+ padding-left: 6px;
49
+ box-shadow: -8px 0 16px 8px var(--span-background);
50
+ }
51
+ }
52
+
53
+ &::after {
54
+ position: absolute;
55
+ left: -1px;
56
+ top: -1px;
57
+ width: var(--span-width);
58
+ height: var(--row-height);
59
+ content: "";
60
+ }
61
+
62
+ &.small:not(.xHover)::after {
63
+ top: -7px;
64
+ }
65
+
66
+ &:hover:not(.selected) {
67
+ filter: brightness(0.95);
68
+ }
69
+
70
+ &.xHover {
71
+ z-index: 3;
72
+ min-width: var(--span-width);
73
+ max-width: 75%;
74
+ background: linear-gradient(
75
+ 90deg,
76
+ var(--span-background) calc(var(--span-width) - 1px),
77
+ var(--span-line),
78
+ var(--geist-background) calc(var(--span-width) + 1px)
79
+ );
80
+
81
+ &[data-right-side="true"] {
82
+ background: linear-gradient(
83
+ 270deg,
84
+ var(--span-background) calc(var(--span-width) - 1px),
85
+ var(--span-line),
86
+ var(--geist-background) calc(var(--span-width) + 1px)
87
+ );
88
+ }
89
+
90
+ & .spanName {
91
+ max-width: max(var(--span-width), 40vw);
92
+ }
93
+
94
+ & .spanDuration {
95
+ background: none;
96
+ box-shadow: none;
97
+ }
98
+ }
99
+
100
+ &.small:not(.xHover) {
101
+ background-color: var(--span-background);
102
+ border-color: var(--span-border);
103
+ border-radius: 4px;
104
+ }
105
+
106
+ &.selected {
107
+ border-width: 2px;
108
+ outline: 2px solid var(--span-border);
109
+ outline-offset: -1px;
110
+
111
+ &:hover {
112
+ filter: brightness(0.95);
113
+ }
114
+ }
115
+ }
116
+
117
+ .spanNodeEvent {
118
+ position: absolute;
119
+ height: var(--row-height);
120
+ pointer-events: none;
121
+ z-index: 4;
122
+
123
+ & .eventDiamond {
124
+ --size: 7px;
125
+ --offset: -4px;
126
+ position: absolute;
127
+ left: var(--offset);
128
+ bottom: calc(var(--offset) + 1px);
129
+ width: var(--size);
130
+ height: var(--size);
131
+ border: 1px solid var(--span-secondary);
132
+ border-radius: 2px;
133
+ background: var(--span-background);
134
+ transform-origin: 50% 50% 0;
135
+ transform: rotate(45deg);
136
+ }
137
+
138
+ /* Workflow-specific: Use custom event color if provided */
139
+ &.customEventColor .eventDiamond {
140
+ border-color: var(--event-color, var(--span-border));
141
+ background: var(--event-color, var(--span-background));
142
+ opacity: 0.8;
143
+ }
144
+ &.customEventColor .hoverInfo {
145
+ border-color: var(--span-border);
146
+ background: var(--span-background);
147
+ }
148
+ &.customEventColor .hoverInfo .eventName {
149
+ color: var(--span-text);
150
+ font-weight: 500;
151
+ }
152
+ &.customEventColor .hoverInfo .eventTimestamp {
153
+ color: var(--span-secondary);
154
+ }
155
+
156
+ & .hoverInfo {
157
+ position: absolute;
158
+ margin-top: -1px;
159
+ top: 100%;
160
+ display: none;
161
+ flex-direction: row;
162
+ align-items: center;
163
+ gap: 6px;
164
+ padding: 3px 6px;
165
+ font-size: 12px;
166
+ line-height: 1;
167
+ background: var(--span-background);
168
+ border: 1px solid var(--span-border);
169
+ border-radius: 6px;
170
+ box-shadow: var(--ds-shadow-small);
171
+ transform: translateY(-50%);
172
+
173
+ &.alignStart {
174
+ left: -10px;
175
+ padding-left: 18px;
176
+ }
177
+ &.alignEnd {
178
+ right: -10px;
179
+ padding-right: 18px;
180
+ }
181
+
182
+ & .eventName {
183
+ color: var(--span-text);
184
+ }
185
+ & .eventTimestamp {
186
+ color: var(--span-secondary);
187
+ font-variant-numeric: tabular-nums;
188
+ }
189
+ }
190
+
191
+ &[data-hovered="true"] {
192
+ z-index: 4;
193
+
194
+ & .eventDiamond {
195
+ background: var(--span-text);
196
+ border-color: var(--span-text);
197
+ }
198
+ & .hoverInfo {
199
+ display: flex;
200
+ }
201
+ }
202
+ }
203
+
204
+ .colorVercel {
205
+ --span-background: var(--ds-background-100);
206
+ --span-border: var(--ds-gray-500);
207
+ --span-line: var(--ds-gray-400);
208
+ --span-text: var(--ds-gray-1000);
209
+ --span-secondary: var(--ds-gray-900);
210
+ --geist-background: var(--ds-gray-100);
211
+ }
212
+ .color0 {
213
+ --span-background: var(--ds-teal-200);
214
+ --span-border: var(--ds-teal-500);
215
+ --span-line: var(--ds-teal-400);
216
+ --span-text: var(--ds-gray-1000);
217
+ --span-secondary: var(--ds-teal-900);
218
+ }
219
+ .color1 {
220
+ --span-background: var(--ds-blue-200);
221
+ --span-border: var(--ds-blue-500);
222
+ --span-line: var(--ds-blue-400);
223
+ --span-text: var(--ds-gray-1000);
224
+ --span-secondary: var(--ds-blue-900);
225
+ }
226
+ .color2 {
227
+ --span-background: var(--ds-green-200);
228
+ --span-border: var(--ds-green-500);
229
+ --span-line: var(--ds-green-400);
230
+ --span-text: var(--ds-gray-1000);
231
+ --span-secondary: var(--ds-green-900);
232
+ }
233
+ .color3 {
234
+ --span-background: var(--ds-purple-200);
235
+ --span-border: var(--ds-purple-500);
236
+ --span-line: var(--ds-purple-400);
237
+ --span-text: var(--ds-gray-1000);
238
+ --span-secondary: var(--ds-purple-900);
239
+ }
240
+ .color4 {
241
+ --span-background: var(--ds-pink-200);
242
+ --span-border: var(--ds-pink-500);
243
+ --span-line: var(--ds-pink-400);
244
+ --span-text: var(--ds-gray-1000);
245
+ --span-secondary: var(--ds-pink-900);
246
+ }
247
+ .colorHighlight {
248
+ --span-background: var(--ds-amber-200);
249
+ --span-border: var(--ds-amber-500);
250
+ --span-line: var(--ds-amber-400);
251
+ --span-text: var(--ds-gray-1000);
252
+ --span-secondary: var(--ds-amber-900);
253
+ }
254
+
255
+ .unlit {
256
+ opacity: 0.3;
257
+ }
258
+
259
+ :global(.dark-theme),
260
+ :global(.dark) {
261
+ & .mapContainer canvas {
262
+ filter: invert(1);
263
+ }
264
+
265
+ & .spanNode.small {
266
+ &.xHover,
267
+ &:focus-visible {
268
+ &::before {
269
+ text-shadow: 0 1px 0 black;
270
+ }
271
+ }
272
+ }
273
+
274
+ & .spanNode:hover:not(.selected) {
275
+ filter: brightness(1.05);
276
+ }
277
+
278
+ & .spanNode.selected:hover {
279
+ filter: brightness(1.05);
280
+ }
281
+ }
282
+
283
+ @media (prefers-color-scheme: dark) {
284
+ :global(:root:not(.light)) {
285
+ & .mapContainer canvas {
286
+ filter: invert(1);
287
+ }
288
+
289
+ & .spanNode.small {
290
+ &.xHover,
291
+ &:focus-visible {
292
+ &::before {
293
+ text-shadow: 0 1px 0 black;
294
+ }
295
+ }
296
+ }
297
+
298
+ & .spanNode:hover:not(.selected) {
299
+ filter: brightness(1.05);
300
+ }
301
+
302
+ & .spanNode.selected:hover {
303
+ filter: brightness(1.05);
304
+ }
305
+ }
306
+ }
307
+
308
+ .spanName {
309
+ flex: 1 1 auto;
310
+ padding-inline: 6px;
311
+ text-align: left;
312
+ overflow: hidden;
313
+ text-overflow: ellipsis;
314
+ }
315
+
316
+ .spanDuration {
317
+ flex: 0 0 auto;
318
+ padding-right: 6px;
319
+ font-variant-numeric: tabular-nums;
320
+ color: var(--span-secondary, var(--ds-gray-alpha-700));
321
+ }
322
+
323
+ /* SPAN DETAIL PANEL */
324
+ .spanDetailPanel {
325
+ display: flex;
326
+ flex-direction: column;
327
+ height: 100%;
328
+ align-items: stretch;
329
+ justify-content: flex-start;
330
+ flex: 0 1 auto;
331
+ }
332
+
333
+ .spanDetailPanelResizer {
334
+ position: absolute;
335
+ left: 0;
336
+ top: 0;
337
+ width: 20px;
338
+ height: 100%;
339
+ cursor: col-resize;
340
+ z-index: 1;
341
+
342
+ display: none;
343
+ @media (hover: hover) {
344
+ display: block;
345
+ }
346
+ }
347
+
348
+ .spanDetailPanelTop {
349
+ display: flex;
350
+ flex-direction: row;
351
+ align-items: stretch;
352
+ flex: 0 1 auto;
353
+ justify-content: space-between;
354
+ position: relative;
355
+ }
356
+
357
+ .spanDetailPanelBody {
358
+ display: flex;
359
+ flex-direction: column;
360
+ align-items: stretch;
361
+ justify-content: flex-start;
362
+ gap: 12px;
363
+ flex: 1 1 0;
364
+ min-height: 0;
365
+ padding: 16px 12px 24px;
366
+ overflow-x: hidden;
367
+ overflow-y: auto;
368
+ }
369
+
370
+ .spanDetailPanelTopInfo {
371
+ --row-height: 32px;
372
+ display: flex;
373
+ flex-direction: row;
374
+ align-items: center;
375
+ justify-content: space-between;
376
+ gap: 8px;
377
+ padding: 8px 12px;
378
+ width: 100%;
379
+ font-size: 12px;
380
+ border-bottom: 1px solid var(--border-color);
381
+ flex: 0 1 auto;
382
+ }
383
+
384
+ .spanNameDetailPanel {
385
+ font-size: inherit;
386
+ color: var(--ds-gray-1000);
387
+ word-break: break-word;
388
+ }
389
+
390
+ .spanDetailPanelTruncatedHeading {
391
+ display: flex;
392
+ flex-direction: row;
393
+ align-items: center;
394
+ gap: 8px;
395
+ flex: 0 1 100%;
396
+ overflow: hidden;
397
+ justify-content: flex-start;
398
+ }
399
+
400
+ .spanDetailPanelName {
401
+ flex: 1 1 0;
402
+ font-size: 12px;
403
+ font-weight: 500;
404
+ min-width: 0;
405
+ overflow: hidden;
406
+ text-overflow: ellipsis;
407
+ white-space: nowrap;
408
+ color: var(--ds-gray-1000);
409
+ }
410
+
411
+ .spanDetailPanelDuration {
412
+ font-family: var(--font-mono);
413
+ font-size: 10px;
414
+ font-variant-numeric: tabular-nums;
415
+ color: var(--ds-gray-600);
416
+ background-color: var(--ds-gray-200);
417
+ padding: 2px 6px;
418
+ border-radius: 4px;
419
+ flex-shrink: 0;
420
+ }
421
+
422
+ .spanDetailPanelCorner {
423
+ display: flex;
424
+ flex-direction: row;
425
+ align-items: center;
426
+ gap: 8px;
427
+ flex: 0 0 auto;
428
+ height: var(--row-height);
429
+ justify-content: flex-end;
430
+ }
431
+
432
+ .spanDetailPanelCornerInner {
433
+ display: flex;
434
+ flex-direction: row;
435
+ align-items: stretch;
436
+ justify-content: flex-start;
437
+ flex: 0 1 auto;
438
+ }
439
+
440
+ .spanDetailPanelCloseVerticalRule {
441
+ border-left: 1px solid var(--ds-gray-300);
442
+ height: 16px;
443
+ }
444
+
445
+ .spanDetailPanelClose {
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: center;
449
+ width: 24px;
450
+ height: 24px;
451
+ background: none;
452
+ border: none;
453
+ border-radius: 4px;
454
+ cursor: pointer;
455
+
456
+ &:hover,
457
+ &:focus-visible {
458
+ background-color: var(--ds-gray-200);
459
+ }
460
+ }
461
+
462
+ .spanDetailPanelAttribute {
463
+ margin: 0;
464
+ padding-block: 8px;
465
+ display: flex;
466
+ flex-direction: row;
467
+ align-items: center;
468
+ justify-content: space-between;
469
+ gap: 16px;
470
+ font-size: 14px;
471
+ line-height: 1.4;
472
+ border-bottom: 1px solid var(--border-color);
473
+
474
+ &:last-child {
475
+ border-bottom: none;
476
+ }
477
+ }
478
+
479
+ .spanDetailPanelAttributeKey {
480
+ flex: 0 0 auto;
481
+ margin: 0;
482
+ padding-left: 8px;
483
+ font-size: inherit;
484
+ color: var(--ds-gray-900);
485
+ }
486
+
487
+ .spanDetailPanelAttributeValue {
488
+ flex: 0 1 auto;
489
+ margin: 0;
490
+ padding-right: 8px;
491
+ font-family: var(--font-mono);
492
+ font-size: 13px;
493
+ white-space: nowrap;
494
+ overflow-x: hidden;
495
+ text-overflow: ellipsis;
496
+ }
497
+
498
+ .spanDetailPanelQuickLink {
499
+ color: inherit;
500
+ text-decoration: none;
501
+ &:hover .spanDetailPanelQuickLinkLabel {
502
+ text-decoration: underline;
503
+ }
504
+ }
505
+
506
+ .spanDetailPanelQuickLinkLabel {
507
+ display: flex;
508
+ flex-direction: row;
509
+ align-items: center;
510
+ gap: 8px;
511
+ font: inherit;
512
+ }
513
+
514
+ .detailGroup {
515
+ display: flex;
516
+ flex-direction: column;
517
+ align-items: stretch;
518
+ justify-content: flex-start;
519
+ flex: 0 1 auto;
520
+ &::after {
521
+ margin: 12px -12px 0;
522
+ height: 1px;
523
+ background: var(--border-color);
524
+ content: "";
525
+ }
526
+ }
527
+
528
+ .expanded,
529
+ .collapsed,
530
+ .ancestorGroup {
531
+ /* Explicit class tokens used by TS for CSS Modules */
532
+ }
533
+
534
+ .detailHeading {
535
+ display: flex;
536
+ flex-direction: row;
537
+ justify-content: space-between;
538
+ align-items: center;
539
+ padding: 8px;
540
+ font-family: inherit;
541
+ font-size: 14px;
542
+ font-weight: 500;
543
+ background: none;
544
+ color: var(--ds-gray-1000);
545
+ border: none;
546
+ border-radius: 6px;
547
+ cursor: pointer;
548
+ -webkit-tap-highlight-color: transparent;
549
+
550
+ &:hover,
551
+ &:focus-visible {
552
+ background-color: var(--ds-gray-100);
553
+ }
554
+ }
555
+
556
+ /* Local replacements for external UI */
557
+ .buttonLink {
558
+ display: inline-flex;
559
+ align-items: center;
560
+ gap: 6px;
561
+ padding: 4px 8px;
562
+ font-size: 12px;
563
+ line-height: 1;
564
+ color: var(--ds-gray-1000);
565
+ text-decoration: none;
566
+ background-color: var(--ds-background-100);
567
+ border: 1px solid var(--accents-2);
568
+ border-radius: 6px;
569
+ }
570
+
571
+ .buttonLink:hover,
572
+ .buttonLink:focus-visible {
573
+ background-color: var(--ds-gray-100);
574
+ }
575
+
576
+ .note {
577
+ padding: 8px 10px;
578
+ color: var(--ds-gray-900);
579
+ background-color: var(--ds-background-100);
580
+ border: 1px solid var(--ds-gray-300);
581
+ border-radius: 6px;
582
+ }
583
+
584
+ .skeleton {
585
+ display: inline-block;
586
+ background-color: var(--ds-gray-200);
587
+ border-radius: 4px;
588
+ }
589
+
590
+ .skeletonRounded {
591
+ border-radius: 50%;
592
+ }
593
+
594
+ .detailGroup.collapsed .detailHeadingIcon {
595
+ transform: rotate(-90deg);
596
+ }
597
+
598
+ .infraSpanDescription {
599
+ padding: 8px;
600
+ font-size: 14px;
601
+ line-height: 1.4;
602
+ color: var(--ds-gray-900);
603
+ display: flex;
604
+ flex-direction: column;
605
+ gap: 16px;
606
+ }
607
+
608
+ .ancestorNode {
609
+ padding: 8px 8px 8px;
610
+ font-family: inherit;
611
+ font-size: 13px;
612
+ background: none;
613
+ border: none;
614
+ border-radius: 6px;
615
+ cursor: pointer;
616
+ -webkit-tap-highlight-color: transparent;
617
+
618
+ &:hover,
619
+ &:focus-visible {
620
+ background: var(--ds-gray-100);
621
+ }
622
+ }
623
+
624
+ .ancestorText {
625
+ display: flex;
626
+ flex-direction: row;
627
+ justify-content: space-between;
628
+ align-items: center;
629
+ gap: 4px;
630
+ color: var(--ds-gray-900);
631
+ white-space: nowrap;
632
+ }
633
+
634
+ .ancestorName {
635
+ overflow: hidden;
636
+ text-overflow: ellipsis;
637
+ }
638
+
639
+ .ancestorDuration {
640
+ /* font-family: var(--font-mono); */
641
+ font-variant-numeric: tabular-nums;
642
+ }
643
+
644
+ .ancestorLineContainer {
645
+ position: relative;
646
+ margin-top: 6px;
647
+ display: block;
648
+ width: 100%;
649
+ height: 1px;
650
+ background-color: var(--ds-gray-alpha-400);
651
+
652
+ &::before,
653
+ &::after {
654
+ position: absolute;
655
+ top: -2px;
656
+ width: 1px;
657
+ height: 5px;
658
+ background-color: inherit;
659
+ content: "";
660
+ }
661
+
662
+ &::before {
663
+ left: 0;
664
+ }
665
+
666
+ &::after {
667
+ right: 0;
668
+ }
669
+ }
670
+
671
+ .ancestorLine {
672
+ position: absolute;
673
+ top: -2px;
674
+ height: 5px;
675
+ background-color: var(--span-background);
676
+ border: 1px solid var(--span-line);
677
+ border-radius: 1px;
678
+ }
679
+
680
+ .ancestorNode {
681
+ &:hover,
682
+ &:focus-visible,
683
+ &:last-of-type {
684
+ & .ancestorName {
685
+ color: var(--ds-gray-1000);
686
+ }
687
+
688
+ & .ancestorLine {
689
+ background-color: var(--span-line);
690
+ border-color: var(--span-border);
691
+ }
692
+ }
693
+ }
694
+
695
+ /* ZOOM BUTTON */
696
+ .zoomButtonGroup {
697
+ display: inline-flex;
698
+ flex-direction: row;
699
+ align-items: stretch;
700
+ justify-content: flex-start;
701
+ flex: 0 1 auto;
702
+ background-color: var(--geist-background);
703
+ border-radius: 10ex;
704
+ box-shadow: var(--ds-shadow-small);
705
+ border: 1px solid var(--accents-2);
706
+ animation: zoom-buttons-fade-in 0.3s ease 0.3s backwards;
707
+ }
708
+
709
+ @keyframes zoom-buttons-fade-in {
710
+ from {
711
+ opacity: 0;
712
+ }
713
+ to {
714
+ opacity: 1;
715
+ }
716
+ }
717
+
718
+ .zoomButton {
719
+ display: flex;
720
+ align-items: center;
721
+ justify-content: center;
722
+ padding: 6px;
723
+ height: 32px;
724
+ width: 38px;
725
+ background-color: transparent;
726
+ border: none;
727
+ color: var(--accents-5);
728
+ box-shadow: none !important;
729
+ cursor: pointer;
730
+
731
+ &:hover,
732
+ &:focus-visible {
733
+ color: var(--accents-7);
734
+ }
735
+ }
736
+
737
+ .zoomButton:hover {
738
+ background-color: transparent;
739
+ color: var(--accents-7);
740
+ }
741
+
742
+ .zoomButton:focus-visible {
743
+ /* TODO */
744
+ }
745
+
746
+ .divider {
747
+ width: 1px;
748
+ background-color: var(--accents-2);
749
+ margin: -1px;
750
+ }
751
+
752
+ /* TRACE */
753
+ .markersContainer {
754
+ position: absolute;
755
+ left: -8px;
756
+ top: -8px;
757
+ width: 100%;
758
+ height: calc(100% - var(--scrollbar-width));
759
+ line-height: 1;
760
+ z-index: 4;
761
+ pointer-events: none;
762
+ }
763
+
764
+ .markers {
765
+ position: sticky;
766
+ top: 0;
767
+ display: flex;
768
+ flex-direction: row;
769
+ gap: calc(var(--marker-width) - 1px);
770
+ height: var(--marker-height);
771
+ padding-left: 8px;
772
+ background: var(--ds-background-200);
773
+ overflow: hidden;
774
+ box-shadow: 0 4px 8px 0 var(--ds-background-200);
775
+ border-bottom: 1px solid var(--marker-color);
776
+ }
777
+
778
+ .marker {
779
+ position: relative;
780
+ flex: 0 0 1px;
781
+ border-left: 1px solid var(--marker-color);
782
+ font-size: 10px;
783
+ font-variant-numeric: tabular-nums;
784
+ color: var(--ds-gray-900);
785
+
786
+ height: var(--marker-height);
787
+ &.notch {
788
+ top: calc(var(--marker-height) - var(--marker-notch-height));
789
+ height: var(--marker-notch-height);
790
+ }
791
+ }
792
+
793
+ .markerLabel {
794
+ position: absolute;
795
+ left: 2px;
796
+ bottom: 6px;
797
+ color: var(--ds-gray-900);
798
+ user-select: none;
799
+ }
800
+
801
+ .eventMarkersContainer {
802
+ position: absolute;
803
+ top: -8px;
804
+ width: var(--timeline-scroll-width);
805
+ height: calc(100% - var(--scrollbar-width));
806
+ line-height: 1;
807
+ z-index: 1;
808
+ pointer-events: none;
809
+ }
810
+
811
+ .eventMarkers {
812
+ position: sticky;
813
+ top: 0;
814
+ height: calc(100% + 2 * var(--timeline-padding));
815
+ overflow: hidden;
816
+ }
817
+
818
+ .eventMarker {
819
+ position: absolute;
820
+ border-left: 1px dotted var(--ds-gray-500);
821
+ height: 100%;
822
+ }
823
+
824
+ .cursorMarkerStickyParent {
825
+ position: absolute;
826
+ left: 0;
827
+ top: -8px;
828
+ width: var(--timeline-scroll-width);
829
+ height: calc(100% + 2 * var(--timeline-padding));
830
+ pointer-events: none;
831
+ }
832
+
833
+ .cursorMarkerLabelContainer {
834
+ position: sticky;
835
+ top: 0;
836
+ left: 0;
837
+ display: none;
838
+ width: 1px;
839
+ height: 100%;
840
+ z-index: 5;
841
+ pointer-events: none;
842
+ }
843
+
844
+ .cursorMarkerLabel {
845
+ position: sticky;
846
+ top: 4px;
847
+ width: 1px;
848
+ height: var(--marker-height);
849
+ background-color: var(--marker-color);
850
+
851
+ &[data-text]::before {
852
+ margin: 0;
853
+ position: absolute;
854
+ left: 0;
855
+ top: 0;
856
+ padding: 0 6px;
857
+ height: 18px;
858
+ line-height: 16px;
859
+ transform: translateX(-50%);
860
+ font-size: 10px;
861
+ font-weight: 500;
862
+ font-variant-numeric: tabular-nums;
863
+ background-color: var(--ds-background-100);
864
+ color: var(--ds-gray-900);
865
+ border: 1px solid var(--ds-gray-500);
866
+ border-radius: 10ex;
867
+ box-shadow: var(--ds-shadow-small);
868
+ content: attr(data-text);
869
+ }
870
+
871
+ &[data-align="left"]::before {
872
+ left: -6px;
873
+ transform: unset;
874
+ }
875
+
876
+ &[data-align="right"]::before {
877
+ left: unset;
878
+ right: -6px;
879
+ transform: unset;
880
+ }
881
+ }
882
+
883
+ .cursorMarkerContainer {
884
+ position: sticky;
885
+ top: 0;
886
+ width: 1px;
887
+ height: 100%;
888
+ pointer-events: none;
889
+ }
890
+
891
+ .cursorMarker {
892
+ position: sticky;
893
+ top: 0;
894
+ width: 1px;
895
+ height: 100%;
896
+ display: none;
897
+ background-color: var(--marker-color);
898
+ z-index: 1;
899
+ }
900
+
901
+ .cursorSelection {
902
+ position: absolute;
903
+ top: 0;
904
+ height: 100%;
905
+ display: none;
906
+ flex-direction: row;
907
+ justify-content: space-between;
908
+ align-items: flex-end;
909
+ gap: 8px;
910
+ background-color: var(--ds-gray-100);
911
+ border-inline: 1px solid var(--ds-gray-300);
912
+
913
+ &::before,
914
+ &::after {
915
+ position: sticky;
916
+ bottom: 8px;
917
+ padding: 0 6px;
918
+ height: 18px;
919
+ line-height: 16px;
920
+ font-size: 10px;
921
+ font-weight: 500;
922
+ font-variant-numeric: tabular-nums;
923
+ background-color: var(--ds-background-100);
924
+ color: var(--ds-gray-900);
925
+ border: 1px solid var(--ds-gray-500);
926
+ border-radius: 10ex;
927
+ box-shadow: var(--ds-shadow-small);
928
+ white-space: nowrap;
929
+ }
930
+
931
+ &::before {
932
+ margin-left: 8px;
933
+ content: attr(data-range);
934
+ }
935
+ &::after {
936
+ margin-right: 8px;
937
+ content: attr(data-duration);
938
+ }
939
+ }
940
+
941
+ @keyframes span-skeleton {
942
+ from {
943
+ opacity: 0.6;
944
+ }
945
+
946
+ to {
947
+ opacity: 0.3;
948
+ }
949
+ }
950
+
951
+ .traceViewer {
952
+ &.skeleton {
953
+ & * {
954
+ pointer-events: none !important;
955
+ }
956
+
957
+ & .mapCanvas {
958
+ display: none;
959
+ }
960
+
961
+ & .markerLabel {
962
+ display: none;
963
+ }
964
+
965
+ & .spanNode {
966
+ animation: span-skeleton 1s infinite alternate;
967
+
968
+ & * {
969
+ display: none;
970
+ }
971
+ }
972
+
973
+ & .zoomButtonTraceViewer {
974
+ display: none;
975
+ }
976
+ }
977
+
978
+ & .markers {
979
+ border-top: 1px solid var(--marker-color);
980
+ border-bottom: none;
981
+ }
982
+
983
+ & .marker.notch {
984
+ top: 0;
985
+ }
986
+
987
+ & .markerLabel {
988
+ bottom: 3px;
989
+ }
990
+
991
+ & .cursorMarkerLabel {
992
+ top: 8px;
993
+ }
994
+ }
995
+
996
+ .timeline:hover {
997
+ & .cursorMarkerLabelContainer,
998
+ & .cursorMarker {
999
+ display: block;
1000
+ }
1001
+ }
1002
+
1003
+ /* SEARCH BAR */
1004
+ .searchBar {
1005
+ position: absolute;
1006
+ left: 0;
1007
+ top: var(--search-gap);
1008
+ display: flex;
1009
+ flex-direction: row;
1010
+ gap: var(--search-gap);
1011
+ width: 100%;
1012
+ padding-inline: var(--search-gap);
1013
+ height: var(--search-height);
1014
+ }
1015
+
1016
+ .searchInput {
1017
+ flex: 0 1 100%;
1018
+ position: relative;
1019
+ height: var(--search-height);
1020
+ background: var(--ds-background-100);
1021
+ }
1022
+
1023
+ .searchInputLabel {
1024
+ display: flex;
1025
+ align-items: center;
1026
+ justify-content: center;
1027
+ border-radius: 6px;
1028
+ box-shadow: 0 0 0 1px var(--border-color, var(--ds-gray-alpha-400));
1029
+
1030
+ & input {
1031
+ margin-left: -16px;
1032
+ padding-inline: 12px;
1033
+ font-family: inherit;
1034
+ font-size: 14px;
1035
+ background: transparent;
1036
+ border: none;
1037
+ outline: none;
1038
+
1039
+ &::-webkit-search-decoration,
1040
+ &::-webkit-search-cancel-button,
1041
+ &::-webkit-search-results-button,
1042
+ &::-webkit-search-results-decoration {
1043
+ display: none;
1044
+ }
1045
+ }
1046
+ }
1047
+
1048
+ .searchInputPrefix {
1049
+ width: var(--search-height);
1050
+ height: var(--search-height);
1051
+ display: flex;
1052
+ align-items: center;
1053
+ justify-content: center;
1054
+ color: var(--ds-gray-800);
1055
+ }
1056
+
1057
+ /* MINI MAP */
1058
+ .mapContainer {
1059
+ position: absolute;
1060
+ left: 0;
1061
+ top: calc(var(--search-height) + 2 * var(--search-gap));
1062
+ /* border-bottom: 1px solid var(--border-color); */
1063
+ cursor: move;
1064
+ }
1065
+
1066
+ .mapCanvas {
1067
+ position: absolute;
1068
+ left: 0;
1069
+ top: 0;
1070
+ z-index: 1;
1071
+ pointer-events: none;
1072
+ mix-blend-mode: multiply;
1073
+ }
1074
+
1075
+ :global(.dark-theme) .mapCanvas,
1076
+ :global(.dark) .mapCanvas {
1077
+ mix-blend-mode: screen;
1078
+ }
1079
+
1080
+ @media (prefers-color-scheme: dark) {
1081
+ :global(:root:not(.light)) .mapCanvas {
1082
+ mix-blend-mode: screen;
1083
+ }
1084
+ }
1085
+
1086
+ .mapThumb {
1087
+ position: absolute;
1088
+ top: 0;
1089
+ height: var(--map-height);
1090
+ background: var(--ds-gray-alpha-200);
1091
+ border: 1px solid var(--ds-gray-alpha-400);
1092
+ border-radius: 3px;
1093
+ box-shadow: var(--ds-shadow-small);
1094
+ transform: translateX(var(--timeline-padding));
1095
+ pointer-events: none;
1096
+ }
1097
+
1098
+ /* TRACE VIEWER */
1099
+ .traceViewer,
1100
+ .spanDetailPanelTraceViewer {
1101
+ --border-color: var(--ds-gray-300);
1102
+ --marker-color: var(--ds-gray-300);
1103
+ }
1104
+
1105
+ .traceViewer {
1106
+ --scrollbar-width: 0;
1107
+ position: relative;
1108
+ display: flex;
1109
+ font-family: var(--font-sans);
1110
+ text-rendering: optimizeLegibility;
1111
+ text-size-adjust: 100%;
1112
+ background-color: var(--ds-background-200);
1113
+
1114
+ & button {
1115
+ font-family: inherit;
1116
+ }
1117
+ }
1118
+
1119
+ .traceViewerContent {
1120
+ position: absolute;
1121
+ left: 0;
1122
+ top: calc(var(--search-height) + 3 * var(--search-gap) + var(--map-height));
1123
+ width: calc(var(--timeline-width) + 2 * var(--timeline-padding));
1124
+ height: calc(
1125
+ var(--timeline-height) - 2 * var(--timeline-padding) -
1126
+ var(--scrollbar-width) - var(--marker-height) - var(--search-height)
1127
+ );
1128
+
1129
+ &.inert {
1130
+ display: none;
1131
+ }
1132
+ }
1133
+
1134
+ .timeline {
1135
+ width: calc(var(--timeline-width) + 2 * var(--timeline-padding));
1136
+ height: var(--timeline-height);
1137
+ font-size: 13px;
1138
+ overflow-y: scroll;
1139
+ overflow-x: scroll;
1140
+ -webkit-overflow-scrolling: touch;
1141
+ position: relative;
1142
+ }
1143
+
1144
+ .zoomButtonTraceViewer {
1145
+ position: absolute;
1146
+ bottom: calc(-12px - var(--search-height) - var(--scrollbar-width));
1147
+ right: calc(var(--scrollbar-width) + 12px);
1148
+ z-index: 10;
1149
+ }
1150
+
1151
+ .spanDetailPanelTraceViewer {
1152
+ position: absolute;
1153
+ margin-top: -1px;
1154
+ right: 0;
1155
+ top: calc(
1156
+ var(--search-height) + 2 * var(--search-gap) + var(--map-height) + 9px
1157
+ );
1158
+ bottom: 0;
1159
+ width: var(--panel-width);
1160
+ border-top: 1px solid var(--ds-gray-200);
1161
+ border-left: 1px solid var(--ds-gray-200);
1162
+ background-color: var(--geist-background);
1163
+ z-index: 10;
1164
+
1165
+ &.hidden {
1166
+ display: none;
1167
+ }
1168
+
1169
+ &.mobile {
1170
+ --panel-width: calc(var(--timeline-width) + 2 * var(--timeline-padding));
1171
+ top: 0;
1172
+ border-left: none;
1173
+ }
1174
+ }
1175
+
1176
+ /* Workflow-specific styles */
1177
+
1178
+ /* Step statuses */
1179
+ .spanRunning,
1180
+ .spanPending {
1181
+ --span-background: var(--ds-blue-200);
1182
+ --span-border: var(--ds-blue-500);
1183
+ --span-line: var(--ds-blue-400);
1184
+ --span-text: var(--ds-gray-1000);
1185
+ --span-secondary: var(--ds-blue-900);
1186
+ }
1187
+
1188
+ .spanCompleted {
1189
+ --span-background: var(--ds-green-200);
1190
+ --span-border: var(--ds-green-500);
1191
+ --span-line: var(--ds-green-400);
1192
+ --span-text: var(--ds-gray-1000);
1193
+ --span-secondary: var(--ds-green-900);
1194
+ }
1195
+
1196
+ .spanCancelled {
1197
+ --span-background: var(--ds-amber-200);
1198
+ --span-border: var(--ds-amber-500);
1199
+ --span-line: var(--ds-amber-400);
1200
+ --span-text: var(--ds-gray-1000);
1201
+ --span-secondary: var(--ds-amber-900);
1202
+ }
1203
+
1204
+ .spanFailed {
1205
+ --span-background: var(--ds-red-200);
1206
+ --span-border: var(--ds-red-500);
1207
+ --span-line: var(--ds-red-400);
1208
+ --span-text: var(--ds-gray-1000);
1209
+ --span-secondary: var(--ds-red-900);
1210
+ }
1211
+
1212
+ /* Striped background for pending status */
1213
+ .spanPendingStriped {
1214
+ --span-background: repeating-linear-gradient(
1215
+ 45deg,
1216
+ var(--ds-blue-200),
1217
+ var(--ds-blue-200) 10px,
1218
+ color-mix(in srgb, var(--ds-blue-200) 70%, white) 10px,
1219
+ color-mix(in srgb, var(--ds-blue-200) 70%, white) 20px
1220
+ );
1221
+ --span-border: var(--ds-blue-500);
1222
+ --span-line: var(--ds-blue-400);
1223
+ --span-text: var(--ds-gray-1000);
1224
+ --span-secondary: var(--ds-blue-900);
1225
+ }
1226
+
1227
+ .hasQueuedTime {
1228
+ &::before {
1229
+ content: "";
1230
+ position: absolute;
1231
+ left: var(--queued-width);
1232
+ height: 100%;
1233
+ border-left: 2px dotted var(--ds-gray-700);
1234
+ pointer-events: none;
1235
+ }
1236
+ }
1237
+
1238
+ /* Sleep step - light yellow/orange */
1239
+ .spanSleep {
1240
+ --span-background: var(--ds-amber-200);
1241
+ --span-border: var(--ds-amber-500);
1242
+ --span-line: var(--ds-amber-400);
1243
+ --span-text: var(--ds-gray-1000);
1244
+ --span-secondary: var(--ds-amber-900);
1245
+ }
1246
+
1247
+ /* Hooks - gray color scheme */
1248
+ .spanHook {
1249
+ --span-background: var(--ds-gray-200);
1250
+ --span-border: var(--ds-gray-500);
1251
+ --span-line: var(--ds-gray-400);
1252
+ --span-text: var(--ds-gray-1000);
1253
+ --span-secondary: var(--ds-gray-900);
1254
+ }
1255
+
1256
+ /* Event markers */
1257
+
1258
+ /* Failure events - Red */
1259
+ .eventFailed {
1260
+ --event-color: var(--ds-red-600);
1261
+ --span-background: var(--ds-red-100);
1262
+ --span-border: var(--ds-red-500);
1263
+ --span-text: var(--ds-red-900);
1264
+ --span-secondary: var(--ds-red-700);
1265
+ }
1266
+
1267
+ /* Retry events - Orange/Yellow */
1268
+ .eventRetrying {
1269
+ --event-color: var(--ds-amber-600);
1270
+ --span-background: var(--ds-amber-100);
1271
+ --span-border: var(--ds-amber-500);
1272
+ --span-text: var(--ds-amber-900);
1273
+ --span-secondary: var(--ds-amber-700);
1274
+ }
1275
+
1276
+ /* Webhook-related events - Purple */
1277
+ .eventHook {
1278
+ --event-color: var(--ds-purple-600);
1279
+ --span-background: var(--ds-purple-100);
1280
+ --span-border: var(--ds-purple-500);
1281
+ --span-text: var(--ds-purple-900);
1282
+ --span-secondary: var(--ds-purple-700);
1283
+ }
1284
+
1285
+ /* Default event - Blue */
1286
+ .eventDefault {
1287
+ --event-color: var(--ds-blue-600);
1288
+ --span-background: var(--ds-blue-100);
1289
+ --span-border: var(--ds-blue-500);
1290
+ --span-text: var(--ds-blue-900);
1291
+ --span-secondary: var(--ds-blue-700);
1292
+ }