@mastra/playground-ui 68.0.0-alpha.0 → 68.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 (836) hide show
  1. package/dist/{ActionRow-BfK77pCT.cjs → ActionRow-BlC9GAef.cjs} +4 -4
  2. package/dist/ActionRow-BlC9GAef.cjs.map +1 -0
  3. package/dist/{ActionRow-Cd6tOC2K.js → ActionRow-DCrRCvBq.js} +4 -4
  4. package/dist/ActionRow-DCrRCvBq.js.map +1 -0
  5. package/dist/{Button-Bw1e3ONi.js → Button-CLXTbAY8.js} +42 -13
  6. package/dist/Button-CLXTbAY8.js.map +1 -0
  7. package/dist/{Button-YQRflC47.cjs → Button-DLcMcuUL.cjs} +58 -11
  8. package/dist/Button-DLcMcuUL.cjs.map +1 -0
  9. package/dist/{CodeEditor-CJ9jC9lu.cjs → CodeEditor-CLzs0yVc.cjs} +4 -4
  10. package/dist/{CodeEditor-CJ9jC9lu.cjs.map → CodeEditor-CLzs0yVc.cjs.map} +1 -1
  11. package/dist/{CodeEditor-CPVxj7WS.js → CodeEditor-COnz9c6B.js} +4 -4
  12. package/dist/{CodeEditor-CPVxj7WS.js.map → CodeEditor-COnz9c6B.js.map} +1 -1
  13. package/dist/{Comment-VFJq2wRp.js → Comment-0n98b_f_.js} +3 -3
  14. package/dist/{Comment-VFJq2wRp.js.map → Comment-0n98b_f_.js.map} +1 -1
  15. package/dist/{Comment-KYUQzeSu.cjs → Comment-Cg0f7eLa.cjs} +3 -3
  16. package/dist/{Comment-KYUQzeSu.cjs.map → Comment-Cg0f7eLa.cjs.map} +1 -1
  17. package/dist/{DataCodeSection-CZRPsStI.cjs → DataCodeSection-CFxXsQWH.cjs} +10 -10
  18. package/dist/DataCodeSection-CFxXsQWH.cjs.map +1 -0
  19. package/dist/{DataCodeSection-Ckd47p_S.js → DataCodeSection-PY9XEg2C.js} +8 -8
  20. package/dist/DataCodeSection-PY9XEg2C.js.map +1 -0
  21. package/dist/{DataDetailsPanel-_CK0Huk6.js → DataDetailsPanel-CohEKPm4.js} +5 -5
  22. package/dist/{DataDetailsPanel-_CK0Huk6.js.map → DataDetailsPanel-CohEKPm4.js.map} +1 -1
  23. package/dist/{DataDetailsPanel-DFhM9H5D.cjs → DataDetailsPanel-DiyjEXqK.cjs} +6 -6
  24. package/dist/{DataDetailsPanel-DFhM9H5D.cjs.map → DataDetailsPanel-DiyjEXqK.cjs.map} +1 -1
  25. package/dist/{DataList-2tIlQsLc.js → DataList-CUhRQAv6.js} +2 -2
  26. package/dist/{DataList-2tIlQsLc.js.map → DataList-CUhRQAv6.js.map} +1 -1
  27. package/dist/{DataList-Czwmwyvp.cjs → DataList-Cj0mfk19.cjs} +2 -2
  28. package/dist/{DataList-Czwmwyvp.cjs.map → DataList-Cj0mfk19.cjs.map} +1 -1
  29. package/dist/{DataPanel-C0Ll76Ne.cjs → DataPanel-Coc9h35I.cjs} +3 -3
  30. package/dist/{DataPanel-C0Ll76Ne.cjs.map → DataPanel-Coc9h35I.cjs.map} +1 -1
  31. package/dist/{DataPanel-CY1W5LHJ.js → DataPanel-IgB9D5PO.js} +3 -3
  32. package/dist/{DataPanel-CY1W5LHJ.js.map → DataPanel-IgB9D5PO.js.map} +1 -1
  33. package/dist/{Dialog-CjaiCrkv.cjs → Dialog-BvWF9HE-.cjs} +2 -2
  34. package/dist/{Dialog-CjaiCrkv.cjs.map → Dialog-BvWF9HE-.cjs.map} +1 -1
  35. package/dist/{Dialog-CKtTR8h3.js → Dialog-DaWtxwd9.js} +2 -2
  36. package/dist/{Dialog-CKtTR8h3.js.map → Dialog-DaWtxwd9.js.map} +1 -1
  37. package/dist/{ErrorBoundary-Bm0LL_b7.cjs → ErrorBoundary-B5GjmA6V.cjs} +2 -2
  38. package/dist/{ErrorBoundary-Bm0LL_b7.cjs.map → ErrorBoundary-B5GjmA6V.cjs.map} +1 -1
  39. package/dist/{ErrorBoundary-95_6A77S.js → ErrorBoundary-Cat3KU86.js} +2 -2
  40. package/dist/{ErrorBoundary-95_6A77S.js.map → ErrorBoundary-Cat3KU86.js.map} +1 -1
  41. package/dist/{FilterBar--4oguuVe.js → FilterBar-BgW2dqRQ.js} +21 -25
  42. package/dist/FilterBar-BgW2dqRQ.js.map +1 -0
  43. package/dist/{FilterBar-BUd4f7oi.cjs → FilterBar-CQl04O6t.cjs} +21 -25
  44. package/dist/FilterBar-CQl04O6t.cjs.map +1 -0
  45. package/dist/{LogsDataList-Cslabh8K.js → LogsDataList-BI2C5OJz.js} +2 -2
  46. package/dist/{LogsDataList-Cslabh8K.js.map → LogsDataList-BI2C5OJz.js.map} +1 -1
  47. package/dist/{LogsDataList-DMmxAt_t.cjs → LogsDataList-CCIfUPGo.cjs} +2 -2
  48. package/dist/{LogsDataList-DMmxAt_t.cjs.map → LogsDataList-CCIfUPGo.cjs.map} +1 -1
  49. package/dist/{MarkdownRenderer-DME2xKTk.js → MarkdownRenderer-2GOXQJEv.js} +3 -3
  50. package/dist/{MarkdownRenderer-DME2xKTk.js.map → MarkdownRenderer-2GOXQJEv.js.map} +1 -1
  51. package/dist/{MarkdownRenderer-CS6u5drO.cjs → MarkdownRenderer-CB8Z_CHc.cjs} +4 -4
  52. package/dist/{MarkdownRenderer-CS6u5drO.cjs.map → MarkdownRenderer-CB8Z_CHc.cjs.map} +1 -1
  53. package/dist/{Message-nVI6tMS3.js → Message-CWzi5F_Q.js} +2 -2
  54. package/dist/{Message-nVI6tMS3.js.map → Message-CWzi5F_Q.js.map} +1 -1
  55. package/dist/{Message-DsCNQpou.cjs → Message-jj56lxNL.cjs} +2 -2
  56. package/dist/{Message-DsCNQpou.cjs.map → Message-jj56lxNL.cjs.map} +1 -1
  57. package/dist/{MetricsTable-D-aZf3dk.cjs → MetricsTable-BSl81oNe.cjs} +44 -9
  58. package/dist/MetricsTable-BSl81oNe.cjs.map +1 -0
  59. package/dist/{MetricsTable-CRPeLHe1.js → MetricsTable-DID6LRoP.js} +44 -9
  60. package/dist/MetricsTable-DID6LRoP.js.map +1 -0
  61. package/dist/{Notice-CyKngbbv.js → Notice-C-8oOZZF.js} +2 -2
  62. package/dist/{Notice-CyKngbbv.js.map → Notice-C-8oOZZF.js.map} +1 -1
  63. package/dist/{Notice-DWNeCe-t.cjs → Notice-JZ7SW7q6.cjs} +2 -2
  64. package/dist/{Notice-DWNeCe-t.cjs.map → Notice-JZ7SW7q6.cjs.map} +1 -1
  65. package/dist/{Workflow-BVWvgDmI.js → Workflow-C3SlEdP-.js} +5 -5
  66. package/dist/{Workflow-BVWvgDmI.js.map → Workflow-C3SlEdP-.js.map} +1 -1
  67. package/dist/{Workflow-BeF6pIO9.cjs → Workflow-DSWQ-ROz.cjs} +5 -5
  68. package/dist/{Workflow-BeF6pIO9.cjs.map → Workflow-DSWQ-ROz.cjs.map} +1 -1
  69. package/dist/{activity-DAK8tj7r.cjs → activity-DyB5H3gF.cjs} +2 -2
  70. package/dist/{activity-DAK8tj7r.cjs.map → activity-DyB5H3gF.cjs.map} +1 -1
  71. package/dist/{activity-CM34JyW-.js → activity-rJ1NQl_2.js} +2 -2
  72. package/dist/{activity-CM34JyW-.js.map → activity-rJ1NQl_2.js.map} +1 -1
  73. package/dist/{ask-user-C82m_G9W.cjs → ask-user-C1p2PEYe.cjs} +3 -3
  74. package/dist/ask-user-C1p2PEYe.cjs.map +1 -0
  75. package/dist/{ask-user-BdjH9F7G.js → ask-user-DPznrqGO.js} +3 -3
  76. package/dist/ask-user-DPznrqGO.js.map +1 -0
  77. package/dist/buttons-group-Dc6R7YSs.cjs +48 -0
  78. package/dist/buttons-group-Dc6R7YSs.cjs.map +1 -0
  79. package/dist/buttons-group-DkFlnMiL.js +35 -0
  80. package/dist/buttons-group-DkFlnMiL.js.map +1 -0
  81. package/dist/{ButtonsGroup.css → buttons-group.css} +2 -0
  82. package/dist/chart-plot.css +5 -4
  83. package/dist/clear-filters-button-Buc973vw.cjs +27 -0
  84. package/dist/clear-filters-button-Buc973vw.cjs.map +1 -0
  85. package/dist/clear-filters-button-CNrRuHOY.js +22 -0
  86. package/dist/clear-filters-button-CNrRuHOY.js.map +1 -0
  87. package/dist/{combobox-wFudhN8F.js → combobox-D21no8t5.js} +5 -5
  88. package/dist/{combobox-wFudhN8F.js.map → combobox-D21no8t5.js.map} +1 -1
  89. package/dist/{combobox-8kNAJFlj.cjs → combobox-DIT_6xiG.cjs} +5 -5
  90. package/dist/combobox-DIT_6xiG.cjs.map +1 -0
  91. package/dist/{combobox-parts-BZVXwbG7.cjs → combobox-parts-C4phOq4t.cjs} +10 -18
  92. package/dist/combobox-parts-C4phOq4t.cjs.map +1 -0
  93. package/dist/{combobox-parts-W7KRQUsV.js → combobox-parts-D90ir0Py.js} +11 -19
  94. package/dist/combobox-parts-D90ir0Py.js.map +1 -0
  95. package/dist/components/ActionRow.cjs.js +1 -1
  96. package/dist/components/ActionRow.es.js +1 -1
  97. package/dist/components/AlertDialog.cjs.js +2 -2
  98. package/dist/components/AlertDialog.es.js +2 -2
  99. package/dist/components/Button.cjs.js +4 -1
  100. package/dist/components/Button.es.js +2 -2
  101. package/dist/components/ButtonsGroup.cjs.js +3 -38
  102. package/dist/components/ButtonsGroup.es.js +1 -35
  103. package/dist/components/ClampedText.cjs.js +1 -1
  104. package/dist/components/ClampedText.es.js +1 -1
  105. package/dist/components/ClearFiltersButton.cjs.js +3 -0
  106. package/dist/components/ClearFiltersButton.d.ts +1 -0
  107. package/dist/components/ClearFiltersButton.es.js +1 -0
  108. package/dist/components/CodeBlock.cjs.js +3 -3
  109. package/dist/components/CodeBlock.es.js +3 -3
  110. package/dist/components/CodeEditor.cjs.js +1 -1
  111. package/dist/components/CodeEditor.es.js +1 -1
  112. package/dist/components/CollapsibleBox.cjs.js +1 -1
  113. package/dist/components/CollapsibleBox.es.js +1 -1
  114. package/dist/components/Combobox.cjs.js +2 -2
  115. package/dist/components/Combobox.es.js +2 -2
  116. package/dist/components/Command.cjs.js +3 -2
  117. package/dist/components/Command.cjs.js.map +1 -1
  118. package/dist/components/Command.es.js +3 -2
  119. package/dist/components/Command.es.js.map +1 -1
  120. package/dist/components/Comment.cjs.js +1 -1
  121. package/dist/components/Comment.es.js +1 -1
  122. package/dist/components/CopyButton.cjs.js +1 -1
  123. package/dist/components/CopyButton.es.js +1 -1
  124. package/dist/components/DataCodeSection.cjs.js +1 -1
  125. package/dist/components/DataCodeSection.es.js +1 -1
  126. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  127. package/dist/components/DataDetailsPanel.es.js +1 -1
  128. package/dist/components/DataList.cjs.js +3 -3
  129. package/dist/components/DataList.es.js +3 -3
  130. package/dist/components/DataPanel.cjs.js +1 -1
  131. package/dist/components/DataPanel.es.js +1 -1
  132. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  133. package/dist/components/DateRangeTimeline.es.js +1 -1
  134. package/dist/components/DateTimePicker.cjs.js +3 -3
  135. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  136. package/dist/components/DateTimePicker.es.js +3 -3
  137. package/dist/components/DateTimePicker.es.js.map +1 -1
  138. package/dist/components/DateTimeRangePicker.cjs.js +2 -2
  139. package/dist/components/DateTimeRangePicker.es.js +1 -1
  140. package/dist/components/Dialog.cjs.js +1 -1
  141. package/dist/components/Dialog.es.js +1 -1
  142. package/dist/components/DisabledFeatureButton.cjs.js +1 -1
  143. package/dist/components/DisabledFeatureButton.es.js +1 -1
  144. package/dist/components/Drawer.cjs.js +1 -1
  145. package/dist/components/Drawer.es.js +1 -1
  146. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  147. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  148. package/dist/components/ErrorBoundary.cjs.js +1 -1
  149. package/dist/components/ErrorBoundary.es.js +1 -1
  150. package/dist/components/FilterBar.cjs.js +7 -2
  151. package/dist/components/FilterBar.es.js +4 -3
  152. package/dist/components/FormFieldBlocks.cjs.js +3 -3
  153. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  154. package/dist/components/FormFieldBlocks.es.js +3 -3
  155. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  156. package/dist/components/InputGroup.cjs.js +1 -1
  157. package/dist/components/InputGroup.es.js +1 -1
  158. package/dist/components/InputNumber.cjs.js +2 -2
  159. package/dist/components/InputNumber.es.js +2 -2
  160. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  161. package/dist/components/JSONSchemaForm.es.js +2 -2
  162. package/dist/components/ListSearch.cjs.js +1 -1
  163. package/dist/components/ListSearch.es.js +1 -1
  164. package/dist/components/LogsDataList.cjs.js +2 -2
  165. package/dist/components/LogsDataList.es.js +2 -2
  166. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  167. package/dist/components/MarkdownRenderer.es.js +1 -1
  168. package/dist/components/Message.cjs.js +1 -1
  169. package/dist/components/Message.es.js +1 -1
  170. package/dist/components/MetricsTable.cjs.js +1 -1
  171. package/dist/components/MetricsTable.es.js +1 -1
  172. package/dist/components/Notice.cjs.js +1 -1
  173. package/dist/components/Notice.es.js +1 -1
  174. package/dist/components/PrevNextNav.cjs.js +1 -1
  175. package/dist/components/PrevNextNav.es.js +1 -1
  176. package/dist/components/PropertyFilter.cjs.js +4 -4
  177. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  178. package/dist/components/PropertyFilter.es.js +4 -4
  179. package/dist/components/PropertyFilter.es.js.map +1 -1
  180. package/dist/components/RuleBuilder.cjs.js +2 -2
  181. package/dist/components/RuleBuilder.es.js +2 -2
  182. package/dist/components/SavedViews.cjs.js +4 -3
  183. package/dist/components/SavedViews.cjs.js.map +1 -1
  184. package/dist/components/SavedViews.es.js +4 -3
  185. package/dist/components/SavedViews.es.js.map +1 -1
  186. package/dist/components/SearchInput.cjs.js +5 -2
  187. package/dist/components/SearchInput.cjs.js.map +1 -1
  188. package/dist/components/SearchInput.es.js +5 -2
  189. package/dist/components/SearchInput.es.js.map +1 -1
  190. package/dist/components/Select.cjs.js +1 -1
  191. package/dist/components/Select.es.js +1 -1
  192. package/dist/components/SideDialog.cjs.js +5 -5
  193. package/dist/components/SideDialog.cjs.js.map +1 -1
  194. package/dist/components/SideDialog.es.js +4 -4
  195. package/dist/components/Sidebar.cjs.js +11 -11
  196. package/dist/components/Sidebar.cjs.js.map +1 -1
  197. package/dist/components/Sidebar.es.js +12 -12
  198. package/dist/components/Sidebar.es.js.map +1 -1
  199. package/dist/components/Tabs.cjs.js +2 -2
  200. package/dist/components/Tabs.es.js +2 -2
  201. package/dist/components/ThreadList.cjs.js +1 -1
  202. package/dist/components/ThreadList.es.js +1 -1
  203. package/dist/components/Toaster.cjs.js +2 -2
  204. package/dist/components/Toaster.es.js +2 -2
  205. package/dist/components/Truncate.cjs.js +1 -1
  206. package/dist/components/Truncate.es.js +1 -1
  207. package/dist/components/Workflow.cjs.js +1 -1
  208. package/dist/components/Workflow.es.js +1 -1
  209. package/dist/components/ai/activity.cjs.js +1 -1
  210. package/dist/components/ai/activity.es.js +1 -1
  211. package/dist/components/ai/ask-user.cjs.js +1 -1
  212. package/dist/components/ai/ask-user.es.js +1 -1
  213. package/dist/components/ai/plan.cjs.js +2 -2
  214. package/dist/components/ai/plan.es.js +2 -2
  215. package/dist/components/ai/tool-approval.cjs.js +1 -1
  216. package/dist/components/ai/tool-approval.es.js +1 -1
  217. package/dist/components/ai/tool-call.cjs.js +1 -1
  218. package/dist/components/ai/tool-call.es.js +1 -1
  219. package/dist/{copy-button-CF-X4iDj.js → copy-button-BXrbevLn.js} +2 -2
  220. package/dist/{copy-button-CF-X4iDj.js.map → copy-button-BXrbevLn.js.map} +1 -1
  221. package/dist/{copy-button-BYEFKNpo.cjs → copy-button-DJAQ6_3o.cjs} +2 -2
  222. package/dist/{copy-button-BYEFKNpo.cjs.map → copy-button-DJAQ6_3o.cjs.map} +1 -1
  223. package/dist/{data-list-BkimqE_P.cjs → data-list-C4Vmq5HA.cjs} +2 -2
  224. package/dist/{data-list-BkimqE_P.cjs.map → data-list-C4Vmq5HA.cjs.map} +1 -1
  225. package/dist/{data-list-evmf5xWI.js → data-list-DHCOoLmj.js} +2 -2
  226. package/dist/{data-list-evmf5xWI.js.map → data-list-DHCOoLmj.js.map} +1 -1
  227. package/dist/{DateTimeRangePicker-HmPOHwAQ.cjs → date-time-range-picker-CTt7Od0P.cjs} +71 -57
  228. package/dist/date-time-range-picker-CTt7Od0P.cjs.map +1 -0
  229. package/dist/{DateTimeRangePicker-C_Lie_2P.js → date-time-range-picker-DKh1K9Iy.js} +72 -58
  230. package/dist/date-time-range-picker-DKh1K9Iy.js.map +1 -0
  231. package/dist/domains/auth/components/session-expired.cjs.js +2 -2
  232. package/dist/domains/auth/components/session-expired.es.js +2 -2
  233. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  234. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  235. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  236. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  237. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  238. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  239. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  240. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  241. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  242. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  243. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  244. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  245. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  246. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  247. package/dist/domains/chat/activity/model/activity-words.cjs.js +1 -1
  248. package/dist/domains/chat/activity/model/activity-words.es.js +1 -1
  249. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  250. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  251. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  252. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  253. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  254. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  255. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  256. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  257. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
  258. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
  259. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
  260. package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
  261. package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
  262. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
  263. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  264. package/dist/domains/chat/messages/message-row.es.js +4 -4
  265. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  266. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  267. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  268. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  269. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  270. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  271. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  272. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  273. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  274. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  275. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  276. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  277. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  278. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  279. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  280. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  281. package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
  282. package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
  283. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  284. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  285. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  286. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  287. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  288. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  289. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
  290. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
  291. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  292. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  293. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  294. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  295. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +1 -1
  296. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +1 -1
  297. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +1 -1
  298. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +1 -1
  299. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  300. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  301. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  302. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  303. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  304. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  305. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  306. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  307. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  308. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  309. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  310. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  311. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +3 -3
  312. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -3
  313. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +3 -3
  314. package/dist/domains/chat/tools/connect-prompt-tool.es.js +3 -3
  315. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  316. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  317. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  318. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  319. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  320. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  321. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +1 -1
  322. package/dist/domains/dashboards/components/dashboard-renderer.es.js +1 -1
  323. package/dist/domains/dashboards/kinds/table/table-view.cjs.js +1 -1
  324. package/dist/domains/dashboards/kinds/table/table-view.es.js +1 -1
  325. package/dist/domains/dashboards/metrics-dashboard.cjs.js +1 -1
  326. package/dist/domains/dashboards/metrics-dashboard.cjs.js.map +1 -1
  327. package/dist/domains/dashboards/metrics-dashboard.es.js +1 -1
  328. package/dist/domains/dashboards/metrics-dashboard.es.js.map +1 -1
  329. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +4 -4
  330. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +4 -4
  331. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
  332. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
  333. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +3 -3
  334. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +3 -3
  335. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +5 -5
  336. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +5 -5
  337. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +1 -1
  338. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +1 -1
  339. package/dist/domains/logs/components/log-data-panel.cjs.js +6 -6
  340. package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
  341. package/dist/domains/logs/components/log-data-panel.es.js +4 -4
  342. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  343. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  344. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  345. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  346. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  347. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  348. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  349. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  350. package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
  351. package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js +1 -1
  352. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  353. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  354. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  355. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  356. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js +2 -2
  357. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js.map +1 -1
  358. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js +2 -2
  359. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js.map +1 -1
  360. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  361. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  362. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  363. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  364. package/dist/domains/metrics/components/date-range-selector.cjs.js +2 -2
  365. package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
  366. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  367. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +4 -4
  368. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -1
  369. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +4 -4
  370. package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -1
  371. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  372. package/dist/domains/metrics/drilldown.es.js +1 -1
  373. package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
  374. package/dist/domains/metrics/metrics-filters.es.js +1 -1
  375. package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +1 -1
  376. package/dist/domains/observability/hooks/use-observability-list-filters.es.js +1 -1
  377. package/dist/domains/observability/observability-list-url-state.cjs.js +1 -1
  378. package/dist/domains/observability/observability-list-url-state.es.js +1 -1
  379. package/dist/domains/observability/saved-view-state.cjs.js +1 -1
  380. package/dist/domains/observability/saved-view-state.es.js +1 -1
  381. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  382. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  383. package/dist/domains/observability/saved-views.cjs.js +1 -1
  384. package/dist/domains/observability/saved-views.es.js +1 -1
  385. package/dist/domains/observability.cjs.js +1 -1
  386. package/dist/domains/observability.es.js +1 -1
  387. package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
  388. package/dist/domains/scores/components/score-data-panel.es.js +2 -2
  389. package/dist/domains/scores/components/span-scoring.cjs.js +6 -6
  390. package/dist/domains/scores/components/span-scoring.cjs.js.map +1 -1
  391. package/dist/domains/scores/components/span-scoring.es.js +6 -6
  392. package/dist/domains/scores/components/span-scoring.es.js.map +1 -1
  393. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  394. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  395. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  396. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  397. package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
  398. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
  399. package/dist/domains/skills/skill-simple-form.es.js +3 -3
  400. package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
  401. package/dist/domains/spans/components/spans-explorer-body.cjs.js +8 -8
  402. package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
  403. package/dist/domains/spans/components/spans-explorer-body.es.js +8 -8
  404. package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
  405. package/dist/domains/spans/components/spans-filter-bar.cjs.js +6 -6
  406. package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
  407. package/dist/domains/spans/components/spans-filter-bar.es.js +6 -6
  408. package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
  409. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +5 -5
  410. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js.map +1 -1
  411. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +5 -5
  412. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js.map +1 -1
  413. package/dist/domains/spans/span-filters.cjs.js +2 -2
  414. package/dist/domains/spans/span-filters.cjs.js.map +1 -1
  415. package/dist/domains/spans/span-filters.es.js +2 -2
  416. package/dist/domains/spans/span-filters.es.js.map +1 -1
  417. package/dist/domains/threads/components/threads-explorer-body.cjs.js +8 -8
  418. package/dist/domains/threads/components/threads-explorer-body.cjs.js.map +1 -1
  419. package/dist/domains/threads/components/threads-explorer-body.es.js +8 -8
  420. package/dist/domains/threads/components/threads-explorer-body.es.js.map +1 -1
  421. package/dist/domains/threads/components/threads-filter-bar.cjs.js +6 -6
  422. package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
  423. package/dist/domains/threads/components/threads-filter-bar.es.js +6 -6
  424. package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
  425. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +5 -5
  426. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js.map +1 -1
  427. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +5 -5
  428. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js.map +1 -1
  429. package/dist/domains/threads/thread-filters.cjs.js +2 -2
  430. package/dist/domains/threads/thread-filters.cjs.js.map +1 -1
  431. package/dist/domains/threads/thread-filters.es.js +2 -2
  432. package/dist/domains/threads/thread-filters.es.js.map +1 -1
  433. package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +1 -1
  434. package/dist/domains/traces/components/columns-menu/columns-menu.es.js +1 -1
  435. package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
  436. package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
  437. package/dist/domains/traces/components/feedback-thread.es.js +4 -4
  438. package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
  439. package/dist/domains/traces/components/span-data-panel-view.cjs.js +5 -5
  440. package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
  441. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  442. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  443. package/dist/domains/traces/components/span-outcome.cjs.js +1 -1
  444. package/dist/domains/traces/components/span-outcome.es.js +1 -1
  445. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  446. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  447. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  448. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  449. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
  450. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
  451. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  452. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  453. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  454. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  455. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  456. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  457. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  458. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  459. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
  460. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
  461. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  462. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  463. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  464. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  465. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  466. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  467. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  468. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  469. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  470. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  471. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  472. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  473. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  474. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  475. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  476. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  477. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -1
  478. package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
  479. package/dist/domains/traces/components/trace-columns-menu.cjs.js +5 -6
  480. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  481. package/dist/domains/traces/components/trace-columns-menu.es.js +5 -6
  482. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  483. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +5 -5
  484. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  485. package/dist/domains/traces/components/trace-data-panel-view.es.js +5 -5
  486. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  487. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
  488. package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
  489. package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
  490. package/dist/domains/traces/components/trace-details-view.es.js +1 -1
  491. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  492. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  493. package/dist/domains/traces/components/trace-error-summary.cjs.js +1 -1
  494. package/dist/domains/traces/components/trace-error-summary.es.js +1 -1
  495. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  496. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  497. package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
  498. package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
  499. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  500. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  501. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
  502. package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
  503. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  504. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  505. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +1 -1
  506. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +1 -1
  507. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +6 -6
  508. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
  509. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +6 -6
  510. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
  511. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +1 -1
  512. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +1 -1
  513. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  514. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  515. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +5 -5
  516. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -1
  517. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +5 -5
  518. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +1 -1
  519. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  520. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  521. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  522. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  523. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
  524. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  525. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
  526. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  527. package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
  528. package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
  529. package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
  530. package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
  531. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  532. package/dist/domains/traces/trace-filters.es.js +1 -1
  533. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  534. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  535. package/dist/domains/traces.cjs.js +1 -1
  536. package/dist/domains/traces.es.js +1 -1
  537. package/dist/domains/workflows/components/workflow-combobox.cjs.js +3 -3
  538. package/dist/domains/workflows/components/workflow-combobox.cjs.js.map +1 -1
  539. package/dist/domains/workflows/components/workflow-combobox.es.js +3 -3
  540. package/dist/domains/workflows/components/workflow-combobox.es.js.map +1 -1
  541. package/dist/domains/workflows/components/workflow-information.cjs.js +2 -2
  542. package/dist/domains/workflows/components/workflow-information.es.js +2 -2
  543. package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
  544. package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
  545. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  546. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  547. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  548. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  549. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  550. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  551. package/dist/domains/workflows/context/use-stream-for-run.cjs.js +1 -1
  552. package/dist/domains/workflows/context/use-stream-for-run.es.js +1 -1
  553. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  554. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  555. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  556. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  557. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  558. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  559. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  560. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  561. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  562. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
  563. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  564. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
  565. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  566. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  567. package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
  568. package/dist/domains/workflows/workflow/utils.es.js +1 -1
  569. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  570. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  571. package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
  572. package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
  573. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  574. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  575. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  576. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  577. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
  578. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
  579. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  580. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  581. package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
  582. package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
  583. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  584. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  585. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  586. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  587. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
  588. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
  589. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
  590. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
  591. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
  592. package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
  593. package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
  594. package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
  595. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  596. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  597. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  598. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  599. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  600. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  601. package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
  602. package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
  603. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  604. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  605. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  606. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  607. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
  608. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
  609. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  610. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  611. package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
  612. package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
  613. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  614. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  615. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  616. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  617. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +4 -4
  618. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
  619. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +4 -4
  620. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
  621. package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
  622. package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
  623. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
  624. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  625. package/dist/domains/workspace/components/workspace-error.cjs.js +1 -1
  626. package/dist/domains/workspace/components/workspace-error.es.js +1 -1
  627. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  628. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  629. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  630. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  631. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  632. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  633. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  634. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  635. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  636. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  637. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -6
  638. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  639. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -5
  640. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  641. package/dist/ee/signals/examples-pager.es.js +1 -1
  642. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  643. package/dist/ee/signals/sankey-signals.es.js +1 -1
  644. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  645. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  646. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
  647. package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
  648. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  649. package/dist/ee/signals/signals-error-state.es.js +1 -1
  650. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  651. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  652. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  653. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  654. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  655. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  656. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  657. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  658. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  659. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  660. package/dist/{filter-bar-chip-7O02P9Vk.js → filter-bar-chip-CABeKrtf.js} +88 -73
  661. package/dist/filter-bar-chip-CABeKrtf.js.map +1 -0
  662. package/dist/{filter-bar-chip-BUyMf8XQ.cjs → filter-bar-chip-Cg-UbIwP.cjs} +90 -81
  663. package/dist/filter-bar-chip-Cg-UbIwP.cjs.map +1 -0
  664. package/dist/filter-bar-chip.css +22 -0
  665. package/dist/filter-bar-time-range-BA-pXMlo.cjs +83 -0
  666. package/dist/filter-bar-time-range-BA-pXMlo.cjs.map +1 -0
  667. package/dist/filter-bar-time-range-mg9JeYue.js +60 -0
  668. package/dist/filter-bar-time-range-mg9JeYue.js.map +1 -0
  669. package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
  670. package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
  671. package/dist/{input-group-uDpFNnSW.cjs → input-group-DVJLZDBL.cjs} +6 -4
  672. package/dist/input-group-DVJLZDBL.cjs.map +1 -0
  673. package/dist/{input-group-g85FYfze.js → input-group-QKKV_ouF.js} +7 -5
  674. package/dist/input-group-QKKV_ouF.js.map +1 -0
  675. package/dist/layout/tabbed-container.cjs.js +1 -1
  676. package/dist/layout/tabbed-container.es.js +1 -1
  677. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  678. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  679. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  680. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  681. package/dist/lib/form/components/date-field.cjs.js +1 -1
  682. package/dist/lib/form/components/date-field.es.js +1 -1
  683. package/dist/lib/form/components/error-message.cjs.js +1 -1
  684. package/dist/lib/form/components/error-message.es.js +1 -1
  685. package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
  686. package/dist/lib/form/components/form-submit-row.es.js +1 -1
  687. package/dist/lib/form/components/record-field.cjs.js +1 -1
  688. package/dist/lib/form/components/record-field.es.js +1 -1
  689. package/dist/lib/form/components/select-field.cjs.js +1 -1
  690. package/dist/lib/form/components/select-field.es.js +1 -1
  691. package/dist/lib/form/components/submit-button.cjs.js +1 -1
  692. package/dist/lib/form/components/submit-button.es.js +1 -1
  693. package/dist/{list-search-BEJmYa9a.cjs → list-search-BtRno5As.cjs} +2 -2
  694. package/dist/list-search-BtRno5As.cjs.map +1 -0
  695. package/dist/{list-search-bg7WzULj.js → list-search-CkhsTFdG.js} +2 -2
  696. package/dist/list-search-CkhsTFdG.js.map +1 -0
  697. package/dist/{observability-saved-views-Zlz74syw.js → observability-saved-views-CjKTEp1V.js} +4 -4
  698. package/dist/observability-saved-views-CjKTEp1V.js.map +1 -0
  699. package/dist/{observability-saved-views-BNU3GkK6.cjs → observability-saved-views-Daizz4tU.cjs} +4 -4
  700. package/dist/observability-saved-views-Daizz4tU.cjs.map +1 -0
  701. package/dist/primitives/chart-plot.cjs.js +8 -6
  702. package/dist/primitives/chart-plot.cjs.js.map +1 -1
  703. package/dist/primitives/chart-plot.es.js +8 -6
  704. package/dist/primitives/chart-plot.es.js.map +1 -1
  705. package/dist/primitives/control-icon.cjs.js +9 -0
  706. package/dist/primitives/control-icon.cjs.js.map +1 -0
  707. package/dist/primitives/control-icon.d.ts +1 -0
  708. package/dist/primitives/control-icon.es.js +8 -0
  709. package/dist/primitives/control-icon.es.js.map +1 -0
  710. package/dist/primitives/control-size.cjs.js +6 -0
  711. package/dist/primitives/control-size.cjs.js.map +1 -1
  712. package/dist/primitives/control-size.es.js +6 -1
  713. package/dist/primitives/control-size.es.js.map +1 -1
  714. package/dist/primitives/menu-item.cjs.js +3 -3
  715. package/dist/primitives/menu-item.cjs.js.map +1 -1
  716. package/dist/primitives/menu-item.es.js +3 -3
  717. package/dist/primitives/menu-item.es.js.map +1 -1
  718. package/dist/primitives/trigger-button.cjs.js +1 -1
  719. package/dist/primitives/trigger-button.es.js +1 -1
  720. package/dist/{property-filter-applied-DRglaEj-.js → property-filter-applied--U5EZdaA.js} +4 -4
  721. package/dist/property-filter-applied--U5EZdaA.js.map +1 -0
  722. package/dist/{property-filter-applied-DqsPFbYM.cjs → property-filter-applied-BkkIObRq.cjs} +19 -19
  723. package/dist/property-filter-applied-BkkIObRq.cjs.map +1 -0
  724. package/dist/{select-BbFpEBAY.js → select-BdIZEdcy.js} +4 -8
  725. package/dist/select-BdIZEdcy.js.map +1 -0
  726. package/dist/{select-NySY9Men.cjs → select-Dg8L5ROX.cjs} +3 -7
  727. package/dist/select-Dg8L5ROX.cjs.map +1 -0
  728. package/dist/{span-payload-primitives-ChvD2RrN.js → span-payload-primitives-B3RdahsC.js} +3 -3
  729. package/dist/{span-payload-primitives-ChvD2RrN.js.map → span-payload-primitives-B3RdahsC.js.map} +1 -1
  730. package/dist/{span-payload-primitives-w1vtAXAw.cjs → span-payload-primitives-_2d-pAOD.cjs} +3 -3
  731. package/dist/{span-payload-primitives-w1vtAXAw.cjs.map → span-payload-primitives-_2d-pAOD.cjs.map} +1 -1
  732. package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +2 -2
  733. package/dist/src/domains/spans/components/spans-filter-bar.d.ts +1 -1
  734. package/dist/src/domains/spans/hooks/use-spans-filter-bar.d.ts +1 -1
  735. package/dist/src/domains/spans/span-filters.d.ts +1 -1
  736. package/dist/src/domains/threads/components/threads-filter-bar.d.ts +1 -1
  737. package/dist/src/domains/threads/hooks/use-threads-filter-bar.d.ts +1 -1
  738. package/dist/src/domains/threads/thread-filters.d.ts +1 -1
  739. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +3 -3
  740. package/dist/src/domains/traces/components/traces-page-skeleton.d.ts +1 -1
  741. package/dist/src/ds/components/Button/Button.d.ts +15 -0
  742. package/dist/src/ds/components/ClearFiltersButton/clear-filters-button.d.ts +12 -0
  743. package/dist/src/ds/components/ClearFiltersButton/index.d.ts +1 -0
  744. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +0 -1
  745. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -11
  746. package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +10 -7
  747. package/dist/src/ds/components/FilterBar/filter-bar-time-range.d.ts +19 -0
  748. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +2 -0
  749. package/dist/src/ds/components/FilterBar/index.d.ts +2 -0
  750. package/dist/src/ds/components/FilterBar/use-filter-bar-item-keys.d.ts +23 -0
  751. package/dist/src/ds/components/ListSearch/list-search.d.ts +1 -0
  752. package/dist/src/ds/components/MetricsTable/metrics-table-rows.d.ts +10 -3
  753. package/dist/src/ds/components/MetricsTable/metrics-table.d.ts +1 -1
  754. package/dist/src/ds/primitives/control-icon.d.ts +3 -0
  755. package/dist/src/ds/primitives/control-size.d.ts +1 -0
  756. package/dist/style.css +131 -65
  757. package/dist/{tabbed-container-CFEImJOK.cjs → tabbed-container-B4lCBgRP.cjs} +6 -6
  758. package/dist/{tabbed-container-CFEImJOK.cjs.map → tabbed-container-B4lCBgRP.cjs.map} +1 -1
  759. package/dist/{tabbed-container-BKUqfEKy.js → tabbed-container-DI1GI1Qv.js} +6 -6
  760. package/dist/{tabbed-container-BKUqfEKy.js.map → tabbed-container-DI1GI1Qv.js.map} +1 -1
  761. package/dist/{tabs-content-DgR3Hik1.cjs → tabs-content-CmXe5ML0.cjs} +2 -2
  762. package/dist/{tabs-content-DgR3Hik1.cjs.map → tabs-content-CmXe5ML0.cjs.map} +1 -1
  763. package/dist/{tabs-content-cpV6A9c3.js → tabs-content-D__B9hd-.js} +2 -2
  764. package/dist/{tabs-content-cpV6A9c3.js.map → tabs-content-D__B9hd-.js.map} +1 -1
  765. package/dist/{tabs-tab-UT1JliwK.js → tabs-tab-CYTZevdV.js} +2 -2
  766. package/dist/{tabs-tab-UT1JliwK.js.map → tabs-tab-CYTZevdV.js.map} +1 -1
  767. package/dist/{tabs-tab-Qp3RJ17z.cjs → tabs-tab-DGwfHVDr.cjs} +2 -2
  768. package/dist/{tabs-tab-Qp3RJ17z.cjs.map → tabs-tab-DGwfHVDr.cjs.map} +1 -1
  769. package/dist/{toast-api-WhxnAT9F.js → toast-api-D_rrRhNG.js} +2 -2
  770. package/dist/{toast-api-WhxnAT9F.js.map → toast-api-D_rrRhNG.js.map} +1 -1
  771. package/dist/{toast-api-Bv87KHu_.cjs → toast-api-qtkOucy2.cjs} +2 -2
  772. package/dist/{toast-api-Bv87KHu_.cjs.map → toast-api-qtkOucy2.cjs.map} +1 -1
  773. package/dist/{tool-approval-Dfi0uAKU.cjs → tool-approval-1qiB4hhG.cjs} +4 -4
  774. package/dist/{tool-approval-Dfi0uAKU.cjs.map → tool-approval-1qiB4hhG.cjs.map} +1 -1
  775. package/dist/{tool-approval-DHeCkWHT.js → tool-approval-B6MFcaKV.js} +4 -4
  776. package/dist/{tool-approval-DHeCkWHT.js.map → tool-approval-B6MFcaKV.js.map} +1 -1
  777. package/dist/{tool-call-BCsDhIhs.cjs → tool-call-Bu66PkD-.cjs} +3 -3
  778. package/dist/{tool-call-BCsDhIhs.cjs.map → tool-call-Bu66PkD-.cjs.map} +1 -1
  779. package/dist/{tool-call-CILZa3tn.js → tool-call-Ch9-jjXU.js} +3 -3
  780. package/dist/{tool-call-CILZa3tn.js.map → tool-call-Ch9-jjXU.js.map} +1 -1
  781. package/dist/{tool-card-CJ7Kxi-U.cjs → tool-card-DrqPZfPQ.cjs} +4 -4
  782. package/dist/{tool-card-CJ7Kxi-U.cjs.map → tool-card-DrqPZfPQ.cjs.map} +1 -1
  783. package/dist/{tool-card-C3sDFUWc.js → tool-card-sO6P2Qj4.js} +4 -4
  784. package/dist/{tool-card-C3sDFUWc.js.map → tool-card-sO6P2Qj4.js.map} +1 -1
  785. package/dist/{trace-filters-BJaebsxJ.js → trace-filters-CaWkw779.js} +2 -3
  786. package/dist/trace-filters-CaWkw779.js.map +1 -0
  787. package/dist/{trace-filters-BNEZ31HX.cjs → trace-filters-a0N9bf52.cjs} +1 -2
  788. package/dist/trace-filters-a0N9bf52.cjs.map +1 -0
  789. package/dist/{use-workflow-graph-runtime-deTN_q_G.js → use-workflow-graph-runtime-BKNhOKsH.js} +3 -3
  790. package/dist/{use-workflow-graph-runtime-deTN_q_G.js.map → use-workflow-graph-runtime-BKNhOKsH.js.map} +1 -1
  791. package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs → use-workflow-graph-runtime-DYao-08R.cjs} +3 -3
  792. package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs.map → use-workflow-graph-runtime-DYao-08R.cjs.map} +1 -1
  793. package/dist/utils/toast.cjs.js +1 -1
  794. package/dist/utils/toast.es.js +1 -1
  795. package/oxlint/index.js +90 -0
  796. package/package.json +9 -9
  797. package/theme.css +5 -0
  798. package/dist/ActionRow-BfK77pCT.cjs.map +0 -1
  799. package/dist/ActionRow-Cd6tOC2K.js.map +0 -1
  800. package/dist/Button-Bw1e3ONi.js.map +0 -1
  801. package/dist/Button-YQRflC47.cjs.map +0 -1
  802. package/dist/DataCodeSection-CZRPsStI.cjs.map +0 -1
  803. package/dist/DataCodeSection-Ckd47p_S.js.map +0 -1
  804. package/dist/DateTimeRangePicker-C_Lie_2P.js.map +0 -1
  805. package/dist/DateTimeRangePicker-HmPOHwAQ.cjs.map +0 -1
  806. package/dist/FilterBar--4oguuVe.js.map +0 -1
  807. package/dist/FilterBar-BUd4f7oi.cjs.map +0 -1
  808. package/dist/MetricsTable-CRPeLHe1.js.map +0 -1
  809. package/dist/MetricsTable-D-aZf3dk.cjs.map +0 -1
  810. package/dist/ask-user-BdjH9F7G.js.map +0 -1
  811. package/dist/ask-user-C82m_G9W.cjs.map +0 -1
  812. package/dist/combobox-8kNAJFlj.cjs.map +0 -1
  813. package/dist/combobox-parts-BZVXwbG7.cjs.map +0 -1
  814. package/dist/combobox-parts-W7KRQUsV.js.map +0 -1
  815. package/dist/components/ButtonsGroup.cjs.js.map +0 -1
  816. package/dist/components/ButtonsGroup.es.js.map +0 -1
  817. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +0 -90
  818. package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +0 -1
  819. package/dist/domains/traces/components/trace-time-range-chip.d.ts +0 -1
  820. package/dist/domains/traces/components/trace-time-range-chip.es.js +0 -86
  821. package/dist/domains/traces/components/trace-time-range-chip.es.js.map +0 -1
  822. package/dist/filter-bar-chip-7O02P9Vk.js.map +0 -1
  823. package/dist/filter-bar-chip-BUyMf8XQ.cjs.map +0 -1
  824. package/dist/input-group-g85FYfze.js.map +0 -1
  825. package/dist/input-group-uDpFNnSW.cjs.map +0 -1
  826. package/dist/list-search-BEJmYa9a.cjs.map +0 -1
  827. package/dist/list-search-bg7WzULj.js.map +0 -1
  828. package/dist/observability-saved-views-BNU3GkK6.cjs.map +0 -1
  829. package/dist/observability-saved-views-Zlz74syw.js.map +0 -1
  830. package/dist/property-filter-applied-DRglaEj-.js.map +0 -1
  831. package/dist/property-filter-applied-DqsPFbYM.cjs.map +0 -1
  832. package/dist/select-BbFpEBAY.js.map +0 -1
  833. package/dist/select-NySY9Men.cjs.map +0 -1
  834. package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +0 -22
  835. package/dist/trace-filters-BJaebsxJ.js.map +0 -1
  836. package/dist/trace-filters-BNEZ31HX.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-graph-runtime-deTN_q_G.js","names":[],"sources":["../src/domains/workflows/workflow/workflow-nested-graph.tsx","../src/domains/workflows/workflow/workflow-body-graph.tsx","../src/domains/workflows/workflow/workflow-graph-node.tsx","../src/domains/workflows/workflow/use-workflow-graph-runtime.tsx"],"sourcesContent":["import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\n\nimport { useMemo, useState } from 'react';\nimport { useCurrentRun } from '../context/use-current-run';\nimport { useWorkflowGraphNodes } from './use-workflow-graph-nodes';\nimport { useWorkflowGraphRuntime } from './use-workflow-graph-runtime';\nimport { WorkflowGraphBoundary } from './workflow-graph-boundary';\nimport { getWorkflowGraphGroups } from './workflow-graph-groups';\nimport { getWorkflowIterationScopes } from './workflow-iteration-scopes';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { Txt } from '@/ds/components/Txt';\nimport { WorkflowGraphCanvas, WORKFLOW_BOUNDARY_NODE_TYPE } from '@/ds/components/Workflow';\n\nexport interface WorkflowNestedGraphProps {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n embedded?: boolean;\n requestContext: Record<string, any>;\n}\n\nexport function WorkflowNestedGraph(props: WorkflowNestedGraphProps) {\n const layoutKey = useMemo(\n () => `${props.workflowName}:${JSON.stringify(props.stepGraph)}`,\n [props.workflowName, props.stepGraph],\n );\n return (\n <WorkflowGraphBoundary key={layoutKey} stepGraph={props.stepGraph}>\n <WorkflowNestedGraphContent {...props} />\n </WorkflowGraphBoundary>\n );\n}\n\nfunction WorkflowNestedGraphContent({\n stepGraph,\n workflowName,\n isForEach,\n embedded,\n requestContext,\n}: WorkflowNestedGraphProps) {\n const { nodes, edges, onNodesChange } = useWorkflowGraphNodes(stepGraph);\n const { steps } = useCurrentRun();\n const iterations = getWorkflowIterationScopes(Object.keys(steps), workflowName);\n const [selectedIteration, setSelectedIteration] = useState<string>();\n const activeIteration = iterations.find(iteration => iteration.value === selectedIteration) ?? iterations[0];\n\n const { edgeTypes, nodeTypes, styledEdges } = useWorkflowGraphRuntime({\n edges,\n workflowName: activeIteration?.value ?? workflowName,\n requestContext,\n });\n\n const labeledNodes = useMemo(\n () =>\n nodes.map(node => {\n if (!isForEach || node.type !== WORKFLOW_BOUNDARY_NODE_TYPE) return node;\n const label = node.data.boundaryRole === 'start' ? 'Each item' : 'Item result';\n return { ...node, data: { ...node.data, label } };\n }),\n [nodes, isForEach],\n );\n const groups = useMemo(() => getWorkflowGraphGroups(nodes), [nodes]);\n\n return (\n <div className=\"relative flex size-full flex-col\">\n {activeIteration && (\n <div className=\"nodrag nopan flex items-center gap-3 border-b border-border px-4 py-2\">\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n Iteration\n </Txt>\n <Select value={activeIteration.value} onValueChange={setSelectedIteration} items={iterations}>\n <SelectTrigger aria-label=\"Loop item\" size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {iterations.map(iteration => (\n <SelectItem key={iteration.value} value={iteration.value}>\n {iteration.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <WorkflowGraphCanvas\n variant={embedded ? 'inline' : 'nested'}\n groups={groups}\n nodes={labeledNodes}\n edges={styledEdges}\n edgeTypes={edgeTypes}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n />\n </div>\n </div>\n );\n}\n","import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport { Repeat2 } from 'lucide-react';\nimport { WorkflowNestedGraph } from './workflow-nested-graph';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function WorkflowBodyGraph({\n stepGraph,\n workflowName,\n isForEach,\n requestContext,\n}: {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n requestContext: Record<string, any>;\n}) {\n return (\n <section aria-label={isForEach ? 'Loop body' : 'Nested workflow'} className=\"flex h-full min-h-0 flex-col\">\n {isForEach && (\n <div className=\"flex shrink-0 items-start gap-2 px-4 py-3 text-muted-foreground\">\n <Repeat2 aria-hidden className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <Txt variant=\"meta\">Runs for every item. All items finish before the workflow continues.</Txt>\n </div>\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <ReactFlowProvider>\n <WorkflowNestedGraph\n stepGraph={stepGraph}\n embedded\n workflowName={workflowName}\n isForEach={isForEach}\n requestContext={requestContext}\n />\n </ReactFlowProvider>\n </div>\n </section>\n );\n}\n","import type { NodeProps } from '@xyflow/react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport type { Step } from '../context/use-current-run';\nimport { useWorkflowSelectedStep } from '../context/use-workflow-selected-step';\nimport { useWorkflowStepDetail } from '../context/workflow-step-detail-context';\nimport { isAwaitingInput, resolveStepSpan } from '../context/workflow-step-timing';\nimport { useWaitingStepKey } from './use-workflow-trigger';\nimport { WorkflowBodyGraph } from './workflow-body-graph';\nimport { getWorkflowCardKind } from './workflow-node-kind';\nimport { WorkflowStepActionBar } from './workflow-step-action-bar';\nimport type { WorkflowStepNode, WorkflowStepNodeData } from './workflow-step-node-utils';\nimport { WorkflowNodeFrame, WorkflowConditionCard, WorkflowStepCardView } from '@/ds/components/Workflow';\nimport type { WorkflowCardDisplayStatus } from '@/ds/components/Workflow';\n\nexport interface WorkflowGraphNodeProps {\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}\n\nconst getDisplayStatus = (step?: Step): { displayStatus: WorkflowCardDisplayStatus; isTripwire: boolean } => {\n const isTripwire = step?.status === 'failed' && step?.tripwire !== undefined;\n const displayStatus = step && isAwaitingInput(step) ? 'suspended' : step?.status;\n return {\n displayStatus: isTripwire ? 'tripwire' : displayStatus,\n isTripwire,\n };\n};\n\nconst WorkflowStepCard = ({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const { selectedStepId, setSelectedStepId, hoverStepId, setHoverStepId } = useWorkflowSelectedStep();\n const { showNestedGraph } = useWorkflowStepDetail();\n const waitingStepKey = useWaitingStepKey();\n const { label, stepId, description } = data;\n const mapConfig = data.mapConfig ?? ('step' in data.workflowStep ? data.workflowStep.step?.mapConfig : undefined);\n const stepGraph =\n data.stepGraph ??\n ('step' in data.workflowStep ? data.workflowStep.step?.serializedStepFlow : undefined) ??\n (data.workflowStep.kind === 'nested-workflow-step' && data.workflowStep.flow.type === 'workflow'\n ? data.workflowStep.flow.serializedStepFlow\n : undefined);\n const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;\n const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;\n const isSelected = selectedStepId === stepKey;\n const isWaiting = waitingStepKey === stepKey;\n const isHovered = hoverStepId === stepKey;\n const step = steps[stepKey];\n const { displayStatus, isTripwire } = getDisplayStatus(step);\n const stepSpan = step ? resolveStepSpan(step) : undefined;\n\n return (\n <WorkflowStepCardView\n label={data.mapContext?.label ?? label}\n nodeKind={getWorkflowCardKind(data.workflowStep)}\n onSelect={() => setSelectedStepId(stepKey)}\n initiallyOpen={!parentWorkflowName}\n body={\n stepGraph?.length ? (\n <WorkflowBodyGraph\n stepGraph={stepGraph}\n workflowName={fullLabel}\n isForEach={data.isForEach}\n requestContext={requestContext}\n />\n ) : undefined\n }\n description={description ?? data.mapContext?.description}\n displayStatus={displayStatus}\n isNestedWorkflowStep={data.workflowStep.kind === 'nested-workflow-step'}\n stepKey={stepKey}\n isSelected={isSelected}\n isWaiting={isWaiting}\n isHovered={isHovered}\n onHoverChange={isHovered => setHoverStepId(isHovered ? stepKey : null)}\n duration={data.duration}\n date={data.date}\n isForEach={data.isForEach}\n foreachProgress={step?.foreachProgress}\n mapConfig={mapConfig}\n canSuspend={data.canSuspend}\n stepGraph={stepGraph}\n startedAt={stepSpan?.start}\n endedAt={stepSpan?.end}\n spansSuspension={stepSpan?.spansSuspension}\n actionBar={\n <WorkflowStepActionBar\n stepName={label}\n stepId={stepId}\n resumeData={step?.resumeData}\n error={isTripwire ? undefined : step?.error}\n tripwire={isTripwire ? step?.tripwire : undefined}\n mapConfig={mapConfig}\n onShowNestedGraph={stepGraph ? () => showNestedGraph({ label, fullStep: fullLabel, stepGraph }) : undefined}\n stepKey={stepKey}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nconst WorkflowConditionNodeCard = ({\n data,\n parentWorkflowName,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const conditions = data.conditions ?? [];\n const previousStepId =\n data.previousStepId && (parentWorkflowName ? `${parentWorkflowName}.${data.previousStepId}` : data.previousStepId);\n const previousStep = previousStepId ? steps[previousStepId] : undefined;\n const { displayStatus: previousDisplayStatus, isTripwire } = getDisplayStatus(previousStep);\n\n return (\n <WorkflowConditionCard\n conditions={conditions}\n previousDisplayStatus={previousDisplayStatus}\n actionBar={\n <WorkflowStepActionBar\n stepName={data.nextStepId ?? data.label}\n mapConfig={data.mapConfig}\n tripwire={isTripwire ? previousStep?.tripwire : undefined}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nexport function WorkflowGraphNode({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: NodeProps<WorkflowStepNode> & WorkflowGraphNodeProps) {\n const content =\n data.workflowStep.kind === 'conditional' ? (\n <WorkflowConditionNodeCard data={data} parentWorkflowName={parentWorkflowName} requestContext={requestContext} />\n ) : (\n <WorkflowStepCard\n data={data}\n parentWorkflowName={parentWorkflowName}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n );\n\n return (\n <WorkflowNodeFrame withoutTopHandle={data.withoutTopHandle} withoutBottomHandle={data.withoutBottomHandle}>\n {content}\n </WorkflowNodeFrame>\n );\n}\n","import type { EdgeProps, NodeProps } from '@xyflow/react';\nimport { useContext, useMemo } from 'react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { groupWorkflowEdgeData } from './data/workflow-edge-data-groups';\nimport { buildStepsFlow } from './utils';\nimport type { WorkflowGraphEdge } from './utils';\nimport { getWorkflowBoundaryData } from './workflow-boundary-data';\nimport { WorkflowDataEdge } from './workflow-data-edge';\nimport { WorkflowGraphNode } from './workflow-graph-node';\nimport { WORKFLOW_BOUNDARY_NODE_TYPE, WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { WorkflowBoundaryNode as WorkflowBoundaryNodeType, WorkflowStepNode } from './workflow-step-node-utils';\nimport { WorkflowBoundaryNode, WORKFLOW_DATA_EDGE_TYPE } from '@/ds/components/Workflow';\n\nconst getScopedStepId = (stepId: string | undefined, workflowName?: string) =>\n stepId && workflowName ? `${workflowName}.${stepId}` : stepId;\n\nexport const useWorkflowGraphRuntime = ({\n edges,\n workflowName,\n requestContext,\n}: {\n edges: WorkflowGraphEdge[];\n workflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const workflowRun = useContext(WorkflowRunContext);\n const workflowSucceeded = workflowName\n ? steps[workflowName]?.status === 'success' || getWorkflowBoundaryData(steps, workflowName).output !== undefined\n : workflowRun.result?.status === 'success';\n const stepsFlow = useMemo(() => buildStepsFlow(edges), [edges]);\n const nodeTypes = useMemo(\n () => ({\n [WORKFLOW_STEP_NODE_TYPE]: (props: NodeProps<WorkflowStepNode>) => (\n <WorkflowGraphNode\n parentWorkflowName={workflowName}\n {...props}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n ),\n [WORKFLOW_BOUNDARY_NODE_TYPE]: (props: NodeProps<WorkflowBoundaryNodeType>) => (\n <WorkflowBoundaryNode {...props} />\n ),\n }),\n [stepsFlow, workflowName, requestContext],\n );\n const edgeTypes = useMemo(\n () => ({\n [WORKFLOW_DATA_EDGE_TYPE]: (props: EdgeProps<WorkflowGraphEdge>) => (\n <WorkflowDataEdge parentWorkflowName={workflowName} {...props} />\n ),\n }),\n [workflowName],\n );\n const styledEdges = useMemo(\n () =>\n groupWorkflowEdgeData(edges).map((edge): WorkflowGraphEdge => {\n const previousStepId = getScopedStepId(edge.data?.previousStepId, workflowName);\n const nextStepId = getScopedStepId(edge.data?.nextStepId, workflowName);\n const previousStepSucceeded = steps[previousStepId ?? '']?.status === 'success';\n const nextStepStatus = steps[nextStepId ?? '']?.status;\n let isFinishedEdge = previousStepSucceeded && nextStepStatus !== 'skipped';\n if (edge.data?.boundaryPayload === 'workflow-output') {\n isFinishedEdge = workflowSucceeded;\n } else if (edge.data?.boundaryPayload === 'workflow-input' || edge.data?.conditionNode) {\n isFinishedEdge = Boolean(nextStepStatus) && nextStepStatus !== 'skipped';\n }\n\n return {\n ...edge,\n type: WORKFLOW_DATA_EDGE_TYPE,\n animated: isFinishedEdge ? false : edge.animated,\n data: {\n ...edge.data,\n edgeStatus: isFinishedEdge ? 'success' : 'idle',\n },\n style: {\n ...edge.style,\n stroke: isFinishedEdge ? 'var(--success-indicator)' : 'var(--muted-foreground)',\n strokeDasharray: isFinishedEdge ? 'none' : edge.style?.strokeDasharray,\n },\n };\n }),\n [edges, steps, workflowName, workflowSucceeded],\n );\n\n return { edgeTypes, nodeTypes, stepsFlow, styledEdges };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-graph-runtime-BKNhOKsH.js","names":[],"sources":["../src/domains/workflows/workflow/workflow-nested-graph.tsx","../src/domains/workflows/workflow/workflow-body-graph.tsx","../src/domains/workflows/workflow/workflow-graph-node.tsx","../src/domains/workflows/workflow/use-workflow-graph-runtime.tsx"],"sourcesContent":["import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\n\nimport { useMemo, useState } from 'react';\nimport { useCurrentRun } from '../context/use-current-run';\nimport { useWorkflowGraphNodes } from './use-workflow-graph-nodes';\nimport { useWorkflowGraphRuntime } from './use-workflow-graph-runtime';\nimport { WorkflowGraphBoundary } from './workflow-graph-boundary';\nimport { getWorkflowGraphGroups } from './workflow-graph-groups';\nimport { getWorkflowIterationScopes } from './workflow-iteration-scopes';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { Txt } from '@/ds/components/Txt';\nimport { WorkflowGraphCanvas, WORKFLOW_BOUNDARY_NODE_TYPE } from '@/ds/components/Workflow';\n\nexport interface WorkflowNestedGraphProps {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n embedded?: boolean;\n requestContext: Record<string, any>;\n}\n\nexport function WorkflowNestedGraph(props: WorkflowNestedGraphProps) {\n const layoutKey = useMemo(\n () => `${props.workflowName}:${JSON.stringify(props.stepGraph)}`,\n [props.workflowName, props.stepGraph],\n );\n return (\n <WorkflowGraphBoundary key={layoutKey} stepGraph={props.stepGraph}>\n <WorkflowNestedGraphContent {...props} />\n </WorkflowGraphBoundary>\n );\n}\n\nfunction WorkflowNestedGraphContent({\n stepGraph,\n workflowName,\n isForEach,\n embedded,\n requestContext,\n}: WorkflowNestedGraphProps) {\n const { nodes, edges, onNodesChange } = useWorkflowGraphNodes(stepGraph);\n const { steps } = useCurrentRun();\n const iterations = getWorkflowIterationScopes(Object.keys(steps), workflowName);\n const [selectedIteration, setSelectedIteration] = useState<string>();\n const activeIteration = iterations.find(iteration => iteration.value === selectedIteration) ?? iterations[0];\n\n const { edgeTypes, nodeTypes, styledEdges } = useWorkflowGraphRuntime({\n edges,\n workflowName: activeIteration?.value ?? workflowName,\n requestContext,\n });\n\n const labeledNodes = useMemo(\n () =>\n nodes.map(node => {\n if (!isForEach || node.type !== WORKFLOW_BOUNDARY_NODE_TYPE) return node;\n const label = node.data.boundaryRole === 'start' ? 'Each item' : 'Item result';\n return { ...node, data: { ...node.data, label } };\n }),\n [nodes, isForEach],\n );\n const groups = useMemo(() => getWorkflowGraphGroups(nodes), [nodes]);\n\n return (\n <div className=\"relative flex size-full flex-col\">\n {activeIteration && (\n <div className=\"nodrag nopan flex items-center gap-3 border-b border-border px-4 py-2\">\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n Iteration\n </Txt>\n <Select value={activeIteration.value} onValueChange={setSelectedIteration} items={iterations}>\n <SelectTrigger aria-label=\"Loop item\" size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {iterations.map(iteration => (\n <SelectItem key={iteration.value} value={iteration.value}>\n {iteration.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <WorkflowGraphCanvas\n variant={embedded ? 'inline' : 'nested'}\n groups={groups}\n nodes={labeledNodes}\n edges={styledEdges}\n edgeTypes={edgeTypes}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n />\n </div>\n </div>\n );\n}\n","import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport { Repeat2 } from 'lucide-react';\nimport { WorkflowNestedGraph } from './workflow-nested-graph';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function WorkflowBodyGraph({\n stepGraph,\n workflowName,\n isForEach,\n requestContext,\n}: {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n requestContext: Record<string, any>;\n}) {\n return (\n <section aria-label={isForEach ? 'Loop body' : 'Nested workflow'} className=\"flex h-full min-h-0 flex-col\">\n {isForEach && (\n <div className=\"flex shrink-0 items-start gap-2 px-4 py-3 text-muted-foreground\">\n <Repeat2 aria-hidden className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <Txt variant=\"meta\">Runs for every item. All items finish before the workflow continues.</Txt>\n </div>\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <ReactFlowProvider>\n <WorkflowNestedGraph\n stepGraph={stepGraph}\n embedded\n workflowName={workflowName}\n isForEach={isForEach}\n requestContext={requestContext}\n />\n </ReactFlowProvider>\n </div>\n </section>\n );\n}\n","import type { NodeProps } from '@xyflow/react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport type { Step } from '../context/use-current-run';\nimport { useWorkflowSelectedStep } from '../context/use-workflow-selected-step';\nimport { useWorkflowStepDetail } from '../context/workflow-step-detail-context';\nimport { isAwaitingInput, resolveStepSpan } from '../context/workflow-step-timing';\nimport { useWaitingStepKey } from './use-workflow-trigger';\nimport { WorkflowBodyGraph } from './workflow-body-graph';\nimport { getWorkflowCardKind } from './workflow-node-kind';\nimport { WorkflowStepActionBar } from './workflow-step-action-bar';\nimport type { WorkflowStepNode, WorkflowStepNodeData } from './workflow-step-node-utils';\nimport { WorkflowNodeFrame, WorkflowConditionCard, WorkflowStepCardView } from '@/ds/components/Workflow';\nimport type { WorkflowCardDisplayStatus } from '@/ds/components/Workflow';\n\nexport interface WorkflowGraphNodeProps {\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}\n\nconst getDisplayStatus = (step?: Step): { displayStatus: WorkflowCardDisplayStatus; isTripwire: boolean } => {\n const isTripwire = step?.status === 'failed' && step?.tripwire !== undefined;\n const displayStatus = step && isAwaitingInput(step) ? 'suspended' : step?.status;\n return {\n displayStatus: isTripwire ? 'tripwire' : displayStatus,\n isTripwire,\n };\n};\n\nconst WorkflowStepCard = ({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const { selectedStepId, setSelectedStepId, hoverStepId, setHoverStepId } = useWorkflowSelectedStep();\n const { showNestedGraph } = useWorkflowStepDetail();\n const waitingStepKey = useWaitingStepKey();\n const { label, stepId, description } = data;\n const mapConfig = data.mapConfig ?? ('step' in data.workflowStep ? data.workflowStep.step?.mapConfig : undefined);\n const stepGraph =\n data.stepGraph ??\n ('step' in data.workflowStep ? data.workflowStep.step?.serializedStepFlow : undefined) ??\n (data.workflowStep.kind === 'nested-workflow-step' && data.workflowStep.flow.type === 'workflow'\n ? data.workflowStep.flow.serializedStepFlow\n : undefined);\n const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;\n const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;\n const isSelected = selectedStepId === stepKey;\n const isWaiting = waitingStepKey === stepKey;\n const isHovered = hoverStepId === stepKey;\n const step = steps[stepKey];\n const { displayStatus, isTripwire } = getDisplayStatus(step);\n const stepSpan = step ? resolveStepSpan(step) : undefined;\n\n return (\n <WorkflowStepCardView\n label={data.mapContext?.label ?? label}\n nodeKind={getWorkflowCardKind(data.workflowStep)}\n onSelect={() => setSelectedStepId(stepKey)}\n initiallyOpen={!parentWorkflowName}\n body={\n stepGraph?.length ? (\n <WorkflowBodyGraph\n stepGraph={stepGraph}\n workflowName={fullLabel}\n isForEach={data.isForEach}\n requestContext={requestContext}\n />\n ) : undefined\n }\n description={description ?? data.mapContext?.description}\n displayStatus={displayStatus}\n isNestedWorkflowStep={data.workflowStep.kind === 'nested-workflow-step'}\n stepKey={stepKey}\n isSelected={isSelected}\n isWaiting={isWaiting}\n isHovered={isHovered}\n onHoverChange={isHovered => setHoverStepId(isHovered ? stepKey : null)}\n duration={data.duration}\n date={data.date}\n isForEach={data.isForEach}\n foreachProgress={step?.foreachProgress}\n mapConfig={mapConfig}\n canSuspend={data.canSuspend}\n stepGraph={stepGraph}\n startedAt={stepSpan?.start}\n endedAt={stepSpan?.end}\n spansSuspension={stepSpan?.spansSuspension}\n actionBar={\n <WorkflowStepActionBar\n stepName={label}\n stepId={stepId}\n resumeData={step?.resumeData}\n error={isTripwire ? undefined : step?.error}\n tripwire={isTripwire ? step?.tripwire : undefined}\n mapConfig={mapConfig}\n onShowNestedGraph={stepGraph ? () => showNestedGraph({ label, fullStep: fullLabel, stepGraph }) : undefined}\n stepKey={stepKey}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nconst WorkflowConditionNodeCard = ({\n data,\n parentWorkflowName,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const conditions = data.conditions ?? [];\n const previousStepId =\n data.previousStepId && (parentWorkflowName ? `${parentWorkflowName}.${data.previousStepId}` : data.previousStepId);\n const previousStep = previousStepId ? steps[previousStepId] : undefined;\n const { displayStatus: previousDisplayStatus, isTripwire } = getDisplayStatus(previousStep);\n\n return (\n <WorkflowConditionCard\n conditions={conditions}\n previousDisplayStatus={previousDisplayStatus}\n actionBar={\n <WorkflowStepActionBar\n stepName={data.nextStepId ?? data.label}\n mapConfig={data.mapConfig}\n tripwire={isTripwire ? previousStep?.tripwire : undefined}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nexport function WorkflowGraphNode({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: NodeProps<WorkflowStepNode> & WorkflowGraphNodeProps) {\n const content =\n data.workflowStep.kind === 'conditional' ? (\n <WorkflowConditionNodeCard data={data} parentWorkflowName={parentWorkflowName} requestContext={requestContext} />\n ) : (\n <WorkflowStepCard\n data={data}\n parentWorkflowName={parentWorkflowName}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n );\n\n return (\n <WorkflowNodeFrame withoutTopHandle={data.withoutTopHandle} withoutBottomHandle={data.withoutBottomHandle}>\n {content}\n </WorkflowNodeFrame>\n );\n}\n","import type { EdgeProps, NodeProps } from '@xyflow/react';\nimport { useContext, useMemo } from 'react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { groupWorkflowEdgeData } from './data/workflow-edge-data-groups';\nimport { buildStepsFlow } from './utils';\nimport type { WorkflowGraphEdge } from './utils';\nimport { getWorkflowBoundaryData } from './workflow-boundary-data';\nimport { WorkflowDataEdge } from './workflow-data-edge';\nimport { WorkflowGraphNode } from './workflow-graph-node';\nimport { WORKFLOW_BOUNDARY_NODE_TYPE, WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { WorkflowBoundaryNode as WorkflowBoundaryNodeType, WorkflowStepNode } from './workflow-step-node-utils';\nimport { WorkflowBoundaryNode, WORKFLOW_DATA_EDGE_TYPE } from '@/ds/components/Workflow';\n\nconst getScopedStepId = (stepId: string | undefined, workflowName?: string) =>\n stepId && workflowName ? `${workflowName}.${stepId}` : stepId;\n\nexport const useWorkflowGraphRuntime = ({\n edges,\n workflowName,\n requestContext,\n}: {\n edges: WorkflowGraphEdge[];\n workflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const workflowRun = useContext(WorkflowRunContext);\n const workflowSucceeded = workflowName\n ? steps[workflowName]?.status === 'success' || getWorkflowBoundaryData(steps, workflowName).output !== undefined\n : workflowRun.result?.status === 'success';\n const stepsFlow = useMemo(() => buildStepsFlow(edges), [edges]);\n const nodeTypes = useMemo(\n () => ({\n [WORKFLOW_STEP_NODE_TYPE]: (props: NodeProps<WorkflowStepNode>) => (\n <WorkflowGraphNode\n parentWorkflowName={workflowName}\n {...props}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n ),\n [WORKFLOW_BOUNDARY_NODE_TYPE]: (props: NodeProps<WorkflowBoundaryNodeType>) => (\n <WorkflowBoundaryNode {...props} />\n ),\n }),\n [stepsFlow, workflowName, requestContext],\n );\n const edgeTypes = useMemo(\n () => ({\n [WORKFLOW_DATA_EDGE_TYPE]: (props: EdgeProps<WorkflowGraphEdge>) => (\n <WorkflowDataEdge parentWorkflowName={workflowName} {...props} />\n ),\n }),\n [workflowName],\n );\n const styledEdges = useMemo(\n () =>\n groupWorkflowEdgeData(edges).map((edge): WorkflowGraphEdge => {\n const previousStepId = getScopedStepId(edge.data?.previousStepId, workflowName);\n const nextStepId = getScopedStepId(edge.data?.nextStepId, workflowName);\n const previousStepSucceeded = steps[previousStepId ?? '']?.status === 'success';\n const nextStepStatus = steps[nextStepId ?? '']?.status;\n let isFinishedEdge = previousStepSucceeded && nextStepStatus !== 'skipped';\n if (edge.data?.boundaryPayload === 'workflow-output') {\n isFinishedEdge = workflowSucceeded;\n } else if (edge.data?.boundaryPayload === 'workflow-input' || edge.data?.conditionNode) {\n isFinishedEdge = Boolean(nextStepStatus) && nextStepStatus !== 'skipped';\n }\n\n return {\n ...edge,\n type: WORKFLOW_DATA_EDGE_TYPE,\n animated: isFinishedEdge ? false : edge.animated,\n data: {\n ...edge.data,\n edgeStatus: isFinishedEdge ? 'success' : 'idle',\n },\n style: {\n ...edge.style,\n stroke: isFinishedEdge ? 'var(--success-indicator)' : 'var(--muted-foreground)',\n strokeDasharray: isFinishedEdge ? 'none' : edge.style?.strokeDasharray,\n },\n };\n }),\n [edges, steps, workflowName, workflowSucceeded],\n );\n\n return { edgeTypes, nodeTypes, stepsFlow, styledEdges };\n};\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- const require_select = require("./select-NySY9Men.cjs");
1
+ const require_select = require("./select-Dg8L5ROX.cjs");
2
2
  const require_Txt = require("./Txt-BnoSqxKE.cjs");
3
3
  const require_domains_workflows_context_workflow_run_context = require("./domains/workflows/context/workflow-run-context.cjs.js");
4
4
  const require_domains_workflows_context_workflow_step_detail_context = require("./domains/workflows/context/workflow-step-detail-context.cjs.js");
5
5
  const require_domains_workflows_workflow_workflow_graph_boundary = require("./domains/workflows/workflow/workflow-graph-boundary.cjs.js");
6
6
  const require_domains_workflows_context_use_workflow_selected_step = require("./domains/workflows/context/use-workflow-selected-step.cjs.js");
7
- const require_Workflow = require("./Workflow-BeF6pIO9.cjs");
7
+ const require_Workflow = require("./Workflow-DSWQ-ROz.cjs");
8
8
  const require_domains_workflows_workflow_workflow_step_node_utils = require("./domains/workflows/workflow/workflow-step-node-utils.cjs.js");
9
9
  const require_domains_workflows_workflow_workflow_graph_groups = require("./domains/workflows/workflow/workflow-graph-groups.cjs.js");
10
10
  const require_domains_workflows_workflow_utils = require("./domains/workflows/workflow/utils.cjs.js");
@@ -304,4 +304,4 @@ Object.defineProperty(exports, "useWorkflowGraphRuntime", {
304
304
  }
305
305
  });
306
306
 
307
- //# sourceMappingURL=use-workflow-graph-runtime-DkwQjMEV.cjs.map
307
+ //# sourceMappingURL=use-workflow-graph-runtime-DYao-08R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-graph-runtime-DkwQjMEV.cjs","names":["useMemo","WorkflowGraphBoundary","useWorkflowGraphNodes","useCurrentRun","getWorkflowIterationScopes","useState","getWorkflowGraphGroups","Txt","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","WorkflowGraphCanvas","Repeat2","Txt","ReactFlowProvider","isAwaitingInput","useCurrentRun","useWorkflowSelectedStep","useWorkflowStepDetail","useWaitingStepKey","resolveStepSpan","WorkflowStepCardView","getWorkflowCardKind","WorkflowStepActionBar","WorkflowConditionCard","WorkflowNodeFrame","useCurrentRun","useContext","WorkflowRunContext","getWorkflowBoundaryData","useMemo","buildStepsFlow","WORKFLOW_STEP_NODE_TYPE","WORKFLOW_BOUNDARY_NODE_TYPE","WorkflowBoundaryNode","WORKFLOW_DATA_EDGE_TYPE","WorkflowDataEdge","groupWorkflowEdgeData"],"sources":["../src/domains/workflows/workflow/workflow-nested-graph.tsx","../src/domains/workflows/workflow/workflow-body-graph.tsx","../src/domains/workflows/workflow/workflow-graph-node.tsx","../src/domains/workflows/workflow/use-workflow-graph-runtime.tsx"],"sourcesContent":["import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\n\nimport { useMemo, useState } from 'react';\nimport { useCurrentRun } from '../context/use-current-run';\nimport { useWorkflowGraphNodes } from './use-workflow-graph-nodes';\nimport { useWorkflowGraphRuntime } from './use-workflow-graph-runtime';\nimport { WorkflowGraphBoundary } from './workflow-graph-boundary';\nimport { getWorkflowGraphGroups } from './workflow-graph-groups';\nimport { getWorkflowIterationScopes } from './workflow-iteration-scopes';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { Txt } from '@/ds/components/Txt';\nimport { WorkflowGraphCanvas, WORKFLOW_BOUNDARY_NODE_TYPE } from '@/ds/components/Workflow';\n\nexport interface WorkflowNestedGraphProps {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n embedded?: boolean;\n requestContext: Record<string, any>;\n}\n\nexport function WorkflowNestedGraph(props: WorkflowNestedGraphProps) {\n const layoutKey = useMemo(\n () => `${props.workflowName}:${JSON.stringify(props.stepGraph)}`,\n [props.workflowName, props.stepGraph],\n );\n return (\n <WorkflowGraphBoundary key={layoutKey} stepGraph={props.stepGraph}>\n <WorkflowNestedGraphContent {...props} />\n </WorkflowGraphBoundary>\n );\n}\n\nfunction WorkflowNestedGraphContent({\n stepGraph,\n workflowName,\n isForEach,\n embedded,\n requestContext,\n}: WorkflowNestedGraphProps) {\n const { nodes, edges, onNodesChange } = useWorkflowGraphNodes(stepGraph);\n const { steps } = useCurrentRun();\n const iterations = getWorkflowIterationScopes(Object.keys(steps), workflowName);\n const [selectedIteration, setSelectedIteration] = useState<string>();\n const activeIteration = iterations.find(iteration => iteration.value === selectedIteration) ?? iterations[0];\n\n const { edgeTypes, nodeTypes, styledEdges } = useWorkflowGraphRuntime({\n edges,\n workflowName: activeIteration?.value ?? workflowName,\n requestContext,\n });\n\n const labeledNodes = useMemo(\n () =>\n nodes.map(node => {\n if (!isForEach || node.type !== WORKFLOW_BOUNDARY_NODE_TYPE) return node;\n const label = node.data.boundaryRole === 'start' ? 'Each item' : 'Item result';\n return { ...node, data: { ...node.data, label } };\n }),\n [nodes, isForEach],\n );\n const groups = useMemo(() => getWorkflowGraphGroups(nodes), [nodes]);\n\n return (\n <div className=\"relative flex size-full flex-col\">\n {activeIteration && (\n <div className=\"nodrag nopan flex items-center gap-3 border-b border-border px-4 py-2\">\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n Iteration\n </Txt>\n <Select value={activeIteration.value} onValueChange={setSelectedIteration} items={iterations}>\n <SelectTrigger aria-label=\"Loop item\" size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {iterations.map(iteration => (\n <SelectItem key={iteration.value} value={iteration.value}>\n {iteration.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <WorkflowGraphCanvas\n variant={embedded ? 'inline' : 'nested'}\n groups={groups}\n nodes={labeledNodes}\n edges={styledEdges}\n edgeTypes={edgeTypes}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n />\n </div>\n </div>\n );\n}\n","import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport { Repeat2 } from 'lucide-react';\nimport { WorkflowNestedGraph } from './workflow-nested-graph';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function WorkflowBodyGraph({\n stepGraph,\n workflowName,\n isForEach,\n requestContext,\n}: {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n requestContext: Record<string, any>;\n}) {\n return (\n <section aria-label={isForEach ? 'Loop body' : 'Nested workflow'} className=\"flex h-full min-h-0 flex-col\">\n {isForEach && (\n <div className=\"flex shrink-0 items-start gap-2 px-4 py-3 text-muted-foreground\">\n <Repeat2 aria-hidden className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <Txt variant=\"meta\">Runs for every item. All items finish before the workflow continues.</Txt>\n </div>\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <ReactFlowProvider>\n <WorkflowNestedGraph\n stepGraph={stepGraph}\n embedded\n workflowName={workflowName}\n isForEach={isForEach}\n requestContext={requestContext}\n />\n </ReactFlowProvider>\n </div>\n </section>\n );\n}\n","import type { NodeProps } from '@xyflow/react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport type { Step } from '../context/use-current-run';\nimport { useWorkflowSelectedStep } from '../context/use-workflow-selected-step';\nimport { useWorkflowStepDetail } from '../context/workflow-step-detail-context';\nimport { isAwaitingInput, resolveStepSpan } from '../context/workflow-step-timing';\nimport { useWaitingStepKey } from './use-workflow-trigger';\nimport { WorkflowBodyGraph } from './workflow-body-graph';\nimport { getWorkflowCardKind } from './workflow-node-kind';\nimport { WorkflowStepActionBar } from './workflow-step-action-bar';\nimport type { WorkflowStepNode, WorkflowStepNodeData } from './workflow-step-node-utils';\nimport { WorkflowNodeFrame, WorkflowConditionCard, WorkflowStepCardView } from '@/ds/components/Workflow';\nimport type { WorkflowCardDisplayStatus } from '@/ds/components/Workflow';\n\nexport interface WorkflowGraphNodeProps {\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}\n\nconst getDisplayStatus = (step?: Step): { displayStatus: WorkflowCardDisplayStatus; isTripwire: boolean } => {\n const isTripwire = step?.status === 'failed' && step?.tripwire !== undefined;\n const displayStatus = step && isAwaitingInput(step) ? 'suspended' : step?.status;\n return {\n displayStatus: isTripwire ? 'tripwire' : displayStatus,\n isTripwire,\n };\n};\n\nconst WorkflowStepCard = ({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const { selectedStepId, setSelectedStepId, hoverStepId, setHoverStepId } = useWorkflowSelectedStep();\n const { showNestedGraph } = useWorkflowStepDetail();\n const waitingStepKey = useWaitingStepKey();\n const { label, stepId, description } = data;\n const mapConfig = data.mapConfig ?? ('step' in data.workflowStep ? data.workflowStep.step?.mapConfig : undefined);\n const stepGraph =\n data.stepGraph ??\n ('step' in data.workflowStep ? data.workflowStep.step?.serializedStepFlow : undefined) ??\n (data.workflowStep.kind === 'nested-workflow-step' && data.workflowStep.flow.type === 'workflow'\n ? data.workflowStep.flow.serializedStepFlow\n : undefined);\n const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;\n const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;\n const isSelected = selectedStepId === stepKey;\n const isWaiting = waitingStepKey === stepKey;\n const isHovered = hoverStepId === stepKey;\n const step = steps[stepKey];\n const { displayStatus, isTripwire } = getDisplayStatus(step);\n const stepSpan = step ? resolveStepSpan(step) : undefined;\n\n return (\n <WorkflowStepCardView\n label={data.mapContext?.label ?? label}\n nodeKind={getWorkflowCardKind(data.workflowStep)}\n onSelect={() => setSelectedStepId(stepKey)}\n initiallyOpen={!parentWorkflowName}\n body={\n stepGraph?.length ? (\n <WorkflowBodyGraph\n stepGraph={stepGraph}\n workflowName={fullLabel}\n isForEach={data.isForEach}\n requestContext={requestContext}\n />\n ) : undefined\n }\n description={description ?? data.mapContext?.description}\n displayStatus={displayStatus}\n isNestedWorkflowStep={data.workflowStep.kind === 'nested-workflow-step'}\n stepKey={stepKey}\n isSelected={isSelected}\n isWaiting={isWaiting}\n isHovered={isHovered}\n onHoverChange={isHovered => setHoverStepId(isHovered ? stepKey : null)}\n duration={data.duration}\n date={data.date}\n isForEach={data.isForEach}\n foreachProgress={step?.foreachProgress}\n mapConfig={mapConfig}\n canSuspend={data.canSuspend}\n stepGraph={stepGraph}\n startedAt={stepSpan?.start}\n endedAt={stepSpan?.end}\n spansSuspension={stepSpan?.spansSuspension}\n actionBar={\n <WorkflowStepActionBar\n stepName={label}\n stepId={stepId}\n resumeData={step?.resumeData}\n error={isTripwire ? undefined : step?.error}\n tripwire={isTripwire ? step?.tripwire : undefined}\n mapConfig={mapConfig}\n onShowNestedGraph={stepGraph ? () => showNestedGraph({ label, fullStep: fullLabel, stepGraph }) : undefined}\n stepKey={stepKey}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nconst WorkflowConditionNodeCard = ({\n data,\n parentWorkflowName,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const conditions = data.conditions ?? [];\n const previousStepId =\n data.previousStepId && (parentWorkflowName ? `${parentWorkflowName}.${data.previousStepId}` : data.previousStepId);\n const previousStep = previousStepId ? steps[previousStepId] : undefined;\n const { displayStatus: previousDisplayStatus, isTripwire } = getDisplayStatus(previousStep);\n\n return (\n <WorkflowConditionCard\n conditions={conditions}\n previousDisplayStatus={previousDisplayStatus}\n actionBar={\n <WorkflowStepActionBar\n stepName={data.nextStepId ?? data.label}\n mapConfig={data.mapConfig}\n tripwire={isTripwire ? previousStep?.tripwire : undefined}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nexport function WorkflowGraphNode({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: NodeProps<WorkflowStepNode> & WorkflowGraphNodeProps) {\n const content =\n data.workflowStep.kind === 'conditional' ? (\n <WorkflowConditionNodeCard data={data} parentWorkflowName={parentWorkflowName} requestContext={requestContext} />\n ) : (\n <WorkflowStepCard\n data={data}\n parentWorkflowName={parentWorkflowName}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n );\n\n return (\n <WorkflowNodeFrame withoutTopHandle={data.withoutTopHandle} withoutBottomHandle={data.withoutBottomHandle}>\n {content}\n </WorkflowNodeFrame>\n );\n}\n","import type { EdgeProps, NodeProps } from '@xyflow/react';\nimport { useContext, useMemo } from 'react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { groupWorkflowEdgeData } from './data/workflow-edge-data-groups';\nimport { buildStepsFlow } from './utils';\nimport type { WorkflowGraphEdge } from './utils';\nimport { getWorkflowBoundaryData } from './workflow-boundary-data';\nimport { WorkflowDataEdge } from './workflow-data-edge';\nimport { WorkflowGraphNode } from './workflow-graph-node';\nimport { WORKFLOW_BOUNDARY_NODE_TYPE, WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { WorkflowBoundaryNode as WorkflowBoundaryNodeType, WorkflowStepNode } from './workflow-step-node-utils';\nimport { WorkflowBoundaryNode, WORKFLOW_DATA_EDGE_TYPE } from '@/ds/components/Workflow';\n\nconst getScopedStepId = (stepId: string | undefined, workflowName?: string) =>\n stepId && workflowName ? `${workflowName}.${stepId}` : stepId;\n\nexport const useWorkflowGraphRuntime = ({\n edges,\n workflowName,\n requestContext,\n}: {\n edges: WorkflowGraphEdge[];\n workflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const workflowRun = useContext(WorkflowRunContext);\n const workflowSucceeded = workflowName\n ? steps[workflowName]?.status === 'success' || getWorkflowBoundaryData(steps, workflowName).output !== undefined\n : workflowRun.result?.status === 'success';\n const stepsFlow = useMemo(() => buildStepsFlow(edges), [edges]);\n const nodeTypes = useMemo(\n () => ({\n [WORKFLOW_STEP_NODE_TYPE]: (props: NodeProps<WorkflowStepNode>) => (\n <WorkflowGraphNode\n parentWorkflowName={workflowName}\n {...props}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n ),\n [WORKFLOW_BOUNDARY_NODE_TYPE]: (props: NodeProps<WorkflowBoundaryNodeType>) => (\n <WorkflowBoundaryNode {...props} />\n ),\n }),\n [stepsFlow, workflowName, requestContext],\n );\n const edgeTypes = useMemo(\n () => ({\n [WORKFLOW_DATA_EDGE_TYPE]: (props: EdgeProps<WorkflowGraphEdge>) => (\n <WorkflowDataEdge parentWorkflowName={workflowName} {...props} />\n ),\n }),\n [workflowName],\n );\n const styledEdges = useMemo(\n () =>\n groupWorkflowEdgeData(edges).map((edge): WorkflowGraphEdge => {\n const previousStepId = getScopedStepId(edge.data?.previousStepId, workflowName);\n const nextStepId = getScopedStepId(edge.data?.nextStepId, workflowName);\n const previousStepSucceeded = steps[previousStepId ?? '']?.status === 'success';\n const nextStepStatus = steps[nextStepId ?? '']?.status;\n let isFinishedEdge = previousStepSucceeded && nextStepStatus !== 'skipped';\n if (edge.data?.boundaryPayload === 'workflow-output') {\n isFinishedEdge = workflowSucceeded;\n } else if (edge.data?.boundaryPayload === 'workflow-input' || edge.data?.conditionNode) {\n isFinishedEdge = Boolean(nextStepStatus) && nextStepStatus !== 'skipped';\n }\n\n return {\n ...edge,\n type: WORKFLOW_DATA_EDGE_TYPE,\n animated: isFinishedEdge ? false : edge.animated,\n data: {\n ...edge.data,\n edgeStatus: isFinishedEdge ? 'success' : 'idle',\n },\n style: {\n ...edge.style,\n stroke: isFinishedEdge ? 'var(--success-indicator)' : 'var(--muted-foreground)',\n strokeDasharray: isFinishedEdge ? 'none' : edge.style?.strokeDasharray,\n },\n };\n }),\n [edges, steps, workflowName, workflowSucceeded],\n );\n\n return { edgeTypes, nodeTypes, stepsFlow, styledEdges };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-graph-runtime-DYao-08R.cjs","names":["useMemo","WorkflowGraphBoundary","useWorkflowGraphNodes","useCurrentRun","getWorkflowIterationScopes","useState","getWorkflowGraphGroups","Txt","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","WorkflowGraphCanvas","Repeat2","Txt","ReactFlowProvider","isAwaitingInput","useCurrentRun","useWorkflowSelectedStep","useWorkflowStepDetail","useWaitingStepKey","resolveStepSpan","WorkflowStepCardView","getWorkflowCardKind","WorkflowStepActionBar","WorkflowConditionCard","WorkflowNodeFrame","useCurrentRun","useContext","WorkflowRunContext","getWorkflowBoundaryData","useMemo","buildStepsFlow","WORKFLOW_STEP_NODE_TYPE","WORKFLOW_BOUNDARY_NODE_TYPE","WorkflowBoundaryNode","WORKFLOW_DATA_EDGE_TYPE","WorkflowDataEdge","groupWorkflowEdgeData"],"sources":["../src/domains/workflows/workflow/workflow-nested-graph.tsx","../src/domains/workflows/workflow/workflow-body-graph.tsx","../src/domains/workflows/workflow/workflow-graph-node.tsx","../src/domains/workflows/workflow/use-workflow-graph-runtime.tsx"],"sourcesContent":["import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\n\nimport { useMemo, useState } from 'react';\nimport { useCurrentRun } from '../context/use-current-run';\nimport { useWorkflowGraphNodes } from './use-workflow-graph-nodes';\nimport { useWorkflowGraphRuntime } from './use-workflow-graph-runtime';\nimport { WorkflowGraphBoundary } from './workflow-graph-boundary';\nimport { getWorkflowGraphGroups } from './workflow-graph-groups';\nimport { getWorkflowIterationScopes } from './workflow-iteration-scopes';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select';\nimport { Txt } from '@/ds/components/Txt';\nimport { WorkflowGraphCanvas, WORKFLOW_BOUNDARY_NODE_TYPE } from '@/ds/components/Workflow';\n\nexport interface WorkflowNestedGraphProps {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n embedded?: boolean;\n requestContext: Record<string, any>;\n}\n\nexport function WorkflowNestedGraph(props: WorkflowNestedGraphProps) {\n const layoutKey = useMemo(\n () => `${props.workflowName}:${JSON.stringify(props.stepGraph)}`,\n [props.workflowName, props.stepGraph],\n );\n return (\n <WorkflowGraphBoundary key={layoutKey} stepGraph={props.stepGraph}>\n <WorkflowNestedGraphContent {...props} />\n </WorkflowGraphBoundary>\n );\n}\n\nfunction WorkflowNestedGraphContent({\n stepGraph,\n workflowName,\n isForEach,\n embedded,\n requestContext,\n}: WorkflowNestedGraphProps) {\n const { nodes, edges, onNodesChange } = useWorkflowGraphNodes(stepGraph);\n const { steps } = useCurrentRun();\n const iterations = getWorkflowIterationScopes(Object.keys(steps), workflowName);\n const [selectedIteration, setSelectedIteration] = useState<string>();\n const activeIteration = iterations.find(iteration => iteration.value === selectedIteration) ?? iterations[0];\n\n const { edgeTypes, nodeTypes, styledEdges } = useWorkflowGraphRuntime({\n edges,\n workflowName: activeIteration?.value ?? workflowName,\n requestContext,\n });\n\n const labeledNodes = useMemo(\n () =>\n nodes.map(node => {\n if (!isForEach || node.type !== WORKFLOW_BOUNDARY_NODE_TYPE) return node;\n const label = node.data.boundaryRole === 'start' ? 'Each item' : 'Item result';\n return { ...node, data: { ...node.data, label } };\n }),\n [nodes, isForEach],\n );\n const groups = useMemo(() => getWorkflowGraphGroups(nodes), [nodes]);\n\n return (\n <div className=\"relative flex size-full flex-col\">\n {activeIteration && (\n <div className=\"nodrag nopan flex items-center gap-3 border-b border-border px-4 py-2\">\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n Iteration\n </Txt>\n <Select value={activeIteration.value} onValueChange={setSelectedIteration} items={iterations}>\n <SelectTrigger aria-label=\"Loop item\" size=\"sm\" className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {iterations.map(iteration => (\n <SelectItem key={iteration.value} value={iteration.value}>\n {iteration.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <WorkflowGraphCanvas\n variant={embedded ? 'inline' : 'nested'}\n groups={groups}\n nodes={labeledNodes}\n edges={styledEdges}\n edgeTypes={edgeTypes}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n />\n </div>\n </div>\n );\n}\n","import type { SerializedStepFlowEntry } from '@mastra/core/workflows';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport { Repeat2 } from 'lucide-react';\nimport { WorkflowNestedGraph } from './workflow-nested-graph';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function WorkflowBodyGraph({\n stepGraph,\n workflowName,\n isForEach,\n requestContext,\n}: {\n stepGraph: SerializedStepFlowEntry[];\n workflowName: string;\n isForEach?: boolean;\n requestContext: Record<string, any>;\n}) {\n return (\n <section aria-label={isForEach ? 'Loop body' : 'Nested workflow'} className=\"flex h-full min-h-0 flex-col\">\n {isForEach && (\n <div className=\"flex shrink-0 items-start gap-2 px-4 py-3 text-muted-foreground\">\n <Repeat2 aria-hidden className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <Txt variant=\"meta\">Runs for every item. All items finish before the workflow continues.</Txt>\n </div>\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <ReactFlowProvider>\n <WorkflowNestedGraph\n stepGraph={stepGraph}\n embedded\n workflowName={workflowName}\n isForEach={isForEach}\n requestContext={requestContext}\n />\n </ReactFlowProvider>\n </div>\n </section>\n );\n}\n","import type { NodeProps } from '@xyflow/react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport type { Step } from '../context/use-current-run';\nimport { useWorkflowSelectedStep } from '../context/use-workflow-selected-step';\nimport { useWorkflowStepDetail } from '../context/workflow-step-detail-context';\nimport { isAwaitingInput, resolveStepSpan } from '../context/workflow-step-timing';\nimport { useWaitingStepKey } from './use-workflow-trigger';\nimport { WorkflowBodyGraph } from './workflow-body-graph';\nimport { getWorkflowCardKind } from './workflow-node-kind';\nimport { WorkflowStepActionBar } from './workflow-step-action-bar';\nimport type { WorkflowStepNode, WorkflowStepNodeData } from './workflow-step-node-utils';\nimport { WorkflowNodeFrame, WorkflowConditionCard, WorkflowStepCardView } from '@/ds/components/Workflow';\nimport type { WorkflowCardDisplayStatus } from '@/ds/components/Workflow';\n\nexport interface WorkflowGraphNodeProps {\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}\n\nconst getDisplayStatus = (step?: Step): { displayStatus: WorkflowCardDisplayStatus; isTripwire: boolean } => {\n const isTripwire = step?.status === 'failed' && step?.tripwire !== undefined;\n const displayStatus = step && isAwaitingInput(step) ? 'suspended' : step?.status;\n return {\n displayStatus: isTripwire ? 'tripwire' : displayStatus,\n isTripwire,\n };\n};\n\nconst WorkflowStepCard = ({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n stepsFlow: Record<string, string[]>;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const { selectedStepId, setSelectedStepId, hoverStepId, setHoverStepId } = useWorkflowSelectedStep();\n const { showNestedGraph } = useWorkflowStepDetail();\n const waitingStepKey = useWaitingStepKey();\n const { label, stepId, description } = data;\n const mapConfig = data.mapConfig ?? ('step' in data.workflowStep ? data.workflowStep.step?.mapConfig : undefined);\n const stepGraph =\n data.stepGraph ??\n ('step' in data.workflowStep ? data.workflowStep.step?.serializedStepFlow : undefined) ??\n (data.workflowStep.kind === 'nested-workflow-step' && data.workflowStep.flow.type === 'workflow'\n ? data.workflowStep.flow.serializedStepFlow\n : undefined);\n const fullLabel = parentWorkflowName ? `${parentWorkflowName}.${label}` : label;\n const stepKey = parentWorkflowName ? `${parentWorkflowName}.${stepId || label}` : stepId || label;\n const isSelected = selectedStepId === stepKey;\n const isWaiting = waitingStepKey === stepKey;\n const isHovered = hoverStepId === stepKey;\n const step = steps[stepKey];\n const { displayStatus, isTripwire } = getDisplayStatus(step);\n const stepSpan = step ? resolveStepSpan(step) : undefined;\n\n return (\n <WorkflowStepCardView\n label={data.mapContext?.label ?? label}\n nodeKind={getWorkflowCardKind(data.workflowStep)}\n onSelect={() => setSelectedStepId(stepKey)}\n initiallyOpen={!parentWorkflowName}\n body={\n stepGraph?.length ? (\n <WorkflowBodyGraph\n stepGraph={stepGraph}\n workflowName={fullLabel}\n isForEach={data.isForEach}\n requestContext={requestContext}\n />\n ) : undefined\n }\n description={description ?? data.mapContext?.description}\n displayStatus={displayStatus}\n isNestedWorkflowStep={data.workflowStep.kind === 'nested-workflow-step'}\n stepKey={stepKey}\n isSelected={isSelected}\n isWaiting={isWaiting}\n isHovered={isHovered}\n onHoverChange={isHovered => setHoverStepId(isHovered ? stepKey : null)}\n duration={data.duration}\n date={data.date}\n isForEach={data.isForEach}\n foreachProgress={step?.foreachProgress}\n mapConfig={mapConfig}\n canSuspend={data.canSuspend}\n stepGraph={stepGraph}\n startedAt={stepSpan?.start}\n endedAt={stepSpan?.end}\n spansSuspension={stepSpan?.spansSuspension}\n actionBar={\n <WorkflowStepActionBar\n stepName={label}\n stepId={stepId}\n resumeData={step?.resumeData}\n error={isTripwire ? undefined : step?.error}\n tripwire={isTripwire ? step?.tripwire : undefined}\n mapConfig={mapConfig}\n onShowNestedGraph={stepGraph ? () => showNestedGraph({ label, fullStep: fullLabel, stepGraph }) : undefined}\n stepKey={stepKey}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nconst WorkflowConditionNodeCard = ({\n data,\n parentWorkflowName,\n requestContext,\n}: {\n data: WorkflowStepNodeData;\n parentWorkflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const conditions = data.conditions ?? [];\n const previousStepId =\n data.previousStepId && (parentWorkflowName ? `${parentWorkflowName}.${data.previousStepId}` : data.previousStepId);\n const previousStep = previousStepId ? steps[previousStepId] : undefined;\n const { displayStatus: previousDisplayStatus, isTripwire } = getDisplayStatus(previousStep);\n\n return (\n <WorkflowConditionCard\n conditions={conditions}\n previousDisplayStatus={previousDisplayStatus}\n actionBar={\n <WorkflowStepActionBar\n stepName={data.nextStepId ?? data.label}\n mapConfig={data.mapConfig}\n tripwire={isTripwire ? previousStep?.tripwire : undefined}\n requestContext={requestContext}\n />\n }\n />\n );\n};\n\nexport function WorkflowGraphNode({\n data,\n parentWorkflowName,\n stepsFlow,\n requestContext,\n}: NodeProps<WorkflowStepNode> & WorkflowGraphNodeProps) {\n const content =\n data.workflowStep.kind === 'conditional' ? (\n <WorkflowConditionNodeCard data={data} parentWorkflowName={parentWorkflowName} requestContext={requestContext} />\n ) : (\n <WorkflowStepCard\n data={data}\n parentWorkflowName={parentWorkflowName}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n );\n\n return (\n <WorkflowNodeFrame withoutTopHandle={data.withoutTopHandle} withoutBottomHandle={data.withoutBottomHandle}>\n {content}\n </WorkflowNodeFrame>\n );\n}\n","import type { EdgeProps, NodeProps } from '@xyflow/react';\nimport { useContext, useMemo } from 'react';\n\nimport { useCurrentRun } from '../context/use-current-run';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport { groupWorkflowEdgeData } from './data/workflow-edge-data-groups';\nimport { buildStepsFlow } from './utils';\nimport type { WorkflowGraphEdge } from './utils';\nimport { getWorkflowBoundaryData } from './workflow-boundary-data';\nimport { WorkflowDataEdge } from './workflow-data-edge';\nimport { WorkflowGraphNode } from './workflow-graph-node';\nimport { WORKFLOW_BOUNDARY_NODE_TYPE, WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { WorkflowBoundaryNode as WorkflowBoundaryNodeType, WorkflowStepNode } from './workflow-step-node-utils';\nimport { WorkflowBoundaryNode, WORKFLOW_DATA_EDGE_TYPE } from '@/ds/components/Workflow';\n\nconst getScopedStepId = (stepId: string | undefined, workflowName?: string) =>\n stepId && workflowName ? `${workflowName}.${stepId}` : stepId;\n\nexport const useWorkflowGraphRuntime = ({\n edges,\n workflowName,\n requestContext,\n}: {\n edges: WorkflowGraphEdge[];\n workflowName?: string;\n requestContext: Record<string, any>;\n}) => {\n const { steps } = useCurrentRun();\n const workflowRun = useContext(WorkflowRunContext);\n const workflowSucceeded = workflowName\n ? steps[workflowName]?.status === 'success' || getWorkflowBoundaryData(steps, workflowName).output !== undefined\n : workflowRun.result?.status === 'success';\n const stepsFlow = useMemo(() => buildStepsFlow(edges), [edges]);\n const nodeTypes = useMemo(\n () => ({\n [WORKFLOW_STEP_NODE_TYPE]: (props: NodeProps<WorkflowStepNode>) => (\n <WorkflowGraphNode\n parentWorkflowName={workflowName}\n {...props}\n stepsFlow={stepsFlow}\n requestContext={requestContext}\n />\n ),\n [WORKFLOW_BOUNDARY_NODE_TYPE]: (props: NodeProps<WorkflowBoundaryNodeType>) => (\n <WorkflowBoundaryNode {...props} />\n ),\n }),\n [stepsFlow, workflowName, requestContext],\n );\n const edgeTypes = useMemo(\n () => ({\n [WORKFLOW_DATA_EDGE_TYPE]: (props: EdgeProps<WorkflowGraphEdge>) => (\n <WorkflowDataEdge parentWorkflowName={workflowName} {...props} />\n ),\n }),\n [workflowName],\n );\n const styledEdges = useMemo(\n () =>\n groupWorkflowEdgeData(edges).map((edge): WorkflowGraphEdge => {\n const previousStepId = getScopedStepId(edge.data?.previousStepId, workflowName);\n const nextStepId = getScopedStepId(edge.data?.nextStepId, workflowName);\n const previousStepSucceeded = steps[previousStepId ?? '']?.status === 'success';\n const nextStepStatus = steps[nextStepId ?? '']?.status;\n let isFinishedEdge = previousStepSucceeded && nextStepStatus !== 'skipped';\n if (edge.data?.boundaryPayload === 'workflow-output') {\n isFinishedEdge = workflowSucceeded;\n } else if (edge.data?.boundaryPayload === 'workflow-input' || edge.data?.conditionNode) {\n isFinishedEdge = Boolean(nextStepStatus) && nextStepStatus !== 'skipped';\n }\n\n return {\n ...edge,\n type: WORKFLOW_DATA_EDGE_TYPE,\n animated: isFinishedEdge ? false : edge.animated,\n data: {\n ...edge.data,\n edgeStatus: isFinishedEdge ? 'success' : 'idle',\n },\n style: {\n ...edge.style,\n stroke: isFinishedEdge ? 'var(--success-indicator)' : 'var(--muted-foreground)',\n strokeDasharray: isFinishedEdge ? 'none' : edge.style?.strokeDasharray,\n },\n };\n }),\n [edges, steps, workflowName, workflowSucceeded],\n );\n\n return { edgeTypes, nodeTypes, stepsFlow, styledEdges };\n};\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_toast_api = require("../toast-api-Bv87KHu_.cjs");
2
+ const require_toast_api = require("../toast-api-qtkOucy2.cjs");
3
3
  exports.toast = require_toast_api.toast;
@@ -1 +1 @@
1
- export { t as toast } from "../toast-api-WhxnAT9F.js";
1
+ export { t as toast } from "../toast-api-D_rrRhNG.js";
package/oxlint/index.js CHANGED
@@ -13,6 +13,7 @@
13
13
  // playground-ui/txt-tone ink on <Txt> is its `tone` prop, not a text-* colour class
14
14
  // playground-ui/font-mono mono comes from <Txt font="mono">, <InlineCode> or <CodeBlock>
15
15
  // playground-ui/no-barrel-imports import from an exact @mastra/playground-ui subpath, not a broad barrel
16
+ // playground-ui/placeholder-text placeholders use sentence case and no trailing ellipsis ("Search agents")
16
17
 
17
18
  // Each option is { selector, message }: report every node an esquery selector matches.
18
19
  function selectorRule(selectors) {
@@ -178,6 +179,93 @@ const noBarrelImports = selectorRule(() =>
178
179
  ]).map(selector => ({ selector, message: BARREL_MESSAGE })),
179
180
  );
180
181
 
182
+ // --- placeholder-text ----------------------------------------------------------------------------------
183
+ // Placeholders read like the system search field on macOS and iOS: "Search agents", "Filter by name". No
184
+ // trailing ellipsis (`…` or `...`): the dimmed text already says the field is empty. Placeholders that give
185
+ // an instruction (start with Search, Filter, Select…) also use sentence case. Example values ("My Agent",
186
+ // "e.g. Production alerts") keep their capitals.
187
+ // Checks string `placeholder` / `*Placeholder` values in JSX attributes, object properties, default
188
+ // parameters and variables, including each branch of a ternary. Strings built at runtime are only partly seen.
189
+ // Options: { properNouns?: string[] } words that stay capitalized after the first, added to the defaults.
190
+ const PLACEHOLDER_NAME = /^placeholder$|Placeholder$/;
191
+ const INSTRUCTION_VERBS =
192
+ /^(Search|Filter|Find|Select|Choose|Pick|Enter|Type|Paste|Add|Write|Describe|Leave|Ask|Send|Name)\b/;
193
+ const PLACEHOLDER_PROPER_NOUNS = [
194
+ 'Mastra Code',
195
+ 'Mastra',
196
+ 'Studio',
197
+ 'Factory',
198
+ 'Factories',
199
+ 'MastraCode',
200
+ 'GitHub',
201
+ 'GitLab',
202
+ 'Google',
203
+ 'Slack',
204
+ 'Linear',
205
+ 'Vercel',
206
+ 'Stripe',
207
+ ];
208
+
209
+ // The string values a placeholder expression can take: literals, static template parts, ternary branches.
210
+ function placeholderStrings(node) {
211
+ if (!node) return [];
212
+ if (node.type === 'JSXExpressionContainer') return placeholderStrings(node.expression);
213
+ if (node.type === 'Literal' && typeof node.value === 'string') return [{ node, head: node.value, tail: node.value }];
214
+ if (node.type === 'TemplateLiteral') {
215
+ const { quasis } = node;
216
+ return [{ node, head: quasis[0].value.cooked, tail: quasis[quasis.length - 1].value.cooked }];
217
+ }
218
+ if (node.type === 'ConditionalExpression')
219
+ return [...placeholderStrings(node.consequent), ...placeholderStrings(node.alternate)];
220
+ if (node.type === 'LogicalExpression') return placeholderStrings(node.right);
221
+ return [];
222
+ }
223
+
224
+ function placeholderText(context) {
225
+ const nouns = [...PLACEHOLDER_PROPER_NOUNS, ...(context.options[0]?.properNouns ?? [])];
226
+ const properNouns = new RegExp(`\\b(?:${nouns.sort((a, b) => b.length - a.length).join('|')})\\b`, 'g');
227
+ // The first capitalized word that doesn't start a sentence and isn't (part of) a proper noun.
228
+ const titleCaseWord = text => {
229
+ let sentenceStart = true;
230
+ for (const word of text.replace(properNouns, 'x').trim().split(/\s+/)) {
231
+ if (!sentenceStart && /^[A-Z][a-z]/.test(word)) return word;
232
+ sentenceStart = /[.!?:]$/.test(word);
233
+ }
234
+ return null;
235
+ };
236
+ const check = value => {
237
+ for (const { node, head, tail } of placeholderStrings(value)) {
238
+ // A progress state shown in the field ("Loading agents…") keeps its ellipsis.
239
+ if (/(…|\.\.\.)\s*$/.test(tail) && !/^\s*\w+ing\b/.test(head)) {
240
+ context.report({ node, message: 'Drop the trailing ellipsis from this placeholder ("Search agents").' });
241
+ }
242
+ if (!INSTRUCTION_VERBS.test(head)) continue;
243
+ const word = titleCaseWord(head);
244
+ if (word) {
245
+ context.report({
246
+ node,
247
+ message: `Use sentence case in this placeholder: lowercase "${word.replace(/[^A-Za-z]+$/, '')}" unless it's a proper noun (add it to properNouns).`,
248
+ });
249
+ }
250
+ }
251
+ };
252
+ const keyName = key => (key?.type === 'Identifier' ? key.name : key?.type === 'Literal' ? key.value : '');
253
+ return {
254
+ JSXAttribute(node) {
255
+ if (node.name.type === 'JSXIdentifier' && PLACEHOLDER_NAME.test(node.name.name)) check(node.value);
256
+ },
257
+ Property(node) {
258
+ if (PLACEHOLDER_NAME.test(keyName(node.key))) check(node.value);
259
+ },
260
+ AssignmentPattern(node) {
261
+ if (node.left.type === 'Identifier' && PLACEHOLDER_NAME.test(node.left.name)) check(node.right);
262
+ },
263
+ VariableDeclarator(node) {
264
+ if (node.id.type === 'Identifier' && PLACEHOLDER_NAME.test(node.id.name)) check(node.init);
265
+ },
266
+ };
267
+ }
268
+
181
269
  const plugin = {
182
270
  meta: { name: 'playground-ui' },
183
271
  rules: {
@@ -186,6 +274,7 @@ const plugin = {
186
274
  'txt-tone': { meta: { type: 'suggestion', schema: false }, create: txtTone },
187
275
  'font-mono': { meta: { type: 'suggestion', schema: false }, create: fontMono },
188
276
  'no-barrel-imports': { meta: { type: 'suggestion', schema: false }, create: noBarrelImports },
277
+ 'placeholder-text': { meta: { type: 'suggestion', schema: false }, create: placeholderText },
189
278
  },
190
279
  };
191
280
 
@@ -197,6 +286,7 @@ export const recommended = {
197
286
  'playground-ui/txt-tone': 'error',
198
287
  'playground-ui/font-mono': 'error',
199
288
  'playground-ui/no-barrel-imports': 'error',
289
+ 'playground-ui/placeholder-text': 'error',
200
290
  };
201
291
 
202
292
  export default plugin;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/playground-ui",
3
3
  "type": "module",
4
- "version": "68.0.0-alpha.0",
4
+ "version": "68.0.0-alpha.2",
5
5
  "description": "Mastra Playground components",
6
6
  "sideEffects": [
7
7
  "**/*.css"
@@ -220,9 +220,9 @@
220
220
  "react": ">=19.0.0",
221
221
  "react-dom": ">=19.0.0",
222
222
  "tailwindcss": "^4.0.0",
223
+ "@mastra/client-js": "^1.59.0-alpha.2",
223
224
  "@mastra/ai-sdk": "^1.11.3",
224
- "@mastra/client-js": "^1.59.0-alpha.0",
225
- "@mastra/react": "1.14.1-alpha.0"
225
+ "@mastra/react": "1.14.1-alpha.2"
226
226
  },
227
227
  "devDependencies": {
228
228
  "@modelcontextprotocol/sdk": "^1.32.2",
@@ -254,7 +254,7 @@
254
254
  "react": "^19.3.1",
255
255
  "react-dom": "^19.3.1",
256
256
  "react-router": "^8.5.0",
257
- "rollup-plugin-node-externals": "^8.1.2",
257
+ "rollup-plugin-node-externals": "^9.0.1",
258
258
  "storybook": "^10.6.2",
259
259
  "tailwind-merge": "^3.7.0",
260
260
  "tailwindcss": "4.3.3",
@@ -263,12 +263,12 @@
263
263
  "vite-plugin-lib-inject-css": "^2.2.2",
264
264
  "vitest": "4.1.12",
265
265
  "@types/d3-force": "^3.0.10",
266
- "@internal/lint": "0.0.147",
267
266
  "@mastra/ai-sdk": "1.11.3",
268
- "@mastra/core": "1.82.0-alpha.0",
269
- "@mastra/memory": "1.41.0-alpha.0",
270
- "@mastra/client-js": "^1.59.0-alpha.0",
271
- "@mastra/react": "1.14.1-alpha.0",
267
+ "@mastra/client-js": "^1.59.0-alpha.2",
268
+ "@internal/lint": "0.0.147",
269
+ "@mastra/core": "1.82.0-alpha.2",
270
+ "@mastra/memory": "1.41.0-alpha.2",
271
+ "@mastra/react": "1.14.1-alpha.2",
272
272
  "@mastra/schema-compat": "1.3.17"
273
273
  },
274
274
  "homepage": "https://mastra.ai",
package/theme.css CHANGED
@@ -47,6 +47,11 @@
47
47
  text read as a second ink instead of stepping back. */
48
48
  --muted-foreground: var(--gray-8);
49
49
  --placeholder: var(--gray-7);
50
+ /* The icons inside an interactive control (see `controlIconState`). A labelled control's
51
+ icons stay muted on hover: the label and surface answer it. Icon-only controls and lists
52
+ retune the pair, never the rule. */
53
+ --control-icon-rest: var(--muted-foreground);
54
+ --control-icon-hover: var(--muted-foreground);
50
55
  }
51
56
 
52
57
  /* Semantic aliases stay inline so utilities resolve var(--token) on the styled
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionRow-BfK77pCT.cjs","names":["cn"],"sources":["../src/ds/components/ActionRow/action-row.tsx","../src/ds/components/ActionRow/index.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\n\n/** One toolbar line: a start group and an end group pushed apart, wrapping on narrow viewports. */\nexport function ActionRowRoot({ className, ...props }: DivProps) {\n return (\n <div\n data-slot=\"action-row\"\n className={cn('flex min-h-control-md flex-wrap items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\n/** Actions positioned on the left. Grows to fill the line; keeps a floor so the end group wraps under it instead of squeezing it. */\nexport function ActionRowStart({ className, ...props }: DivProps) {\n return (\n <div\n data-slot=\"action-row-start\"\n className={cn('flex min-w-64 flex-1 flex-wrap items-center gap-2', className)}\n {...props}\n />\n );\n}\n\n/** Actions positioned on the right. Never shrinks; wraps under the start group when needed. */\nexport function ActionRowEnd({ className, ...props }: DivProps) {\n return (\n <div data-slot=\"action-row-end\" className={cn('ml-auto flex shrink-0 items-center gap-2', className)} {...props} />\n );\n}\n","import { ActionRowEnd, ActionRowRoot, ActionRowStart } from './action-row';\n\nexport const ActionRow = Object.assign(ActionRowRoot, {\n Start: ActionRowStart,\n End: ActionRowEnd,\n});\n"],"mappings":";;;;AAOA,SAAgB,cAAc,EAAE,WAAW,GAAG,SAAmB;CAC/D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,aAAU;EACV,WAAWA,cAAAA,GAAG,sEAAsE,SAAS;EAC7F,GAAI;CACL,CAAA;AAEL;;AAGA,SAAgB,eAAe,EAAE,WAAW,GAAG,SAAmB;CAChE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,aAAU;EACV,WAAWA,cAAAA,GAAG,qDAAqD,SAAS;EAC5E,GAAI;CACL,CAAA;AAEL;;AAGA,SAAgB,aAAa,EAAE,WAAW,GAAG,SAAmB;CAC9D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,aAAU;EAAiB,WAAWA,cAAAA,GAAG,4CAA4C,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEtH;;AC/BA,IAAa,YAAY,OAAO,OAAO,eAAe;CACpD,OAAO;CACP,KAAK;AACP,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionRow-Cd6tOC2K.js","names":[],"sources":["../src/ds/components/ActionRow/action-row.tsx","../src/ds/components/ActionRow/index.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\n\n/** One toolbar line: a start group and an end group pushed apart, wrapping on narrow viewports. */\nexport function ActionRowRoot({ className, ...props }: DivProps) {\n return (\n <div\n data-slot=\"action-row\"\n className={cn('flex min-h-control-md flex-wrap items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\n/** Actions positioned on the left. Grows to fill the line; keeps a floor so the end group wraps under it instead of squeezing it. */\nexport function ActionRowStart({ className, ...props }: DivProps) {\n return (\n <div\n data-slot=\"action-row-start\"\n className={cn('flex min-w-64 flex-1 flex-wrap items-center gap-2', className)}\n {...props}\n />\n );\n}\n\n/** Actions positioned on the right. Never shrinks; wraps under the start group when needed. */\nexport function ActionRowEnd({ className, ...props }: DivProps) {\n return (\n <div data-slot=\"action-row-end\" className={cn('ml-auto flex shrink-0 items-center gap-2', className)} {...props} />\n );\n}\n","import { ActionRowEnd, ActionRowRoot, ActionRowStart } from './action-row';\n\nexport const ActionRow = Object.assign(ActionRowRoot, {\n Start: ActionRowStart,\n End: ActionRowEnd,\n});\n"],"mappings":";;;;AAOA,SAAgB,cAAc,EAAE,WAAW,GAAG,SAAmB;CAC/D,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,sEAAsE,SAAS;EAC7F,GAAI;CACL,CAAA;AAEL;;AAGA,SAAgB,eAAe,EAAE,WAAW,GAAG,SAAmB;CAChE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,qDAAqD,SAAS;EAC5E,GAAI;CACL,CAAA;AAEL;;AAGA,SAAgB,aAAa,EAAE,WAAW,GAAG,SAAmB;CAC9D,OACE,oBAAC,OAAD;EAAK,aAAU;EAAiB,WAAW,GAAG,4CAA4C,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEtH;;AC/BA,IAAa,YAAY,OAAO,OAAO,eAAe;CACpD,OAAO;CACP,KAAK;AACP,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button-Bw1e3ONi.js","names":["Button","_Fragment","BaseButton"],"sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { Button as BaseButton } from '@base-ui/react/button';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip/tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { iconSizeClasses } from '@/ds/icons/icon-size-classes';\nimport type { IconSize } from '@/ds/icons/icon-size-classes';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport {\n controlFocusBorderVisible,\n raisedControlSurfaceStyle,\n sharedFormElementDisabledStyle,\n} from '@/ds/primitives/form-element';\nimport { controlStateColorTransition, focusRing, focusRingOffset } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// Text-mode buttons are pills. Each size sets `--button-px`, the label's side padding. The\n// icon side gets 2px less, because a glyph draws inside its box: the icon then reads as far\n// from the edge as the label does (shadcn's Button uses the same 2px step).\n// - `[data-slot=button-icon(-end)]`: the `<Icon>` wrappers the `icon` / `iconEnd` props render.\n// - `>svg`: a bare SVG passed as a leading child, before the label.\n// A button with no label takes an icon-mode size instead: a fixed square with its own\n// `rounded-full`, so it reads as a circle rather than a padded pill (lint rule\n// `mastra/icon-button-size`).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'rounded-full px-(--button-px)',\n 'has-[>[data-slot=button-icon]]:pl-[calc(var(--button-px)-2px)] has-[>svg]:pl-[calc(var(--button-px)-2px)]',\n 'has-[>[data-slot=button-icon-end]]:pr-[calc(var(--button-px)-2px)]',\n);\n\nconst LINK_LAYOUT = cn(\n 'relative size-auto gap-1 rounded-xs px-0 text-label',\n 'before:absolute before:-inset-x-2',\n 'has-[>[data-slot=button-icon-end]]:pr-0 has-[>[data-slot=button-icon]]:pl-0 has-[>svg]:pl-0',\n);\n\nconst LINK_LABEL = cn(\n 'relative inline-flex items-center gap-1',\n iconSizeClasses.sm,\n '[&>svg]:shrink-0',\n 'after:absolute after:inset-x-0 after:bottom-0 after:h-px after:origin-left after:scale-x-0 after:bg-current',\n 'after:transition-transform after:duration-fast after:ease-out-custom motion-reduce:after:transition-none',\n);\n\n// An icon is secondary to the label beside it, and on a neutral surface it says so with\n// a colour token rather than opacity. Opacity dims against whatever sits behind the\n// control, so the same glyph clears contrast on one surface and fails on another, and it\n// left icon-only buttons with no hover response at all: only their background moved.\n// Filled variants opt out because there the glyph colour carries the meaning.\nconst NEUTRAL_ICON_STATE = cn(\n '[&_svg]:text-muted-foreground not-disabled:hover:[&_svg]:text-foreground aria-disabled:[&_svg]:text-muted-foreground',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center',\n controlStateColorTransition,\n sharedFormElementDisabledStyle,\n 'aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:text-muted-foreground',\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n // The raised card material, the same one a field wears: a neutral filled control is\n // one material system-wide. No border of its own — the material's rim is its edge,\n // and focus repaints that rim. Inside a ButtonsGroup the group flattens the rim and\n // hands every segment the same 1px border instead (see `buttons-group.css`).\n default: cn(\n 'border-0',\n raisedControlSurfaceStyle,\n NEUTRAL_ICON_STATE,\n 'disabled:bg-fill-subtle aria-disabled:bg-fill-subtle',\n ),\n // Filled variants take the opaque ladder: their rest fill is a colour, not a rung\n // layered on the surface, so a state that thinned it would let whatever the button\n // covers read through the hover it is meant to answer.\n primary: cn(\n 'border border-transparent bg-fill-inverse text-background not-disabled:hover:bg-fill-inverse-hover not-disabled:active:bg-fill-inverse-active',\n focusRingOffset,\n 'focus-visible:border-transparent',\n 'disabled:bg-fill-inverse-disabled disabled:text-background/75 aria-disabled:bg-fill-inverse-disabled aria-disabled:text-background/75',\n ),\n destructive: cn(\n 'border border-transparent bg-fill-destructive text-fill-destructive-foreground not-disabled:hover:bg-fill-destructive-hover not-disabled:active:bg-fill-destructive-active',\n focusRingOffset,\n 'focus-visible:border-transparent',\n 'disabled:bg-fill-destructive-disabled disabled:text-fill-destructive-disabled-foreground aria-disabled:bg-fill-destructive-disabled aria-disabled:text-fill-destructive-disabled-foreground',\n ),\n 'destructive-ghost': cn(\n 'border border-transparent bg-transparent text-destructive-foreground not-disabled:hover:bg-destructive-subtle not-disabled:hover:text-destructive-foreground not-disabled:active:bg-destructive-subtle-active',\n 'disabled:bg-transparent disabled:text-placeholder aria-disabled:bg-transparent aria-disabled:text-placeholder',\n ),\n ghost: cn(\n 'border border-transparent bg-transparent text-muted-foreground not-disabled:hover:bg-fill-subtle not-disabled:hover:text-foreground not-disabled:active:bg-fill',\n 'disabled:bg-transparent aria-disabled:bg-transparent',\n ),\n // A persistent neutral fill for selected controls. Match default's borderless\n // box so switching between the raised and subtle surfaces keeps labels in place.\n subtle: cn(\n 'border-0 bg-fill-hover text-foreground not-disabled:hover:bg-fill-hover not-disabled:active:bg-fill',\n focusRing,\n 'disabled:bg-transparent aria-disabled:bg-transparent',\n ),\n link: cn(\n 'border-0 bg-transparent text-muted-foreground not-disabled:hover:text-foreground',\n 'not-disabled:hover:[&>[data-slot=button-label]]:after:scale-x-100 not-disabled:hover:[&>[data-slot=button-label]]:after:duration-normal',\n focusRingOffset,\n 'disabled:text-placeholder aria-disabled:text-placeholder',\n ),\n },\n size: {\n sm: cn(controlSizeClasses.sm, iconSizeClasses.sm, 'gap-1 [--button-px:.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, iconSizeClasses.md, 'gap-1.5 [--button-px:.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.lg, iconSizeClasses.lg, 'gap-1.5 [--button-px:1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // so icon-mode and text-mode use the same press feedback. The glyph is sized by the `Icon`\n // wrapper the component puts around an icon-mode child, keyed off the same scale.\n 'icon-sm': cn(controlHeight.sm, 'w-control-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-control-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-control-lg rounded-full'),\n },\n },\n compoundVariants: [\n { variant: 'link', className: LINK_LAYOUT },\n { variant: 'link', size: ['sm', 'md', 'icon-sm', 'icon-md'], className: 'before:-inset-y-1' },\n { variant: 'link', size: ['lg', 'icon-lg'], className: 'before:-inset-y-1.5' },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n render?: BaseButton.Props['render'];\n className?: string;\n children: React.ReactNode;\n /** Leading icon, always rendered on the left of the label inside `<Icon>`. Ignored in icon-mode sizes. */\n icon?: React.ReactNode;\n iconEnd?: React.ReactNode;\n tooltip?: React.ReactNode;\n /** Side of the trigger the tooltip opens on. Defaults to `top`. */\n tooltipPosition?: 'top' | 'right' | 'bottom' | 'left';\n /** @deprecated Pass the element through `render` instead: `render={<Link href=\"/x\" />}`. */\n as?: React.ElementType;\n /** @deprecated Set it on the element passed to `render`. */\n href?: string;\n /** @deprecated Set it on the element passed to `render`. */\n to?: string;\n /** @deprecated Set it on the element passed to `render`. */\n target?: string;\n /** @deprecated Set it on the element passed to `render`. */\n prefetch?: boolean | null;\n}\n\n// A link is not a button. `render` always entered `BaseButton`, which warns in\n// development when the resolved element is not a native button. `nativeButton={false}`\n// is the worse fix: Base UI then adds `role=\"button\"` and Enter/Space handling, so a\n// screen reader announces a link as a button. Render links directly instead and keep\n// `BaseButton` for real buttons.\nfunction isLinkElement(\n element: React.ReactElement,\n): element is React.ReactElement<{ href?: unknown; to?: unknown; className?: string }> {\n if (element.type === 'a') return true;\n const { href, to } = element.props as { href?: unknown; to?: unknown };\n return href !== undefined || to !== undefined;\n}\n\nfunction preventLinkActivation(event: React.SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\ntype LinkRenderProps = { href?: string; to?: string; target?: string; className?: string };\n\n// One icon step per control step: a glyph is sized by the rung it sits in, so the\n// same nominal size renders the same icon whether it arrives as an icon-mode child,\n// the `icon` prop, or a bare SVG.\nconst iconSizeMap: Record<ButtonSize, IconSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n 'icon-sm': 'sm',\n 'icon-md': 'md',\n 'icon-lg': 'lg',\n};\n\nfunction adornmentIconSize(variant: ButtonVariant, size: ButtonSize): IconSize {\n if (variant === 'link') return 'sm';\n return iconSizeMap[size];\n}\n\nfunction ButtonAdornment({ slot, size, children }: { slot: string; size: IconSize; children: React.ReactNode }) {\n if (!children) return undefined;\n return (\n <Icon data-slot={slot} size={size}>\n {children}\n </Icon>\n );\n}\n\nexport function ButtonLabel({ variant, children }: { variant: ButtonVariant; children: React.ReactNode }) {\n if (variant !== 'link') return children;\n return (\n <span data-slot=\"button-label\" className={LINK_LABEL}>\n {children}\n </span>\n );\n}\n\n// True when every child is an element (no label text). A text-sized button can still hold\n// only an icon when its size is forwarded from a wrapper, and it then needs a name too.\n// `<></>` fragments are expanded first: `<><svg />Save</>` has a label.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n return React.Children.toArray(children).flatMap(child =>\n React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment\n ? flattenChildren(child.props.children)\n : [child],\n );\n}\n\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize`, so an icon-mode button can be\n// told from a text-mode one without a cast.\n// eslint-disable-next-line react-refresh/only-export-components -- shared with Combobox's icon-only trigger\nexport function isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return size?.startsWith('icon-') ?? false;\n}\n\nexport const Button = React.forwardRef<HTMLElement, ButtonProps>(\n (\n {\n className,\n render,\n as: asProp,\n href,\n to,\n target,\n prefetch,\n size,\n variant = 'default',\n disabled,\n children,\n icon,\n iconEnd,\n tooltip,\n tooltipPosition,\n 'aria-label': ariaLabelProp,\n type,\n ...props\n },\n ref,\n ) => {\n const iconMode = variant !== 'link' && isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const resolvedVariant: ButtonVariant = variant ?? 'default';\n const adornmentSize = adornmentIconSize(resolvedVariant, resolvedSize);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel =\n ariaLabelProp ?? ((iconMode || isIconOnly(children)) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? (\n <Icon size={iconSizeMap[resolvedSize]}>{children}</Icon>\n ) : (\n <>\n <ButtonAdornment slot=\"button-icon\" size={adornmentSize}>\n {icon}\n </ButtonAdornment>\n <ButtonLabel variant={resolvedVariant}>{children}</ButtonLabel>\n <ButtonAdornment slot=\"button-icon-end\" size={adornmentSize}>\n {iconEnd}\n </ButtonAdornment>\n </>\n );\n\n const sharedProps = {\n disabled,\n // Base UI renders `type=\"button\"` when the prop is absent, which would quietly stop\n // a form button that relied on the native `submit` default from submitting. Passing\n // it through, `undefined` included, keeps native semantics: absent stays absent.\n type,\n 'aria-label': ariaLabel,\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.css).\n 'data-variant': variant,\n // Icon-mode is a square: a group that overrides the rung has to move the width with\n // the height or the circle turns into a pill (see buttons-group.css).\n 'data-shape': iconMode ? 'icon' : undefined,\n className: cn(buttonVariants({ variant, size: resolvedSize }), className),\n ...props,\n };\n\n // The deprecated `as` API keeps its original element path rather than going through\n // Base UI. Routing it through `render` drops props Base UI does not know about — a\n // router link loses its `to` and stops navigating — and Base UI warns that a\n // non-<button> contradicts `nativeButton`.\n const LegacyComponent = render ? undefined : asProp;\n\n // Only forward what the caller actually set. Passing `href={undefined}` through to a\n // router link overwrites the href that link derives from `to`, leaving an anchor that\n // renders correctly and navigates nowhere.\n const legacyLinkProps = {\n ...(href === undefined ? null : { href }),\n ...(to === undefined ? null : { to }),\n ...(target === undefined ? null : { target }),\n ...(prefetch === undefined ? null : { prefetch }),\n };\n\n const isLinkVariant = resolvedVariant === 'link';\n const linkHref = href ?? to;\n const linkRenderProps: LinkRenderProps = {\n ...(linkHref === undefined ? null : { href: linkHref }),\n ...(target === undefined ? null : { target }),\n };\n const renderedLink =\n React.isValidElement(render) && isLinkElement(render)\n ? render\n : isLinkVariant\n ? React.createElement('a', linkRenderProps)\n : undefined;\n const renderedLinkProps = renderedLink?.props;\n const disabledHref = renderedLink?.type !== 'a' && renderedLinkProps?.href !== undefined ? '' : undefined;\n const disabledTo = renderedLinkProps?.to !== undefined ? '' : undefined;\n const disabledLinkProps = disabled\n ? {\n ...(isLinkVariant ? null : { href: disabledHref }),\n ...(isLinkVariant ? null : { to: disabledTo }),\n 'aria-disabled': true,\n onClick: preventLinkActivation,\n onAuxClick: preventLinkActivation,\n onKeyDown: (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') preventLinkActivation(event);\n },\n }\n : undefined;\n\n const button = LegacyComponent ? (\n <LegacyComponent ref={ref} {...legacyLinkProps} {...sharedProps}>\n {content}\n </LegacyComponent>\n ) : renderedLink ? (\n React.cloneElement(renderedLink as React.ReactElement<Record<string, unknown>>, {\n ref,\n ...sharedProps,\n disabled: undefined,\n ...disabledLinkProps,\n className: cn(sharedProps.className, renderedLink.props.className),\n children: content,\n })\n ) : (\n <BaseButton ref={ref} render={render} {...sharedProps}>\n {content}\n </BaseButton>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side={tooltipPosition}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button-YQRflC47.cjs","names":["cn","iconSizeClasses","cva","controlStateColorTransition","sharedFormElementDisabledStyle","controlFocusBorderVisible","raisedControlSurfaceStyle","focusRingOffset","focusRing","controlSizeClasses","controlHeight","Icon","React","_Fragment","BaseButton","Tooltip","TooltipTrigger","TooltipContent"],"sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { Button as BaseButton } from '@base-ui/react/button';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip/tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { iconSizeClasses } from '@/ds/icons/icon-size-classes';\nimport type { IconSize } from '@/ds/icons/icon-size-classes';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport {\n controlFocusBorderVisible,\n raisedControlSurfaceStyle,\n sharedFormElementDisabledStyle,\n} from '@/ds/primitives/form-element';\nimport { controlStateColorTransition, focusRing, focusRingOffset } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// Text-mode buttons are pills. Each size sets `--button-px`, the label's side padding. The\n// icon side gets 2px less, because a glyph draws inside its box: the icon then reads as far\n// from the edge as the label does (shadcn's Button uses the same 2px step).\n// - `[data-slot=button-icon(-end)]`: the `<Icon>` wrappers the `icon` / `iconEnd` props render.\n// - `>svg`: a bare SVG passed as a leading child, before the label.\n// A button with no label takes an icon-mode size instead: a fixed square with its own\n// `rounded-full`, so it reads as a circle rather than a padded pill (lint rule\n// `mastra/icon-button-size`).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'rounded-full px-(--button-px)',\n 'has-[>[data-slot=button-icon]]:pl-[calc(var(--button-px)-2px)] has-[>svg]:pl-[calc(var(--button-px)-2px)]',\n 'has-[>[data-slot=button-icon-end]]:pr-[calc(var(--button-px)-2px)]',\n);\n\nconst LINK_LAYOUT = cn(\n 'relative size-auto gap-1 rounded-xs px-0 text-label',\n 'before:absolute before:-inset-x-2',\n 'has-[>[data-slot=button-icon-end]]:pr-0 has-[>[data-slot=button-icon]]:pl-0 has-[>svg]:pl-0',\n);\n\nconst LINK_LABEL = cn(\n 'relative inline-flex items-center gap-1',\n iconSizeClasses.sm,\n '[&>svg]:shrink-0',\n 'after:absolute after:inset-x-0 after:bottom-0 after:h-px after:origin-left after:scale-x-0 after:bg-current',\n 'after:transition-transform after:duration-fast after:ease-out-custom motion-reduce:after:transition-none',\n);\n\n// An icon is secondary to the label beside it, and on a neutral surface it says so with\n// a colour token rather than opacity. Opacity dims against whatever sits behind the\n// control, so the same glyph clears contrast on one surface and fails on another, and it\n// left icon-only buttons with no hover response at all: only their background moved.\n// Filled variants opt out because there the glyph colour carries the meaning.\nconst NEUTRAL_ICON_STATE = cn(\n '[&_svg]:text-muted-foreground not-disabled:hover:[&_svg]:text-foreground aria-disabled:[&_svg]:text-muted-foreground',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center',\n controlStateColorTransition,\n sharedFormElementDisabledStyle,\n 'aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:text-muted-foreground',\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n // The raised card material, the same one a field wears: a neutral filled control is\n // one material system-wide. No border of its own — the material's rim is its edge,\n // and focus repaints that rim. Inside a ButtonsGroup the group flattens the rim and\n // hands every segment the same 1px border instead (see `buttons-group.css`).\n default: cn(\n 'border-0',\n raisedControlSurfaceStyle,\n NEUTRAL_ICON_STATE,\n 'disabled:bg-fill-subtle aria-disabled:bg-fill-subtle',\n ),\n // Filled variants take the opaque ladder: their rest fill is a colour, not a rung\n // layered on the surface, so a state that thinned it would let whatever the button\n // covers read through the hover it is meant to answer.\n primary: cn(\n 'border border-transparent bg-fill-inverse text-background not-disabled:hover:bg-fill-inverse-hover not-disabled:active:bg-fill-inverse-active',\n focusRingOffset,\n 'focus-visible:border-transparent',\n 'disabled:bg-fill-inverse-disabled disabled:text-background/75 aria-disabled:bg-fill-inverse-disabled aria-disabled:text-background/75',\n ),\n destructive: cn(\n 'border border-transparent bg-fill-destructive text-fill-destructive-foreground not-disabled:hover:bg-fill-destructive-hover not-disabled:active:bg-fill-destructive-active',\n focusRingOffset,\n 'focus-visible:border-transparent',\n 'disabled:bg-fill-destructive-disabled disabled:text-fill-destructive-disabled-foreground aria-disabled:bg-fill-destructive-disabled aria-disabled:text-fill-destructive-disabled-foreground',\n ),\n 'destructive-ghost': cn(\n 'border border-transparent bg-transparent text-destructive-foreground not-disabled:hover:bg-destructive-subtle not-disabled:hover:text-destructive-foreground not-disabled:active:bg-destructive-subtle-active',\n 'disabled:bg-transparent disabled:text-placeholder aria-disabled:bg-transparent aria-disabled:text-placeholder',\n ),\n ghost: cn(\n 'border border-transparent bg-transparent text-muted-foreground not-disabled:hover:bg-fill-subtle not-disabled:hover:text-foreground not-disabled:active:bg-fill',\n 'disabled:bg-transparent aria-disabled:bg-transparent',\n ),\n // A persistent neutral fill for selected controls. Match default's borderless\n // box so switching between the raised and subtle surfaces keeps labels in place.\n subtle: cn(\n 'border-0 bg-fill-hover text-foreground not-disabled:hover:bg-fill-hover not-disabled:active:bg-fill',\n focusRing,\n 'disabled:bg-transparent aria-disabled:bg-transparent',\n ),\n link: cn(\n 'border-0 bg-transparent text-muted-foreground not-disabled:hover:text-foreground',\n 'not-disabled:hover:[&>[data-slot=button-label]]:after:scale-x-100 not-disabled:hover:[&>[data-slot=button-label]]:after:duration-normal',\n focusRingOffset,\n 'disabled:text-placeholder aria-disabled:text-placeholder',\n ),\n },\n size: {\n sm: cn(controlSizeClasses.sm, iconSizeClasses.sm, 'gap-1 [--button-px:.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, iconSizeClasses.md, 'gap-1.5 [--button-px:.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.lg, iconSizeClasses.lg, 'gap-1.5 [--button-px:1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // so icon-mode and text-mode use the same press feedback. The glyph is sized by the `Icon`\n // wrapper the component puts around an icon-mode child, keyed off the same scale.\n 'icon-sm': cn(controlHeight.sm, 'w-control-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-control-md rounded-full'),\n 'icon-lg': cn(controlHeight.lg, 'w-control-lg rounded-full'),\n },\n },\n compoundVariants: [\n { variant: 'link', className: LINK_LAYOUT },\n { variant: 'link', size: ['sm', 'md', 'icon-sm', 'icon-md'], className: 'before:-inset-y-1' },\n { variant: 'link', size: ['lg', 'icon-lg'], className: 'before:-inset-y-1.5' },\n ],\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n render?: BaseButton.Props['render'];\n className?: string;\n children: React.ReactNode;\n /** Leading icon, always rendered on the left of the label inside `<Icon>`. Ignored in icon-mode sizes. */\n icon?: React.ReactNode;\n iconEnd?: React.ReactNode;\n tooltip?: React.ReactNode;\n /** Side of the trigger the tooltip opens on. Defaults to `top`. */\n tooltipPosition?: 'top' | 'right' | 'bottom' | 'left';\n /** @deprecated Pass the element through `render` instead: `render={<Link href=\"/x\" />}`. */\n as?: React.ElementType;\n /** @deprecated Set it on the element passed to `render`. */\n href?: string;\n /** @deprecated Set it on the element passed to `render`. */\n to?: string;\n /** @deprecated Set it on the element passed to `render`. */\n target?: string;\n /** @deprecated Set it on the element passed to `render`. */\n prefetch?: boolean | null;\n}\n\n// A link is not a button. `render` always entered `BaseButton`, which warns in\n// development when the resolved element is not a native button. `nativeButton={false}`\n// is the worse fix: Base UI then adds `role=\"button\"` and Enter/Space handling, so a\n// screen reader announces a link as a button. Render links directly instead and keep\n// `BaseButton` for real buttons.\nfunction isLinkElement(\n element: React.ReactElement,\n): element is React.ReactElement<{ href?: unknown; to?: unknown; className?: string }> {\n if (element.type === 'a') return true;\n const { href, to } = element.props as { href?: unknown; to?: unknown };\n return href !== undefined || to !== undefined;\n}\n\nfunction preventLinkActivation(event: React.SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\ntype LinkRenderProps = { href?: string; to?: string; target?: string; className?: string };\n\n// One icon step per control step: a glyph is sized by the rung it sits in, so the\n// same nominal size renders the same icon whether it arrives as an icon-mode child,\n// the `icon` prop, or a bare SVG.\nconst iconSizeMap: Record<ButtonSize, IconSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n 'icon-sm': 'sm',\n 'icon-md': 'md',\n 'icon-lg': 'lg',\n};\n\nfunction adornmentIconSize(variant: ButtonVariant, size: ButtonSize): IconSize {\n if (variant === 'link') return 'sm';\n return iconSizeMap[size];\n}\n\nfunction ButtonAdornment({ slot, size, children }: { slot: string; size: IconSize; children: React.ReactNode }) {\n if (!children) return undefined;\n return (\n <Icon data-slot={slot} size={size}>\n {children}\n </Icon>\n );\n}\n\nexport function ButtonLabel({ variant, children }: { variant: ButtonVariant; children: React.ReactNode }) {\n if (variant !== 'link') return children;\n return (\n <span data-slot=\"button-label\" className={LINK_LABEL}>\n {children}\n </span>\n );\n}\n\n// True when every child is an element (no label text). A text-sized button can still hold\n// only an icon when its size is forwarded from a wrapper, and it then needs a name too.\n// `<></>` fragments are expanded first: `<><svg />Save</>` has a label.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n return React.Children.toArray(children).flatMap(child =>\n React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment\n ? flattenChildren(child.props.children)\n : [child],\n );\n}\n\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize`, so an icon-mode button can be\n// told from a text-mode one without a cast.\n// eslint-disable-next-line react-refresh/only-export-components -- shared with Combobox's icon-only trigger\nexport function isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return size?.startsWith('icon-') ?? false;\n}\n\nexport const Button = React.forwardRef<HTMLElement, ButtonProps>(\n (\n {\n className,\n render,\n as: asProp,\n href,\n to,\n target,\n prefetch,\n size,\n variant = 'default',\n disabled,\n children,\n icon,\n iconEnd,\n tooltip,\n tooltipPosition,\n 'aria-label': ariaLabelProp,\n type,\n ...props\n },\n ref,\n ) => {\n const iconMode = variant !== 'link' && isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const resolvedVariant: ButtonVariant = variant ?? 'default';\n const adornmentSize = adornmentIconSize(resolvedVariant, resolvedSize);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel =\n ariaLabelProp ?? ((iconMode || isIconOnly(children)) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? (\n <Icon size={iconSizeMap[resolvedSize]}>{children}</Icon>\n ) : (\n <>\n <ButtonAdornment slot=\"button-icon\" size={adornmentSize}>\n {icon}\n </ButtonAdornment>\n <ButtonLabel variant={resolvedVariant}>{children}</ButtonLabel>\n <ButtonAdornment slot=\"button-icon-end\" size={adornmentSize}>\n {iconEnd}\n </ButtonAdornment>\n </>\n );\n\n const sharedProps = {\n disabled,\n // Base UI renders `type=\"button\"` when the prop is absent, which would quietly stop\n // a form button that relied on the native `submit` default from submitting. Passing\n // it through, `undefined` included, keeps native semantics: absent stays absent.\n type,\n 'aria-label': ariaLabel,\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.css).\n 'data-variant': variant,\n // Icon-mode is a square: a group that overrides the rung has to move the width with\n // the height or the circle turns into a pill (see buttons-group.css).\n 'data-shape': iconMode ? 'icon' : undefined,\n className: cn(buttonVariants({ variant, size: resolvedSize }), className),\n ...props,\n };\n\n // The deprecated `as` API keeps its original element path rather than going through\n // Base UI. Routing it through `render` drops props Base UI does not know about — a\n // router link loses its `to` and stops navigating — and Base UI warns that a\n // non-<button> contradicts `nativeButton`.\n const LegacyComponent = render ? undefined : asProp;\n\n // Only forward what the caller actually set. Passing `href={undefined}` through to a\n // router link overwrites the href that link derives from `to`, leaving an anchor that\n // renders correctly and navigates nowhere.\n const legacyLinkProps = {\n ...(href === undefined ? null : { href }),\n ...(to === undefined ? null : { to }),\n ...(target === undefined ? null : { target }),\n ...(prefetch === undefined ? null : { prefetch }),\n };\n\n const isLinkVariant = resolvedVariant === 'link';\n const linkHref = href ?? to;\n const linkRenderProps: LinkRenderProps = {\n ...(linkHref === undefined ? null : { href: linkHref }),\n ...(target === undefined ? null : { target }),\n };\n const renderedLink =\n React.isValidElement(render) && isLinkElement(render)\n ? render\n : isLinkVariant\n ? React.createElement('a', linkRenderProps)\n : undefined;\n const renderedLinkProps = renderedLink?.props;\n const disabledHref = renderedLink?.type !== 'a' && renderedLinkProps?.href !== undefined ? '' : undefined;\n const disabledTo = renderedLinkProps?.to !== undefined ? '' : undefined;\n const disabledLinkProps = disabled\n ? {\n ...(isLinkVariant ? null : { href: disabledHref }),\n ...(isLinkVariant ? null : { to: disabledTo }),\n 'aria-disabled': true,\n onClick: preventLinkActivation,\n onAuxClick: preventLinkActivation,\n onKeyDown: (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') preventLinkActivation(event);\n },\n }\n : undefined;\n\n const button = LegacyComponent ? (\n <LegacyComponent ref={ref} {...legacyLinkProps} {...sharedProps}>\n {content}\n </LegacyComponent>\n ) : renderedLink ? (\n React.cloneElement(renderedLink as React.ReactElement<Record<string, unknown>>, {\n ref,\n ...sharedProps,\n disabled: undefined,\n ...disabledLinkProps,\n className: cn(sharedProps.className, renderedLink.props.className),\n children: content,\n })\n ) : (\n <BaseButton ref={ref} render={render} {...sharedProps}>\n {content}\n </BaseButton>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side={tooltipPosition}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"mappings":"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"}