@mastra/playground-ui 48.0.0-alpha.8 → 48.0.0

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 (616) hide show
  1. package/CHANGELOG.md +338 -0
  2. package/dist/{Button-Bm94fEF2.cjs → Button-B4Ixj2aW.cjs} +4 -3
  3. package/dist/Button-B4Ixj2aW.cjs.map +1 -0
  4. package/dist/{Button-Bx2lFdqb.js → Button-C-9Pzy-Z.js} +4 -3
  5. package/dist/Button-C-9Pzy-Z.js.map +1 -0
  6. package/dist/{Notice-B9cdEg8R.cjs → Notice-DSfh1Ap5.cjs} +2 -2
  7. package/dist/{Notice-B9cdEg8R.cjs.map → Notice-DSfh1Ap5.cjs.map} +1 -1
  8. package/dist/{Notice-DIK9IZsq.js → Notice-DWHQgxkA.js} +2 -2
  9. package/dist/{Notice-DIK9IZsq.js.map → Notice-DWHQgxkA.js.map} +1 -1
  10. package/dist/{SessionExpired-C5ADs4NL.cjs → SessionExpired-CL4bppLl.cjs} +2 -2
  11. package/dist/{SessionExpired-C5ADs4NL.cjs.map → SessionExpired-CL4bppLl.cjs.map} +1 -1
  12. package/dist/{SessionExpired-CHF__hq9.js → SessionExpired-qvMB5AP_.js} +2 -2
  13. package/dist/{SessionExpired-CHF__hq9.js.map → SessionExpired-qvMB5AP_.js.map} +1 -1
  14. package/dist/Shimmer.css +37 -0
  15. package/dist/{combobox-sa_Pxyl4.js → combobox-CH9vBToX.js} +2 -2
  16. package/dist/{combobox-sa_Pxyl4.js.map → combobox-CH9vBToX.js.map} +1 -1
  17. package/dist/{combobox-DXwbHjvQ.cjs → combobox-Z3NehlIY.cjs} +2 -2
  18. package/dist/{combobox-DXwbHjvQ.cjs.map → combobox-Z3NehlIY.cjs.map} +1 -1
  19. package/dist/{command-Duq1xsiS.js → command-BZ7S7MR-.js} +2 -2
  20. package/dist/{command-Duq1xsiS.js.map → command-BZ7S7MR-.js.map} +1 -1
  21. package/dist/{command-qsEykgml.cjs → command-DJwcGKv_.cjs} +2 -2
  22. package/dist/{command-qsEykgml.cjs.map → command-DJwcGKv_.cjs.map} +1 -1
  23. package/dist/components/AlertDialog.cjs.js +1 -1
  24. package/dist/components/AlertDialog.es.js +1 -1
  25. package/dist/components/Button.cjs.js +1 -1
  26. package/dist/components/Button.es.js +1 -1
  27. package/dist/components/ChatShell.cjs.js +10 -6
  28. package/dist/components/ChatShell.cjs.js.map +1 -1
  29. package/dist/components/ChatShell.es.js +10 -6
  30. package/dist/components/ChatShell.es.js.map +1 -1
  31. package/dist/components/ClampedText.cjs.js +1 -1
  32. package/dist/components/ClampedText.es.js +1 -1
  33. package/dist/components/CodeBlock.cjs.js +6 -5
  34. package/dist/components/CodeBlock.cjs.js.map +1 -1
  35. package/dist/components/CodeBlock.es.js +4 -3
  36. package/dist/components/CodeBlock.es.js.map +1 -1
  37. package/dist/components/CodeEditor.cjs.js +1 -1
  38. package/dist/components/CodeEditor.es.js +1 -1
  39. package/dist/components/Columns.cjs.js +1 -1
  40. package/dist/components/Columns.es.js +1 -1
  41. package/dist/components/Combobox.cjs.js +1 -1
  42. package/dist/components/Combobox.es.js +1 -1
  43. package/dist/components/Command.cjs.js +1 -1
  44. package/dist/components/Command.es.js +1 -1
  45. package/dist/components/CommandPalette.cjs.js +1 -1
  46. package/dist/components/CommandPalette.es.js +1 -1
  47. package/dist/components/CopyButton.cjs.js +1 -1
  48. package/dist/components/CopyButton.es.js +1 -1
  49. package/dist/components/DataCodeSection.cjs.js +1 -1
  50. package/dist/components/DataCodeSection.es.js +1 -1
  51. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  52. package/dist/components/DataDetailsPanel.es.js +2 -2
  53. package/dist/components/DataFilter.cjs.js +2 -2
  54. package/dist/components/DataFilter.es.js +2 -2
  55. package/dist/components/DataList.cjs.js +2 -2
  56. package/dist/components/DataList.es.js +2 -2
  57. package/dist/components/DataPanel.cjs.js +1 -1
  58. package/dist/components/DataPanel.es.js +1 -1
  59. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  60. package/dist/components/DateRangeTimeline.es.js +1 -1
  61. package/dist/components/DateTimePicker.cjs.js +2 -2
  62. package/dist/components/DateTimePicker.es.js +2 -2
  63. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  64. package/dist/components/DateTimeRangePicker.es.js +1 -1
  65. package/dist/components/Dialog.cjs.js +1 -1
  66. package/dist/components/Dialog.es.js +1 -1
  67. package/dist/components/Drawer.cjs.js +1 -1
  68. package/dist/components/Drawer.es.js +1 -1
  69. package/dist/components/DropdownMenu.cjs.js +1 -1
  70. package/dist/components/DropdownMenu.es.js +1 -1
  71. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  72. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  73. package/dist/components/ErrorBoundary.cjs.js +1 -1
  74. package/dist/components/ErrorBoundary.es.js +1 -1
  75. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  76. package/dist/components/FormFieldBlocks.es.js +2 -2
  77. package/dist/components/HoverCard.cjs.js +1 -1
  78. package/dist/components/HoverCard.es.js +1 -1
  79. package/dist/components/InputGroup.cjs.js +1 -1
  80. package/dist/components/InputGroup.es.js +1 -1
  81. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  82. package/dist/components/JSONSchemaForm.es.js +2 -2
  83. package/dist/components/KeyValueList.cjs.js +1 -1
  84. package/dist/components/KeyValueList.es.js +1 -1
  85. package/dist/components/ListSearch.cjs.js +1 -1
  86. package/dist/components/ListSearch.es.js +1 -1
  87. package/dist/components/MainSidebar.cjs.js +73 -50
  88. package/dist/components/MainSidebar.cjs.js.map +1 -1
  89. package/dist/components/MainSidebar.es.js +73 -50
  90. package/dist/components/MainSidebar.es.js.map +1 -1
  91. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  92. package/dist/components/MarkdownRenderer.es.js +1 -1
  93. package/dist/components/MessageScroller.cjs.js +1 -1
  94. package/dist/components/MessageScroller.es.js +1 -1
  95. package/dist/components/Notice.cjs.js +1 -1
  96. package/dist/components/Notice.es.js +1 -1
  97. package/dist/components/PrevNextNav.cjs.js +1 -1
  98. package/dist/components/PrevNextNav.es.js +1 -1
  99. package/dist/components/PropertyFilter.cjs.js +3 -3
  100. package/dist/components/PropertyFilter.es.js +4 -4
  101. package/dist/components/RuleBuilder.cjs.js +2 -2
  102. package/dist/components/RuleBuilder.es.js +2 -2
  103. package/dist/components/SankeyChart.cjs.js +10 -709
  104. package/dist/components/SankeyChart.cjs.js.map +1 -1
  105. package/dist/components/SankeyChart.es.js +2 -706
  106. package/dist/components/SankeyChart.es.js.map +1 -1
  107. package/dist/components/Select.cjs.js +1 -1
  108. package/dist/components/Select.es.js +1 -1
  109. package/dist/components/SessionExpired.cjs.js +1 -1
  110. package/dist/components/SessionExpired.es.js +1 -1
  111. package/dist/components/Shimmer.cjs.js +2 -15
  112. package/dist/components/Shimmer.cjs.js.map +1 -1
  113. package/dist/components/Shimmer.es.js +2 -15
  114. package/dist/components/Shimmer.es.js.map +1 -1
  115. package/dist/components/SideDialog.cjs.js +3 -3
  116. package/dist/components/SideDialog.es.js +3 -3
  117. package/dist/components/Tabs.cjs.js +4 -3
  118. package/dist/components/Tabs.cjs.js.map +1 -1
  119. package/dist/components/Tabs.es.js +2 -1
  120. package/dist/components/Tabs.es.js.map +1 -1
  121. package/dist/components/ThreadList.cjs.js +1 -1
  122. package/dist/components/ThreadList.es.js +1 -1
  123. package/dist/components/ThreadRail.cjs.js +6 -5
  124. package/dist/components/ThreadRail.cjs.js.map +1 -1
  125. package/dist/components/ThreadRail.es.js +6 -6
  126. package/dist/components/ThreadRail.es.js.map +1 -1
  127. package/dist/components/Truncate.cjs.js +1 -1
  128. package/dist/components/Truncate.es.js +1 -1
  129. package/dist/components/ai/ask-user.cjs.js +1 -1
  130. package/dist/components/ai/ask-user.es.js +1 -1
  131. package/dist/components/ai/plan.cjs.js +2 -2
  132. package/dist/components/ai/plan.es.js +2 -2
  133. package/dist/{copy-button-H2iaKMng.js → copy-button-B1GWIQ-x.js} +2 -2
  134. package/dist/{copy-button-H2iaKMng.js.map → copy-button-B1GWIQ-x.js.map} +1 -1
  135. package/dist/{copy-button-BKFcsNE1.cjs → copy-button-DwZ3c7D4.cjs} +2 -2
  136. package/dist/{copy-button-BKFcsNE1.cjs.map → copy-button-DwZ3c7D4.cjs.map} +1 -1
  137. package/dist/{data-code-section-D2zjah_b.cjs → data-code-section-BjmFgJpC.cjs} +5 -5
  138. package/dist/{data-code-section-D2zjah_b.cjs.map → data-code-section-BjmFgJpC.cjs.map} +1 -1
  139. package/dist/{data-code-section-MHMkC6q9.js → data-code-section-PJM5l3aS.js} +5 -5
  140. package/dist/{data-code-section-MHMkC6q9.js.map → data-code-section-PJM5l3aS.js.map} +1 -1
  141. package/dist/{data-list-CnQRIUyN.js → data-list-CnQWE0QP.js} +2 -2
  142. package/dist/{data-list-CnQRIUyN.js.map → data-list-CnQWE0QP.js.map} +1 -1
  143. package/dist/{data-list-Cb-piK4z.cjs → data-list-Cnnnx_vD.cjs} +2 -2
  144. package/dist/{data-list-Cb-piK4z.cjs.map → data-list-Cnnnx_vD.cjs.map} +1 -1
  145. package/dist/{data-panel-BEvHk4wg.js → data-panel-BQqPr6ew.js} +3 -3
  146. package/dist/{data-panel-BEvHk4wg.js.map → data-panel-BQqPr6ew.js.map} +1 -1
  147. package/dist/{data-panel-BumsjXVz.cjs → data-panel-C85h9XvH.cjs} +3 -3
  148. package/dist/{data-panel-BumsjXVz.cjs.map → data-panel-C85h9XvH.cjs.map} +1 -1
  149. package/dist/{date-time-range-picker-yJBIm34J.js → date-time-range-picker-BQpZVrH7.js} +4 -4
  150. package/dist/{date-time-range-picker-yJBIm34J.js.map → date-time-range-picker-BQpZVrH7.js.map} +1 -1
  151. package/dist/{date-time-range-picker-ue0m5G27.cjs → date-time-range-picker-sT6pHDmU.cjs} +4 -4
  152. package/dist/{date-time-range-picker-ue0m5G27.cjs.map → date-time-range-picker-sT6pHDmU.cjs.map} +1 -1
  153. package/dist/{dialog-ClItuCFY.cjs → dialog-5ZYCeKf-.cjs} +2 -2
  154. package/dist/{dialog-ClItuCFY.cjs.map → dialog-5ZYCeKf-.cjs.map} +1 -1
  155. package/dist/{dialog-bnt6epW2.js → dialog-DDXW5M21.js} +2 -2
  156. package/dist/{dialog-bnt6epW2.js.map → dialog-DDXW5M21.js.map} +1 -1
  157. package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
  158. package/dist/domains/logs/components/log-details-view.es.js +2 -2
  159. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  160. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  161. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  162. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  163. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  164. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  165. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  166. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  167. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  168. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  169. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  170. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  171. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  172. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  173. package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -3
  174. package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
  175. package/dist/domains/metrics/components/latency-card-view.es.js +2 -1
  176. package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
  177. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -4
  178. package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
  179. package/dist/domains/metrics/components/memory-card-view.es.js +3 -2
  180. package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
  181. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  182. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  183. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -4
  184. package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
  185. package/dist/domains/metrics/components/scores-card-view.es.js +3 -2
  186. package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
  187. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -3
  188. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
  189. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +2 -1
  190. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
  191. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -3
  192. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
  193. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +2 -1
  194. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
  195. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -3
  196. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
  197. package/dist/domains/metrics/components/traces-volume-card-view.es.js +2 -1
  198. package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
  199. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  200. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  201. package/dist/domains/traces/components/shared.cjs.js +8 -0
  202. package/dist/domains/traces/components/shared.cjs.js.map +1 -1
  203. package/dist/domains/traces/components/shared.es.js +8 -0
  204. package/dist/domains/traces/components/shared.es.js.map +1 -1
  205. package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -5
  206. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  207. package/dist/domains/traces/components/span-data-panel-view.es.js +4 -3
  208. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  209. package/dist/domains/traces/components/timeline-name-col.cjs.js +6 -2
  210. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  211. package/dist/domains/traces/components/timeline-name-col.es.js +6 -2
  212. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  213. package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
  214. package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
  215. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
  216. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
  217. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -10
  218. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  219. package/dist/domains/traces/components/trace-data-panel-view.es.js +5 -11
  220. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  221. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  222. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  223. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  224. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  225. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  226. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  227. package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
  228. package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
  229. package/dist/domains/traces/hooks/use-entity-names.cjs.js +12 -4
  230. package/dist/domains/traces/hooks/use-entity-names.cjs.js.map +1 -1
  231. package/dist/domains/traces/hooks/use-entity-names.es.js +12 -4
  232. package/dist/domains/traces/hooks/use-entity-names.es.js.map +1 -1
  233. package/dist/{drawer-DZ9amYo_.js → drawer-C8jNXutE.js} +2 -2
  234. package/dist/{drawer-DZ9amYo_.js.map → drawer-C8jNXutE.js.map} +1 -1
  235. package/dist/{drawer-CdsTitFp.cjs → drawer-CNnvBMfD.cjs} +2 -2
  236. package/dist/{drawer-CdsTitFp.cjs.map → drawer-CNnvBMfD.cjs.map} +1 -1
  237. package/dist/{dropdown-menu-ppWztidX.cjs → dropdown-menu-BZGlERgf.cjs} +4 -3
  238. package/dist/dropdown-menu-BZGlERgf.cjs.map +1 -0
  239. package/dist/{dropdown-menu-DEFygDZI.js → dropdown-menu-DCMh8P4w.js} +4 -3
  240. package/dist/dropdown-menu-DCMh8P4w.js.map +1 -0
  241. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  242. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  243. package/dist/ee/signals/entity-learning-api.cjs.js +113 -0
  244. package/dist/ee/signals/entity-learning-api.cjs.js.map +1 -0
  245. package/dist/ee/signals/entity-learning-api.d.ts +2 -0
  246. package/dist/ee/signals/entity-learning-api.es.js +99 -0
  247. package/dist/ee/signals/entity-learning-api.es.js.map +1 -0
  248. package/dist/ee/signals/examples-pager.cjs.js +49 -0
  249. package/dist/ee/signals/examples-pager.cjs.js.map +1 -0
  250. package/dist/ee/signals/examples-pager.d.ts +2 -0
  251. package/dist/ee/signals/examples-pager.es.js +44 -0
  252. package/dist/ee/signals/examples-pager.es.js.map +1 -0
  253. package/dist/ee/signals/flow-card.cjs.js +105 -0
  254. package/dist/ee/signals/flow-card.cjs.js.map +1 -0
  255. package/dist/ee/signals/flow-card.d.ts +2 -0
  256. package/dist/ee/signals/flow-card.es.js +101 -0
  257. package/dist/ee/signals/flow-card.es.js.map +1 -0
  258. package/dist/ee/signals/hooks/theme-query-guards.cjs.js +20 -0
  259. package/dist/ee/signals/hooks/theme-query-guards.cjs.js.map +1 -0
  260. package/dist/ee/signals/hooks/theme-query-guards.d.ts +2 -0
  261. package/dist/ee/signals/hooks/theme-query-guards.es.js +14 -0
  262. package/dist/ee/signals/hooks/theme-query-guards.es.js.map +1 -0
  263. package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js +19 -0
  264. package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js.map +1 -0
  265. package/dist/ee/signals/hooks/use-entity-learning-progress.d.ts +2 -0
  266. package/dist/ee/signals/hooks/use-entity-learning-progress.es.js +15 -0
  267. package/dist/ee/signals/hooks/use-entity-learning-progress.es.js.map +1 -0
  268. package/dist/ee/signals/hooks/use-noise-examples.cjs.js +32 -0
  269. package/dist/ee/signals/hooks/use-noise-examples.cjs.js.map +1 -0
  270. package/dist/ee/signals/hooks/use-noise-examples.d.ts +2 -0
  271. package/dist/ee/signals/hooks/use-noise-examples.es.js +28 -0
  272. package/dist/ee/signals/hooks/use-noise-examples.es.js.map +1 -0
  273. package/dist/ee/signals/hooks/use-noise.cjs.js +22 -0
  274. package/dist/ee/signals/hooks/use-noise.cjs.js.map +1 -0
  275. package/dist/ee/signals/hooks/use-noise.d.ts +2 -0
  276. package/dist/ee/signals/hooks/use-noise.es.js +18 -0
  277. package/dist/ee/signals/hooks/use-noise.es.js.map +1 -0
  278. package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js +22 -0
  279. package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js.map +1 -0
  280. package/dist/ee/signals/hooks/use-snapshot-playback.d.ts +2 -0
  281. package/dist/ee/signals/hooks/use-snapshot-playback.es.js +18 -0
  282. package/dist/ee/signals/hooks/use-snapshot-playback.es.js.map +1 -0
  283. package/dist/ee/signals/hooks/use-theme-detail.cjs.js +27 -0
  284. package/dist/ee/signals/hooks/use-theme-detail.cjs.js.map +1 -0
  285. package/dist/ee/signals/hooks/use-theme-detail.d.ts +2 -0
  286. package/dist/ee/signals/hooks/use-theme-detail.es.js +23 -0
  287. package/dist/ee/signals/hooks/use-theme-detail.es.js.map +1 -0
  288. package/dist/ee/signals/hooks/use-theme-entities.cjs.js +18 -0
  289. package/dist/ee/signals/hooks/use-theme-entities.cjs.js.map +1 -0
  290. package/dist/ee/signals/hooks/use-theme-entities.d.ts +2 -0
  291. package/dist/ee/signals/hooks/use-theme-entities.es.js +14 -0
  292. package/dist/ee/signals/hooks/use-theme-entities.es.js.map +1 -0
  293. package/dist/ee/signals/hooks/use-theme-examples.cjs.js +40 -0
  294. package/dist/ee/signals/hooks/use-theme-examples.cjs.js.map +1 -0
  295. package/dist/ee/signals/hooks/use-theme-examples.d.ts +2 -0
  296. package/dist/ee/signals/hooks/use-theme-examples.es.js +36 -0
  297. package/dist/ee/signals/hooks/use-theme-examples.es.js.map +1 -0
  298. package/dist/ee/signals/hooks/use-theme-flow.cjs.js +23 -0
  299. package/dist/ee/signals/hooks/use-theme-flow.cjs.js.map +1 -0
  300. package/dist/ee/signals/hooks/use-theme-flow.d.ts +2 -0
  301. package/dist/ee/signals/hooks/use-theme-flow.es.js +19 -0
  302. package/dist/ee/signals/hooks/use-theme-flow.es.js.map +1 -0
  303. package/dist/ee/signals/hooks/use-theme-flows.cjs.js +22 -0
  304. package/dist/ee/signals/hooks/use-theme-flows.cjs.js.map +1 -0
  305. package/dist/ee/signals/hooks/use-theme-flows.d.ts +2 -0
  306. package/dist/ee/signals/hooks/use-theme-flows.es.js +18 -0
  307. package/dist/ee/signals/hooks/use-theme-flows.es.js.map +1 -0
  308. package/dist/ee/signals/hooks/use-theme-history.cjs.js +20 -0
  309. package/dist/ee/signals/hooks/use-theme-history.cjs.js.map +1 -0
  310. package/dist/ee/signals/hooks/use-theme-history.d.ts +2 -0
  311. package/dist/ee/signals/hooks/use-theme-history.es.js +16 -0
  312. package/dist/ee/signals/hooks/use-theme-history.es.js.map +1 -0
  313. package/dist/ee/signals/hooks/use-theme-paths.cjs.js +21 -0
  314. package/dist/ee/signals/hooks/use-theme-paths.cjs.js.map +1 -0
  315. package/dist/ee/signals/hooks/use-theme-paths.d.ts +2 -0
  316. package/dist/ee/signals/hooks/use-theme-paths.es.js +17 -0
  317. package/dist/ee/signals/hooks/use-theme-paths.es.js.map +1 -0
  318. package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js +22 -0
  319. package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js.map +1 -0
  320. package/dist/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
  321. package/dist/ee/signals/hooks/use-theme-snapshots.es.js +18 -0
  322. package/dist/ee/signals/hooks/use-theme-snapshots.es.js.map +1 -0
  323. package/dist/ee/signals/hooks/use-trace-insight.cjs.js +21 -0
  324. package/dist/ee/signals/hooks/use-trace-insight.cjs.js.map +1 -0
  325. package/dist/ee/signals/hooks/use-trace-insight.d.ts +2 -0
  326. package/dist/ee/signals/hooks/use-trace-insight.es.js +17 -0
  327. package/dist/ee/signals/hooks/use-trace-insight.es.js.map +1 -0
  328. package/dist/ee/signals/hooks.cjs.js +30 -0
  329. package/dist/ee/signals/hooks.cjs.js.map +1 -0
  330. package/dist/ee/signals/hooks.d.ts +2 -0
  331. package/dist/ee/signals/hooks.es.js +12 -0
  332. package/dist/ee/signals/hooks.es.js.map +1 -0
  333. package/dist/ee/signals/lifeline-point.cjs.js +73 -0
  334. package/dist/ee/signals/lifeline-point.cjs.js.map +1 -0
  335. package/dist/ee/signals/lifeline-point.d.ts +2 -0
  336. package/dist/ee/signals/lifeline-point.es.js +69 -0
  337. package/dist/ee/signals/lifeline-point.es.js.map +1 -0
  338. package/dist/ee/signals/lifeline-row.cjs.js +118 -0
  339. package/dist/ee/signals/lifeline-row.cjs.js.map +1 -0
  340. package/dist/ee/signals/lifeline-row.d.ts +2 -0
  341. package/dist/ee/signals/lifeline-row.es.js +114 -0
  342. package/dist/ee/signals/lifeline-row.es.js.map +1 -0
  343. package/dist/ee/signals/noise-detail-panel.cjs.js +96 -0
  344. package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -0
  345. package/dist/ee/signals/noise-detail-panel.d.ts +2 -0
  346. package/dist/ee/signals/noise-detail-panel.es.js +92 -0
  347. package/dist/ee/signals/noise-detail-panel.es.js.map +1 -0
  348. package/dist/ee/signals/sankey-signals-data.cjs.js +138 -0
  349. package/dist/ee/signals/sankey-signals-data.cjs.js.map +1 -0
  350. package/dist/ee/signals/sankey-signals-data.d.ts +2 -0
  351. package/dist/ee/signals/sankey-signals-data.es.js +127 -0
  352. package/dist/ee/signals/sankey-signals-data.es.js.map +1 -0
  353. package/dist/ee/signals/sankey-signals.cjs.js +367 -0
  354. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -0
  355. package/dist/ee/signals/sankey-signals.d.ts +2 -0
  356. package/dist/ee/signals/sankey-signals.es.js +363 -0
  357. package/dist/ee/signals/sankey-signals.es.js.map +1 -0
  358. package/dist/ee/signals/signal-delta-column.cjs.js +90 -0
  359. package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -0
  360. package/dist/ee/signals/signal-delta-column.d.ts +2 -0
  361. package/dist/ee/signals/signal-delta-column.es.js +86 -0
  362. package/dist/ee/signals/signal-delta-column.es.js.map +1 -0
  363. package/dist/ee/signals/signal-formatting.cjs.js +83 -0
  364. package/dist/ee/signals/signal-formatting.cjs.js.map +1 -0
  365. package/dist/ee/signals/signal-formatting.d.ts +2 -0
  366. package/dist/ee/signals/signal-formatting.es.js +70 -0
  367. package/dist/ee/signals/signal-formatting.es.js.map +1 -0
  368. package/dist/ee/signals/signal-lifelines.cjs.js +69 -0
  369. package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -0
  370. package/dist/ee/signals/signal-lifelines.d.ts +2 -0
  371. package/dist/ee/signals/signal-lifelines.es.js +65 -0
  372. package/dist/ee/signals/signal-lifelines.es.js.map +1 -0
  373. package/dist/ee/signals/signals-error-state.cjs.js +28 -0
  374. package/dist/ee/signals/signals-error-state.cjs.js.map +1 -0
  375. package/dist/ee/signals/signals-error-state.d.ts +2 -0
  376. package/dist/ee/signals/signals-error-state.es.js +24 -0
  377. package/dist/ee/signals/signals-error-state.es.js.map +1 -0
  378. package/dist/ee/signals/signals-loading-skeleton.cjs.js +57 -0
  379. package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -0
  380. package/dist/ee/signals/signals-loading-skeleton.d.ts +2 -0
  381. package/dist/ee/signals/signals-loading-skeleton.es.js +52 -0
  382. package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -0
  383. package/dist/ee/signals/snapshot-timeline-data.cjs.js +40 -0
  384. package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -0
  385. package/dist/ee/signals/snapshot-timeline-data.d.ts +2 -0
  386. package/dist/ee/signals/snapshot-timeline-data.es.js +34 -0
  387. package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -0
  388. package/dist/ee/signals/snapshot-timeline.cjs.js +109 -0
  389. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -0
  390. package/dist/ee/signals/snapshot-timeline.d.ts +2 -0
  391. package/dist/ee/signals/snapshot-timeline.es.js +104 -0
  392. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -0
  393. package/dist/ee/signals/sortable-signal-headers.cjs.js +145 -0
  394. package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -0
  395. package/dist/ee/signals/sortable-signal-headers.d.ts +2 -0
  396. package/dist/ee/signals/sortable-signal-headers.es.js +141 -0
  397. package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -0
  398. package/dist/ee/signals/theme-compare-data.cjs.js +46 -0
  399. package/dist/ee/signals/theme-compare-data.cjs.js.map +1 -0
  400. package/dist/ee/signals/theme-compare-data.d.ts +2 -0
  401. package/dist/ee/signals/theme-compare-data.es.js +41 -0
  402. package/dist/ee/signals/theme-compare-data.es.js.map +1 -0
  403. package/dist/ee/signals/theme-compare-sparkline.cjs.js +67 -0
  404. package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -0
  405. package/dist/ee/signals/theme-compare-sparkline.d.ts +2 -0
  406. package/dist/ee/signals/theme-compare-sparkline.es.js +63 -0
  407. package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -0
  408. package/dist/ee/signals/theme-compare.cjs.js +103 -0
  409. package/dist/ee/signals/theme-compare.cjs.js.map +1 -0
  410. package/dist/ee/signals/theme-compare.d.ts +2 -0
  411. package/dist/ee/signals/theme-compare.es.js +99 -0
  412. package/dist/ee/signals/theme-compare.es.js.map +1 -0
  413. package/dist/ee/signals/theme-detail-panel.cjs.js +171 -0
  414. package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -0
  415. package/dist/ee/signals/theme-detail-panel.d.ts +2 -0
  416. package/dist/ee/signals/theme-detail-panel.es.js +167 -0
  417. package/dist/ee/signals/theme-detail-panel.es.js.map +1 -0
  418. package/dist/ee/signals/theme-drilldown-data.cjs.js +115 -0
  419. package/dist/ee/signals/theme-drilldown-data.cjs.js.map +1 -0
  420. package/dist/ee/signals/theme-drilldown-data.d.ts +2 -0
  421. package/dist/ee/signals/theme-drilldown-data.es.js +109 -0
  422. package/dist/ee/signals/theme-drilldown-data.es.js.map +1 -0
  423. package/dist/ee/signals/theme-filter-banner.cjs.js +64 -0
  424. package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -0
  425. package/dist/ee/signals/theme-filter-banner.d.ts +2 -0
  426. package/dist/ee/signals/theme-filter-banner.es.js +60 -0
  427. package/dist/ee/signals/theme-filter-banner.es.js.map +1 -0
  428. package/dist/ee/signals/theme-lifelines-data.cjs.js +62 -0
  429. package/dist/ee/signals/theme-lifelines-data.cjs.js.map +1 -0
  430. package/dist/ee/signals/theme-lifelines-data.d.ts +2 -0
  431. package/dist/ee/signals/theme-lifelines-data.es.js +56 -0
  432. package/dist/ee/signals/theme-lifelines-data.es.js.map +1 -0
  433. package/dist/ee/signals/theme-lifelines.cjs.js +75 -0
  434. package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -0
  435. package/dist/ee/signals/theme-lifelines.d.ts +2 -0
  436. package/dist/ee/signals/theme-lifelines.es.js +71 -0
  437. package/dist/ee/signals/theme-lifelines.es.js.map +1 -0
  438. package/dist/ee/signals/theme-trend-chart.cjs.js +83 -0
  439. package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -0
  440. package/dist/ee/signals/theme-trend-chart.d.ts +2 -0
  441. package/dist/ee/signals/theme-trend-chart.es.js +79 -0
  442. package/dist/ee/signals/theme-trend-chart.es.js.map +1 -0
  443. package/dist/ee/signals/theme-trend.cjs.js +27 -0
  444. package/dist/ee/signals/theme-trend.cjs.js.map +1 -0
  445. package/dist/ee/signals/theme-trend.d.ts +2 -0
  446. package/dist/ee/signals/theme-trend.es.js +22 -0
  447. package/dist/ee/signals/theme-trend.es.js.map +1 -0
  448. package/dist/ee/signals/trace-insight-view.cjs.js +89 -0
  449. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -0
  450. package/dist/ee/signals/trace-insight-view.d.ts +2 -0
  451. package/dist/ee/signals/trace-insight-view.es.js +85 -0
  452. package/dist/ee/signals/trace-insight-view.es.js.map +1 -0
  453. package/dist/ee/signals/trace-intelligence-context.cjs.js +24 -0
  454. package/dist/ee/signals/trace-intelligence-context.cjs.js.map +1 -0
  455. package/dist/ee/signals/trace-intelligence-context.d.ts +2 -0
  456. package/dist/ee/signals/trace-intelligence-context.es.js +19 -0
  457. package/dist/ee/signals/trace-intelligence-context.es.js.map +1 -0
  458. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +45 -0
  459. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -0
  460. package/dist/ee/signals/trace-intelligence-explainer.d.ts +2 -0
  461. package/dist/ee/signals/trace-intelligence-explainer.es.js +41 -0
  462. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -0
  463. package/dist/ee/signals/trace-intelligence-provider.cjs.js +19 -0
  464. package/dist/ee/signals/trace-intelligence-provider.cjs.js.map +1 -0
  465. package/dist/ee/signals/trace-intelligence-provider.d.ts +2 -0
  466. package/dist/ee/signals/trace-intelligence-provider.es.js +15 -0
  467. package/dist/ee/signals/trace-intelligence-provider.es.js.map +1 -0
  468. package/dist/ee/signals/types.cjs.js +3 -0
  469. package/dist/ee/signals/types.cjs.js.map +1 -0
  470. package/dist/ee/signals/types.d.ts +2 -0
  471. package/dist/ee/signals/types.es.js +2 -0
  472. package/dist/ee/signals/types.es.js.map +1 -0
  473. package/dist/ee/signals/use-trace-intelligence.cjs.js +13 -0
  474. package/dist/ee/signals/use-trace-intelligence.cjs.js.map +1 -0
  475. package/dist/ee/signals/use-trace-intelligence.d.ts +2 -0
  476. package/dist/ee/signals/use-trace-intelligence.es.js +9 -0
  477. package/dist/ee/signals/use-trace-intelligence.es.js.map +1 -0
  478. package/dist/ee/signals/view-mode-tab.cjs.js +18 -0
  479. package/dist/ee/signals/view-mode-tab.cjs.js.map +1 -0
  480. package/dist/ee/signals/view-mode-tab.d.ts +2 -0
  481. package/dist/ee/signals/view-mode-tab.es.js +14 -0
  482. package/dist/ee/signals/view-mode-tab.es.js.map +1 -0
  483. package/dist/ee/signals.cjs.js +38 -0
  484. package/dist/ee/signals.cjs.js.map +1 -1
  485. package/dist/ee/signals.es.js +18 -0
  486. package/dist/ee/signals.es.js.map +1 -1
  487. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  488. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  489. package/dist/{hover-card-crVofiZO.js → hover-card-Bs845QbV.js} +2 -2
  490. package/dist/{hover-card-crVofiZO.js.map → hover-card-Bs845QbV.js.map} +1 -1
  491. package/dist/{hover-card-Bx258om1.cjs → hover-card-Cd9QK50X.cjs} +2 -2
  492. package/dist/{hover-card-Bx258om1.cjs.map → hover-card-Cd9QK50X.cjs.map} +1 -1
  493. package/dist/{input-group-CH72YUVL.cjs → input-group-BTaw3Ycd.cjs} +2 -2
  494. package/dist/{input-group-CH72YUVL.cjs.map → input-group-BTaw3Ycd.cjs.map} +1 -1
  495. package/dist/{input-group-Dzs-ai0n.js → input-group-CWT_IwX0.js} +2 -2
  496. package/dist/{input-group-Dzs-ai0n.js.map → input-group-CWT_IwX0.js.map} +1 -1
  497. package/dist/{markdown-renderer-Bi2fWeoF.js → markdown-renderer-DszxuuNM.js} +36 -18
  498. package/dist/markdown-renderer-DszxuuNM.js.map +1 -0
  499. package/dist/{markdown-renderer-DwfNrhEH.cjs → markdown-renderer-g8xNLOc0.cjs} +36 -18
  500. package/dist/markdown-renderer-g8xNLOc0.cjs.map +1 -0
  501. package/dist/{message-scroller-BmzjZZNs.cjs → message-scroller-BssU0EKT.cjs} +89 -16
  502. package/dist/message-scroller-BssU0EKT.cjs.map +1 -0
  503. package/dist/{message-scroller-D5O7sUS5.js → message-scroller-DlVS0FW7.js} +89 -16
  504. package/dist/message-scroller-DlVS0FW7.js.map +1 -0
  505. package/dist/{property-filter-applied-DI4w1ACS.js → property-filter-applied-C2teL4uw.js} +3 -3
  506. package/dist/{property-filter-applied-DI4w1ACS.js.map → property-filter-applied-C2teL4uw.js.map} +1 -1
  507. package/dist/{property-filter-applied-BhxbHAN8.cjs → property-filter-applied-ChK5XtsC.cjs} +3 -3
  508. package/dist/{property-filter-applied-BhxbHAN8.cjs.map → property-filter-applied-ChK5XtsC.cjs.map} +1 -1
  509. package/dist/resize/panel-drawer.cjs.js +1 -1
  510. package/dist/resize/panel-drawer.es.js +1 -1
  511. package/dist/sankey-chart-Bp-DrL1q.cjs +925 -0
  512. package/dist/sankey-chart-Bp-DrL1q.cjs.map +1 -0
  513. package/dist/sankey-chart-zhW_F0Rm.js +915 -0
  514. package/dist/sankey-chart-zhW_F0Rm.js.map +1 -0
  515. package/dist/{search-field-block-DCnFZzRK.js → search-field-block-D0PBxCxK.js} +2 -2
  516. package/dist/{search-field-block-DCnFZzRK.js.map → search-field-block-D0PBxCxK.js.map} +1 -1
  517. package/dist/{search-field-block-D6TdrHZX.cjs → search-field-block-D4vuLoZI.cjs} +2 -2
  518. package/dist/{search-field-block-D6TdrHZX.cjs.map → search-field-block-D4vuLoZI.cjs.map} +1 -1
  519. package/dist/{select-Beo8qQ0e.js → select-B_E0ADD5.js} +2 -2
  520. package/dist/{select-Beo8qQ0e.js.map → select-B_E0ADD5.js.map} +1 -1
  521. package/dist/{select-B6ce20XX.cjs → select-OAXqZLkC.cjs} +2 -2
  522. package/dist/{select-B6ce20XX.cjs.map → select-OAXqZLkC.cjs.map} +1 -1
  523. package/dist/{select-field-block-svlHplxW.cjs → select-field-block-BN9oU5B5.cjs} +2 -2
  524. package/dist/{select-field-block-svlHplxW.cjs.map → select-field-block-BN9oU5B5.cjs.map} +1 -1
  525. package/dist/{select-field-block-DXw3tD0y.js → select-field-block-D1Na8gZW.js} +2 -2
  526. package/dist/{select-field-block-DXw3tD0y.js.map → select-field-block-D1Na8gZW.js.map} +1 -1
  527. package/dist/src/domains/traces/hooks/use-entity-names.d.ts +2 -1
  528. package/dist/src/ds/components/ChatShell/chat-shell.d.ts +9 -6
  529. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +13 -2
  530. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +2 -2
  531. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +3 -1
  532. package/dist/src/ds/components/SankeyChart/sankey-chart.d.ts +7 -2
  533. package/dist/src/ds/components/SankeyChart/sankey-portal-tooltip.d.ts +8 -0
  534. package/dist/src/ds/components/SankeyChart/use-sankey-geometry-transition.d.ts +11 -0
  535. package/dist/src/ds/components/SankeyChart/use-sankey-hover-tooltip.d.ts +15 -0
  536. package/dist/src/ds/components/ThreadRail/thread-rail-turns.d.ts +2 -0
  537. package/dist/src/ee/signals/entity-learning-api.d.ts +13 -0
  538. package/dist/src/ee/signals/examples-pager.d.ts +7 -0
  539. package/dist/src/ee/signals/flow-card.d.ts +14 -0
  540. package/dist/src/ee/signals/hooks/index.d.ts +11 -0
  541. package/dist/src/ee/signals/hooks/theme-query-guards.d.ts +3 -0
  542. package/dist/src/ee/signals/hooks/use-entity-learning-progress.d.ts +1 -0
  543. package/dist/src/ee/signals/hooks/use-noise-examples.d.ts +2 -0
  544. package/dist/src/ee/signals/hooks/use-noise.d.ts +2 -0
  545. package/dist/src/ee/signals/hooks/use-snapshot-playback.d.ts +9 -0
  546. package/dist/src/ee/signals/hooks/use-theme-detail.d.ts +2 -0
  547. package/dist/src/ee/signals/hooks/use-theme-entities.d.ts +1 -0
  548. package/dist/src/ee/signals/hooks/use-theme-examples.d.ts +2 -0
  549. package/dist/src/ee/signals/hooks/use-theme-flow.d.ts +2 -0
  550. package/dist/src/ee/signals/hooks/use-theme-flows.d.ts +2 -0
  551. package/dist/src/ee/signals/hooks/use-theme-history.d.ts +2 -0
  552. package/dist/src/ee/signals/hooks/use-theme-paths.d.ts +2 -0
  553. package/dist/src/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
  554. package/dist/src/ee/signals/hooks/use-trace-insight.d.ts +1 -0
  555. package/dist/src/ee/signals/index.d.ts +9 -0
  556. package/dist/src/ee/signals/lifeline-point.d.ts +8 -0
  557. package/dist/src/ee/signals/lifeline-row.d.ts +11 -0
  558. package/dist/src/ee/signals/noise-detail-panel.d.ts +10 -0
  559. package/dist/src/ee/signals/sankey-signals-data.d.ts +41 -0
  560. package/dist/src/ee/signals/sankey-signals.d.ts +12 -0
  561. package/dist/src/ee/signals/signal-delta-column.d.ts +12 -0
  562. package/dist/src/ee/signals/signal-formatting.d.ts +15 -0
  563. package/dist/src/ee/signals/signal-lifelines.d.ts +9 -0
  564. package/dist/src/ee/signals/signals-error-state.d.ts +5 -0
  565. package/dist/src/ee/signals/signals-loading-skeleton.d.ts +2 -0
  566. package/dist/src/ee/signals/snapshot-timeline-data.d.ts +12 -0
  567. package/dist/src/ee/signals/snapshot-timeline.d.ts +25 -0
  568. package/dist/src/ee/signals/sortable-signal-headers.d.ts +6 -0
  569. package/dist/src/ee/signals/theme-compare-data.d.ts +24 -0
  570. package/dist/src/ee/signals/theme-compare-sparkline.d.ts +5 -0
  571. package/dist/src/ee/signals/theme-compare.d.ts +17 -0
  572. package/dist/src/ee/signals/theme-detail-panel.d.ts +11 -0
  573. package/dist/src/ee/signals/theme-drilldown-data.d.ts +10 -0
  574. package/dist/src/ee/signals/theme-filter-banner.d.ts +8 -0
  575. package/dist/src/ee/signals/theme-lifelines-data.d.ts +35 -0
  576. package/dist/src/ee/signals/theme-lifelines.d.ts +17 -0
  577. package/dist/src/ee/signals/theme-trend-chart.d.ts +6 -0
  578. package/dist/src/ee/signals/theme-trend.d.ts +17 -0
  579. package/dist/src/ee/signals/trace-insight-view.d.ts +6 -0
  580. package/dist/src/ee/signals/trace-intelligence-context.d.ts +10 -0
  581. package/dist/src/ee/signals/trace-intelligence-explainer.d.ts +2 -0
  582. package/dist/src/ee/signals/trace-intelligence-provider.d.ts +11 -0
  583. package/dist/src/ee/signals/types.d.ts +1 -0
  584. package/dist/src/ee/signals/use-trace-intelligence.d.ts +1 -0
  585. package/dist/src/ee/signals/view-mode-tab.d.ts +6 -0
  586. package/dist/src/test/msw-server.d.ts +1 -0
  587. package/dist/src/test/vitest-setup.d.ts +1 -0
  588. package/dist/style.css +306 -18
  589. package/dist/tabs-root-BBPou4QC.js +69 -0
  590. package/dist/tabs-root-BBPou4QC.js.map +1 -0
  591. package/dist/tabs-root-VtBc6K2q.cjs +72 -0
  592. package/dist/tabs-root-VtBc6K2q.cjs.map +1 -0
  593. package/dist/{tabs-tab-BkUCE-4E.cjs → tabs-tab-Cq4YR31P.cjs} +2 -67
  594. package/dist/tabs-tab-Cq4YR31P.cjs.map +1 -0
  595. package/dist/{tabs-tab-DDGltcUc.js → tabs-tab-D5JTAehi.js} +6 -69
  596. package/dist/tabs-tab-D5JTAehi.js.map +1 -0
  597. package/dist/{time-picker-mLzcoQMO.js → time-picker-CkqREdQB.js} +2 -2
  598. package/dist/{time-picker-mLzcoQMO.js.map → time-picker-CkqREdQB.js.map} +1 -1
  599. package/dist/{time-picker-BOQtPoyD.cjs → time-picker-Dy2oyq8P.cjs} +2 -2
  600. package/dist/{time-picker-BOQtPoyD.cjs.map → time-picker-Dy2oyq8P.cjs.map} +1 -1
  601. package/dist/{traces-data-list-DtuaCDES.js → traces-data-list-B3wMvCfk.js} +2 -2
  602. package/dist/{traces-data-list-DtuaCDES.js.map → traces-data-list-B3wMvCfk.js.map} +1 -1
  603. package/dist/{traces-data-list-vsvvvEiP.cjs → traces-data-list-pTNo_zbS.cjs} +2 -2
  604. package/dist/{traces-data-list-vsvvvEiP.cjs.map → traces-data-list-pTNo_zbS.cjs.map} +1 -1
  605. package/package.json +8 -8
  606. package/theme.css +6 -8
  607. package/dist/Button-Bm94fEF2.cjs.map +0 -1
  608. package/dist/Button-Bx2lFdqb.js.map +0 -1
  609. package/dist/dropdown-menu-DEFygDZI.js.map +0 -1
  610. package/dist/dropdown-menu-ppWztidX.cjs.map +0 -1
  611. package/dist/markdown-renderer-Bi2fWeoF.js.map +0 -1
  612. package/dist/markdown-renderer-DwfNrhEH.cjs.map +0 -1
  613. package/dist/message-scroller-BmzjZZNs.cjs.map +0 -1
  614. package/dist/message-scroller-D5O7sUS5.js.map +0 -1
  615. package/dist/tabs-tab-BkUCE-4E.cjs.map +0 -1
  616. package/dist/tabs-tab-DDGltcUc.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import { useThemeFlows } from './hooks/use-theme-flows.es.js';
4
+ import { snapshotSummaryLabel } from './sankey-signals-data.es.js';
5
+ import { SignalDeltaColumn } from './signal-delta-column.es.js';
6
+ import { SignalsFrameLoadingSkeleton } from './signals-loading-skeleton.es.js';
7
+ import { TimelineTrack } from './snapshot-timeline.es.js';
8
+ import { timelineTickPositions } from './snapshot-timeline-data.es.js';
9
+
10
+ function ThemeCompare({
11
+ entityId,
12
+ entityType,
13
+ signalNames,
14
+ snapshots,
15
+ totalSnapshots,
16
+ onThemeSelect
17
+ }) {
18
+ const [pointIndexes, setPointIndexes] = useState();
19
+ const [grabbedPoint, setGrabbedPoint] = useState();
20
+ const lastIndex = snapshots.length - 1;
21
+ const points = [
22
+ Math.min(pointIndexes?.[0] ?? 0, lastIndex),
23
+ Math.min(pointIndexes?.[1] ?? lastIndex, lastIndex)
24
+ ];
25
+ const fromIndex = Math.min(points[0], points[1]);
26
+ const toIndex = Math.max(points[0], points[1]);
27
+ const flowQueries = useThemeFlows(
28
+ entityId,
29
+ entityType,
30
+ signalNames,
31
+ snapshots.map((snapshot) => snapshot.snapshotId)
32
+ );
33
+ const flows = flowQueries.map((query) => query.data);
34
+ const fromFlow = flows[fromIndex];
35
+ const toFlow = flows[toIndex];
36
+ const positions = timelineTickPositions(snapshots);
37
+ const fromSnapshot = snapshots[fromIndex];
38
+ const toSnapshot = snapshots[toIndex];
39
+ if (!fromSnapshot || !toSnapshot) return null;
40
+ const handleTickSelect = (index) => {
41
+ if (grabbedPoint !== void 0) {
42
+ setPointIndexes(grabbedPoint === 0 ? [index, points[1]] : [points[0], index]);
43
+ setGrabbedPoint(void 0);
44
+ return;
45
+ }
46
+ const pointAtIndex = points[0] === index ? 0 : points[1] === index ? 1 : void 0;
47
+ if (pointAtIndex !== void 0) {
48
+ setGrabbedPoint(pointAtIndex);
49
+ return;
50
+ }
51
+ const selectedPosition = positions[index];
52
+ const firstPointPosition = positions[points[0]];
53
+ const secondPointPosition = positions[points[1]];
54
+ if (selectedPosition === void 0 || firstPointPosition === void 0 || secondPointPosition === void 0) return;
55
+ const distanceToFirst = Math.abs(selectedPosition - firstPointPosition);
56
+ const distanceToSecond = Math.abs(selectedPosition - secondPointPosition);
57
+ setPointIndexes(distanceToFirst <= distanceToSecond ? [index, points[1]] : [points[0], index]);
58
+ };
59
+ const markers = /* @__PURE__ */ new Map([
60
+ [points[0], "compare-point"],
61
+ [points[1], "compare-point"]
62
+ ]);
63
+ const grabbedIndex = grabbedPoint === void 0 ? void 0 : points[grabbedPoint];
64
+ return /* @__PURE__ */ jsxs("section", { "aria-label": "Snapshot comparison", className: "space-y-4", children: [
65
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-3 px-3 py-2.5 sm:px-4", children: /* @__PURE__ */ jsx(
66
+ TimelineTrack,
67
+ {
68
+ snapshots,
69
+ totalCount: totalSnapshots,
70
+ markers,
71
+ grabbedIndex,
72
+ onTickSelect: handleTickSelect
73
+ }
74
+ ) }),
75
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5", children: [
76
+ /* @__PURE__ */ jsx("p", { className: "border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums", children: snapshotSummaryLabel(fromSnapshot, flows[fromIndex]) }),
77
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-neutral3 text-xs", children: "→" }),
78
+ /* @__PURE__ */ jsx("p", { className: "border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums", children: snapshotSummaryLabel(toSnapshot, flows[toIndex]) }),
79
+ /* @__PURE__ */ jsx("p", { className: "text-neutral3 text-xs", children: grabbedPoint === void 0 ? "Click a landmark to move the nearest point · click a point to grab it." : "Point grabbed — click a landmark to place it." })
80
+ ] }),
81
+ fromIndex === toIndex ? /* @__PURE__ */ jsx("p", { className: "border-border1 bg-surface2 text-neutral3 rounded-lg border p-6 text-sm", children: "Pick two different landmarks on the timeline to compare them." }) : !fromFlow || !toFlow ? /* @__PURE__ */ jsx(SignalsFrameLoadingSkeleton, {}) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4", children: signalNames.map((signalName) => /* @__PURE__ */ jsx(
82
+ SignalDeltaColumn,
83
+ {
84
+ signalName,
85
+ fromFlow,
86
+ toFlow,
87
+ flows,
88
+ positions,
89
+ fromIndex,
90
+ toIndex,
91
+ onThemeSelect
92
+ },
93
+ signalName
94
+ )) })
95
+ ] });
96
+ }
97
+
98
+ export { ThemeCompare };
99
+ //# sourceMappingURL=theme-compare.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-compare.es.js","sources":["../../../src/ee/signals/theme-compare.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { useThemeFlows } from './hooks/use-theme-flows';\nimport { snapshotSummaryLabel } from './sankey-signals-data';\nimport { SignalDeltaColumn } from './signal-delta-column';\nimport { SignalsFrameLoadingSkeleton } from './signals-loading-skeleton';\nimport { TimelineTrack } from './snapshot-timeline';\nimport type { TimelineMarkerKind } from './snapshot-timeline';\nimport { timelineTickPositions } from './snapshot-timeline-data';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport type { ThemeSnapshot, TraceSignalName } from './types';\n\n/**\n * Compare mode: two interchangeable points on the shared time axis show how\n * each signal's theme mix moved between them (always read earlier → later),\n * with per-theme sparklines across every landmark in range. Clicking an\n * unmarked landmark moves the nearest point; clicking a marked landmark grabs\n * that point so the next click moves it specifically.\n */\nexport function ThemeCompare({\n entityId,\n entityType,\n signalNames,\n snapshots,\n totalSnapshots,\n onThemeSelect,\n}: {\n entityId: string;\n entityType: string;\n signalNames: TraceSignalName[];\n snapshots: ThemeSnapshot[];\n totalSnapshots: number;\n onThemeSelect: (selection: ThemeSelection, snapshotIndex: number) => void;\n}) {\n const [pointIndexes, setPointIndexes] = useState<[number, number]>();\n const [grabbedPoint, setGrabbedPoint] = useState<0 | 1>();\n const lastIndex = snapshots.length - 1;\n const points: [number, number] = [\n Math.min(pointIndexes?.[0] ?? 0, lastIndex),\n Math.min(pointIndexes?.[1] ?? lastIndex, lastIndex),\n ];\n // Compare always reads earlier → later regardless of which point moved last.\n const fromIndex = Math.min(points[0], points[1]);\n const toIndex = Math.max(points[0], points[1]);\n const flowQueries = useThemeFlows(\n entityId,\n entityType,\n signalNames,\n snapshots.map(snapshot => snapshot.snapshotId),\n );\n const flows = flowQueries.map(query => query.data);\n const fromFlow = flows[fromIndex];\n const toFlow = flows[toIndex];\n const positions = timelineTickPositions(snapshots);\n const fromSnapshot = snapshots[fromIndex];\n const toSnapshot = snapshots[toIndex];\n\n if (!fromSnapshot || !toSnapshot) return null;\n\n // The two points are interchangeable: an unmarked tick moves whichever\n // point is nearest on the track; a marked tick grabs that point so the next\n // click moves it specifically (covers moving a point past the other).\n const handleTickSelect = (index: number) => {\n if (grabbedPoint !== undefined) {\n setPointIndexes(grabbedPoint === 0 ? [index, points[1]] : [points[0], index]);\n setGrabbedPoint(undefined);\n return;\n }\n const pointAtIndex = points[0] === index ? 0 : points[1] === index ? 1 : undefined;\n if (pointAtIndex !== undefined) {\n setGrabbedPoint(pointAtIndex);\n return;\n }\n const selectedPosition = positions[index];\n const firstPointPosition = positions[points[0]];\n const secondPointPosition = positions[points[1]];\n if (selectedPosition === undefined || firstPointPosition === undefined || secondPointPosition === undefined) return;\n\n const distanceToFirst = Math.abs(selectedPosition - firstPointPosition);\n const distanceToSecond = Math.abs(selectedPosition - secondPointPosition);\n setPointIndexes(distanceToFirst <= distanceToSecond ? [index, points[1]] : [points[0], index]);\n };\n\n const markers = new Map<number, TimelineMarkerKind>([\n [points[0], 'compare-point'],\n [points[1], 'compare-point'],\n ]);\n const grabbedIndex = grabbedPoint === undefined ? undefined : points[grabbedPoint];\n\n return (\n <section aria-label=\"Snapshot comparison\" className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3 px-3 py-2.5 sm:px-4\">\n <TimelineTrack\n snapshots={snapshots}\n totalCount={totalSnapshots}\n markers={markers}\n grabbedIndex={grabbedIndex}\n onTickSelect={handleTickSelect}\n />\n </div>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1.5\">\n <p className=\"border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums\">\n {snapshotSummaryLabel(fromSnapshot, flows[fromIndex])}\n </p>\n <span aria-hidden=\"true\" className=\"text-neutral3 text-xs\">\n →\n </span>\n <p className=\"border-border1 text-neutral4 rounded-md border px-2 py-1 font-mono text-xs tabular-nums\">\n {snapshotSummaryLabel(toSnapshot, flows[toIndex])}\n </p>\n <p className=\"text-neutral3 text-xs\">\n {grabbedPoint === undefined\n ? 'Click a landmark to move the nearest point · click a point to grab it.'\n : 'Point grabbed — click a landmark to place it.'}\n </p>\n </div>\n {fromIndex === toIndex ? (\n <p className=\"border-border1 bg-surface2 text-neutral3 rounded-lg border p-6 text-sm\">\n Pick two different landmarks on the timeline to compare them.\n </p>\n ) : !fromFlow || !toFlow ? (\n <SignalsFrameLoadingSkeleton />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4\">\n {signalNames.map(signalName => (\n <SignalDeltaColumn\n key={signalName}\n signalName={signalName}\n fromFlow={fromFlow}\n toFlow={toFlow}\n flows={flows}\n positions={positions}\n fromIndex={fromIndex}\n toIndex={toIndex}\n onThemeSelect={onThemeSelect}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const jsxRuntime = require('react/jsx-runtime');
6
+ const React = require('react');
7
+ const ee_signals_examplesPager = require('./examples-pager.cjs.js');
8
+ require('@tanstack/react-query');
9
+ require('./trace-intelligence-context.cjs.js');
10
+ const ee_signals_hooks_useThemeDetail = require('./hooks/use-theme-detail.cjs.js');
11
+ const ee_signals_hooks_useThemeExamples = require('./hooks/use-theme-examples.cjs.js');
12
+ const ee_signals_hooks_useThemeHistory = require('./hooks/use-theme-history.cjs.js');
13
+ const ee_signals_signalColors = require('./signal-colors.cjs.js');
14
+ const ee_signals_signalFormatting = require('./signal-formatting.cjs.js');
15
+ const ee_signals_themeTrend = require('./theme-trend.cjs.js');
16
+ const ee_signals_themeTrendChart = require('./theme-trend-chart.cjs.js');
17
+ const ee_signals_traceInsightView = require('./trace-insight-view.cjs.js');
18
+ const drawer = require('../../drawer-CNnvBMfD.cjs');
19
+ const sankeyColor = require('../../sankeyColor-DONd5cg9.cjs');
20
+ const tooltip = require('../../tooltip-CLz5PtEE.cjs');
21
+
22
+ function ThemeDetailPanel({
23
+ entityId,
24
+ entityType,
25
+ snapshotId,
26
+ snapshotTotal,
27
+ selection,
28
+ onClose
29
+ }) {
30
+ const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ""}:${selection?.themeId ?? ""}`;
31
+ const [examplesPage, setExamplesPage] = React.useState(() => ({ contextKey: examplesContextKey, offset: 0 }));
32
+ const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;
33
+ const [insightTraceId, setInsightTraceId] = React.useState();
34
+ const detailQuery = ee_signals_hooks_useThemeDetail.useThemeDetail(
35
+ entityId,
36
+ entityType,
37
+ selection?.signalName ?? "goal",
38
+ snapshotId,
39
+ selection?.themeId
40
+ );
41
+ const examplesQuery = ee_signals_hooks_useThemeExamples.useThemeExamples(
42
+ entityId,
43
+ entityType,
44
+ selection?.signalName ?? "goal",
45
+ snapshotId,
46
+ selection?.themeId,
47
+ ee_signals_examplesPager.EXAMPLES_PAGE_SIZE,
48
+ examplesOffset
49
+ );
50
+ const historyQuery = ee_signals_hooks_useThemeHistory.useThemeHistory(
51
+ entityId,
52
+ entityType,
53
+ selection?.signalName ?? "goal",
54
+ snapshotTotal > 1 ? selection?.themeId : void 0
55
+ );
56
+ const title = detailQuery.data?.theme?.label ?? selection?.label ?? "Theme details";
57
+ const signalName = selection?.signalName;
58
+ const historyPoints = historyQuery.data ? ee_signals_themeTrend.chronologicalHistoryPoints(historyQuery.data.points) : [];
59
+ const oldestHistoryPoint = historyPoints[0];
60
+ return /* @__PURE__ */ jsxRuntime.jsx(
61
+ drawer.Drawer,
62
+ {
63
+ onOpenChange: (open) => {
64
+ if (!open) {
65
+ setExamplesPage({ contextKey: "", offset: 0 });
66
+ setInsightTraceId(void 0);
67
+ onClose();
68
+ }
69
+ },
70
+ open: selection !== void 0,
71
+ overlay: "none",
72
+ side: "right",
73
+ variant: "floating",
74
+ children: /* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerContent, { children: [
75
+ /* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerHeader, { className: "border-border1 border-b", children: [
76
+ signalName !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
77
+ "span",
78
+ {
79
+ className: "font-mono text-xs font-semibold tracking-widest",
80
+ style: { color: sankeyColor.nodeColor(ee_signals_signalColors.getSignalHue(signalName)) },
81
+ children: /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
82
+ /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipTrigger, { className: "cursor-default uppercase", children: signalName }),
83
+ /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { children: ee_signals_signalFormatting.SIGNAL_DESCRIPTIONS[signalName] })
84
+ ] })
85
+ }
86
+ ),
87
+ /* @__PURE__ */ jsxRuntime.jsx(drawer.DrawerTitle, { children: title }),
88
+ /* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerDescription, { className: "sr-only", children: [
89
+ "Details for the ",
90
+ signalName ?? "selected",
91
+ " theme ",
92
+ title
93
+ ] })
94
+ ] }),
95
+ /* @__PURE__ */ jsxRuntime.jsxs(drawer.DrawerBody, { className: "grid content-start gap-6 overflow-y-auto p-6", children: [
96
+ insightTraceId !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(ee_signals_traceInsightView.TraceInsightView, { traceId: insightTraceId, onBack: () => setInsightTraceId(void 0) }),
97
+ insightTraceId === void 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
98
+ detailQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 text-sm", children: "Loading theme details…" }),
99
+ detailQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-500", children: "Unable to load theme details." }),
100
+ detailQuery.data && !detailQuery.data.theme && /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
101
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-neutral6 text-sm font-semibold", children: "Not present in this snapshot" }),
102
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-2 text-sm", children: "This theme has no data in the selected snapshot." })
103
+ ] }),
104
+ detailQuery.data?.theme && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
105
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-summary-heading", children: [
106
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { id: "theme-summary-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Summary" }),
107
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral5 mt-3 text-sm", children: detailQuery.data.theme.description ?? "No description available." }),
108
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral5 mt-3 font-mono text-sm tabular-nums", children: ee_signals_signalFormatting.shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage) })
109
+ ] }),
110
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-examples-heading", children: [
111
+ /* @__PURE__ */ jsxRuntime.jsx(
112
+ "h2",
113
+ {
114
+ id: "theme-examples-heading",
115
+ className: "text-neutral3 font-mono text-xs tracking-wider uppercase",
116
+ children: "Examples"
117
+ }
118
+ ),
119
+ examplesQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading examples…" }),
120
+ examplesQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load examples." }),
121
+ examplesQuery.data && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
122
+ examplesQuery.data.examples.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "No examples in this snapshot." }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-3 space-y-3", children: examplesQuery.data.examples.map((example) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ "aria-label": `View trace insight for ${example.signalText}`,
127
+ className: "border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm",
128
+ onClick: () => setInsightTraceId(example.traceId),
129
+ children: example.signalText
130
+ }
131
+ ) }, example.traceId)) }),
132
+ /* @__PURE__ */ jsxRuntime.jsx(
133
+ ee_signals_examplesPager.ExamplesPager,
134
+ {
135
+ traceCount: detailQuery.data.theme.traceCount,
136
+ offset: examplesOffset,
137
+ onOffsetChange: (offset) => setExamplesPage({ contextKey: examplesContextKey, offset })
138
+ }
139
+ )
140
+ ] })
141
+ ] }),
142
+ snapshotTotal > 1 && /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-labelledby": "theme-trend-heading", children: [
143
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { id: "theme-trend-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Trend" }),
144
+ historyQuery.isPending && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading trend…" }),
145
+ historyQuery.isError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load the trend." }),
146
+ oldestHistoryPoint !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
147
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-neutral5 mt-3 text-sm", children: [
148
+ historyQuery.data?.nextCursor ? `Active since at least ${ee_signals_signalFormatting.formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots` : `First seen ${ee_signals_signalFormatting.formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? "snapshot" : "snapshots"}`,
149
+ " ",
150
+ "· ",
151
+ ee_signals_themeTrend.themeTrendDirection(historyPoints)
152
+ ] }),
153
+ historyPoints.length >= 2 && /* @__PURE__ */ jsxRuntime.jsx(
154
+ ee_signals_themeTrendChart.ThemeTrendChart,
155
+ {
156
+ points: historyPoints,
157
+ color: sankeyColor.nodeColor(ee_signals_signalColors.getSignalHue(signalName ?? "goal"))
158
+ }
159
+ )
160
+ ] })
161
+ ] })
162
+ ] })
163
+ ] })
164
+ ] })
165
+ ] })
166
+ }
167
+ );
168
+ }
169
+
170
+ exports.ThemeDetailPanel = ThemeDetailPanel;
171
+ //# sourceMappingURL=theme-detail-panel.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-detail-panel.cjs.js","sources":["../../../src/ee/signals/theme-detail-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager';\nimport { useThemeDetail, useThemeExamples, useThemeHistory } from './hooks';\nimport { getSignalHue } from './signal-colors';\nimport { formatSnapshotDate, shareSentence, SIGNAL_DESCRIPTIONS } from './signal-formatting';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend';\nimport { ThemeTrendChart } from './theme-trend-chart';\nimport { TraceInsightView } from './trace-insight-view';\nimport {\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n} from '@/ds/components/Drawer';\nimport { nodeColor } from '@/ds/components/SankeyChart';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\n\ninterface ThemeDetailPanelProps {\n entityId: string;\n entityType: string;\n snapshotId: string;\n snapshotTotal: number;\n selection: ThemeSelection | undefined;\n onClose: () => void;\n}\n\nexport function ThemeDetailPanel({\n entityId,\n entityType,\n snapshotId,\n snapshotTotal,\n selection,\n onClose,\n}: ThemeDetailPanelProps) {\n const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ''}:${selection?.themeId ?? ''}`;\n const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));\n const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;\n const [insightTraceId, setInsightTraceId] = useState<string>();\n const detailQuery = useThemeDetail(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n );\n const examplesQuery = useThemeExamples(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n EXAMPLES_PAGE_SIZE,\n examplesOffset,\n );\n const historyQuery = useThemeHistory(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotTotal > 1 ? selection?.themeId : undefined,\n );\n const title = detailQuery.data?.theme?.label ?? selection?.label ?? 'Theme details';\n const signalName = selection?.signalName;\n const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];\n const oldestHistoryPoint = historyPoints[0];\n\n return (\n <Drawer\n onOpenChange={open => {\n if (!open) {\n setExamplesPage({ contextKey: '', offset: 0 });\n setInsightTraceId(undefined);\n onClose();\n }\n }}\n open={selection !== undefined}\n overlay=\"none\"\n side=\"right\"\n variant=\"floating\"\n >\n <DrawerContent>\n <DrawerHeader className=\"border-border1 border-b\">\n {signalName !== undefined && (\n <span\n className=\"font-mono text-xs font-semibold tracking-widest\"\n style={{ color: nodeColor(getSignalHue(signalName)) }}\n >\n <Tooltip>\n <TooltipTrigger className=\"cursor-default uppercase\">{signalName}</TooltipTrigger>\n <TooltipContent>{SIGNAL_DESCRIPTIONS[signalName]}</TooltipContent>\n </Tooltip>\n </span>\n )}\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription className=\"sr-only\">\n Details for the {signalName ?? 'selected'} theme {title}\n </DrawerDescription>\n </DrawerHeader>\n <DrawerBody className=\"grid content-start gap-6 overflow-y-auto p-6\">\n {insightTraceId !== undefined && (\n <TraceInsightView traceId={insightTraceId} onBack={() => setInsightTraceId(undefined)} />\n )}\n {insightTraceId === undefined && (\n <>\n {detailQuery.isPending && <p className=\"text-neutral3 text-sm\">Loading theme details…</p>}\n {detailQuery.isError && <p className=\"text-sm text-red-500\">Unable to load theme details.</p>}\n {detailQuery.data && !detailQuery.data.theme && (\n <section>\n <h2 className=\"text-neutral6 text-sm font-semibold\">Not present in this snapshot</h2>\n <p className=\"text-neutral3 mt-2 text-sm\">This theme has no data in the selected snapshot.</p>\n </section>\n )}\n {detailQuery.data?.theme && (\n <>\n <section aria-labelledby=\"theme-summary-heading\">\n <h2 id=\"theme-summary-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Summary\n </h2>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {detailQuery.data.theme.description ?? 'No description available.'}\n </p>\n <p className=\"text-neutral5 mt-3 font-mono text-sm tabular-nums\">\n {shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage)}\n </p>\n </section>\n\n <section aria-labelledby=\"theme-examples-heading\">\n <h2\n id=\"theme-examples-heading\"\n className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\"\n >\n Examples\n </h2>\n {examplesQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading examples…</p>}\n {examplesQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load examples.</p>}\n {examplesQuery.data && (\n <>\n {examplesQuery.data.examples.length === 0 ? (\n <p className=\"text-neutral3 mt-3 text-sm\">No examples in this snapshot.</p>\n ) : (\n <ul className=\"mt-3 space-y-3\">\n {examplesQuery.data.examples.map(example => (\n <li key={example.traceId}>\n <button\n type=\"button\"\n aria-label={`View trace insight for ${example.signalText}`}\n className=\"border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm\"\n onClick={() => setInsightTraceId(example.traceId)}\n >\n {example.signalText}\n </button>\n </li>\n ))}\n </ul>\n )}\n <ExamplesPager\n traceCount={detailQuery.data.theme.traceCount}\n offset={examplesOffset}\n onOffsetChange={offset => setExamplesPage({ contextKey: examplesContextKey, offset })}\n />\n </>\n )}\n </section>\n\n {snapshotTotal > 1 && (\n <section aria-labelledby=\"theme-trend-heading\">\n <h2 id=\"theme-trend-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Trend\n </h2>\n {historyQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading trend…</p>}\n {historyQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load the trend.</p>}\n {oldestHistoryPoint !== undefined && (\n <>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {/* A nextCursor means older points exist beyond the fetched window,\n so the oldest loaded point is a lower bound, not the true origin. */}\n {historyQuery.data?.nextCursor\n ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots`\n : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? 'snapshot' : 'snapshots'}`}{' '}\n · {themeTrendDirection(historyPoints)}\n </p>\n {historyPoints.length >= 2 && (\n <ThemeTrendChart\n points={historyPoints}\n color={nodeColor(getSignalHue(signalName ?? 'goal'))}\n />\n )}\n </>\n )}\n </section>\n )}\n </>\n )}\n </>\n )}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n );\n}\n"],"names":["useState","useThemeDetail","useThemeExamples","EXAMPLES_PAGE_SIZE","useThemeHistory","chronologicalHistoryPoints","jsx","Drawer","DrawerContent","jsxs","DrawerHeader","nodeColor","getSignalHue","Tooltip","TooltipTrigger","TooltipContent","SIGNAL_DESCRIPTIONS","DrawerTitle","DrawerDescription","DrawerBody","TraceInsightView","Fragment","shareSentence","ExamplesPager","formatSnapshotDate","themeTrendDirection","ThemeTrendChart"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from '../../src/ee/signals/theme-detail-panel'
2
+ export {}
@@ -0,0 +1,167 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager.es.js';
4
+ import '@tanstack/react-query';
5
+ import './trace-intelligence-context.es.js';
6
+ import { useThemeDetail } from './hooks/use-theme-detail.es.js';
7
+ import { useThemeExamples } from './hooks/use-theme-examples.es.js';
8
+ import { useThemeHistory } from './hooks/use-theme-history.es.js';
9
+ import { getSignalHue } from './signal-colors.es.js';
10
+ import { SIGNAL_DESCRIPTIONS, shareSentence, formatSnapshotDate } from './signal-formatting.es.js';
11
+ import { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend.es.js';
12
+ import { ThemeTrendChart } from './theme-trend-chart.es.js';
13
+ import { TraceInsightView } from './trace-insight-view.es.js';
14
+ import { D as Drawer, d as DrawerContent, g as DrawerHeader, o as DrawerTitle, e as DrawerDescription, b as DrawerBody } from '../../drawer-C8jNXutE.js';
15
+ import { n as nodeColor } from '../../sankeyColor-CQ5nkgtL.js';
16
+ import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from '../../tooltip-BFbYhBj1.js';
17
+
18
+ function ThemeDetailPanel({
19
+ entityId,
20
+ entityType,
21
+ snapshotId,
22
+ snapshotTotal,
23
+ selection,
24
+ onClose
25
+ }) {
26
+ const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ""}:${selection?.themeId ?? ""}`;
27
+ const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));
28
+ const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;
29
+ const [insightTraceId, setInsightTraceId] = useState();
30
+ const detailQuery = useThemeDetail(
31
+ entityId,
32
+ entityType,
33
+ selection?.signalName ?? "goal",
34
+ snapshotId,
35
+ selection?.themeId
36
+ );
37
+ const examplesQuery = useThemeExamples(
38
+ entityId,
39
+ entityType,
40
+ selection?.signalName ?? "goal",
41
+ snapshotId,
42
+ selection?.themeId,
43
+ EXAMPLES_PAGE_SIZE,
44
+ examplesOffset
45
+ );
46
+ const historyQuery = useThemeHistory(
47
+ entityId,
48
+ entityType,
49
+ selection?.signalName ?? "goal",
50
+ snapshotTotal > 1 ? selection?.themeId : void 0
51
+ );
52
+ const title = detailQuery.data?.theme?.label ?? selection?.label ?? "Theme details";
53
+ const signalName = selection?.signalName;
54
+ const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];
55
+ const oldestHistoryPoint = historyPoints[0];
56
+ return /* @__PURE__ */ jsx(
57
+ Drawer,
58
+ {
59
+ onOpenChange: (open) => {
60
+ if (!open) {
61
+ setExamplesPage({ contextKey: "", offset: 0 });
62
+ setInsightTraceId(void 0);
63
+ onClose();
64
+ }
65
+ },
66
+ open: selection !== void 0,
67
+ overlay: "none",
68
+ side: "right",
69
+ variant: "floating",
70
+ children: /* @__PURE__ */ jsxs(DrawerContent, { children: [
71
+ /* @__PURE__ */ jsxs(DrawerHeader, { className: "border-border1 border-b", children: [
72
+ signalName !== void 0 && /* @__PURE__ */ jsx(
73
+ "span",
74
+ {
75
+ className: "font-mono text-xs font-semibold tracking-widest",
76
+ style: { color: nodeColor(getSignalHue(signalName)) },
77
+ children: /* @__PURE__ */ jsxs(Tooltip, { children: [
78
+ /* @__PURE__ */ jsx(TooltipTrigger, { className: "cursor-default uppercase", children: signalName }),
79
+ /* @__PURE__ */ jsx(TooltipContent, { children: SIGNAL_DESCRIPTIONS[signalName] })
80
+ ] })
81
+ }
82
+ ),
83
+ /* @__PURE__ */ jsx(DrawerTitle, { children: title }),
84
+ /* @__PURE__ */ jsxs(DrawerDescription, { className: "sr-only", children: [
85
+ "Details for the ",
86
+ signalName ?? "selected",
87
+ " theme ",
88
+ title
89
+ ] })
90
+ ] }),
91
+ /* @__PURE__ */ jsxs(DrawerBody, { className: "grid content-start gap-6 overflow-y-auto p-6", children: [
92
+ insightTraceId !== void 0 && /* @__PURE__ */ jsx(TraceInsightView, { traceId: insightTraceId, onBack: () => setInsightTraceId(void 0) }),
93
+ insightTraceId === void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
94
+ detailQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 text-sm", children: "Loading theme details…" }),
95
+ detailQuery.isError && /* @__PURE__ */ jsx("p", { className: "text-sm text-red-500", children: "Unable to load theme details." }),
96
+ detailQuery.data && !detailQuery.data.theme && /* @__PURE__ */ jsxs("section", { children: [
97
+ /* @__PURE__ */ jsx("h2", { className: "text-neutral6 text-sm font-semibold", children: "Not present in this snapshot" }),
98
+ /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-2 text-sm", children: "This theme has no data in the selected snapshot." })
99
+ ] }),
100
+ detailQuery.data?.theme && /* @__PURE__ */ jsxs(Fragment, { children: [
101
+ /* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-summary-heading", children: [
102
+ /* @__PURE__ */ jsx("h2", { id: "theme-summary-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Summary" }),
103
+ /* @__PURE__ */ jsx("p", { className: "text-neutral5 mt-3 text-sm", children: detailQuery.data.theme.description ?? "No description available." }),
104
+ /* @__PURE__ */ jsx("p", { className: "text-neutral5 mt-3 font-mono text-sm tabular-nums", children: shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage) })
105
+ ] }),
106
+ /* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-examples-heading", children: [
107
+ /* @__PURE__ */ jsx(
108
+ "h2",
109
+ {
110
+ id: "theme-examples-heading",
111
+ className: "text-neutral3 font-mono text-xs tracking-wider uppercase",
112
+ children: "Examples"
113
+ }
114
+ ),
115
+ examplesQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading examples…" }),
116
+ examplesQuery.isError && /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load examples." }),
117
+ examplesQuery.data && /* @__PURE__ */ jsxs(Fragment, { children: [
118
+ examplesQuery.data.examples.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "No examples in this snapshot." }) : /* @__PURE__ */ jsx("ul", { className: "mt-3 space-y-3", children: examplesQuery.data.examples.map((example) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
119
+ "button",
120
+ {
121
+ type: "button",
122
+ "aria-label": `View trace insight for ${example.signalText}`,
123
+ className: "border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm",
124
+ onClick: () => setInsightTraceId(example.traceId),
125
+ children: example.signalText
126
+ }
127
+ ) }, example.traceId)) }),
128
+ /* @__PURE__ */ jsx(
129
+ ExamplesPager,
130
+ {
131
+ traceCount: detailQuery.data.theme.traceCount,
132
+ offset: examplesOffset,
133
+ onOffsetChange: (offset) => setExamplesPage({ contextKey: examplesContextKey, offset })
134
+ }
135
+ )
136
+ ] })
137
+ ] }),
138
+ snapshotTotal > 1 && /* @__PURE__ */ jsxs("section", { "aria-labelledby": "theme-trend-heading", children: [
139
+ /* @__PURE__ */ jsx("h2", { id: "theme-trend-heading", className: "text-neutral3 font-mono text-xs tracking-wider uppercase", children: "Trend" }),
140
+ historyQuery.isPending && /* @__PURE__ */ jsx("p", { className: "text-neutral3 mt-3 text-sm", children: "Loading trend…" }),
141
+ historyQuery.isError && /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-red-500", children: "Unable to load the trend." }),
142
+ oldestHistoryPoint !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
143
+ /* @__PURE__ */ jsxs("p", { className: "text-neutral5 mt-3 text-sm", children: [
144
+ historyQuery.data?.nextCursor ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots` : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? "snapshot" : "snapshots"}`,
145
+ " ",
146
+ "· ",
147
+ themeTrendDirection(historyPoints)
148
+ ] }),
149
+ historyPoints.length >= 2 && /* @__PURE__ */ jsx(
150
+ ThemeTrendChart,
151
+ {
152
+ points: historyPoints,
153
+ color: nodeColor(getSignalHue(signalName ?? "goal"))
154
+ }
155
+ )
156
+ ] })
157
+ ] })
158
+ ] })
159
+ ] })
160
+ ] })
161
+ ] })
162
+ }
163
+ );
164
+ }
165
+
166
+ export { ThemeDetailPanel };
167
+ //# sourceMappingURL=theme-detail-panel.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-detail-panel.es.js","sources":["../../../src/ee/signals/theme-detail-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { EXAMPLES_PAGE_SIZE, ExamplesPager } from './examples-pager';\nimport { useThemeDetail, useThemeExamples, useThemeHistory } from './hooks';\nimport { getSignalHue } from './signal-colors';\nimport { formatSnapshotDate, shareSentence, SIGNAL_DESCRIPTIONS } from './signal-formatting';\nimport type { ThemeSelection } from './theme-drilldown-data';\nimport { chronologicalHistoryPoints, themeTrendDirection } from './theme-trend';\nimport { ThemeTrendChart } from './theme-trend-chart';\nimport { TraceInsightView } from './trace-insight-view';\nimport {\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n} from '@/ds/components/Drawer';\nimport { nodeColor } from '@/ds/components/SankeyChart';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\n\ninterface ThemeDetailPanelProps {\n entityId: string;\n entityType: string;\n snapshotId: string;\n snapshotTotal: number;\n selection: ThemeSelection | undefined;\n onClose: () => void;\n}\n\nexport function ThemeDetailPanel({\n entityId,\n entityType,\n snapshotId,\n snapshotTotal,\n selection,\n onClose,\n}: ThemeDetailPanelProps) {\n const examplesContextKey = `${snapshotId}:${selection?.signalName ?? ''}:${selection?.themeId ?? ''}`;\n const [examplesPage, setExamplesPage] = useState(() => ({ contextKey: examplesContextKey, offset: 0 }));\n const examplesOffset = examplesPage.contextKey === examplesContextKey ? examplesPage.offset : 0;\n const [insightTraceId, setInsightTraceId] = useState<string>();\n const detailQuery = useThemeDetail(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n );\n const examplesQuery = useThemeExamples(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotId,\n selection?.themeId,\n EXAMPLES_PAGE_SIZE,\n examplesOffset,\n );\n const historyQuery = useThemeHistory(\n entityId,\n entityType,\n selection?.signalName ?? 'goal',\n snapshotTotal > 1 ? selection?.themeId : undefined,\n );\n const title = detailQuery.data?.theme?.label ?? selection?.label ?? 'Theme details';\n const signalName = selection?.signalName;\n const historyPoints = historyQuery.data ? chronologicalHistoryPoints(historyQuery.data.points) : [];\n const oldestHistoryPoint = historyPoints[0];\n\n return (\n <Drawer\n onOpenChange={open => {\n if (!open) {\n setExamplesPage({ contextKey: '', offset: 0 });\n setInsightTraceId(undefined);\n onClose();\n }\n }}\n open={selection !== undefined}\n overlay=\"none\"\n side=\"right\"\n variant=\"floating\"\n >\n <DrawerContent>\n <DrawerHeader className=\"border-border1 border-b\">\n {signalName !== undefined && (\n <span\n className=\"font-mono text-xs font-semibold tracking-widest\"\n style={{ color: nodeColor(getSignalHue(signalName)) }}\n >\n <Tooltip>\n <TooltipTrigger className=\"cursor-default uppercase\">{signalName}</TooltipTrigger>\n <TooltipContent>{SIGNAL_DESCRIPTIONS[signalName]}</TooltipContent>\n </Tooltip>\n </span>\n )}\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription className=\"sr-only\">\n Details for the {signalName ?? 'selected'} theme {title}\n </DrawerDescription>\n </DrawerHeader>\n <DrawerBody className=\"grid content-start gap-6 overflow-y-auto p-6\">\n {insightTraceId !== undefined && (\n <TraceInsightView traceId={insightTraceId} onBack={() => setInsightTraceId(undefined)} />\n )}\n {insightTraceId === undefined && (\n <>\n {detailQuery.isPending && <p className=\"text-neutral3 text-sm\">Loading theme details…</p>}\n {detailQuery.isError && <p className=\"text-sm text-red-500\">Unable to load theme details.</p>}\n {detailQuery.data && !detailQuery.data.theme && (\n <section>\n <h2 className=\"text-neutral6 text-sm font-semibold\">Not present in this snapshot</h2>\n <p className=\"text-neutral3 mt-2 text-sm\">This theme has no data in the selected snapshot.</p>\n </section>\n )}\n {detailQuery.data?.theme && (\n <>\n <section aria-labelledby=\"theme-summary-heading\">\n <h2 id=\"theme-summary-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Summary\n </h2>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {detailQuery.data.theme.description ?? 'No description available.'}\n </p>\n <p className=\"text-neutral5 mt-3 font-mono text-sm tabular-nums\">\n {shareSentence(detailQuery.data.theme.traceCount, detailQuery.data.theme.coverage)}\n </p>\n </section>\n\n <section aria-labelledby=\"theme-examples-heading\">\n <h2\n id=\"theme-examples-heading\"\n className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\"\n >\n Examples\n </h2>\n {examplesQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading examples…</p>}\n {examplesQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load examples.</p>}\n {examplesQuery.data && (\n <>\n {examplesQuery.data.examples.length === 0 ? (\n <p className=\"text-neutral3 mt-3 text-sm\">No examples in this snapshot.</p>\n ) : (\n <ul className=\"mt-3 space-y-3\">\n {examplesQuery.data.examples.map(example => (\n <li key={example.traceId}>\n <button\n type=\"button\"\n aria-label={`View trace insight for ${example.signalText}`}\n className=\"border-border1 bg-surface3 text-neutral5 hover:bg-surface5 w-full cursor-pointer rounded-md border p-3 text-left text-sm\"\n onClick={() => setInsightTraceId(example.traceId)}\n >\n {example.signalText}\n </button>\n </li>\n ))}\n </ul>\n )}\n <ExamplesPager\n traceCount={detailQuery.data.theme.traceCount}\n offset={examplesOffset}\n onOffsetChange={offset => setExamplesPage({ contextKey: examplesContextKey, offset })}\n />\n </>\n )}\n </section>\n\n {snapshotTotal > 1 && (\n <section aria-labelledby=\"theme-trend-heading\">\n <h2 id=\"theme-trend-heading\" className=\"text-neutral3 font-mono text-xs tracking-wider uppercase\">\n Trend\n </h2>\n {historyQuery.isPending && <p className=\"text-neutral3 mt-3 text-sm\">Loading trend…</p>}\n {historyQuery.isError && <p className=\"mt-3 text-sm text-red-500\">Unable to load the trend.</p>}\n {oldestHistoryPoint !== undefined && (\n <>\n <p className=\"text-neutral5 mt-3 text-sm\">\n {/* A nextCursor means older points exist beyond the fetched window,\n so the oldest loaded point is a lower bound, not the true origin. */}\n {historyQuery.data?.nextCursor\n ? `Active since at least ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length}+ snapshots`\n : `First seen ${formatSnapshotDate(oldestHistoryPoint.startedAt)} · in ${historyPoints.length} ${historyPoints.length === 1 ? 'snapshot' : 'snapshots'}`}{' '}\n · {themeTrendDirection(historyPoints)}\n </p>\n {historyPoints.length >= 2 && (\n <ThemeTrendChart\n points={historyPoints}\n color={nodeColor(getSignalHue(signalName ?? 'goal'))}\n />\n )}\n </>\n )}\n </section>\n )}\n </>\n )}\n </>\n )}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA8BO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,kBAAA,GAAqB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAA,EAAW,cAAc,EAAE,CAAA,CAAA,EAAI,SAAA,EAAW,OAAA,IAAW,EAAE,CAAA,CAAA;AACnG,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA,CAAS,OAAO,EAAE,UAAA,EAAY,kBAAA,EAAoB,MAAA,EAAQ,CAAA,EAAE,CAAE,CAAA;AACtG,EAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,UAAA,KAAe,kBAAA,GAAqB,aAAa,MAAA,GAAS,CAAA;AAC9F,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,EAAiB;AAC7D,EAAA,MAAM,WAAA,GAAc,cAAA;AAAA,IAClB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAW,UAAA,IAAc,MAAA;AAAA,IACzB,UAAA;AAAA,IACA,SAAA,EAAW;AAAA,GACb;AACA,EAAA,MAAM,aAAA,GAAgB,gBAAA;AAAA,IACpB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAW,UAAA,IAAc,MAAA;AAAA,IACzB,UAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,kBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,YAAA,GAAe,eAAA;AAAA,IACnB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAW,UAAA,IAAc,MAAA;AAAA,IACzB,aAAA,GAAgB,CAAA,GAAI,SAAA,EAAW,OAAA,GAAU;AAAA,GAC3C;AACA,EAAA,MAAM,QAAQ,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,KAAA,IAAS,WAAW,KAAA,IAAS,eAAA;AACpE,EAAA,MAAM,aAAa,SAAA,EAAW,UAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,aAAa,IAAA,GAAO,0BAAA,CAA2B,aAAa,IAAA,CAAK,MAAM,IAAI,EAAC;AAClG,EAAA,MAAM,kBAAA,GAAqB,cAAc,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,cAAc,CAAA,IAAA,KAAQ;AACpB,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,eAAA,CAAgB,EAAE,UAAA,EAAY,EAAA,EAAI,MAAA,EAAQ,GAAG,CAAA;AAC7C,UAAA,iBAAA,CAAkB,MAAS,CAAA;AAC3B,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MACA,MAAM,SAAA,KAAc,MAAA;AAAA,MACpB,OAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAQ,UAAA;AAAA,MAER,+BAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,YAAA,EAAA,EAAa,WAAU,yBAAA,EACrB,QAAA,EAAA;AAAA,UAAA,UAAA,KAAe,MAAA,oBACd,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iDAAA;AAAA,cACV,OAAO,EAAE,KAAA,EAAO,UAAU,YAAA,CAAa,UAAU,CAAC,CAAA,EAAE;AAAA,cAEpD,+BAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,gCACjE,GAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,mBAAA,CAAoB,UAAU,CAAA,EAAE;AAAA,eAAA,EACnD;AAAA;AAAA,WACF;AAAA,0BAEF,GAAA,CAAC,eAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACpB,IAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA;AAAA,YAAA,kBAAA;AAAA,YACpB,UAAA,IAAc,UAAA;AAAA,YAAW,SAAA;AAAA,YAAQ;AAAA,WAAA,EACpD;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,8CAAA,EACnB,QAAA,EAAA;AAAA,UAAA,cAAA,KAAmB,MAAA,wBACjB,gBAAA,EAAA,EAAiB,OAAA,EAAS,gBAAgB,MAAA,EAAQ,MAAM,iBAAA,CAAkB,MAAS,CAAA,EAAG,CAAA;AAAA,UAExF,cAAA,KAAmB,0BAClB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,WAAA,CAAY,SAAA,oBAAa,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAwB,QAAA,EAAA,wBAAA,EAAsB,CAAA;AAAA,YACpF,YAAY,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wBAAuB,QAAA,EAAA,+BAAA,EAA6B,CAAA;AAAA,YACxF,YAAY,IAAA,IAAQ,CAAC,YAAY,IAAA,CAAK,KAAA,yBACpC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,8BAAA,EAA4B,CAAA;AAAA,8BAChF,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,kDAAA,EAAgD;AAAA,aAAA,EAC5F,CAAA;AAAA,YAED,WAAA,CAAY,IAAA,EAAM,KAAA,oBACjB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,SAAA,EAAA,EAAQ,mBAAgB,uBAAA,EACvB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAG,uBAAA,EAAwB,SAAA,EAAU,4DAA2D,QAAA,EAAA,SAAA,EAEpG,CAAA;AAAA,gCACA,GAAA,CAAC,OAAE,SAAA,EAAU,4BAAA,EACV,sBAAY,IAAA,CAAK,KAAA,CAAM,eAAe,2BAAA,EACzC,CAAA;AAAA,gCACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EACV,QAAA,EAAA,aAAA,CAAc,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EACnF;AAAA,eAAA,EACF,CAAA;AAAA,8BAEA,IAAA,CAAC,SAAA,EAAA,EAAQ,iBAAA,EAAgB,wBAAA,EACvB,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,wBAAA;AAAA,oBACH,SAAA,EAAU,0DAAA;AAAA,oBACX,QAAA,EAAA;AAAA;AAAA,iBAED;AAAA,gBACC,cAAc,SAAA,oBAAa,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,gBACtF,cAAc,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA4B,QAAA,EAAA,0BAAA,EAAwB,CAAA;AAAA,gBAC1F,aAAA,CAAc,wBACb,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,kBAAA,aAAA,CAAc,IAAA,CAAK,SAAS,MAAA,KAAW,CAAA,uBACrC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,+BAAA,EAA6B,CAAA,uBAEtE,IAAA,EAAA,EAAG,SAAA,EAAU,kBACX,QAAA,EAAA,aAAA,CAAc,IAAA,CAAK,SAAS,GAAA,CAAI,CAAA,OAAA,yBAC9B,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,YAAA,EAAY,CAAA,uBAAA,EAA0B,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,sBACxD,SAAA,EAAU,0HAAA;AAAA,sBACV,OAAA,EAAS,MAAM,iBAAA,CAAkB,OAAA,CAAQ,OAAO,CAAA;AAAA,sBAE/C,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,mBACX,EAAA,EARO,OAAA,CAAQ,OASjB,CACD,CAAA,EACH,CAAA;AAAA,kCAEF,GAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,UAAA,EAAY,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,UAAA;AAAA,sBACnC,MAAA,EAAQ,cAAA;AAAA,sBACR,gBAAgB,CAAA,MAAA,KAAU,eAAA,CAAgB,EAAE,UAAA,EAAY,kBAAA,EAAoB,QAAQ;AAAA;AAAA;AACtF,iBAAA,EACF;AAAA,eAAA,EAEJ,CAAA;AAAA,cAEC,aAAA,GAAgB,CAAA,oBACf,IAAA,CAAC,SAAA,EAAA,EAAQ,mBAAgB,qBAAA,EACvB,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAG,qBAAA,EAAsB,SAAA,EAAU,4DAA2D,QAAA,EAAA,OAAA,EAElG,CAAA;AAAA,gBACC,aAAa,SAAA,oBAAa,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAA6B,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,gBAClF,aAAa,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA4B,QAAA,EAAA,2BAAA,EAAyB,CAAA;AAAA,gBAC1F,kBAAA,KAAuB,0BACtB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4BAAA,EAGV,QAAA,EAAA;AAAA,oBAAA,YAAA,CAAa,IAAA,EAAM,UAAA,GAChB,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,kBAAA,CAAmB,SAAS,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,MAAM,CAAA,WAAA,CAAA,GACtG,CAAA,WAAA,EAAc,mBAAmB,kBAAA,CAAmB,SAAS,CAAC,CAAA,MAAA,EAAS,aAAA,CAAc,MAAM,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,GAAI,UAAA,GAAa,WAAW,CAAA,CAAA;AAAA,oBAAI,GAAA;AAAA,oBAAI,IAAA;AAAA,oBAC7J,oBAAoB,aAAa;AAAA,mBAAA,EACtC,CAAA;AAAA,kBACC,aAAA,CAAc,UAAU,CAAA,oBACvB,GAAA;AAAA,oBAAC,eAAA;AAAA,oBAAA;AAAA,sBACC,MAAA,EAAQ,aAAA;AAAA,sBACR,KAAA,EAAO,SAAA,CAAU,YAAA,CAAa,UAAA,IAAc,MAAM,CAAC;AAAA;AAAA;AACrD,iBAAA,EAEJ;AAAA,eAAA,EAEJ;AAAA,aAAA,EAEJ;AAAA,WAAA,EAEJ;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}