@mastra/playground-ui 43.0.0-alpha.1 → 43.0.0-alpha.2

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 (444) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{Button-B5RnKrGb.cjs → Button-Bm94fEF2.cjs} +2 -2
  3. package/dist/{Button-B5RnKrGb.cjs.map → Button-Bm94fEF2.cjs.map} +1 -1
  4. package/dist/{Button-Dh5CZ6Ir.js → Button-Bx2lFdqb.js} +2 -2
  5. package/dist/{Button-Dh5CZ6Ir.js.map → Button-Bx2lFdqb.js.map} +1 -1
  6. package/dist/{EmptyState-C0TShKF9.js → EmptyState-BLd-LJOA.js} +3 -3
  7. package/dist/{EmptyState-C0TShKF9.js.map → EmptyState-BLd-LJOA.js.map} +1 -1
  8. package/dist/{EmptyState-CDPLdgbs.cjs → EmptyState-sff7IGrD.cjs} +3 -3
  9. package/dist/{EmptyState-CDPLdgbs.cjs.map → EmptyState-sff7IGrD.cjs.map} +1 -1
  10. package/dist/{ErrorState-4TTbwyNs.cjs → ErrorState-DvsG3RMz.cjs} +3 -3
  11. package/dist/{ErrorState-4TTbwyNs.cjs.map → ErrorState-DvsG3RMz.cjs.map} +1 -1
  12. package/dist/{ErrorState-D1uTstEy.js → ErrorState-t59EAa55.js} +3 -3
  13. package/dist/{ErrorState-D1uTstEy.js.map → ErrorState-t59EAa55.js.map} +1 -1
  14. package/dist/{Notice-WhHdy89l.cjs → Notice-D7mbkdZW.cjs} +2 -2
  15. package/dist/{Notice-WhHdy89l.cjs.map → Notice-D7mbkdZW.cjs.map} +1 -1
  16. package/dist/{Notice-jmHNt3gS.js → Notice-zWRcxcM3.js} +2 -2
  17. package/dist/{Notice-jmHNt3gS.js.map → Notice-zWRcxcM3.js.map} +1 -1
  18. package/dist/{PermissionDenied-C7lur6xI.js → PermissionDenied-8otNeK_X.js} +2 -2
  19. package/dist/{PermissionDenied-C7lur6xI.js.map → PermissionDenied-8otNeK_X.js.map} +1 -1
  20. package/dist/{PermissionDenied-Cao8jHEU.cjs → PermissionDenied-Dtre6Wn1.cjs} +2 -2
  21. package/dist/{PermissionDenied-Cao8jHEU.cjs.map → PermissionDenied-Dtre6Wn1.cjs.map} +1 -1
  22. package/dist/{SessionExpired-DEJgiQcL.cjs → SessionExpired-C5ADs4NL.cjs} +3 -3
  23. package/dist/{SessionExpired-DEJgiQcL.cjs.map → SessionExpired-C5ADs4NL.cjs.map} +1 -1
  24. package/dist/{SessionExpired-C0PdcdCr.js → SessionExpired-CHF__hq9.js} +3 -3
  25. package/dist/{SessionExpired-C0PdcdCr.js.map → SessionExpired-CHF__hq9.js.map} +1 -1
  26. package/dist/{code-diff-BpD8McFU.js → code-diff-BB4sqHpq.js} +3 -3
  27. package/dist/{code-diff-BpD8McFU.js.map → code-diff-BB4sqHpq.js.map} +1 -1
  28. package/dist/{code-diff-B1JxR3PF.cjs → code-diff-C-EHXZyK.cjs} +3 -3
  29. package/dist/{code-diff-B1JxR3PF.cjs.map → code-diff-C-EHXZyK.cjs.map} +1 -1
  30. package/dist/{combobox-54Hywnf9.cjs → combobox-DXwbHjvQ.cjs} +2 -2
  31. package/dist/{combobox-54Hywnf9.cjs.map → combobox-DXwbHjvQ.cjs.map} +1 -1
  32. package/dist/{combobox-CBvs2ZPx.js → combobox-sa_Pxyl4.js} +2 -2
  33. package/dist/{combobox-CBvs2ZPx.js.map → combobox-sa_Pxyl4.js.map} +1 -1
  34. package/dist/components/AlertDialog.cjs.js +1 -1
  35. package/dist/components/AlertDialog.es.js +1 -1
  36. package/dist/components/Button.cjs.js +1 -1
  37. package/dist/components/Button.es.js +1 -1
  38. package/dist/components/ClampedText.cjs.js +1 -1
  39. package/dist/components/ClampedText.es.js +1 -1
  40. package/dist/components/CodeBlock.cjs.js +8 -8
  41. package/dist/components/CodeBlock.cjs.js.map +1 -1
  42. package/dist/components/CodeBlock.es.js +8 -8
  43. package/dist/components/CodeBlock.es.js.map +1 -1
  44. package/dist/components/CodeDiff.cjs.js +1 -1
  45. package/dist/components/CodeDiff.es.js +1 -1
  46. package/dist/components/CodeEditor.cjs.js +1 -1
  47. package/dist/components/CodeEditor.es.js +1 -1
  48. package/dist/components/Columns.cjs.js +1 -1
  49. package/dist/components/Columns.es.js +1 -1
  50. package/dist/components/Combobox.cjs.js +1 -1
  51. package/dist/components/Combobox.es.js +1 -1
  52. package/dist/components/Command.cjs.js +4 -4
  53. package/dist/components/Command.cjs.js.map +1 -1
  54. package/dist/components/Command.es.js +4 -4
  55. package/dist/components/Command.es.js.map +1 -1
  56. package/dist/components/Composer.cjs.js +5 -5
  57. package/dist/components/Composer.cjs.js.map +1 -1
  58. package/dist/components/Composer.es.js +5 -5
  59. package/dist/components/Composer.es.js.map +1 -1
  60. package/dist/components/ContentBlocks.cjs.js.map +1 -1
  61. package/dist/components/ContentBlocks.es.js.map +1 -1
  62. package/dist/components/ContextMenu.cjs.js +1 -1
  63. package/dist/components/ContextMenu.cjs.js.map +1 -1
  64. package/dist/components/ContextMenu.es.js +1 -1
  65. package/dist/components/ContextMenu.es.js.map +1 -1
  66. package/dist/components/CopyButton.cjs.js +1 -1
  67. package/dist/components/CopyButton.es.js +1 -1
  68. package/dist/components/DataCodeSection.cjs.js +1 -1
  69. package/dist/components/DataCodeSection.es.js +1 -1
  70. package/dist/components/DataDetailsPanel.cjs.js +5 -5
  71. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  72. package/dist/components/DataDetailsPanel.es.js +5 -5
  73. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  74. package/dist/components/DataFilter.cjs.js +2 -2
  75. package/dist/components/DataFilter.es.js +2 -2
  76. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  77. package/dist/components/DataKeysAndValues.es.js +1 -1
  78. package/dist/components/DataList.cjs.js +7 -7
  79. package/dist/components/DataList.cjs.js.map +1 -1
  80. package/dist/components/DataList.es.js +7 -7
  81. package/dist/components/DataList.es.js.map +1 -1
  82. package/dist/components/DataPanel.cjs.js +1 -1
  83. package/dist/components/DataPanel.es.js +1 -1
  84. package/dist/components/DateRangeTimeline.cjs.js +11 -11
  85. package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
  86. package/dist/components/DateRangeTimeline.es.js +11 -11
  87. package/dist/components/DateRangeTimeline.es.js.map +1 -1
  88. package/dist/components/DateTimePicker.cjs.js +4 -4
  89. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  90. package/dist/components/DateTimePicker.es.js +4 -4
  91. package/dist/components/DateTimePicker.es.js.map +1 -1
  92. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  93. package/dist/components/DateTimeRangePicker.es.js +1 -1
  94. package/dist/components/Dialog.cjs.js +1 -1
  95. package/dist/components/Dialog.es.js +1 -1
  96. package/dist/components/Drawer.cjs.js +1 -1
  97. package/dist/components/Drawer.es.js +1 -1
  98. package/dist/components/DropdownMenu.cjs.js +1 -1
  99. package/dist/components/DropdownMenu.es.js +1 -1
  100. package/dist/components/EmptyState.cjs.js +1 -1
  101. package/dist/components/EmptyState.es.js +1 -1
  102. package/dist/components/EntityHeader.cjs.js +1 -1
  103. package/dist/components/EntityHeader.cjs.js.map +1 -1
  104. package/dist/components/EntityHeader.es.js +1 -1
  105. package/dist/components/EntityHeader.es.js.map +1 -1
  106. package/dist/components/EnvironmentVariablesEditor.cjs.js +9 -9
  107. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  108. package/dist/components/EnvironmentVariablesEditor.es.js +9 -9
  109. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  110. package/dist/components/ErrorBoundary.cjs.js +3 -3
  111. package/dist/components/ErrorBoundary.cjs.js.map +1 -1
  112. package/dist/components/ErrorBoundary.es.js +3 -3
  113. package/dist/components/ErrorBoundary.es.js.map +1 -1
  114. package/dist/components/ErrorState.cjs.js +1 -1
  115. package/dist/components/ErrorState.es.js +1 -1
  116. package/dist/components/FormFieldBlocks.cjs.js +4 -4
  117. package/dist/components/FormFieldBlocks.es.js +4 -4
  118. package/dist/components/Header.cjs.js +1 -1
  119. package/dist/components/Header.cjs.js.map +1 -1
  120. package/dist/components/Header.es.js +1 -1
  121. package/dist/components/Header.es.js.map +1 -1
  122. package/dist/components/HorizontalBars.cjs.js +1 -1
  123. package/dist/components/HorizontalBars.es.js +1 -1
  124. package/dist/components/InputGroup.cjs.js +1 -1
  125. package/dist/components/InputGroup.es.js +1 -1
  126. package/dist/components/ItemList.cjs.js +5 -5
  127. package/dist/components/ItemList.cjs.js.map +1 -1
  128. package/dist/components/ItemList.es.js +5 -5
  129. package/dist/components/ItemList.es.js.map +1 -1
  130. package/dist/components/JSONSchemaForm.cjs.js +3 -3
  131. package/dist/components/JSONSchemaForm.es.js +3 -3
  132. package/dist/components/ListSearch.cjs.js +2 -2
  133. package/dist/components/ListSearch.cjs.js.map +1 -1
  134. package/dist/components/ListSearch.es.js +2 -2
  135. package/dist/components/ListSearch.es.js.map +1 -1
  136. package/dist/components/LogsDataList.cjs.js +2 -2
  137. package/dist/components/LogsDataList.es.js +2 -2
  138. package/dist/components/MainSidebar.cjs.js +4 -4
  139. package/dist/components/MainSidebar.cjs.js.map +1 -1
  140. package/dist/components/MainSidebar.es.js +4 -4
  141. package/dist/components/MainSidebar.es.js.map +1 -1
  142. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  143. package/dist/components/MarkdownRenderer.es.js +1 -1
  144. package/dist/components/MetricsCard.cjs.js +1 -1
  145. package/dist/components/MetricsCard.es.js +1 -1
  146. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  147. package/dist/components/MetricsKpiCard.es.js +1 -1
  148. package/dist/components/MetricsLineChart.cjs.js +1 -1
  149. package/dist/components/MetricsLineChart.es.js +1 -1
  150. package/dist/components/Notice.cjs.js +1 -1
  151. package/dist/components/Notice.es.js +1 -1
  152. package/dist/components/PendingIndicator.cjs.js +1 -1
  153. package/dist/components/PendingIndicator.cjs.js.map +1 -1
  154. package/dist/components/PendingIndicator.es.js +1 -1
  155. package/dist/components/PendingIndicator.es.js.map +1 -1
  156. package/dist/components/PermissionDenied.cjs.js +1 -1
  157. package/dist/components/PermissionDenied.es.js +1 -1
  158. package/dist/components/PrevNextNav.cjs.js +1 -1
  159. package/dist/components/PrevNextNav.es.js +1 -1
  160. package/dist/components/PropertyFilter.cjs.js +9 -9
  161. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  162. package/dist/components/PropertyFilter.es.js +10 -10
  163. package/dist/components/PropertyFilter.es.js.map +1 -1
  164. package/dist/components/RuleBuilder.cjs.js +13 -13
  165. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  166. package/dist/components/RuleBuilder.es.js +13 -13
  167. package/dist/components/RuleBuilder.es.js.map +1 -1
  168. package/dist/components/SankeyChart.cjs.js +4 -4
  169. package/dist/components/SankeyChart.cjs.js.map +1 -1
  170. package/dist/components/SankeyChart.es.js +4 -4
  171. package/dist/components/SankeyChart.es.js.map +1 -1
  172. package/dist/components/ScatterPlotChart.cjs.js +1 -1
  173. package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
  174. package/dist/components/ScatterPlotChart.es.js +1 -1
  175. package/dist/components/ScatterPlotChart.es.js.map +1 -1
  176. package/dist/components/ScrollArea.cjs.js +1 -1
  177. package/dist/components/ScrollArea.es.js +1 -1
  178. package/dist/components/Select.cjs.js +1 -1
  179. package/dist/components/Select.es.js +1 -1
  180. package/dist/components/SessionExpired.cjs.js +1 -1
  181. package/dist/components/SessionExpired.es.js +1 -1
  182. package/dist/components/SettingsRow.cjs.js +1 -1
  183. package/dist/components/SettingsRow.cjs.js.map +1 -1
  184. package/dist/components/SettingsRow.es.js +1 -1
  185. package/dist/components/SettingsRow.es.js.map +1 -1
  186. package/dist/components/SideDialog.cjs.js +5 -5
  187. package/dist/components/SideDialog.cjs.js.map +1 -1
  188. package/dist/components/SideDialog.es.js +5 -5
  189. package/dist/components/SideDialog.es.js.map +1 -1
  190. package/dist/components/Steps.cjs.js +1 -1
  191. package/dist/components/Steps.cjs.js.map +1 -1
  192. package/dist/components/Steps.es.js +1 -1
  193. package/dist/components/Steps.es.js.map +1 -1
  194. package/dist/components/Table.cjs.js +2 -2
  195. package/dist/components/Table.cjs.js.map +1 -1
  196. package/dist/components/Table.es.js +2 -2
  197. package/dist/components/Table.es.js.map +1 -1
  198. package/dist/components/Tabs.cjs.js +1 -1
  199. package/dist/components/Tabs.es.js +1 -1
  200. package/dist/components/ThreadList.cjs.js +3 -3
  201. package/dist/components/ThreadList.cjs.js.map +1 -1
  202. package/dist/components/ThreadList.es.js +3 -3
  203. package/dist/components/ThreadList.es.js.map +1 -1
  204. package/dist/components/ThreadRail.cjs.js +6 -6
  205. package/dist/components/ThreadRail.cjs.js.map +1 -1
  206. package/dist/components/ThreadRail.es.js +6 -6
  207. package/dist/components/ThreadRail.es.js.map +1 -1
  208. package/dist/components/Tooltip.cjs.js +1 -1
  209. package/dist/components/Tooltip.es.js +1 -1
  210. package/dist/components/Tree.cjs.js +2 -2
  211. package/dist/components/Tree.cjs.js.map +1 -1
  212. package/dist/components/Tree.es.js +2 -2
  213. package/dist/components/Tree.es.js.map +1 -1
  214. package/dist/components/Truncate.cjs.js +2 -2
  215. package/dist/components/Truncate.es.js +2 -2
  216. package/dist/components/ai/ask-user.cjs.js +3 -3
  217. package/dist/components/ai/ask-user.cjs.js.map +1 -1
  218. package/dist/components/ai/ask-user.es.js +3 -3
  219. package/dist/components/ai/ask-user.es.js.map +1 -1
  220. package/dist/components/ai/plan.cjs.js +4 -4
  221. package/dist/components/ai/plan.cjs.js.map +1 -1
  222. package/dist/components/ai/plan.es.js +4 -4
  223. package/dist/components/ai/plan.es.js.map +1 -1
  224. package/dist/components/ai/task-list.cjs.js +6 -6
  225. package/dist/components/ai/task-list.cjs.js.map +1 -1
  226. package/dist/components/ai/task-list.es.js +6 -6
  227. package/dist/components/ai/task-list.es.js.map +1 -1
  228. package/dist/{copy-button-DNR760m7.cjs → copy-button-BKFcsNE1.cjs} +3 -3
  229. package/dist/{copy-button-DNR760m7.cjs.map → copy-button-BKFcsNE1.cjs.map} +1 -1
  230. package/dist/{copy-button-BuIpvUI7.js → copy-button-H2iaKMng.js} +3 -3
  231. package/dist/{copy-button-BuIpvUI7.js.map → copy-button-H2iaKMng.js.map} +1 -1
  232. package/dist/{data-code-section-D0BwpqvV.cjs → data-code-section-D2zjah_b.cjs} +8 -8
  233. package/dist/{data-code-section-D0BwpqvV.cjs.map → data-code-section-D2zjah_b.cjs.map} +1 -1
  234. package/dist/{data-code-section-BjqDCzy3.js → data-code-section-MHMkC6q9.js} +8 -8
  235. package/dist/{data-code-section-BjqDCzy3.js.map → data-code-section-MHMkC6q9.js.map} +1 -1
  236. package/dist/{data-keys-and-values-BMnGKbXm.js → data-keys-and-values-BJynhd6V.js} +3 -3
  237. package/dist/{data-keys-and-values-BMnGKbXm.js.map → data-keys-and-values-BJynhd6V.js.map} +1 -1
  238. package/dist/{data-keys-and-values--e2u0YXB.cjs → data-keys-and-values-sjag88jf.cjs} +3 -3
  239. package/dist/{data-keys-and-values--e2u0YXB.cjs.map → data-keys-and-values-sjag88jf.cjs.map} +1 -1
  240. package/dist/{data-list-CQWBPREX.cjs → data-list-CEGVpKNo.cjs} +5 -5
  241. package/dist/{data-list-CQWBPREX.cjs.map → data-list-CEGVpKNo.cjs.map} +1 -1
  242. package/dist/{data-list-Ca8j8X2e.js → data-list-SGIqDkMi.js} +5 -5
  243. package/dist/{data-list-Ca8j8X2e.js.map → data-list-SGIqDkMi.js.map} +1 -1
  244. package/dist/{data-list-row-wrapper-D-ieH7I9.cjs → data-list-row-wrapper-C-77LgWH.cjs} +2 -2
  245. package/dist/{data-list-row-wrapper-D-ieH7I9.cjs.map → data-list-row-wrapper-C-77LgWH.cjs.map} +1 -1
  246. package/dist/{data-list-row-wrapper-dMY1gERX.js → data-list-row-wrapper-DbGQIaO1.js} +2 -2
  247. package/dist/{data-list-row-wrapper-dMY1gERX.js.map → data-list-row-wrapper-DbGQIaO1.js.map} +1 -1
  248. package/dist/{data-list-skeleton-CIxMXF73.js → data-list-skeleton-CQvX7jIh.js} +4 -4
  249. package/dist/{data-list-skeleton-CIxMXF73.js.map → data-list-skeleton-CQvX7jIh.js.map} +1 -1
  250. package/dist/{data-list-skeleton-C-DkvqbS.cjs → data-list-skeleton-CmCTE-HQ.cjs} +4 -4
  251. package/dist/{data-list-skeleton-C-DkvqbS.cjs.map → data-list-skeleton-CmCTE-HQ.cjs.map} +1 -1
  252. package/dist/{data-list-top-cell-QZpCLDIZ.js → data-list-top-cell-D9EsRa0k.js} +5 -5
  253. package/dist/{data-list-top-cell-QZpCLDIZ.js.map → data-list-top-cell-D9EsRa0k.js.map} +1 -1
  254. package/dist/{data-list-top-cell-CL-FVkPX.cjs → data-list-top-cell-DoeqMbd1.cjs} +5 -5
  255. package/dist/{data-list-top-cell-CL-FVkPX.cjs.map → data-list-top-cell-DoeqMbd1.cjs.map} +1 -1
  256. package/dist/{data-panel-BGpCzY5K.js → data-panel-BEvHk4wg.js} +5 -5
  257. package/dist/{data-panel-BGpCzY5K.js.map → data-panel-BEvHk4wg.js.map} +1 -1
  258. package/dist/{data-panel-CsonAnlK.cjs → data-panel-BumsjXVz.cjs} +5 -5
  259. package/dist/{data-panel-CsonAnlK.cjs.map → data-panel-BumsjXVz.cjs.map} +1 -1
  260. package/dist/{date-time-range-picker-CF4a39P7.cjs → date-time-range-picker-ue0m5G27.cjs} +4 -4
  261. package/dist/{date-time-range-picker-CF4a39P7.cjs.map → date-time-range-picker-ue0m5G27.cjs.map} +1 -1
  262. package/dist/{date-time-range-picker-DDNeOyj9.js → date-time-range-picker-yJBIm34J.js} +4 -4
  263. package/dist/{date-time-range-picker-DDNeOyj9.js.map → date-time-range-picker-yJBIm34J.js.map} +1 -1
  264. package/dist/{dialog-XVpF4nQ5.cjs → dialog-ClItuCFY.cjs} +2 -2
  265. package/dist/{dialog-XVpF4nQ5.cjs.map → dialog-ClItuCFY.cjs.map} +1 -1
  266. package/dist/{dialog-DhjOHEDT.js → dialog-bnt6epW2.js} +2 -2
  267. package/dist/{dialog-DhjOHEDT.js.map → dialog-bnt6epW2.js.map} +1 -1
  268. package/dist/domains/logs/components/log-details-view.cjs.js +5 -5
  269. package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
  270. package/dist/domains/logs/components/log-details-view.es.js +5 -5
  271. package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
  272. package/dist/domains/logs/components/logs-error-content.cjs.js +4 -4
  273. package/dist/domains/logs/components/logs-error-content.es.js +4 -4
  274. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  275. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  276. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  277. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  278. package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
  279. package/dist/domains/logs/components/no-logs-info.es.js +2 -2
  280. package/dist/domains/memory/components/flame-graph.cjs.js +18 -18
  281. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  282. package/dist/domains/memory/components/flame-graph.es.js +18 -18
  283. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  284. package/dist/domains/memory/components/memory-studio-panel.cjs.js +4 -4
  285. package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
  286. package/dist/domains/memory/components/memory-studio-panel.es.js +4 -4
  287. package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
  288. package/dist/domains/memory/components/observation-detail-view.cjs.js +9 -9
  289. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  290. package/dist/domains/memory/components/observation-detail-view.es.js +9 -9
  291. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  292. package/dist/domains/memory/components/thread-context-progress.cjs.js +2 -2
  293. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  294. package/dist/domains/memory/components/thread-context-progress.es.js +2 -2
  295. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  296. package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
  297. package/dist/domains/metrics/components/bar-list.es.js +1 -1
  298. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  299. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  300. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  301. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  302. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  303. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  304. package/dist/domains/metrics/components/latency-card-view.cjs.js +3 -3
  305. package/dist/domains/metrics/components/latency-card-view.es.js +3 -3
  306. package/dist/domains/metrics/components/memory-card-view.cjs.js +3 -3
  307. package/dist/domains/metrics/components/memory-card-view.es.js +3 -3
  308. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  309. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  310. package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
  311. package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
  312. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +3 -3
  313. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +3 -3
  314. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +3 -3
  315. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +3 -3
  316. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +3 -3
  317. package/dist/domains/metrics/components/traces-volume-card-view.es.js +3 -3
  318. package/dist/domains/traces/components/no-traces-info.cjs.js +2 -2
  319. package/dist/domains/traces/components/no-traces-info.es.js +2 -2
  320. package/dist/domains/traces/components/span-data-panel-view.cjs.js +5 -5
  321. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  322. package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
  323. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  324. package/dist/domains/traces/components/span-token-usage.cjs.js +7 -7
  325. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  326. package/dist/domains/traces/components/span-token-usage.es.js +7 -7
  327. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  328. package/dist/domains/traces/components/timeline-expand-col.cjs.js +1 -1
  329. package/dist/domains/traces/components/timeline-expand-col.es.js +1 -1
  330. package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
  331. package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
  332. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -3
  333. package/dist/domains/traces/components/trace-data-panel-view.es.js +3 -3
  334. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +1 -1
  335. package/dist/domains/traces/components/trace-keys-and-values.es.js +1 -1
  336. package/dist/domains/traces/components/trace-timeline.cjs.js +1 -1
  337. package/dist/domains/traces/components/trace-timeline.cjs.js.map +1 -1
  338. package/dist/domains/traces/components/trace-timeline.es.js +1 -1
  339. package/dist/domains/traces/components/trace-timeline.es.js.map +1 -1
  340. package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
  341. package/dist/domains/traces/components/traces-error-content.es.js +3 -3
  342. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  343. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  344. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  345. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  346. package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
  347. package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
  348. package/dist/{drawer-DvuUmhic.cjs → drawer-CdsTitFp.cjs} +3 -3
  349. package/dist/{drawer-DvuUmhic.cjs.map → drawer-CdsTitFp.cjs.map} +1 -1
  350. package/dist/{drawer-Dyx25o_o.js → drawer-DZ9amYo_.js} +3 -3
  351. package/dist/{drawer-Dyx25o_o.js.map → drawer-DZ9amYo_.js.map} +1 -1
  352. package/dist/{dropdown-menu-UWIbg6mM.js → dropdown-menu-DEFygDZI.js} +2 -2
  353. package/dist/{dropdown-menu-UWIbg6mM.js.map → dropdown-menu-DEFygDZI.js.map} +1 -1
  354. package/dist/{dropdown-menu-BE2WHHln.cjs → dropdown-menu-ppWztidX.cjs} +2 -2
  355. package/dist/{dropdown-menu-BE2WHHln.cjs.map → dropdown-menu-ppWztidX.cjs.map} +1 -1
  356. package/dist/ee/signals/components/signals-empty-state.cjs.js +32 -32
  357. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  358. package/dist/ee/signals/components/signals-empty-state.es.js +32 -32
  359. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  360. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  361. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  362. package/dist/ee/topics/components/topics-layout.cjs.js +2 -2
  363. package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
  364. package/dist/ee/topics/components/topics-layout.es.js +2 -2
  365. package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
  366. package/dist/{field-block-CBdMcT-i.js → field-block-B63CpA4d.js} +2 -2
  367. package/dist/{field-block-CBdMcT-i.js.map → field-block-B63CpA4d.js.map} +1 -1
  368. package/dist/{field-block-CEbnWKc0.cjs → field-block-BcTR08I7.cjs} +2 -2
  369. package/dist/{field-block-CEbnWKc0.cjs.map → field-block-BcTR08I7.cjs.map} +1 -1
  370. package/dist/{horizontal-bars-CHoNhl-X.js → horizontal-bars-DHeyxqDT.js} +8 -8
  371. package/dist/{horizontal-bars-CHoNhl-X.js.map → horizontal-bars-DHeyxqDT.js.map} +1 -1
  372. package/dist/{horizontal-bars-aRhVh7mi.cjs → horizontal-bars-qf60G0xH.cjs} +8 -8
  373. package/dist/{horizontal-bars-aRhVh7mi.cjs.map → horizontal-bars-qf60G0xH.cjs.map} +1 -1
  374. package/dist/{input-group-QaBen5tC.cjs → input-group-CH72YUVL.cjs} +2 -2
  375. package/dist/{input-group-QaBen5tC.cjs.map → input-group-CH72YUVL.cjs.map} +1 -1
  376. package/dist/{input-group-DZnJcY3U.js → input-group-Dzs-ai0n.js} +2 -2
  377. package/dist/{input-group-DZnJcY3U.js.map → input-group-Dzs-ai0n.js.map} +1 -1
  378. package/dist/{logs-data-list-4R9mXlZ5.cjs → logs-data-list-B6XQnRed.cjs} +5 -5
  379. package/dist/{logs-data-list-4R9mXlZ5.cjs.map → logs-data-list-B6XQnRed.cjs.map} +1 -1
  380. package/dist/{logs-data-list-BXLk5vqv.js → logs-data-list-BkmYnYuf.js} +5 -5
  381. package/dist/{logs-data-list-BXLk5vqv.js.map → logs-data-list-BkmYnYuf.js.map} +1 -1
  382. package/dist/{markdown-renderer-ZzJcwfS3.js → markdown-renderer-BzKf1Gel.js} +7 -7
  383. package/dist/{markdown-renderer-ZzJcwfS3.js.map → markdown-renderer-BzKf1Gel.js.map} +1 -1
  384. package/dist/{markdown-renderer-DRnUrMmF.cjs → markdown-renderer-CD2YXUdF.cjs} +7 -7
  385. package/dist/{markdown-renderer-DRnUrMmF.cjs.map → markdown-renderer-CD2YXUdF.cjs.map} +1 -1
  386. package/dist/{metrics-card-C3gkudSv.js → metrics-card-C0lGcxb9.js} +4 -4
  387. package/dist/{metrics-card-C3gkudSv.js.map → metrics-card-C0lGcxb9.js.map} +1 -1
  388. package/dist/{metrics-card-BSXWk6GD.cjs → metrics-card-DmbKNY3U.cjs} +4 -4
  389. package/dist/{metrics-card-BSXWk6GD.cjs.map → metrics-card-DmbKNY3U.cjs.map} +1 -1
  390. package/dist/{metrics-kpi-card-C4R43XbL.js → metrics-kpi-card-AhIw9eyu.js} +2 -2
  391. package/dist/{metrics-kpi-card-C4R43XbL.js.map → metrics-kpi-card-AhIw9eyu.js.map} +1 -1
  392. package/dist/{metrics-kpi-card-_xThjpJl.cjs → metrics-kpi-card-tAReOFYk.cjs} +2 -2
  393. package/dist/{metrics-kpi-card-_xThjpJl.cjs.map → metrics-kpi-card-tAReOFYk.cjs.map} +1 -1
  394. package/dist/{metrics-line-chart-kZ1Ed_ga.cjs → metrics-line-chart-B_0w522y.cjs} +4 -4
  395. package/dist/metrics-line-chart-B_0w522y.cjs.map +1 -0
  396. package/dist/{metrics-line-chart-COIxay_u.js → metrics-line-chart-DudirJsu.js} +4 -4
  397. package/dist/metrics-line-chart-DudirJsu.js.map +1 -0
  398. package/dist/primitives/portal-container.cjs.js.map +1 -1
  399. package/dist/primitives/portal-container.es.js.map +1 -1
  400. package/dist/{property-filter-applied-DgmkZVbl.cjs → property-filter-applied-BhxbHAN8.cjs} +10 -10
  401. package/dist/{property-filter-applied-DgmkZVbl.cjs.map → property-filter-applied-BhxbHAN8.cjs.map} +1 -1
  402. package/dist/{property-filter-applied-Bs1Ck691.js → property-filter-applied-DI4w1ACS.js} +10 -10
  403. package/dist/{property-filter-applied-Bs1Ck691.js.map → property-filter-applied-DI4w1ACS.js.map} +1 -1
  404. package/dist/resize/panel-drawer.cjs.js +1 -1
  405. package/dist/resize/panel-drawer.es.js +1 -1
  406. package/dist/{scroll-area-h3DvBR0U.js → scroll-area-DZrEuKjC.js} +2 -2
  407. package/dist/{scroll-area-h3DvBR0U.js.map → scroll-area-DZrEuKjC.js.map} +1 -1
  408. package/dist/{scroll-area-BIaiA4t3.cjs → scroll-area-Dv6QagXt.cjs} +2 -2
  409. package/dist/{scroll-area-BIaiA4t3.cjs.map → scroll-area-Dv6QagXt.cjs.map} +1 -1
  410. package/dist/{search-field-block-DmqZsrrI.cjs → search-field-block-D6TdrHZX.cjs} +4 -4
  411. package/dist/{search-field-block-DmqZsrrI.cjs.map → search-field-block-D6TdrHZX.cjs.map} +1 -1
  412. package/dist/{search-field-block-CMoQ9fjl.js → search-field-block-DCnFZzRK.js} +4 -4
  413. package/dist/{search-field-block-CMoQ9fjl.js.map → search-field-block-DCnFZzRK.js.map} +1 -1
  414. package/dist/{select-CUMnhTBS.cjs → select-B6ce20XX.cjs} +3 -3
  415. package/dist/{select-CUMnhTBS.cjs.map → select-B6ce20XX.cjs.map} +1 -1
  416. package/dist/{select-LyQqK1ph.js → select-Beo8qQ0e.js} +3 -3
  417. package/dist/{select-LyQqK1ph.js.map → select-Beo8qQ0e.js.map} +1 -1
  418. package/dist/{select-field-block-BSlngEHK.js → select-field-block-DXw3tD0y.js} +3 -3
  419. package/dist/{select-field-block-BSlngEHK.js.map → select-field-block-DXw3tD0y.js.map} +1 -1
  420. package/dist/{select-field-block-BI_NZs2R.cjs → select-field-block-svlHplxW.cjs} +3 -3
  421. package/dist/{select-field-block-BI_NZs2R.cjs.map → select-field-block-svlHplxW.cjs.map} +1 -1
  422. package/dist/{tabs-tab-Ch7-lVxf.cjs → tabs-tab-BkUCE-4E.cjs} +2 -2
  423. package/dist/{tabs-tab-Ch7-lVxf.cjs.map → tabs-tab-BkUCE-4E.cjs.map} +1 -1
  424. package/dist/{tabs-tab-CQhe76fQ.js → tabs-tab-DDGltcUc.js} +2 -2
  425. package/dist/{tabs-tab-CQhe76fQ.js.map → tabs-tab-DDGltcUc.js.map} +1 -1
  426. package/dist/{text-field-block-BUvxjW9m.cjs → text-field-block-BGlwSFYC.cjs} +2 -2
  427. package/dist/{text-field-block-BUvxjW9m.cjs.map → text-field-block-BGlwSFYC.cjs.map} +1 -1
  428. package/dist/{text-field-block-DxtR1Ft4.js → text-field-block-DOiM0dpY.js} +2 -2
  429. package/dist/{text-field-block-DxtR1Ft4.js.map → text-field-block-DOiM0dpY.js.map} +1 -1
  430. package/dist/{time-picker-Box0pdQU.cjs → time-picker-BOQtPoyD.cjs} +2 -2
  431. package/dist/{time-picker-Box0pdQU.cjs.map → time-picker-BOQtPoyD.cjs.map} +1 -1
  432. package/dist/{time-picker-ew9aXG86.js → time-picker-mLzcoQMO.js} +2 -2
  433. package/dist/{time-picker-ew9aXG86.js.map → time-picker-mLzcoQMO.js.map} +1 -1
  434. package/dist/{tooltip-Ch06EF_U.js → tooltip-BFbYhBj1.js} +2 -2
  435. package/dist/{tooltip-Ch06EF_U.js.map → tooltip-BFbYhBj1.js.map} +1 -1
  436. package/dist/{tooltip-VGyJcEoE.cjs → tooltip-CLz5PtEE.cjs} +2 -2
  437. package/dist/{tooltip-VGyJcEoE.cjs.map → tooltip-CLz5PtEE.cjs.map} +1 -1
  438. package/dist/{traces-data-list-DLmFHLQ6.js → traces-data-list-Bmx7jLZc.js} +5 -5
  439. package/dist/{traces-data-list-DLmFHLQ6.js.map → traces-data-list-Bmx7jLZc.js.map} +1 -1
  440. package/dist/{traces-data-list-G69pEglx.cjs → traces-data-list-Dx9tpivx.cjs} +5 -5
  441. package/dist/{traces-data-list-G69pEglx.cjs.map → traces-data-list-Dx9tpivx.cjs.map} +1 -1
  442. package/package.json +5 -5
  443. package/dist/metrics-line-chart-COIxay_u.js.map +0 -1
  444. package/dist/metrics-line-chart-kZ1Ed_ga.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Table.es.js","sources":["../../src/ds/components/Table/Table.tsx","../../src/ds/components/Table/utils.ts","../../src/ds/components/Table/Cells.tsx","../../src/ds/components/Table/use-table-keyboard-navigation.ts"],"sourcesContent":["import type { CSSProperties, HTMLAttributes, ReactNode, ThHTMLAttributes } from 'react';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TableProps {\n className?: string;\n children: ReactNode;\n size?: 'default' | 'small';\n style?: CSSProperties;\n}\n\nconst rowSize = {\n default: '[&>tbody>tr]:h-table-row',\n small: '[&>tbody>tr]:h-table-row-small',\n};\n\nexport const Table = ({ className, children, size = 'default', style }: TableProps) => {\n return (\n <table className={cn('w-full', rowSize[size], className)} style={style}>\n {children}\n </table>\n );\n};\n\nexport interface TheadProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const Thead = ({ className, children }: TheadProps) => {\n return (\n <thead>\n <tr className={cn('h-table-header border-b border-border1 bg-surface2/80', className)}>{children}</tr>\n </thead>\n );\n};\n\nexport interface ThProps extends ThHTMLAttributes<HTMLTableCellElement> {\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}\n\nexport const Th = ({ className, children, ...props }: ThProps) => {\n return (\n <th\n className={cn(\n 'h-full text-left text-ui-xs font-medium tracking-wide whitespace-nowrap text-neutral2 uppercase first:pl-3 last:pr-3',\n className,\n )}\n {...props}\n >\n {children}\n </th>\n );\n};\n\nexport interface TbodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n className?: string;\n children: ReactNode;\n}\n\nexport const Tbody = ({ className, children, ...props }: TbodyProps) => {\n return (\n <tbody className={cn('', className)} {...props}>\n {children}\n </tbody>\n );\n};\n\nexport interface RowProps {\n className?: string;\n children: ReactNode;\n selected?: boolean;\n style?: CSSProperties;\n onClick?: () => void;\n tabIndex?: number;\n /** When true, row receives focus and scrolls into view */\n isActive?: boolean;\n}\n\nexport const Row = forwardRef<HTMLTableRowElement, RowProps>(\n ({ className, children, selected = false, style, onClick, isActive = false, ...props }, ref) => {\n const internalRef = useRef<HTMLTableRowElement>(null);\n\n // Merge forwarded ref with internal ref\n useEffect(() => {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(internalRef.current);\n } else {\n ref.current = internalRef.current;\n }\n }, [ref]);\n\n // Focus and scroll into view when active\n useEffect(() => {\n if (isActive && internalRef.current) {\n internalRef.current.focus();\n internalRef.current.scrollIntoView({ block: 'nearest' });\n }\n }, [isActive]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (event.key === 'Enter' && onClick) {\n onClick();\n }\n };\n\n return (\n <tr\n className={cn(\n 'border-b border-border1',\n // Smooth hover transition\n 'duration-normal transition-colors ease-out-custom',\n 'hover:bg-surface3',\n // Focus state\n 'focus:bg-surface3 focus:ring-1 focus:ring-accent1/50 focus:outline-hidden focus:ring-inset',\n selected && 'bg-surface4',\n onClick && 'cursor-pointer',\n className,\n )}\n style={style}\n onClick={onClick}\n ref={internalRef}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={handleKeyDown}\n data-active={isActive || undefined}\n {...props}\n >\n {children}\n </tr>\n );\n },\n);\n","export const formatDateCell = (date: Date) => {\n // Format the month as a short text representation\n const month = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(date).toUpperCase();\n const day = date.getDate();\n\n const formattedDay = `${month} ${day}`;\n\n const time = new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false, // Use 24-hour format\n }).format(date);\n\n return { day: formattedDay, time };\n};\n","import React from 'react';\n\nimport { Icon } from '../../icons/Icon';\nimport { Txt } from '../Txt';\nimport { formatDateCell } from './utils';\nimport { cn } from '@/lib/utils';\n\nexport interface CellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const Cell = ({ className, children, ...props }: CellProps) => {\n return (\n <td className={cn('text-neutral5 first:pl-3 last:pr-3', className)} {...props}>\n <div className={cn('flex size-full shrink-0 items-center')}>{children}</div>\n </td>\n );\n};\n\nexport const TxtCell = ({ className, children }: CellProps) => {\n return (\n <Cell className={className}>\n <Txt as=\"span\" variant=\"ui-md\" className=\"w-full truncate\">\n {children}\n </Txt>\n </Cell>\n );\n};\n\nexport interface DateTimeCellProps extends Omit<CellProps, 'children'> {\n dateTime: Date;\n}\n\nexport const DateTimeCell = ({ dateTime, ...props }: DateTimeCellProps) => {\n const { day, time } = formatDateCell(dateTime);\n\n return (\n <Cell {...props}>\n <div className=\"shrink-0\">\n <Txt as=\"span\" variant=\"ui-sm\" className=\"text-neutral3\">\n {day}\n </Txt>{' '}\n <Txt as=\"span\" variant=\"ui-md\">\n {time}\n </Txt>\n </div>\n </Cell>\n );\n};\n\nexport interface EntryCellProps extends Omit<CellProps, 'children'> {\n name: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport const EntryCell = ({ name, description, icon, meta, ...props }: EntryCellProps) => {\n return (\n <Cell {...props}>\n <div className=\"flex items-center gap-3.5\">\n {icon && (\n <Icon size=\"lg\" className=\"text-neutral5\">\n {icon}\n </Icon>\n )}\n\n <div className=\"flex flex-col gap-0\">\n <Txt as=\"span\" variant=\"ui-md\" className=\"!leading-tight text-neutral6\">\n {name}\n </Txt>\n {description && (\n <Txt\n as=\"span\"\n variant=\"ui-xs\"\n className=\"w-full max-w-dropdown-max-height truncate pt-1 !leading-tight text-neutral3\"\n >\n {description}\n </Txt>\n )}\n </div>\n {meta}\n </div>\n </Cell>\n );\n};\n","import { useState, useCallback, useEffect } from 'react';\n\nexport interface UseTableKeyboardNavigationOptions {\n /** Number of items in the list */\n itemCount: number;\n /** Initial active index (-1 = none) */\n initialIndex?: number;\n /** Wrap around at boundaries */\n wrap?: boolean;\n /** Callback when Enter pressed on active row */\n onSelect?: (index: number) => void;\n /** When true, registers keyboard handlers globally on the document */\n global?: boolean;\n}\n\nexport interface UseTableKeyboardNavigationReturn {\n /** Currently active index (-1 if none) */\n activeIndex: number;\n /** Set active index programmatically */\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n /** Returns props to spread on the Tbody element. Returns null when global is true. */\n getKeyboardProps: () => { onKeyDown: (e: React.KeyboardEvent) => void; tabIndex: number } | null;\n}\n\nexport function useTableKeyboardNavigation({\n itemCount,\n initialIndex = -1,\n wrap = false,\n onSelect,\n global = false,\n}: UseTableKeyboardNavigationOptions): UseTableKeyboardNavigationReturn {\n const [activeIndex, setActiveIndex] = useState(initialIndex);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent | React.KeyboardEvent) => {\n // No-op for empty list\n if (itemCount === 0) return;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n setActiveIndex(prev => {\n if (prev === -1) return 0;\n if (prev >= itemCount - 1) {\n return wrap ? 0 : itemCount - 1;\n }\n return prev + 1;\n });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n setActiveIndex(prev => {\n if (prev === -1) return itemCount - 1;\n if (prev <= 0) {\n return wrap ? itemCount - 1 : 0;\n }\n return prev - 1;\n });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setActiveIndex(0);\n break;\n }\n case 'End': {\n e.preventDefault();\n setActiveIndex(itemCount - 1);\n break;\n }\n case 'Enter': {\n if (activeIndex >= 0 && onSelect) {\n e.preventDefault();\n onSelect(activeIndex);\n }\n break;\n }\n }\n },\n [itemCount, wrap, activeIndex, onSelect],\n );\n\n // Register global keyboard handlers when global option is enabled\n useEffect(() => {\n if (!global) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [global, handleKeyDown]);\n\n const getKeyboardProps = useCallback(() => {\n if (global) return null;\n return { onKeyDown: handleKeyDown as (e: React.KeyboardEvent) => void, tabIndex: 0 };\n }, [global, handleKeyDown]);\n\n return {\n activeIndex,\n setActiveIndex,\n getKeyboardProps,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Table.es.js","sources":["../../src/ds/components/Table/Table.tsx","../../src/ds/components/Table/utils.ts","../../src/ds/components/Table/Cells.tsx","../../src/ds/components/Table/use-table-keyboard-navigation.ts"],"sourcesContent":["import type { CSSProperties, HTMLAttributes, ReactNode, ThHTMLAttributes } from 'react';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TableProps {\n className?: string;\n children: ReactNode;\n size?: 'default' | 'small';\n style?: CSSProperties;\n}\n\nconst rowSize = {\n default: '[&>tbody>tr]:h-table-row',\n small: '[&>tbody>tr]:h-table-row-small',\n};\n\nexport const Table = ({ className, children, size = 'default', style }: TableProps) => {\n return (\n <table className={cn('w-full', rowSize[size], className)} style={style}>\n {children}\n </table>\n );\n};\n\nexport interface TheadProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const Thead = ({ className, children }: TheadProps) => {\n return (\n <thead>\n <tr className={cn('h-table-header border-b border-border1 bg-surface2/80', className)}>{children}</tr>\n </thead>\n );\n};\n\nexport interface ThProps extends ThHTMLAttributes<HTMLTableCellElement> {\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}\n\nexport const Th = ({ className, children, ...props }: ThProps) => {\n return (\n <th\n className={cn(\n 'h-full text-left text-ui-xs font-medium tracking-wide whitespace-nowrap text-neutral2 uppercase first:pl-3 last:pr-3',\n className,\n )}\n {...props}\n >\n {children}\n </th>\n );\n};\n\nexport interface TbodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n className?: string;\n children: ReactNode;\n}\n\nexport const Tbody = ({ className, children, ...props }: TbodyProps) => {\n return (\n <tbody className={cn('', className)} {...props}>\n {children}\n </tbody>\n );\n};\n\nexport interface RowProps {\n className?: string;\n children: ReactNode;\n selected?: boolean;\n style?: CSSProperties;\n onClick?: () => void;\n tabIndex?: number;\n /** When true, row receives focus and scrolls into view */\n isActive?: boolean;\n}\n\nexport const Row = forwardRef<HTMLTableRowElement, RowProps>(\n ({ className, children, selected = false, style, onClick, isActive = false, ...props }, ref) => {\n const internalRef = useRef<HTMLTableRowElement>(null);\n\n // Merge forwarded ref with internal ref\n useEffect(() => {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(internalRef.current);\n } else {\n ref.current = internalRef.current;\n }\n }, [ref]);\n\n // Focus and scroll into view when active\n useEffect(() => {\n if (isActive && internalRef.current) {\n internalRef.current.focus();\n internalRef.current.scrollIntoView({ block: 'nearest' });\n }\n }, [isActive]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (event.key === 'Enter' && onClick) {\n onClick();\n }\n };\n\n return (\n <tr\n className={cn(\n 'border-b border-border1',\n // Smooth hover transition\n 'duration-normal transition-colors ease-out-custom',\n 'hover:bg-surface3',\n // Focus state\n 'focus:bg-surface3 focus:ring-1 focus:ring-accent1/50 focus:outline-hidden focus:ring-inset',\n selected && 'bg-surface4',\n onClick && 'cursor-pointer',\n className,\n )}\n style={style}\n onClick={onClick}\n ref={internalRef}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={handleKeyDown}\n data-active={isActive || undefined}\n {...props}\n >\n {children}\n </tr>\n );\n },\n);\n","export const formatDateCell = (date: Date) => {\n // Format the month as a short text representation\n const month = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(date).toUpperCase();\n const day = date.getDate();\n\n const formattedDay = `${month} ${day}`;\n\n const time = new Intl.DateTimeFormat('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false, // Use 24-hour format\n }).format(date);\n\n return { day: formattedDay, time };\n};\n","import React from 'react';\n\nimport { Icon } from '../../icons/Icon';\nimport { Txt } from '../Txt';\nimport { formatDateCell } from './utils';\nimport { cn } from '@/lib/utils';\n\nexport interface CellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport const Cell = ({ className, children, ...props }: CellProps) => {\n return (\n <td className={cn('text-neutral5 first:pl-3 last:pr-3', className)} {...props}>\n <div className={cn('flex size-full shrink-0 items-center')}>{children}</div>\n </td>\n );\n};\n\nexport const TxtCell = ({ className, children }: CellProps) => {\n return (\n <Cell className={className}>\n <Txt as=\"span\" variant=\"ui-md\" className=\"w-full truncate\">\n {children}\n </Txt>\n </Cell>\n );\n};\n\nexport interface DateTimeCellProps extends Omit<CellProps, 'children'> {\n dateTime: Date;\n}\n\nexport const DateTimeCell = ({ dateTime, ...props }: DateTimeCellProps) => {\n const { day, time } = formatDateCell(dateTime);\n\n return (\n <Cell {...props}>\n <div className=\"shrink-0\">\n <Txt as=\"span\" variant=\"ui-sm\" className=\"text-neutral3\">\n {day}\n </Txt>{' '}\n <Txt as=\"span\" variant=\"ui-md\">\n {time}\n </Txt>\n </div>\n </Cell>\n );\n};\n\nexport interface EntryCellProps extends Omit<CellProps, 'children'> {\n name: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport const EntryCell = ({ name, description, icon, meta, ...props }: EntryCellProps) => {\n return (\n <Cell {...props}>\n <div className=\"flex items-center gap-3.5\">\n {icon && (\n <Icon size=\"lg\" className=\"text-neutral5\">\n {icon}\n </Icon>\n )}\n\n <div className=\"flex flex-col gap-0\">\n <Txt as=\"span\" variant=\"ui-md\" className=\"text-neutral6 !leading-tight\">\n {name}\n </Txt>\n {description && (\n <Txt\n as=\"span\"\n variant=\"ui-xs\"\n className=\"max-w-dropdown-max-height text-neutral3 w-full truncate pt-1 !leading-tight\"\n >\n {description}\n </Txt>\n )}\n </div>\n {meta}\n </div>\n </Cell>\n );\n};\n","import { useState, useCallback, useEffect } from 'react';\n\nexport interface UseTableKeyboardNavigationOptions {\n /** Number of items in the list */\n itemCount: number;\n /** Initial active index (-1 = none) */\n initialIndex?: number;\n /** Wrap around at boundaries */\n wrap?: boolean;\n /** Callback when Enter pressed on active row */\n onSelect?: (index: number) => void;\n /** When true, registers keyboard handlers globally on the document */\n global?: boolean;\n}\n\nexport interface UseTableKeyboardNavigationReturn {\n /** Currently active index (-1 if none) */\n activeIndex: number;\n /** Set active index programmatically */\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n /** Returns props to spread on the Tbody element. Returns null when global is true. */\n getKeyboardProps: () => { onKeyDown: (e: React.KeyboardEvent) => void; tabIndex: number } | null;\n}\n\nexport function useTableKeyboardNavigation({\n itemCount,\n initialIndex = -1,\n wrap = false,\n onSelect,\n global = false,\n}: UseTableKeyboardNavigationOptions): UseTableKeyboardNavigationReturn {\n const [activeIndex, setActiveIndex] = useState(initialIndex);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent | React.KeyboardEvent) => {\n // No-op for empty list\n if (itemCount === 0) return;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n setActiveIndex(prev => {\n if (prev === -1) return 0;\n if (prev >= itemCount - 1) {\n return wrap ? 0 : itemCount - 1;\n }\n return prev + 1;\n });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n setActiveIndex(prev => {\n if (prev === -1) return itemCount - 1;\n if (prev <= 0) {\n return wrap ? itemCount - 1 : 0;\n }\n return prev - 1;\n });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setActiveIndex(0);\n break;\n }\n case 'End': {\n e.preventDefault();\n setActiveIndex(itemCount - 1);\n break;\n }\n case 'Enter': {\n if (activeIndex >= 0 && onSelect) {\n e.preventDefault();\n onSelect(activeIndex);\n }\n break;\n }\n }\n },\n [itemCount, wrap, activeIndex, onSelect],\n );\n\n // Register global keyboard handlers when global option is enabled\n useEffect(() => {\n if (!global) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [global, handleKeyDown]);\n\n const getKeyboardProps = useCallback(() => {\n if (global) return null;\n return { onKeyDown: handleKeyDown as (e: React.KeyboardEvent) => void, tabIndex: 0 };\n }, [global, handleKeyDown]);\n\n return {\n activeIndex,\n setActiveIndex,\n getKeyboardProps,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const tabsTab = require('../tabs-tab-Ch7-lVxf.cjs');
5
+ const tabsTab = require('../tabs-tab-BkUCE-4E.cjs');
6
6
  const tabsContent = require('../tabs-content-wBU5qmb6.cjs');
7
7
 
8
8
 
@@ -1,3 +1,3 @@
1
- export { T as Tab, a as TabList, b as Tabs } from '../tabs-tab-CQhe76fQ.js';
1
+ export { T as Tab, a as TabList, b as Tabs } from '../tabs-tab-DDGltcUc.js';
2
2
  export { T as TabContent } from '../tabs-content-XUh680fO.js';
3
3
  //# sourceMappingURL=Tabs.es.js.map
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
7
  const utils_cn = require('../cn-vA5sWo9W.cjs');
8
- const Button = require('../Button-B5RnKrGb.cjs');
8
+ const Button = require('../Button-Bm94fEF2.cjs');
9
9
  const Txt = require('../Txt-I5lK8zy7.cjs');
10
10
 
11
11
  const ThreadList = ({ children, "aria-label": ariaLabel = "Threads", embedded = false }) => {
@@ -24,7 +24,7 @@ const ThreadList = ({ children, "aria-label": ariaLabel = "Threads", embedded =
24
24
  const ThreadListNewItem = ({ as, href, to, children }) => {
25
25
  return /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { as, href, to, variant: "ghost", className: "w-full justify-start rounded-xl", children });
26
26
  };
27
- const ThreadListSeparator = () => /* @__PURE__ */ jsxRuntime.jsx("div", { role: "separator", "aria-orientation": "horizontal", className: "-mx-1 my-1 h-px bg-border1/40" });
27
+ const ThreadListSeparator = () => /* @__PURE__ */ jsxRuntime.jsx("div", { role: "separator", "aria-orientation": "horizontal", className: "bg-border1/40 -mx-1 my-1 h-px" });
28
28
  const ThreadListItems = ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex flex-col gap-px", "data-testid": "thread-list", children });
29
29
  const ThreadListItem = ({
30
30
  as,
@@ -69,7 +69,7 @@ const ThreadListItem = ({
69
69
  ] });
70
70
  };
71
71
  const ThreadListEmpty = ({ children }) => {
72
- return /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "p", variant: "ui-sm", className: "px-5 py-3 text-neutral3", children });
72
+ return /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "p", variant: "ui-sm", className: "text-neutral3 px-5 py-3", children });
73
73
  };
74
74
 
75
75
  exports.ThreadList = ThreadList;
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadList.cjs.js","sources":["../../src/ds/components/ThreadList/thread-list.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport type { ElementType, MouseEvent, ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../Button';\nimport { Txt } from '../Txt';\n\nexport interface ThreadListProps {\n children: ReactNode;\n 'aria-label'?: string;\n /**\n * When true, drops the standalone block chrome (background, border, rounded corners, inset)\n * so the list can render flush inside an outer container without nesting a second box.\n */\n embedded?: boolean;\n}\n\nexport const ThreadList = ({ children, 'aria-label': ariaLabel = 'Threads', embedded = false }: ThreadListProps) => {\n return (\n <div className={cn('size-full', !embedded && 'pb-2 pl-2')}>\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'h-full overflow-y-auto p-1',\n !embedded && 'rounded-studio-panel border border-border1/50 bg-surface3',\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport interface ThreadListNewItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n children: ReactNode;\n}\n\nexport const ThreadListNewItem = ({ as, href, to, children }: ThreadListNewItemProps) => {\n return (\n <Button as={as} href={href} to={to} variant=\"ghost\" className=\"w-full justify-start rounded-xl\">\n {children}\n </Button>\n );\n};\n\nexport const ThreadListSeparator = () => (\n <div role=\"separator\" aria-orientation=\"horizontal\" className=\"-mx-1 my-1 h-px bg-border1/40\" />\n);\n\nexport interface ThreadListItemsProps {\n children: ReactNode;\n}\n\nexport const ThreadListItems = ({ children }: ThreadListItemsProps) => (\n <ol className=\"flex flex-col gap-px\" data-testid=\"thread-list\">\n {children}\n </ol>\n);\n\nexport interface ThreadListItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n isActive?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n onDelete?: () => void;\n deleteLabel?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport const ThreadListItem = ({\n as,\n href,\n to,\n isActive,\n onClick,\n onDelete,\n deleteLabel = 'delete',\n className,\n children,\n}: ThreadListItemProps) => {\n return (\n <li className=\"group relative\">\n <Button\n as={as}\n href={href}\n to={to}\n onClick={onClick}\n variant=\"ghost\"\n className={cn(\n 'h-auto! min-h-form-md w-full min-w-0 justify-start rounded-xl px-3 py-2 text-left',\n onDelete && 'pr-9',\n isActive && 'bg-surface4 text-neutral6',\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n </Button>\n\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2 opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100\"\n onClick={onDelete}\n aria-label={deleteLabel}\n >\n <X />\n </Button>\n )}\n </li>\n );\n};\n\nexport interface ThreadListEmptyProps {\n children: ReactNode;\n}\n\nexport const ThreadListEmpty = ({ children }: ThreadListEmptyProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-sm\" className=\"px-5 py-3 text-neutral3\">\n {children}\n </Txt>\n );\n};\n"],"names":["jsx","cn","Button","jsxs","X","Txt"],"mappings":";;;;;;;;;;AAiBO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,cAAc,SAAA,GAAY,SAAA,EAAW,QAAA,GAAW,KAAA,EAAM,KAAuB;AAClH,EAAA,uBACEA,cAAA,CAAC,SAAI,SAAA,EAAWC,WAAA,CAAG,aAAa,CAAC,QAAA,IAAY,WAAW,CAAA,EACtD,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAWC,WAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAC,QAAA,IAAY;AAAA,OACf;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AASO,MAAM,oBAAoB,CAAC,EAAE,IAAI,IAAA,EAAM,EAAA,EAAI,UAAS,KAA8B;AACvF,EAAA,uBACED,cAAA,CAACE,iBAAO,EAAA,EAAQ,IAAA,EAAY,IAAQ,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,iCAAA,EAC3D,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,mBAAA,GAAsB,sBACjCF,cAAA,CAAC,KAAA,EAAA,EAAI,MAAK,WAAA,EAAY,kBAAA,EAAiB,YAAA,EAAa,SAAA,EAAU,+BAAA,EAAgC;AAOzF,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,qBACzCA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sBAAA,EAAuB,aAAA,EAAY,aAAA,EAC9C,QAAA,EACH;AAeK,MAAM,iBAAiB,CAAC;AAAA,EAC7B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,uBACEG,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,oBAAAH,cAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAWD,WAAA;AAAA,UACT,mFAAA;AAAA,UACA,QAAA,IAAY,MAAA;AAAA,UACZ,QAAA,IAAY,2BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAS;AAAA;AAAA,KAC7C;AAAA,IAEC,QAAA,oBACCA,cAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,+HAAA;AAAA,QACV,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,WAAA;AAAA,QAEZ,yCAACE,aAAA,EAAA,EAAE;AAAA;AAAA;AACL,GAAA,EAEJ,CAAA;AAEJ;AAMO,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,KAA4B;AACrE,EAAA,uBACEJ,cAAA,CAACK,WAAI,EAAA,EAAG,GAAA,EAAI,SAAQ,OAAA,EAAQ,SAAA,EAAU,2BACnC,QAAA,EACH,CAAA;AAEJ;;;;;;;;;"}
1
+ {"version":3,"file":"ThreadList.cjs.js","sources":["../../src/ds/components/ThreadList/thread-list.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport type { ElementType, MouseEvent, ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../Button';\nimport { Txt } from '../Txt';\n\nexport interface ThreadListProps {\n children: ReactNode;\n 'aria-label'?: string;\n /**\n * When true, drops the standalone block chrome (background, border, rounded corners, inset)\n * so the list can render flush inside an outer container without nesting a second box.\n */\n embedded?: boolean;\n}\n\nexport const ThreadList = ({ children, 'aria-label': ariaLabel = 'Threads', embedded = false }: ThreadListProps) => {\n return (\n <div className={cn('size-full', !embedded && 'pb-2 pl-2')}>\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'h-full overflow-y-auto p-1',\n !embedded && 'rounded-studio-panel border border-border1/50 bg-surface3',\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport interface ThreadListNewItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n children: ReactNode;\n}\n\nexport const ThreadListNewItem = ({ as, href, to, children }: ThreadListNewItemProps) => {\n return (\n <Button as={as} href={href} to={to} variant=\"ghost\" className=\"w-full justify-start rounded-xl\">\n {children}\n </Button>\n );\n};\n\nexport const ThreadListSeparator = () => (\n <div role=\"separator\" aria-orientation=\"horizontal\" className=\"bg-border1/40 -mx-1 my-1 h-px\" />\n);\n\nexport interface ThreadListItemsProps {\n children: ReactNode;\n}\n\nexport const ThreadListItems = ({ children }: ThreadListItemsProps) => (\n <ol className=\"flex flex-col gap-px\" data-testid=\"thread-list\">\n {children}\n </ol>\n);\n\nexport interface ThreadListItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n isActive?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n onDelete?: () => void;\n deleteLabel?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport const ThreadListItem = ({\n as,\n href,\n to,\n isActive,\n onClick,\n onDelete,\n deleteLabel = 'delete',\n className,\n children,\n}: ThreadListItemProps) => {\n return (\n <li className=\"group relative\">\n <Button\n as={as}\n href={href}\n to={to}\n onClick={onClick}\n variant=\"ghost\"\n className={cn(\n 'h-auto! min-h-form-md w-full min-w-0 justify-start rounded-xl px-3 py-2 text-left',\n onDelete && 'pr-9',\n isActive && 'bg-surface4 text-neutral6',\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n </Button>\n\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2 opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100\"\n onClick={onDelete}\n aria-label={deleteLabel}\n >\n <X />\n </Button>\n )}\n </li>\n );\n};\n\nexport interface ThreadListEmptyProps {\n children: ReactNode;\n}\n\nexport const ThreadListEmpty = ({ children }: ThreadListEmptyProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-sm\" className=\"text-neutral3 px-5 py-3\">\n {children}\n </Txt>\n );\n};\n"],"names":["jsx","cn","Button","jsxs","X","Txt"],"mappings":";;;;;;;;;;AAiBO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,cAAc,SAAA,GAAY,SAAA,EAAW,QAAA,GAAW,KAAA,EAAM,KAAuB;AAClH,EAAA,uBACEA,cAAA,CAAC,SAAI,SAAA,EAAWC,WAAA,CAAG,aAAa,CAAC,QAAA,IAAY,WAAW,CAAA,EACtD,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAWC,WAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAC,QAAA,IAAY;AAAA,OACf;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AASO,MAAM,oBAAoB,CAAC,EAAE,IAAI,IAAA,EAAM,EAAA,EAAI,UAAS,KAA8B;AACvF,EAAA,uBACED,cAAA,CAACE,iBAAO,EAAA,EAAQ,IAAA,EAAY,IAAQ,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,iCAAA,EAC3D,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,mBAAA,GAAsB,sBACjCF,cAAA,CAAC,KAAA,EAAA,EAAI,MAAK,WAAA,EAAY,kBAAA,EAAiB,YAAA,EAAa,SAAA,EAAU,+BAAA,EAAgC;AAOzF,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,qBACzCA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sBAAA,EAAuB,aAAA,EAAY,aAAA,EAC9C,QAAA,EACH;AAeK,MAAM,iBAAiB,CAAC;AAAA,EAC7B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,uBACEG,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,oBAAAH,cAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAWD,WAAA;AAAA,UACT,mFAAA;AAAA,UACA,QAAA,IAAY,MAAA;AAAA,UACZ,QAAA,IAAY,2BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAS;AAAA;AAAA,KAC7C;AAAA,IAEC,QAAA,oBACCA,cAAA;AAAA,MAACE,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,+HAAA;AAAA,QACV,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,WAAA;AAAA,QAEZ,yCAACE,aAAA,EAAA,EAAE;AAAA;AAAA;AACL,GAAA,EAEJ,CAAA;AAEJ;AAMO,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,KAA4B;AACrE,EAAA,uBACEJ,cAAA,CAACK,WAAI,EAAA,EAAG,GAAA,EAAI,SAAQ,OAAA,EAAQ,SAAA,EAAU,2BACnC,QAAA,EACH,CAAA;AAEJ;;;;;;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { X } from 'lucide-react';
3
3
  import { c as cn } from '../cn-BakJzhuv.js';
4
- import { B as Button } from '../Button-Dh5CZ6Ir.js';
4
+ import { B as Button } from '../Button-Bx2lFdqb.js';
5
5
  import { T as Txt } from '../Txt-Df42XG5p.js';
6
6
 
7
7
  const ThreadList = ({ children, "aria-label": ariaLabel = "Threads", embedded = false }) => {
@@ -20,7 +20,7 @@ const ThreadList = ({ children, "aria-label": ariaLabel = "Threads", embedded =
20
20
  const ThreadListNewItem = ({ as, href, to, children }) => {
21
21
  return /* @__PURE__ */ jsx(Button, { as, href, to, variant: "ghost", className: "w-full justify-start rounded-xl", children });
22
22
  };
23
- const ThreadListSeparator = () => /* @__PURE__ */ jsx("div", { role: "separator", "aria-orientation": "horizontal", className: "-mx-1 my-1 h-px bg-border1/40" });
23
+ const ThreadListSeparator = () => /* @__PURE__ */ jsx("div", { role: "separator", "aria-orientation": "horizontal", className: "bg-border1/40 -mx-1 my-1 h-px" });
24
24
  const ThreadListItems = ({ children }) => /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-px", "data-testid": "thread-list", children });
25
25
  const ThreadListItem = ({
26
26
  as,
@@ -65,7 +65,7 @@ const ThreadListItem = ({
65
65
  ] });
66
66
  };
67
67
  const ThreadListEmpty = ({ children }) => {
68
- return /* @__PURE__ */ jsx(Txt, { as: "p", variant: "ui-sm", className: "px-5 py-3 text-neutral3", children });
68
+ return /* @__PURE__ */ jsx(Txt, { as: "p", variant: "ui-sm", className: "text-neutral3 px-5 py-3", children });
69
69
  };
70
70
 
71
71
  export { ThreadList, ThreadListEmpty, ThreadListItem, ThreadListItems, ThreadListNewItem, ThreadListSeparator };
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadList.es.js","sources":["../../src/ds/components/ThreadList/thread-list.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport type { ElementType, MouseEvent, ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../Button';\nimport { Txt } from '../Txt';\n\nexport interface ThreadListProps {\n children: ReactNode;\n 'aria-label'?: string;\n /**\n * When true, drops the standalone block chrome (background, border, rounded corners, inset)\n * so the list can render flush inside an outer container without nesting a second box.\n */\n embedded?: boolean;\n}\n\nexport const ThreadList = ({ children, 'aria-label': ariaLabel = 'Threads', embedded = false }: ThreadListProps) => {\n return (\n <div className={cn('size-full', !embedded && 'pb-2 pl-2')}>\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'h-full overflow-y-auto p-1',\n !embedded && 'rounded-studio-panel border border-border1/50 bg-surface3',\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport interface ThreadListNewItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n children: ReactNode;\n}\n\nexport const ThreadListNewItem = ({ as, href, to, children }: ThreadListNewItemProps) => {\n return (\n <Button as={as} href={href} to={to} variant=\"ghost\" className=\"w-full justify-start rounded-xl\">\n {children}\n </Button>\n );\n};\n\nexport const ThreadListSeparator = () => (\n <div role=\"separator\" aria-orientation=\"horizontal\" className=\"-mx-1 my-1 h-px bg-border1/40\" />\n);\n\nexport interface ThreadListItemsProps {\n children: ReactNode;\n}\n\nexport const ThreadListItems = ({ children }: ThreadListItemsProps) => (\n <ol className=\"flex flex-col gap-px\" data-testid=\"thread-list\">\n {children}\n </ol>\n);\n\nexport interface ThreadListItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n isActive?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n onDelete?: () => void;\n deleteLabel?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport const ThreadListItem = ({\n as,\n href,\n to,\n isActive,\n onClick,\n onDelete,\n deleteLabel = 'delete',\n className,\n children,\n}: ThreadListItemProps) => {\n return (\n <li className=\"group relative\">\n <Button\n as={as}\n href={href}\n to={to}\n onClick={onClick}\n variant=\"ghost\"\n className={cn(\n 'h-auto! min-h-form-md w-full min-w-0 justify-start rounded-xl px-3 py-2 text-left',\n onDelete && 'pr-9',\n isActive && 'bg-surface4 text-neutral6',\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n </Button>\n\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2 opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100\"\n onClick={onDelete}\n aria-label={deleteLabel}\n >\n <X />\n </Button>\n )}\n </li>\n );\n};\n\nexport interface ThreadListEmptyProps {\n children: ReactNode;\n}\n\nexport const ThreadListEmpty = ({ children }: ThreadListEmptyProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-sm\" className=\"px-5 py-3 text-neutral3\">\n {children}\n </Txt>\n );\n};\n"],"names":[],"mappings":";;;;;;AAiBO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,cAAc,SAAA,GAAY,SAAA,EAAW,QAAA,GAAW,KAAA,EAAM,KAAuB;AAClH,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,aAAa,CAAC,QAAA,IAAY,WAAW,CAAA,EACtD,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAC,QAAA,IAAY;AAAA,OACf;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AASO,MAAM,oBAAoB,CAAC,EAAE,IAAI,IAAA,EAAM,EAAA,EAAI,UAAS,KAA8B;AACvF,EAAA,uBACE,GAAA,CAAC,UAAO,EAAA,EAAQ,IAAA,EAAY,IAAQ,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,iCAAA,EAC3D,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,mBAAA,GAAsB,sBACjC,GAAA,CAAC,KAAA,EAAA,EAAI,MAAK,WAAA,EAAY,kBAAA,EAAiB,YAAA,EAAa,SAAA,EAAU,+BAAA,EAAgC;AAOzF,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,qBACzC,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sBAAA,EAAuB,aAAA,EAAY,aAAA,EAC9C,QAAA,EACH;AAeK,MAAM,iBAAiB,CAAC;AAAA,EAC7B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW,EAAA;AAAA,UACT,mFAAA;AAAA,UACA,QAAA,IAAY,MAAA;AAAA,UACZ,QAAA,IAAY,2BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEA,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAS;AAAA;AAAA,KAC7C;AAAA,IAEC,QAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,+HAAA;AAAA,QACV,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,WAAA;AAAA,QAEZ,8BAAC,CAAA,EAAA,EAAE;AAAA;AAAA;AACL,GAAA,EAEJ,CAAA;AAEJ;AAMO,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,KAA4B;AACrE,EAAA,uBACE,GAAA,CAAC,OAAI,EAAA,EAAG,GAAA,EAAI,SAAQ,OAAA,EAAQ,SAAA,EAAU,2BACnC,QAAA,EACH,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ThreadList.es.js","sources":["../../src/ds/components/ThreadList/thread-list.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport type { ElementType, MouseEvent, ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../Button';\nimport { Txt } from '../Txt';\n\nexport interface ThreadListProps {\n children: ReactNode;\n 'aria-label'?: string;\n /**\n * When true, drops the standalone block chrome (background, border, rounded corners, inset)\n * so the list can render flush inside an outer container without nesting a second box.\n */\n embedded?: boolean;\n}\n\nexport const ThreadList = ({ children, 'aria-label': ariaLabel = 'Threads', embedded = false }: ThreadListProps) => {\n return (\n <div className={cn('size-full', !embedded && 'pb-2 pl-2')}>\n <nav\n aria-label={ariaLabel}\n className={cn(\n 'h-full overflow-y-auto p-1',\n !embedded && 'rounded-studio-panel border border-border1/50 bg-surface3',\n )}\n >\n {children}\n </nav>\n </div>\n );\n};\n\nexport interface ThreadListNewItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n children: ReactNode;\n}\n\nexport const ThreadListNewItem = ({ as, href, to, children }: ThreadListNewItemProps) => {\n return (\n <Button as={as} href={href} to={to} variant=\"ghost\" className=\"w-full justify-start rounded-xl\">\n {children}\n </Button>\n );\n};\n\nexport const ThreadListSeparator = () => (\n <div role=\"separator\" aria-orientation=\"horizontal\" className=\"bg-border1/40 -mx-1 my-1 h-px\" />\n);\n\nexport interface ThreadListItemsProps {\n children: ReactNode;\n}\n\nexport const ThreadListItems = ({ children }: ThreadListItemsProps) => (\n <ol className=\"flex flex-col gap-px\" data-testid=\"thread-list\">\n {children}\n </ol>\n);\n\nexport interface ThreadListItemProps {\n as?: ElementType;\n href?: string;\n to?: string;\n isActive?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n onDelete?: () => void;\n deleteLabel?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport const ThreadListItem = ({\n as,\n href,\n to,\n isActive,\n onClick,\n onDelete,\n deleteLabel = 'delete',\n className,\n children,\n}: ThreadListItemProps) => {\n return (\n <li className=\"group relative\">\n <Button\n as={as}\n href={href}\n to={to}\n onClick={onClick}\n variant=\"ghost\"\n className={cn(\n 'h-auto! min-h-form-md w-full min-w-0 justify-start rounded-xl px-3 py-2 text-left',\n onDelete && 'pr-9',\n isActive && 'bg-surface4 text-neutral6',\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n </Button>\n\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2 opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100\"\n onClick={onDelete}\n aria-label={deleteLabel}\n >\n <X />\n </Button>\n )}\n </li>\n );\n};\n\nexport interface ThreadListEmptyProps {\n children: ReactNode;\n}\n\nexport const ThreadListEmpty = ({ children }: ThreadListEmptyProps) => {\n return (\n <Txt as=\"p\" variant=\"ui-sm\" className=\"text-neutral3 px-5 py-3\">\n {children}\n </Txt>\n );\n};\n"],"names":[],"mappings":";;;;;;AAiBO,MAAM,UAAA,GAAa,CAAC,EAAE,QAAA,EAAU,cAAc,SAAA,GAAY,SAAA,EAAW,QAAA,GAAW,KAAA,EAAM,KAAuB;AAClH,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,aAAa,CAAC,QAAA,IAAY,WAAW,CAAA,EACtD,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAC,QAAA,IAAY;AAAA,OACf;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AASO,MAAM,oBAAoB,CAAC,EAAE,IAAI,IAAA,EAAM,EAAA,EAAI,UAAS,KAA8B;AACvF,EAAA,uBACE,GAAA,CAAC,UAAO,EAAA,EAAQ,IAAA,EAAY,IAAQ,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,iCAAA,EAC3D,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,mBAAA,GAAsB,sBACjC,GAAA,CAAC,KAAA,EAAA,EAAI,MAAK,WAAA,EAAY,kBAAA,EAAiB,YAAA,EAAa,SAAA,EAAU,+BAAA,EAAgC;AAOzF,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,qBACzC,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sBAAA,EAAuB,aAAA,EAAY,aAAA,EAC9C,QAAA,EACH;AAeK,MAAM,iBAAiB,CAAC;AAAA,EAC7B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW,EAAA;AAAA,UACT,mFAAA;AAAA,UACA,QAAA,IAAY,MAAA;AAAA,UACZ,QAAA,IAAY,2BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEA,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAS;AAAA;AAAA,KAC7C;AAAA,IAEC,QAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,+HAAA;AAAA,QACV,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,WAAA;AAAA,QAEZ,8BAAC,CAAA,EAAA,EAAE;AAAA;AAAA;AACL,GAAA,EAEJ,CAAA;AAEJ;AAMO,MAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAS,KAA4B;AACrE,EAAA,uBACE,GAAA,CAAC,OAAI,EAAA,EAAG,GAAA,EAAI,SAAQ,OAAA,EAAQ,SAAA,EAAU,2BACnC,QAAA,EACH,CAAA;AAEJ;;;;"}
@@ -6,7 +6,7 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const messageScrollerHooks = require('../message-scroller-hooks-DdXqrmC2.cjs');
9
- const scrollArea = require('../scroll-area-BIaiA4t3.cjs');
9
+ const scrollArea = require('../scroll-area-Dv6QagXt.cjs');
10
10
  const hooks_useMeasuredAutoHeight = require('../hooks/use-measured-auto-height.cjs.js');
11
11
  const utils_cn = require('../cn-vA5sWo9W.cjs');
12
12
  const react = require('@mastra/react');
@@ -318,14 +318,14 @@ function ThreadRailPreviewContent({
318
318
  ...props
319
319
  }) {
320
320
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, ...props, children: [
321
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-ui-md leading-ui-md font-medium text-neutral6", children: turn.prompt }),
322
- turn.reply && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 line-clamp-3 text-ui-sm leading-ui-sm text-neutral4", children: turn.reply }),
323
- (turn.files.length > 0 || turn.hiddenFileCount > 0) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-2 border-t border-border1/60 pt-2.5", children: [
324
- turn.files.map((file) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex max-w-44 items-center gap-1.5 truncate text-ui-sm text-neutral4", children: [
321
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-ui-md leading-ui-md text-neutral6 truncate font-medium", children: turn.prompt }),
322
+ turn.reply && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-ui-sm leading-ui-sm text-neutral4 mt-1.5 line-clamp-3", children: turn.reply }),
323
+ (turn.files.length > 0 || turn.hiddenFileCount > 0) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border1/60 mt-3 flex flex-wrap items-center gap-2 border-t pt-2.5", children: [
324
+ turn.files.map((file) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-ui-sm text-neutral4 inline-flex max-w-44 items-center gap-1.5 truncate", children: [
325
325
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3.5 shrink-0 opacity-70", "aria-hidden": true }),
326
326
  file
327
327
  ] }, file)),
328
- turn.hiddenFileCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-ui-sm font-medium text-neutral4", children: [
328
+ turn.hiddenFileCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-ui-sm text-neutral4 font-medium", children: [
329
329
  "+",
330
330
  turn.hiddenFileCount
331
331
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadRail.cjs.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n viewPortClassName=\"pr-3\"\n >\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-neutral6';\n if (inView) return 'bg-neutral5';\n if (distance === 1) return 'bg-neutral4';\n return 'bg-neutral3/60';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'duration-normal relative block h-px cursor-pointer rounded-full transition-[width,background-color] ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n 'focus-visible:ring-2 focus-visible:ring-accent1/40 focus-visible:outline-hidden',\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl border border-border1 bg-surface3 text-left shadow-dialog transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible grid\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"col-start-1 row-start-1 p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"truncate text-ui-md leading-ui-md font-medium text-neutral6\">{turn.prompt}</div>\n {turn.reply && <p className=\"mt-1.5 line-clamp-3 text-ui-sm leading-ui-sm text-neutral4\">{turn.reply}</p>}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 border-t border-border1/60 pt-2.5\">\n {turn.files.map(file => (\n <span key={file} className=\"inline-flex max-w-44 items-center gap-1.5 truncate text-ui-sm text-neutral4\">\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </span>\n ))}\n {turn.hiddenFileCount > 0 && (\n <span className=\"text-ui-sm font-medium text-neutral4\">+{turn.hiddenFileCount}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport { CLIENT_MESSAGE_ID_KEY } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\nconst isDisplayableUserMessage = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (isDisplayableUserMessage(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!isDisplayableUserMessage(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n"],"names":["React","useOptionalMessageScroller","useOptionalMessageScrollerVisibility","jsxs","cn","jsx","ScrollArea","useMeasuredAutoHeight","FileText","CLIENT_MESSAGE_ID_KEY"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadRail.cjs.js","sources":["../../src/ds/components/ThreadRail/thread-rail.tsx","../../src/ds/components/ThreadRail/thread-rail-turns.ts"],"sourcesContent":["import { FileText } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ThreadRailTurn } from './thread-rail-turns';\n\nimport { useOptionalMessageScroller, useOptionalMessageScrollerVisibility } from '@/ds/components/MessageScroller';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { useMeasuredAutoHeight } from '@/hooks/use-measured-auto-height';\nimport { cn } from '@/lib/utils';\n\ntype ThreadRailPreviewPhase = 'hidden' | 'entering' | 'visible' | 'exiting';\n\ntype ThreadRailPreviewState = {\n currentTurn: ThreadRailTurn | undefined;\n previousTurn: ThreadRailTurn | undefined;\n index: number | null;\n phase: ThreadRailPreviewPhase;\n top: number;\n transitionKey: number;\n};\n\nconst PREVIEW_TRANSITION_DURATION_MS = 360;\nconst PREVIEW_CLEANUP_DELAY_MS = PREVIEW_TRANSITION_DURATION_MS + 80;\n\nconst DEFAULT_PREVIEW_STATE: ThreadRailPreviewState = {\n currentTurn: undefined,\n previousTurn: undefined,\n index: null,\n phase: 'hidden',\n top: 0,\n transitionKey: 0,\n};\n\nexport interface ThreadRailProps {\n turns: ThreadRailTurn[];\n currentAnchorId?: string;\n visibleMessageIds?: string[];\n label?: string;\n className?: string;\n maxHeight?: string;\n scrollAreaClassName?: string;\n onSelect?: (turn: ThreadRailTurn) => void;\n}\n\nexport function ThreadRail({\n turns,\n currentAnchorId,\n visibleMessageIds,\n label = 'Conversation timeline',\n className,\n maxHeight = 'calc(100dvh - 12rem)',\n scrollAreaClassName,\n onSelect,\n}: ThreadRailProps) {\n const railRef = React.useRef<HTMLElement>(null);\n const previewId = React.useId();\n const [previewState, setPreviewState] = React.useState<ThreadRailPreviewState>(DEFAULT_PREVIEW_STATE);\n const messageScroller = useOptionalMessageScroller();\n const scrollerVisibility = useOptionalMessageScrollerVisibility();\n\n const fallbackMessageId = turns.at(-1)?.messageId;\n const activeMessageId = currentAnchorId ?? scrollerVisibility?.currentAnchorId ?? fallbackMessageId;\n const resolvedVisibleMessageIds =\n visibleMessageIds ?? scrollerVisibility?.visibleMessageIds ?? (activeMessageId ? [activeMessageId] : []);\n const visibleMessageIdSet = new Set(resolvedVisibleMessageIds);\n const previewHoverActive = previewState.phase === 'entering' || previewState.phase === 'visible';\n const hoveredIndex = previewHoverActive ? previewState.index : null;\n const selectTurn = React.useCallback(\n (turn: ThreadRailTurn) => {\n if (onSelect) {\n onSelect(turn);\n return;\n }\n\n messageScroller?.scrollToMessage(turn.messageId, { behavior: 'smooth', align: 'start' });\n },\n [messageScroller, onSelect],\n );\n\n const showPreview = (index: number, element: HTMLElement) => {\n const railTop = railRef.current?.getBoundingClientRect().top ?? 0;\n const itemRect = element.getBoundingClientRect();\n const nextTurn = turns[index];\n if (!nextTurn) return;\n\n setPreviewState(current => {\n const nextTop = itemRect.top + itemRect.height / 2 - railTop;\n if (current.index === index && current.phase !== 'hidden' && current.phase !== 'exiting') {\n return { ...current, top: nextTop };\n }\n\n const previousTurn =\n current.currentTurn && current.currentTurn.key !== nextTurn.key && current.phase !== 'hidden'\n ? current.currentTurn\n : undefined;\n\n return {\n currentTurn: nextTurn,\n previousTurn,\n index,\n phase: 'entering',\n top: nextTop,\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n const hidePreview = () => {\n setPreviewState(current => {\n if (!current.currentTurn || current.phase === 'hidden' || current.phase === 'exiting') {\n return { ...current, index: null };\n }\n\n return {\n ...current,\n index: null,\n previousTurn: undefined,\n phase: 'exiting',\n transitionKey: current.transitionKey + 1,\n };\n });\n };\n\n React.useEffect(() => {\n if (previewState.phase !== 'entering') return;\n\n const requestFrame = window.requestAnimationFrame ?? window.setTimeout;\n const cancelFrame = window.cancelAnimationFrame ?? window.clearTimeout;\n let settleFrame: number | undefined;\n const startFrame = requestFrame(() => {\n settleFrame = requestFrame(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey && current.phase === 'entering'\n ? { ...current, phase: 'visible' }\n : current,\n );\n });\n });\n\n return () => {\n cancelFrame(startFrame);\n if (settleFrame !== undefined) cancelFrame(settleFrame);\n };\n }, [previewState.phase, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'visible' || !previewState.previousTurn) return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? { ...current, previousTurn: undefined } : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.previousTurn, previewState.transitionKey]);\n\n React.useEffect(() => {\n if (previewState.phase !== 'exiting') return;\n\n const timeout = window.setTimeout(() => {\n setPreviewState(current =>\n current.transitionKey === previewState.transitionKey ? DEFAULT_PREVIEW_STATE : current,\n );\n }, PREVIEW_CLEANUP_DELAY_MS);\n\n return () => window.clearTimeout(timeout);\n }, [previewState.phase, previewState.transitionKey]);\n\n if (turns.length === 0) return null;\n\n return (\n <nav\n ref={railRef}\n aria-label={label}\n data-testid=\"thread-rail\"\n className={cn('relative w-8 py-2', className)}\n onMouseLeave={hidePreview}\n onBlur={event => {\n const nextFocus = event.relatedTarget;\n if (!(nextFocus instanceof Node) || !event.currentTarget.contains(nextFocus)) hidePreview();\n }}\n >\n <ScrollArea\n data-testid=\"thread-rail-scroll-area\"\n maxHeight={maxHeight}\n className={cn('w-8', scrollAreaClassName)}\n viewPortClassName=\"pr-3\"\n >\n <div className=\"flex w-4 flex-col items-start gap-2 py-2\">\n {turns.map((turn, index) => {\n const distance = hoveredIndex === null ? null : Math.abs(index - hoveredIndex);\n const active = turn.messageId === activeMessageId;\n const inView = visibleMessageIdSet.has(turn.messageId);\n const previewActive = hoveredIndex === index;\n\n return (\n <ThreadRailItem\n key={turn.key}\n turn={turn}\n index={index}\n distance={distance}\n active={active}\n inView={inView}\n previewId={previewActive ? previewId : undefined}\n onHoverChange={showPreview}\n onSelect={selectTurn}\n />\n );\n })}\n </div>\n </ScrollArea>\n\n {previewState.currentTurn && (\n <ThreadRailPreview\n id={previewId}\n currentTurn={previewState.currentTurn}\n previousTurn={previewState.previousTurn}\n phase={previewState.phase}\n top={previewState.top}\n />\n )}\n </nav>\n );\n}\n\ninterface ThreadRailItemProps {\n turn: ThreadRailTurn;\n index: number;\n distance: number | null;\n active: boolean;\n inView: boolean;\n previewId?: string;\n onHoverChange: (index: number, element: HTMLElement) => void;\n onSelect: (turn: ThreadRailTurn) => void;\n}\n\n/** Width of a rail tick: widest at the hovered item, tapering to neighbours. */\nconst getRailItemWidth = (distance: number | null): string => {\n if (distance === 0) return 'w-4';\n if (distance === 1) return 'w-3';\n return 'w-2';\n};\n\n/** Background tone of a rail tick, prioritising hovered/active, then in-view, then proximity. */\nconst getRailItemTone = ({\n distance,\n active,\n inView,\n}: Pick<ThreadRailItemProps, 'distance' | 'active' | 'inView'>): string => {\n if (distance === 0 || active) return 'bg-neutral6';\n if (inView) return 'bg-neutral5';\n if (distance === 1) return 'bg-neutral4';\n return 'bg-neutral3/60';\n};\n\nfunction ThreadRailItem({\n turn,\n index,\n distance,\n active,\n inView,\n previewId,\n onHoverChange,\n onSelect,\n}: ThreadRailItemProps) {\n const size = getRailItemWidth(distance);\n const tone = getRailItemTone({ distance, active, inView });\n\n return (\n <div\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n className=\"group/thread-rail-item relative flex items-center\"\n >\n <button\n type=\"button\"\n aria-label={`Jump to ${turn.prompt}`}\n aria-current={active ? 'location' : undefined}\n aria-describedby={previewId}\n data-in-view={inView ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n onClick={() => onSelect(turn)}\n onMouseEnter={event => onHoverChange(index, event.currentTarget)}\n onFocus={event => onHoverChange(index, event.currentTarget)}\n className={cn(\n 'duration-normal relative block h-px cursor-pointer rounded-full transition-[width,background-color] ease-out',\n \"before:absolute before:inset-x-0 before:-inset-y-1 before:content-['']\",\n 'focus-visible:ring-2 focus-visible:ring-accent1/40 focus-visible:outline-hidden',\n size,\n tone,\n )}\n />\n </div>\n );\n}\n\nfunction ThreadRailPreview({\n id,\n currentTurn,\n previousTurn,\n phase,\n top,\n}: {\n id: string;\n currentTurn: ThreadRailTurn;\n previousTurn: ThreadRailTurn | undefined;\n phase: ThreadRailPreviewPhase;\n top: number;\n}) {\n const {\n ref: previewSizerRef,\n heightStyle: previewHeightStyle,\n measure: measurePreviewHeight,\n } = useMeasuredAutoHeight<HTMLDivElement>();\n const containerVisible = phase === 'visible' || (phase === 'entering' && Boolean(previousTurn));\n // Entering and exiting share the same off-screen resting style.\n const hiddenLayerClassName = 'scale-95 opacity-0 blur-xs';\n const visibleLayerClassName = 'scale-100 opacity-100 blur-none';\n const layerClassName =\n 'absolute inset-x-0 top-0 h-full origin-left transition-[opacity,filter,scale] duration-150 ease-in-out will-change-[opacity,filter,scale] motion-reduce:scale-100 motion-reduce:blur-none motion-reduce:transition-none';\n\n React.useLayoutEffect(() => {\n measurePreviewHeight();\n }, [currentTurn.key, phase, measurePreviewHeight]);\n\n return (\n <div\n id={id}\n data-testid=\"thread-rail-preview\"\n data-visible={containerVisible ? 'true' : undefined}\n className={cn(\n 'pointer-events-none absolute top-0 left-full z-30 ml-3 w-72 overflow-hidden rounded-xl border border-border1 bg-surface3 text-left shadow-dialog transition-[height,translate,opacity] duration-360 ease-out-custom will-change-[height,translate,opacity] motion-reduce:transition-none',\n containerVisible ? 'opacity-100' : 'opacity-0',\n )}\n style={{ ...previewHeightStyle, translate: `0 calc(${top}px - 50%)` }}\n >\n <div ref={previewSizerRef} data-testid=\"thread-rail-preview-sizer\" aria-hidden className=\"invisible grid\">\n <ThreadRailPreviewContent turn={currentTurn} className=\"col-start-1 row-start-1 p-3.5\" />\n </div>\n <div data-testid=\"thread-rail-preview-viewport\" className=\"absolute inset-0\">\n <div className=\"relative h-full\">\n {previousTurn && (\n <div\n key={previousTurn.key}\n data-testid=\"thread-rail-preview-previous\"\n aria-hidden\n className={cn(layerClassName, phase === 'entering' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={previousTurn} className=\"p-3.5\" />\n </div>\n )}\n <div\n key={currentTurn.key}\n data-testid=\"thread-rail-preview-current\"\n className={cn(layerClassName, phase === 'visible' ? visibleLayerClassName : hiddenLayerClassName)}\n >\n <ThreadRailPreviewContent turn={currentTurn} className=\"p-3.5\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ThreadRailPreviewContent({\n turn,\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { turn: ThreadRailTurn }) {\n return (\n <div className={className} {...props}>\n <div className=\"text-ui-md leading-ui-md text-neutral6 truncate font-medium\">{turn.prompt}</div>\n {turn.reply && <p className=\"text-ui-sm leading-ui-sm text-neutral4 mt-1.5 line-clamp-3\">{turn.reply}</p>}\n {(turn.files.length > 0 || turn.hiddenFileCount > 0) && (\n <div className=\"border-border1/60 mt-3 flex flex-wrap items-center gap-2 border-t pt-2.5\">\n {turn.files.map(file => (\n <span key={file} className=\"text-ui-sm text-neutral4 inline-flex max-w-44 items-center gap-1.5 truncate\">\n <FileText className=\"size-3.5 shrink-0 opacity-70\" aria-hidden />\n {file}\n </span>\n ))}\n {turn.hiddenFileCount > 0 && (\n <span className=\"text-ui-sm text-neutral4 font-medium\">+{turn.hiddenFileCount}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport { CLIENT_MESSAGE_ID_KEY } from '@mastra/react';\n\nconst SUMMARY_MAX_LENGTH = 120;\nconst FILE_PREVIEW_LIMIT = 2;\n\nexport interface ThreadRailTurn {\n key: string;\n messageId: string;\n prompt: string;\n reply?: string;\n files: string[];\n hiddenFileCount: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getClientMessageKey = (message: MastraDBMessage): string => {\n const metadata = message.content.metadata;\n const clientMessageId = isRecord(metadata) ? metadata[CLIENT_MESSAGE_ID_KEY] : undefined;\n return typeof clientMessageId === 'string' && clientMessageId.length > 0 ? clientMessageId : message.id;\n};\n\nconst normalizeSummary = (value: string, fallback: string): string => {\n const normalized = value.replace(/\\s+/g, ' ').trim();\n if (normalized.length === 0) return fallback;\n if (normalized.length <= SUMMARY_MAX_LENGTH) return normalized;\n return `${normalized.slice(0, SUMMARY_MAX_LENGTH - 3).trimEnd()}...`;\n};\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .flatMap(part => {\n if (!isRecord(part) || part.type !== 'text' || typeof part.text !== 'string') return [];\n return [part.text];\n })\n .join('\\n');\n\nconst getStringField = (part: Record<string, unknown>, keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = part[key];\n if (typeof value === 'string' && value.trim().length > 0) return value;\n }\n return undefined;\n};\n\nconst getPathLabel = (value: string): string | undefined => {\n if (value.startsWith('data:')) return undefined;\n\n try {\n const url = new URL(value);\n const candidate = url.pathname.split('/').filter(Boolean).pop();\n return candidate || url.hostname || undefined;\n } catch {\n const candidate = value.split(/[?#]/)[0]?.split('/').filter(Boolean).pop();\n return candidate && !candidate.startsWith('data:') ? candidate : undefined;\n }\n};\n\nconst getFallbackFileLabel = (part: Record<string, unknown>): string => {\n const mediaType = getStringField(part, ['mimeType', 'mediaType']) ?? '';\n if (part.type === 'image' || mediaType.startsWith('image/')) return 'Image';\n if (mediaType === 'application/pdf') return 'PDF';\n if (mediaType.startsWith('video/')) return 'Video';\n if (mediaType.startsWith('audio/')) return 'Audio';\n return 'File';\n};\n\nconst getFileLabelFromPart = (part: MastraDBMessage['content']['parts'][number]): string | undefined => {\n if (!isRecord(part)) return undefined;\n\n const type = getStringField(part, ['type']);\n if (type !== 'file' && type !== 'image') return undefined;\n\n const explicitLabel = getStringField(part, ['filename', 'name']);\n if (explicitLabel) return explicitLabel;\n\n const source = getStringField(part, ['url', 'image', 'data']);\n const pathLabel = source ? getPathLabel(source) : undefined;\n return pathLabel ?? getFallbackFileLabel(part);\n};\n\nconst getFileLabels = (message: MastraDBMessage): string[] =>\n message.content.parts.map(getFileLabelFromPart).filter((label): label is string => Boolean(label));\n\nconst getSignalType = (message: MastraDBMessage): string | undefined => {\n const signal = message.content.metadata?.signal;\n const metadataType = isRecord(signal) ? signal.type : undefined;\n return typeof metadataType === 'string' ? metadataType : message.type;\n};\n\nconst isDisplayableUserMessage = (message: MastraDBMessage): boolean => {\n if (message.role === 'user') return true;\n if (message.role !== 'signal') return false;\n\n const signalType = getSignalType(message);\n return signalType === 'user' || signalType === 'user-message';\n};\n\nconst getNextAssistantReply = (messages: MastraDBMessage[], startIndex: number): string | undefined => {\n for (let index = startIndex + 1; index < messages.length; index += 1) {\n const message = messages[index];\n if (!message) continue;\n if (isDisplayableUserMessage(message)) return undefined;\n if (message.role !== 'assistant') continue;\n\n const reply = normalizeSummary(getTextFromParts(message), '');\n if (reply) return reply;\n }\n\n return undefined;\n};\n\nexport const buildThreadRailTurns = (messages: MastraDBMessage[]): ThreadRailTurn[] =>\n messages.flatMap((message, index) => {\n if (!isDisplayableUserMessage(message)) return [];\n\n const files = getFileLabels(message);\n const visibleFiles = files.slice(0, FILE_PREVIEW_LIMIT);\n\n return [\n {\n key: getClientMessageKey(message),\n messageId: message.id,\n prompt: normalizeSummary(getTextFromParts(message), files.length > 0 ? 'Attached file' : 'User message'),\n reply: getNextAssistantReply(messages, index),\n files: visibleFiles,\n hiddenFileCount: files.length - visibleFiles.length,\n },\n ];\n });\n"],"names":["React","useOptionalMessageScroller","useOptionalMessageScrollerVisibility","jsxs","cn","jsx","ScrollArea","useMeasuredAutoHeight","FileText","CLIENT_MESSAGE_ID_KEY"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { FileText } from 'lucide-react';
3
3
  import * as React from 'react';
4
4
  import { k as useOptionalMessageScroller, m as useOptionalMessageScrollerVisibility } from '../message-scroller-hooks-CdsHnth6.js';
5
- import { S as ScrollArea } from '../scroll-area-h3DvBR0U.js';
5
+ import { S as ScrollArea } from '../scroll-area-DZrEuKjC.js';
6
6
  import { useMeasuredAutoHeight } from '../hooks/use-measured-auto-height.es.js';
7
7
  import { c as cn } from '../cn-BakJzhuv.js';
8
8
  import { CLIENT_MESSAGE_ID_KEY } from '@mastra/react';
@@ -295,14 +295,14 @@ function ThreadRailPreviewContent({
295
295
  ...props
296
296
  }) {
297
297
  return /* @__PURE__ */ jsxs("div", { className, ...props, children: [
298
- /* @__PURE__ */ jsx("div", { className: "truncate text-ui-md leading-ui-md font-medium text-neutral6", children: turn.prompt }),
299
- turn.reply && /* @__PURE__ */ jsx("p", { className: "mt-1.5 line-clamp-3 text-ui-sm leading-ui-sm text-neutral4", children: turn.reply }),
300
- (turn.files.length > 0 || turn.hiddenFileCount > 0) && /* @__PURE__ */ jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-2 border-t border-border1/60 pt-2.5", children: [
301
- turn.files.map((file) => /* @__PURE__ */ jsxs("span", { className: "inline-flex max-w-44 items-center gap-1.5 truncate text-ui-sm text-neutral4", children: [
298
+ /* @__PURE__ */ jsx("div", { className: "text-ui-md leading-ui-md text-neutral6 truncate font-medium", children: turn.prompt }),
299
+ turn.reply && /* @__PURE__ */ jsx("p", { className: "text-ui-sm leading-ui-sm text-neutral4 mt-1.5 line-clamp-3", children: turn.reply }),
300
+ (turn.files.length > 0 || turn.hiddenFileCount > 0) && /* @__PURE__ */ jsxs("div", { className: "border-border1/60 mt-3 flex flex-wrap items-center gap-2 border-t pt-2.5", children: [
301
+ turn.files.map((file) => /* @__PURE__ */ jsxs("span", { className: "text-ui-sm text-neutral4 inline-flex max-w-44 items-center gap-1.5 truncate", children: [
302
302
  /* @__PURE__ */ jsx(FileText, { className: "size-3.5 shrink-0 opacity-70", "aria-hidden": true }),
303
303
  file
304
304
  ] }, file)),
305
- turn.hiddenFileCount > 0 && /* @__PURE__ */ jsxs("span", { className: "text-ui-sm font-medium text-neutral4", children: [
305
+ turn.hiddenFileCount > 0 && /* @__PURE__ */ jsxs("span", { className: "text-ui-sm text-neutral4 font-medium", children: [
306
306
  "+",
307
307
  turn.hiddenFileCount
308
308
  ] })