@mastra/playground-ui 62.0.0 → 63.0.0-alpha.1

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 (473) hide show
  1. package/dist/alert-dialog-R9z2SJLl.js +40 -0
  2. package/dist/alert-dialog-R9z2SJLl.js.map +1 -0
  3. package/dist/alert-dialog-j626w-Qb.cjs +42 -0
  4. package/dist/alert-dialog-j626w-Qb.cjs.map +1 -0
  5. package/dist/{ask-user-card-xR8YiiQa.js → ask-user-card-CwKfl6M2.js} +5 -6
  6. package/dist/{ask-user-card-xR8YiiQa.js.map → ask-user-card-CwKfl6M2.js.map} +1 -1
  7. package/dist/{ask-user-card-40a18Qea.cjs → ask-user-card-g8cqh8KI.cjs} +1 -2
  8. package/dist/{ask-user-card-40a18Qea.cjs.map → ask-user-card-g8cqh8KI.cjs.map} +1 -1
  9. package/dist/{checkbox-mmR3rD2j.js → checkbox-B3tvJLCl.js} +2 -2
  10. package/dist/{checkbox-mmR3rD2j.js.map → checkbox-B3tvJLCl.js.map} +1 -1
  11. package/dist/{code-block-BQZUoOfS.js → code-block-9sT-CaoF.js} +2 -2
  12. package/dist/{code-block-BQZUoOfS.js.map → code-block-9sT-CaoF.js.map} +1 -1
  13. package/dist/{code-editor-D69saH4C.js → code-editor-DgfDaPAD.js} +2 -2
  14. package/dist/{code-editor-D69saH4C.js.map → code-editor-DgfDaPAD.js.map} +1 -1
  15. package/dist/{combobox-DDUIREaG.js → combobox-DJu0ggNa.js} +2 -2
  16. package/dist/{combobox-DDUIREaG.js.map → combobox-DJu0ggNa.js.map} +1 -1
  17. package/dist/{command-Cx5QAS4E.cjs → command-DbZ6CSAy.cjs} +3 -3
  18. package/dist/command-DbZ6CSAy.cjs.map +1 -0
  19. package/dist/{command-B141Sxts.js → command-DtIlcv-t.js} +3 -3
  20. package/dist/command-DtIlcv-t.js.map +1 -0
  21. package/dist/components/AlertDialog.cjs.js +1 -1
  22. package/dist/components/AlertDialog.es.js +1 -1
  23. package/dist/components/Checkbox.es.js +1 -1
  24. package/dist/components/CodeBlock.es.js +1 -1
  25. package/dist/components/CodeEditor.es.js +1 -1
  26. package/dist/components/Combobox.es.js +1 -1
  27. package/dist/components/Command.cjs.js +1 -1
  28. package/dist/components/Command.es.js +1 -1
  29. package/dist/components/CommandPalette.cjs.js +1 -1
  30. package/dist/components/CommandPalette.es.js +1 -1
  31. package/dist/components/Comment.cjs.js +0 -1
  32. package/dist/components/Comment.cjs.js.map +1 -1
  33. package/dist/components/Comment.es.js +2 -3
  34. package/dist/components/Comment.es.js.map +1 -1
  35. package/dist/components/DataCodeSection.cjs.js +1 -1
  36. package/dist/components/DataCodeSection.es.js +1 -1
  37. package/dist/components/DataList.cjs.js +15 -17
  38. package/dist/components/DataList.cjs.js.map +1 -1
  39. package/dist/components/DataList.es.js +4 -5
  40. package/dist/components/DataList.es.js.map +1 -1
  41. package/dist/components/DataPanel.cjs.js +1 -1
  42. package/dist/components/DataPanel.es.js +1 -1
  43. package/dist/components/DateTimePicker.cjs.js +0 -1
  44. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  45. package/dist/components/DateTimePicker.es.js +3 -4
  46. package/dist/components/DateTimePicker.es.js.map +1 -1
  47. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  48. package/dist/components/DateTimeRangePicker.es.js +1 -1
  49. package/dist/components/Dialog.cjs.js +2 -2
  50. package/dist/components/Dialog.es.js +2 -2
  51. package/dist/components/Drawer.cjs.js +1 -1
  52. package/dist/components/Drawer.es.js +1 -1
  53. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -2
  54. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  55. package/dist/components/EnvironmentVariablesEditor.es.js +3 -4
  56. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  57. package/dist/components/Field.es.js +2 -2
  58. package/dist/components/FilterBar.cjs.js +2 -2
  59. package/dist/components/FilterBar.cjs.js.map +1 -1
  60. package/dist/components/FilterBar.es.js +3 -3
  61. package/dist/components/FilterBar.es.js.map +1 -1
  62. package/dist/components/FormFieldBlocks.es.js +2 -2
  63. package/dist/components/Input.es.js +1 -1
  64. package/dist/components/InputGroup.es.js +1 -1
  65. package/dist/components/InputNumber.es.js +1 -1
  66. package/dist/components/JSONSchemaForm.cjs.js +0 -1
  67. package/dist/components/JSONSchemaForm.cjs.js.map +1 -1
  68. package/dist/components/JSONSchemaForm.es.js +4 -5
  69. package/dist/components/JSONSchemaForm.es.js.map +1 -1
  70. package/dist/components/ListSearch.cjs.js +1 -1
  71. package/dist/components/ListSearch.es.js +1 -1
  72. package/dist/components/LogsDataList.cjs.js +5 -2
  73. package/dist/components/LogsDataList.cjs.js.map +1 -1
  74. package/dist/components/LogsDataList.es.js +5 -2
  75. package/dist/components/LogsDataList.es.js.map +1 -1
  76. package/dist/components/MarkdownRenderer.es.js +1 -1
  77. package/dist/components/PropertyFilter.cjs.js +0 -1
  78. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  79. package/dist/components/PropertyFilter.es.js +4 -5
  80. package/dist/components/PropertyFilter.es.js.map +1 -1
  81. package/dist/components/RadioGroup.es.js +1 -1
  82. package/dist/components/RuleBuilder.es.js +2 -2
  83. package/dist/components/SavedViews.cjs.js +1 -1
  84. package/dist/components/SavedViews.es.js +1 -1
  85. package/dist/components/SearchInput.cjs.js +1 -1
  86. package/dist/components/SearchInput.es.js +1 -1
  87. package/dist/components/Section.cjs.js +1 -1
  88. package/dist/components/Section.es.js +1 -1
  89. package/dist/components/SegmentedControl.es.js +1 -1
  90. package/dist/components/Select.es.js +1 -1
  91. package/dist/components/SideDialog.cjs.js +1 -1
  92. package/dist/components/SideDialog.es.js +1 -1
  93. package/dist/components/Sidebar.cjs.js +2 -2
  94. package/dist/components/Sidebar.es.js +3 -3
  95. package/dist/components/Switch.es.js +1 -1
  96. package/dist/components/ThemeToggle.es.js +1 -1
  97. package/dist/components/Workflow.cjs.js +2 -2
  98. package/dist/components/Workflow.es.js +3 -3
  99. package/dist/components/ai/activity.es.js +1 -1
  100. package/dist/components/ai/ask-user.cjs.js +1 -1
  101. package/dist/components/ai/ask-user.es.js +1 -1
  102. package/dist/components/ai/plan.es.js +1 -1
  103. package/dist/components/ai/tool-approval.es.js +1 -1
  104. package/dist/components/ai/tool-call.es.js +1 -1
  105. package/dist/{data-code-section-zG2S1MPX.js → data-code-section-BGLC-hxm.js} +3 -3
  106. package/dist/{data-code-section-zG2S1MPX.js.map → data-code-section-BGLC-hxm.js.map} +1 -1
  107. package/dist/{data-code-section-hVbIXLNC.cjs → data-code-section-BTRNa1SD.cjs} +3 -3
  108. package/dist/{data-code-section-hVbIXLNC.cjs.map → data-code-section-BTRNa1SD.cjs.map} +1 -1
  109. package/dist/{data-list-top-BJCC62oy.js → data-list-DDGpWucH.js} +333 -6
  110. package/dist/data-list-DDGpWucH.js.map +1 -0
  111. package/dist/{data-list-top-Ds-NWyPO.cjs → data-list-_yDPF5wR.cjs} +339 -13
  112. package/dist/data-list-_yDPF5wR.cjs.map +1 -0
  113. package/dist/{data-list-skeleton-BmsDYJrA.js → data-list-skeleton-CJFwZBlW.js} +2 -2
  114. package/dist/{data-list-skeleton-BmsDYJrA.js.map → data-list-skeleton-CJFwZBlW.js.map} +1 -1
  115. package/dist/{data-list-skeleton-CfVsXhx1.cjs → data-list-skeleton-maUWF7Ri.cjs} +6 -6
  116. package/dist/{data-list-skeleton-CfVsXhx1.cjs.map → data-list-skeleton-maUWF7Ri.cjs.map} +1 -1
  117. package/dist/{data-panel-BLqydW68.js → data-panel-DfVGx0Ea.js} +3 -3
  118. package/dist/{data-panel-BLqydW68.js.map → data-panel-DfVGx0Ea.js.map} +1 -1
  119. package/dist/{data-panel-BdeebdMA.cjs → data-panel-Dhg7s3fD.cjs} +4 -4
  120. package/dist/{data-panel-BdeebdMA.cjs.map → data-panel-Dhg7s3fD.cjs.map} +1 -1
  121. package/dist/{date-time-range-picker-BvRPfy1i.cjs → date-time-range-picker-BNaXCa7r.cjs} +1 -2
  122. package/dist/{date-time-range-picker-BvRPfy1i.cjs.map → date-time-range-picker-BNaXCa7r.cjs.map} +1 -1
  123. package/dist/{date-time-range-picker-CIfaXUuy.js → date-time-range-picker-C5x_33hB.js} +3 -4
  124. package/dist/{date-time-range-picker-CIfaXUuy.js.map → date-time-range-picker-C5x_33hB.js.map} +1 -1
  125. package/dist/{dialog-wL-fuFON.cjs → dialog-DQI9ChYf.cjs} +74 -37
  126. package/dist/dialog-DQI9ChYf.cjs.map +1 -0
  127. package/dist/{dialog-BYsQZGIj.js → dialog-DlZmNahd.js} +75 -35
  128. package/dist/dialog-DlZmNahd.js.map +1 -0
  129. package/dist/{dialog-action-B-pF99m0.js → dialog-action-c4nfPomF.js} +2 -2
  130. package/dist/{dialog-action-B-pF99m0.js.map → dialog-action-c4nfPomF.js.map} +1 -1
  131. package/dist/{dialog-action-CcMhvjM-.cjs → dialog-action-gdo9CwUv.cjs} +2 -2
  132. package/dist/{dialog-action-CcMhvjM-.cjs.map → dialog-action-gdo9CwUv.cjs.map} +1 -1
  133. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  134. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  135. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  136. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +2 -2
  137. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -3
  138. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  139. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -6
  140. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  141. package/dist/domains/chat/messages/message-row.cjs.js +0 -1
  142. package/dist/domains/chat/messages/message-row.cjs.js.map +1 -1
  143. package/dist/domains/chat/messages/message-row.es.js +1 -2
  144. package/dist/domains/chat/messages/message-row.es.js.map +1 -1
  145. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  146. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  147. package/dist/domains/chat/messages/skill-message.es.js +1 -1
  148. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/agent-badge.es.js +2 -2
  150. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  151. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  152. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  153. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +2 -2
  154. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  155. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  156. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  158. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  159. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  160. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  161. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -3
  162. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  163. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  164. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +1 -2
  165. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
  166. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -5
  167. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
  168. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  169. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  170. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  171. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  172. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  173. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  174. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  175. package/dist/domains/memory/components/observation-detail-view.cjs.js +0 -1
  176. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  177. package/dist/domains/memory/components/observation-detail-view.es.js +2 -3
  178. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  179. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  180. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  181. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  182. package/dist/domains/metrics/drilldown.es.js +1 -1
  183. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +1 -2
  184. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
  185. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -5
  186. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
  187. package/dist/domains/request-context/components/request-context-label.cjs.js +0 -1
  188. package/dist/domains/request-context/components/request-context-label.cjs.js.map +1 -1
  189. package/dist/domains/request-context/components/request-context-label.es.js +1 -2
  190. package/dist/domains/request-context/components/request-context-label.es.js.map +1 -1
  191. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  192. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  193. package/dist/domains/scores/components/span-scoring.cjs.js +2 -2
  194. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  195. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  196. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  197. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  198. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  199. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  200. package/dist/domains/traces/components/feedback-thread.es.js +2 -2
  201. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -2
  202. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  203. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -2
  204. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  205. package/dist/domains/traces/components/span-details-view.cjs.js +0 -1
  206. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  207. package/dist/domains/traces/components/span-details-view.es.js +0 -1
  208. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  209. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  210. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  211. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  212. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  213. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  214. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  215. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  216. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  217. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  218. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  219. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  220. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  221. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +0 -2
  222. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  223. package/dist/domains/traces/components/thread-view-by-trace.es.js +0 -2
  224. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  225. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -3
  226. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  227. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -5
  228. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  229. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  230. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  231. package/dist/domains/traces/components/trace-data-panel.cjs.js +3 -4
  232. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  233. package/dist/domains/traces/components/trace-data-panel.es.js +3 -4
  234. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  235. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  236. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  237. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  238. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  239. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  240. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  241. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +3 -3
  242. package/dist/domains/traces/components/trace-time-range-chip.es.js +3 -3
  243. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  244. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  245. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  246. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  247. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  248. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  249. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  250. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  251. package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js +1 -1
  252. package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js +1 -1
  253. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +1 -1
  254. package/dist/domains/traces/hooks/use-trace-url-state.es.js +1 -1
  255. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  256. package/dist/domains/traces/trace-filters.es.js +1 -1
  257. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  258. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  259. package/dist/domains/traces.cjs.js +1 -1
  260. package/dist/domains/traces.es.js +1 -1
  261. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  262. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  263. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  264. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  265. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  266. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  267. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  268. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  269. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  270. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +0 -1
  271. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js.map +1 -1
  272. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +2 -3
  273. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js.map +1 -1
  274. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +0 -1
  275. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
  276. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -3
  277. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
  278. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  279. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  280. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  281. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  282. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +0 -1
  283. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js.map +1 -1
  284. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +2 -3
  285. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js.map +1 -1
  286. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +1 -1
  287. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  288. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +0 -2
  289. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  290. package/dist/domains/workflows/workflow/workflow-input-data.es.js +0 -2
  291. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  292. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  293. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +2 -2
  294. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
  295. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  296. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  297. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  298. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  299. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  300. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +0 -1
  301. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js.map +1 -1
  302. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -3
  303. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js.map +1 -1
  304. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  305. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +3 -4
  306. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
  307. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +6 -7
  308. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
  309. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  310. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  311. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  312. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  313. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  314. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  315. package/dist/{drawer-B-t4ydEh.js → drawer-CZlqOjd2.js} +17 -7
  316. package/dist/{drawer-B-t4ydEh.js.map → drawer-CZlqOjd2.js.map} +1 -1
  317. package/dist/{drawer-DE2b3eld.cjs → drawer-CeUYCG-S.cjs} +16 -6
  318. package/dist/{drawer-DE2b3eld.cjs.map → drawer-CeUYCG-S.cjs.map} +1 -1
  319. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  320. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  321. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  322. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  323. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -2
  324. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  325. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -3
  326. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  327. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  328. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  329. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -3
  330. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  331. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +4 -5
  332. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  333. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  334. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  335. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  336. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  337. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  338. package/dist/{field-B89BEZg4.js → field-Bc8Ewf_M.js} +2 -2
  339. package/dist/{field-B89BEZg4.js.map → field-Bc8Ewf_M.js.map} +1 -1
  340. package/dist/{field-control-aria-DB6y41tQ.js → field-control-aria-CCJ4-mUe.js} +2 -2
  341. package/dist/{field-control-aria-DB6y41tQ.js.map → field-control-aria-CCJ4-mUe.js.map} +1 -1
  342. package/dist/{filter-bar-chip-uPmGVzPR.cjs → filter-bar-chip-C_371aon.cjs} +35 -6
  343. package/dist/filter-bar-chip-C_371aon.cjs.map +1 -0
  344. package/dist/{filter-bar-chip-Bu27EjSO.js → filter-bar-chip-Dc6phYqZ.js} +35 -6
  345. package/dist/filter-bar-chip-Dc6phYqZ.js.map +1 -0
  346. package/dist/hooks/use-is-mobile.cjs.js +14 -10
  347. package/dist/hooks/use-is-mobile.cjs.js.map +1 -1
  348. package/dist/hooks/use-is-mobile.es.js +15 -11
  349. package/dist/hooks/use-is-mobile.es.js.map +1 -1
  350. package/dist/{input-DQFUjtnh.js → input-Ds171RJ5.js} +2 -2
  351. package/dist/{input-DQFUjtnh.js.map → input-Ds171RJ5.js.map} +1 -1
  352. package/dist/{input-group-BWsGYnES.js → input-group-Cxv64rPB.js} +2 -2
  353. package/dist/{input-group-BWsGYnES.js.map → input-group-Cxv64rPB.js.map} +1 -1
  354. package/dist/layout/tabbed-container.cjs.js +2 -2
  355. package/dist/layout/tabbed-container.es.js +3 -3
  356. package/dist/lib/form/components/boolean-field.cjs.js +0 -1
  357. package/dist/lib/form/components/boolean-field.cjs.js.map +1 -1
  358. package/dist/lib/form/components/boolean-field.es.js +2 -3
  359. package/dist/lib/form/components/boolean-field.es.js.map +1 -1
  360. package/dist/lib/form/components/date-field.es.js +1 -1
  361. package/dist/lib/form/components/field-wrapper.cjs.js +0 -1
  362. package/dist/lib/form/components/field-wrapper.cjs.js.map +1 -1
  363. package/dist/lib/form/components/field-wrapper.es.js +1 -2
  364. package/dist/lib/form/components/field-wrapper.es.js.map +1 -1
  365. package/dist/lib/form/components/number-field.es.js +1 -1
  366. package/dist/lib/form/components/record-field.es.js +1 -1
  367. package/dist/lib/form/components/select-field.es.js +1 -1
  368. package/dist/{list-search-xHadeMHl.cjs → list-search-C3yXcTRO.cjs} +2 -2
  369. package/dist/{list-search-xHadeMHl.cjs.map → list-search-C3yXcTRO.cjs.map} +1 -1
  370. package/dist/{list-search-BNnMwbpv.js → list-search-CmPRFDsn.js} +2 -2
  371. package/dist/{list-search-BNnMwbpv.js.map → list-search-CmPRFDsn.js.map} +1 -1
  372. package/dist/{logs-data-list-DfuVMd6f.cjs → logs-data-list-Bf_vIsFb.cjs} +21 -22
  373. package/dist/{logs-data-list-DfuVMd6f.cjs.map → logs-data-list-Bf_vIsFb.cjs.map} +1 -1
  374. package/dist/{logs-data-list-C262Be3o.js → logs-data-list-Cudh6b-c.js} +2 -3
  375. package/dist/{logs-data-list-C262Be3o.js.map → logs-data-list-Cudh6b-c.js.map} +1 -1
  376. package/dist/{markdown-renderer-D5Wjk1Cs.js → markdown-renderer-Cly6VMDr.js} +2 -2
  377. package/dist/{markdown-renderer-D5Wjk1Cs.js.map → markdown-renderer-Cly6VMDr.js.map} +1 -1
  378. package/dist/new/settings.cjs.js +1 -1
  379. package/dist/new/settings.es.js +1 -1
  380. package/dist/{plan-Cl3-JgbI.js → plan-DIbhFPRL.js} +2 -2
  381. package/dist/{plan-Cl3-JgbI.js.map → plan-DIbhFPRL.js.map} +1 -1
  382. package/dist/primitives/textarea-control.es.js +1 -1
  383. package/dist/{property-filter-applied-CZLzY0OH.js → property-filter-applied-DXH81ffT.js} +2 -2
  384. package/dist/{property-filter-applied-CZLzY0OH.js.map → property-filter-applied-DXH81ffT.js.map} +1 -1
  385. package/dist/{radio-group-Bk52hNNb.js → radio-group-C2zsCipq.js} +2 -2
  386. package/dist/{radio-group-Bk52hNNb.js.map → radio-group-C2zsCipq.js.map} +1 -1
  387. package/dist/{reasoning-activity-CIuVSAGA.js → reasoning-activity-B1r4JQxm.js} +2 -2
  388. package/dist/{reasoning-activity-CIuVSAGA.js.map → reasoning-activity-B1r4JQxm.js.map} +1 -1
  389. package/dist/resize/panel-drawer.cjs.js +1 -1
  390. package/dist/resize/panel-drawer.es.js +1 -1
  391. package/dist/{search-input-fqSrRTLU.js → search-input-D23h16CB.js} +3 -4
  392. package/dist/{search-input-fqSrRTLU.js.map → search-input-D23h16CB.js.map} +1 -1
  393. package/dist/{search-input-UtTJMjJu.cjs → search-input-DbEE2zEz.cjs} +1 -2
  394. package/dist/{search-input-UtTJMjJu.cjs.map → search-input-DbEE2zEz.cjs.map} +1 -1
  395. package/dist/{section-DhZbtWhu.cjs → section-CdaSS9M7.cjs} +2 -2
  396. package/dist/{section-DhZbtWhu.cjs.map → section-CdaSS9M7.cjs.map} +1 -1
  397. package/dist/{section-Dq6aFxlH.js → section-DcjTdrqz.js} +2 -2
  398. package/dist/{section-Dq6aFxlH.js.map → section-DcjTdrqz.js.map} +1 -1
  399. package/dist/{segmented-control-CUnvFStD.js → segmented-control-BfY7F0NZ.js} +2 -2
  400. package/dist/{segmented-control-CUnvFStD.js.map → segmented-control-BfY7F0NZ.js.map} +1 -1
  401. package/dist/{select-N2lgBRsg.js → select-BGAiIHnS.js} +2 -2
  402. package/dist/{select-N2lgBRsg.js.map → select-BGAiIHnS.js.map} +1 -1
  403. package/dist/{settings-row-CwZ3JffC.cjs → settings-row-rOI4yGvi.cjs} +1 -2
  404. package/dist/{settings-row-CwZ3JffC.cjs.map → settings-row-rOI4yGvi.cjs.map} +1 -1
  405. package/dist/{settings-row-gpwIVAMN.js → settings-row-ylIw4rfC.js} +2 -3
  406. package/dist/{settings-row-gpwIVAMN.js.map → settings-row-ylIw4rfC.js.map} +1 -1
  407. package/dist/{side-dialog-BIyr498B.js → side-dialog-CB_wrLtE.js} +3 -3
  408. package/dist/{side-dialog-BIyr498B.js.map → side-dialog-CB_wrLtE.js.map} +1 -1
  409. package/dist/{side-dialog-BT2xywA8.cjs → side-dialog-OPXvmRDA.cjs} +3 -3
  410. package/dist/{side-dialog-BT2xywA8.cjs.map → side-dialog-OPXvmRDA.cjs.map} +1 -1
  411. package/dist/{span-payload-primitives-WqYTBiGx.js → span-payload-primitives-Cixom2Py.js} +2 -2
  412. package/dist/{span-payload-primitives-WqYTBiGx.js.map → span-payload-primitives-Cixom2Py.js.map} +1 -1
  413. package/dist/src/ds/components/AlertDialog/alert-dialog.d.ts +8 -11
  414. package/dist/src/ds/components/Dialog/dialog-shell.d.ts +1 -0
  415. package/dist/src/ds/components/Dialog/dialog.d.ts +9 -3
  416. package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +9 -1
  417. package/dist/src/ds/components/FilterBar/types.d.ts +6 -0
  418. package/dist/style.css +17 -4
  419. package/dist/{switch-DiSlsWUt.js → switch-BBeMfeQ2.js} +2 -2
  420. package/dist/{switch-DiSlsWUt.js.map → switch-BBeMfeQ2.js.map} +1 -1
  421. package/dist/{time-picker-J7GaNaEd.js → time-picker-Bo6GJcmz.js} +2 -2
  422. package/dist/{time-picker-J7GaNaEd.js.map → time-picker-Bo6GJcmz.js.map} +1 -1
  423. package/dist/{tool-approval-nsbG8-qI.js → tool-approval-BQ6sDvyS.js} +2 -2
  424. package/dist/{tool-approval-nsbG8-qI.js.map → tool-approval-BQ6sDvyS.js.map} +1 -1
  425. package/dist/{tool-call-arguments-RKyYP3xh.js → tool-call-arguments-B86JP3Dy.js} +2 -2
  426. package/dist/{tool-call-arguments-RKyYP3xh.js.map → tool-call-arguments-B86JP3Dy.js.map} +1 -1
  427. package/dist/{tool-card-BtPh44u6.js → tool-card-C8IrtMuQ.js} +2 -2
  428. package/dist/{tool-card-BtPh44u6.js.map → tool-card-C8IrtMuQ.js.map} +1 -1
  429. package/dist/{trace-filters-B9myZP-l.cjs → trace-filters-Bh4dVNPX.cjs} +16 -20
  430. package/dist/trace-filters-Bh4dVNPX.cjs.map +1 -0
  431. package/dist/{trace-filters-Cvra0Aum.js → trace-filters-C71gmCq4.js} +16 -20
  432. package/dist/trace-filters-C71gmCq4.js.map +1 -0
  433. package/dist/{traces-data-list-Cf_PpmSN.cjs → traces-data-list-DaFA1Ccg.cjs} +17 -19
  434. package/dist/{traces-data-list-Cf_PpmSN.cjs.map → traces-data-list-DaFA1Ccg.cjs.map} +1 -1
  435. package/dist/{traces-data-list-_mFOMw0U.js → traces-data-list-L_r2GAtr.js} +2 -4
  436. package/dist/{traces-data-list-_mFOMw0U.js.map → traces-data-list-L_r2GAtr.js.map} +1 -1
  437. package/dist/types-CIPrYAzY.js.map +1 -1
  438. package/dist/types-Ns4ZNp-g.cjs.map +1 -1
  439. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js → use-workflow-graph-runtime-DS7eWso7.js} +2 -2
  440. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js.map → use-workflow-graph-runtime-DS7eWso7.js.map} +1 -1
  441. package/dist/{workflow-code-dialog-content-CNDoMFAV.js → workflow-code-dialog-content-BUCZZoKf.js} +2 -2
  442. package/dist/{workflow-code-dialog-content-CNDoMFAV.js.map → workflow-code-dialog-content-BUCZZoKf.js.map} +1 -1
  443. package/dist/{workflow-data-edge-view-CMdPlcQj.cjs → workflow-data-edge-view-BHvpuvmp.cjs} +2 -2
  444. package/dist/{workflow-data-edge-view-CMdPlcQj.cjs.map → workflow-data-edge-view-BHvpuvmp.cjs.map} +1 -1
  445. package/dist/{workflow-data-edge-view-DeX0gykV.js → workflow-data-edge-view-BIiMA9zg.js} +2 -2
  446. package/dist/{workflow-data-edge-view-DeX0gykV.js.map → workflow-data-edge-view-BIiMA9zg.js.map} +1 -1
  447. package/dist/{workflow-edge-data-button-CSeMH2Ky.cjs → workflow-edge-data-button-Cz2rcoDr.cjs} +2 -2
  448. package/dist/{workflow-edge-data-button-CSeMH2Ky.cjs.map → workflow-edge-data-button-Cz2rcoDr.cjs.map} +1 -1
  449. package/dist/{workflow-edge-data-button-DfyJCI6R.js → workflow-edge-data-button-D5oK4NS5.js} +3 -3
  450. package/dist/{workflow-edge-data-button-DfyJCI6R.js.map → workflow-edge-data-button-D5oK4NS5.js.map} +1 -1
  451. package/package.json +9 -9
  452. package/dist/alert-dialog-BJlS-v3z.cjs +0 -55
  453. package/dist/alert-dialog-BJlS-v3z.cjs.map +0 -1
  454. package/dist/alert-dialog-BvzVYar8.js +0 -53
  455. package/dist/alert-dialog-BvzVYar8.js.map +0 -1
  456. package/dist/command-B141Sxts.js.map +0 -1
  457. package/dist/command-Cx5QAS4E.cjs.map +0 -1
  458. package/dist/data-list-DkVOwk8l.cjs +0 -142
  459. package/dist/data-list-DkVOwk8l.cjs.map +0 -1
  460. package/dist/data-list-Dv2lP-dU.js +0 -138
  461. package/dist/data-list-Dv2lP-dU.js.map +0 -1
  462. package/dist/data-list-spacer-DEMquKp9.js +0 -209
  463. package/dist/data-list-spacer-DEMquKp9.js.map +0 -1
  464. package/dist/data-list-spacer-pXP8xDlg.cjs +0 -218
  465. package/dist/data-list-spacer-pXP8xDlg.cjs.map +0 -1
  466. package/dist/data-list-top-BJCC62oy.js.map +0 -1
  467. package/dist/data-list-top-Ds-NWyPO.cjs.map +0 -1
  468. package/dist/dialog-BYsQZGIj.js.map +0 -1
  469. package/dist/dialog-wL-fuFON.cjs.map +0 -1
  470. package/dist/filter-bar-chip-Bu27EjSO.js.map +0 -1
  471. package/dist/filter-bar-chip-uPmGVzPR.cjs.map +0 -1
  472. package/dist/trace-filters-B9myZP-l.cjs.map +0 -1
  473. package/dist/trace-filters-Cvra0Aum.js.map +0 -1
@@ -3,7 +3,7 @@ import { useAgentPlan } from '@mastra/react/hooks/agents';
3
3
  import { X, MessageSquareText, Check } from 'lucide-react';
4
4
  import { useState } from 'react';
5
5
  import { useToolCall } from '../context/tool-call-context.es.js';
6
- import { P as Plan, h as PlanHeader, k as PlanLabel, i as PlanHeaderActions, e as PlanCopyButton, b as PlanBody, j as PlanIntro, o as PlanTitle, m as PlanPath, l as PlanMain, c as PlanContent, f as PlanExpandButton, n as PlanStatus } from '../../../plan-Cl3-JgbI.js';
6
+ import { P as Plan, h as PlanHeader, k as PlanLabel, i as PlanHeaderActions, e as PlanCopyButton, b as PlanBody, j as PlanIntro, o as PlanTitle, m as PlanPath, l as PlanMain, c as PlanContent, f as PlanExpandButton, n as PlanStatus } from '../../../plan-DIbhFPRL.js';
7
7
  import { B as Button } from '../../../Button-C8QDEN9j.js';
8
8
  import { S as Skeleton } from '../../../skeleton-Bjxvf3Y-.js';
9
9
  import { T as Textarea } from '../../../textarea-Bl3htAGs.js';
@@ -1,7 +1,7 @@
1
1
  import 'react/jsx-runtime';
2
2
  import '@mastra/react/hooks/mcps';
3
3
  import 'react';
4
- export { T as ToolCard, b as ToolCardInner } from '../../../tool-card-BtPh44u6.js';
4
+ export { T as ToolCard, b as ToolCardInner } from '../../../tool-card-C8IrtMuQ.js';
5
5
  import './badges/file-tree-badge.es.js';
6
6
  import './badges/sandbox-execution-badge.es.js';
7
7
  import './badges/tool-badge.es.js';
@@ -9,10 +9,9 @@ const React = require('react');
9
9
  const Button = require('../../../Button-BfZzgZrA.cjs');
10
10
  const codeEditor = require('../../../code-editor-Dg6Y6Q8z.cjs');
11
11
  const field = require('../../../field-D1SVMPMz.cjs');
12
- require('../../../field-control-aria-WzMGs0A4.cjs');
13
12
  const form = require('../../../form-CsSBTIbV.cjs');
14
13
  const select = require('../../../select-Cdz5I0A5.cjs');
15
- const sideDialog = require('../../../side-dialog-BT2xywA8.cjs');
14
+ const sideDialog = require('../../../side-dialog-OPXvmRDA.cjs');
16
15
  const textAndIcon = require('../../../text-and-icon-BJ5wgYf5.cjs');
17
16
  const Txt = require('../../../Txt-DXjXpX9r.cjs');
18
17
  const toast = require('../../../toast-C8a7bWV8.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"save-as-dataset-item-dialog.cjs.js","sources":["../../../../src/domains/datasets/components/save-as-dataset-item-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { DatasetItemToolMock, AddDatasetItemParams } from '@mastra/client-js';\nimport { useDatasetMutations, useDatasets } from '@mastra/react/hooks/datasets';\nimport { DatabaseIcon, Check, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { SideDialog } from '@/ds/components/SideDialog';\nimport type { SideDialogRootProps } from '@/ds/components/SideDialog';\nimport { TextAndIcon } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { toast } from '@/utils/toast';\n\nexport type SaveAsDatasetItemDialogProps = {\n initialInput: string;\n initialGroundTruth: string;\n /** JSON string of the expected trajectory */\n initialTrajectory?: string;\n /** Whether the trajectory is still being fetched */\n trajectoryLoading?: boolean;\n /** JSON string of the tool mocks (array of { toolName, args, output }) */\n initialToolMocks?: string;\n breadcrumb: ReactNode;\n isOpen: boolean;\n onClose: () => void;\n level?: SideDialogRootProps['level'];\n source?: {\n type: 'csv' | 'json' | 'trace' | 'llm' | 'experiment-result' | 'candidate-screener';\n referenceId?: string;\n };\n};\n\nexport function SaveAsDatasetItemDialog({\n initialInput,\n initialGroundTruth,\n initialTrajectory,\n trajectoryLoading,\n initialToolMocks,\n breadcrumb,\n isOpen,\n onClose,\n level = 2,\n source,\n}: SaveAsDatasetItemDialogProps) {\n const [selectedDatasetId, setSelectedDatasetId] = useState<string>('');\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [expectedTrajectory, setExpectedTrajectory] = useState('');\n const [toolMocks, setToolMocks] = useState('');\n // source is passed through — not editable in the UI\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n\n const datasets = data?.datasets ?? [];\n\n const prevOpenRef = useRef(false);\n const trajectorySeededRef = useRef(false);\n const inputSeededRef = useRef(false);\n const groundTruthSeededRef = useRef(false);\n useEffect(() => {\n if (isOpen && !prevOpenRef.current) {\n setInput(initialInput);\n setGroundTruth(initialGroundTruth);\n setExpectedTrajectory(initialTrajectory ?? '');\n setToolMocks(initialToolMocks ?? '');\n trajectorySeededRef.current = !!initialTrajectory;\n inputSeededRef.current = initialInput !== '{}';\n groundTruthSeededRef.current = !!initialGroundTruth;\n }\n prevOpenRef.current = isOpen;\n if (!isOpen) {\n trajectorySeededRef.current = false;\n inputSeededRef.current = false;\n groundTruthSeededRef.current = false;\n }\n }, [isOpen, initialInput, initialGroundTruth, initialTrajectory, initialToolMocks]);\n\n // Mark fields as user-edited so async seeding won't overwrite them.\n const handleInputChange = (value: string) => {\n inputSeededRef.current = true;\n setInput(value);\n };\n\n const handleGroundTruthChange = (value: string) => {\n groundTruthSeededRef.current = true;\n setGroundTruth(value);\n };\n\n const handleExpectedTrajectoryChange = (value: string) => {\n trajectorySeededRef.current = true;\n setExpectedTrajectory(value);\n };\n\n const handleToolMocksChange = (value: string) => {\n setToolMocks(value);\n };\n\n // Seed input when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialInput !== '{}' && !inputSeededRef.current) {\n setInput(initialInput);\n inputSeededRef.current = true;\n }\n }, [isOpen, initialInput]);\n\n // Seed groundTruth when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialGroundTruth && !groundTruthSeededRef.current) {\n setGroundTruth(initialGroundTruth);\n groundTruthSeededRef.current = true;\n }\n }, [isOpen, initialGroundTruth]);\n\n // Seed trajectory when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialTrajectory && !trajectorySeededRef.current) {\n setExpectedTrajectory(initialTrajectory);\n trajectorySeededRef.current = true;\n }\n }, [isOpen, initialTrajectory]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n let parsedTrajectory: AddDatasetItemParams['expectedTrajectory'];\n if (expectedTrajectory.trim()) {\n try {\n parsedTrajectory = JSON.parse(expectedTrajectory);\n } catch {\n toast.error('Expected Trajectory must be valid JSON');\n return;\n }\n }\n\n let parsedToolMocks: DatasetItemToolMock[] | undefined;\n if (toolMocks.trim()) {\n try {\n const parsed = JSON.parse(toolMocks);\n if (!Array.isArray(parsed)) {\n toast.error('Tool Mocks must be a JSON array');\n return;\n }\n parsedToolMocks = parsed as DatasetItemToolMock[];\n } catch {\n toast.error('Tool Mocks must be valid JSON');\n return;\n }\n }\n\n try {\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n expectedTrajectory: parsedTrajectory,\n toolMocks: parsedToolMocks,\n ...(source ? { source } : {}),\n });\n\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n\n setSelectedDatasetId('');\n setInput('{}');\n setGroundTruth('');\n setExpectedTrajectory('');\n setToolMocks('');\n onClose();\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n };\n\n const handleCancel = () => {\n setSelectedDatasetId('');\n onClose();\n };\n\n return (\n <SideDialog\n dialogTitle=\"Save as Dataset Item\"\n dialogDescription=\"Save data as a dataset item\"\n isOpen={isOpen}\n onClose={onClose}\n level={level}\n >\n <SideDialog.Top>\n {breadcrumb}›\n <TextAndIcon>\n <DatabaseIcon /> Save as Dataset Item\n </TextAndIcon>\n </SideDialog.Top>\n\n <SideDialog.Content>\n <SideDialog.Header>\n <SideDialog.Heading>\n <DatabaseIcon /> Save as Dataset Item\n </SideDialog.Heading>\n </SideDialog.Header>\n\n <Form onSubmit={handleSubmit}>\n <Field>\n <FieldLabel required>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading datasets...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel required>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={handleInputChange} showCopyButton={false} className=\"min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={handleGroundTruthChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Expected Trajectory (JSON, optional)</FieldLabel>\n <CodeEditor\n value={expectedTrajectory}\n onChange={handleExpectedTrajectoryChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Tool Mocks (JSON, optional)</FieldLabel>\n <CodeEditor\n value={toolMocks}\n onChange={handleToolMocksChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button icon={<X />} type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n icon={<Check />}\n type=\"submit\"\n variant=\"default\"\n disabled={addItem.isPending || trajectoryLoading || !selectedDatasetId || datasets.length === 0}\n >\n {addItem.isPending ? 'Saving...' : trajectoryLoading ? 'Loading...' : 'Save Item'}\n </Button>\n </div>\n </Form>\n </SideDialog.Content>\n </SideDialog>\n );\n}\n"],"names":["useState","useDatasets","useDatasetMutations","datasets","useRef","useEffect","toast","jsxs","SideDialog","TextAndIcon","jsx","DatabaseIcon","Form","Field","FieldLabel","Select","SelectTrigger","SelectValue","SelectContent","Txt","SelectItem","CodeEditor","Button","X","Check"],"mappings":"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"}
1
+ {"version":3,"file":"save-as-dataset-item-dialog.cjs.js","sources":["../../../../src/domains/datasets/components/save-as-dataset-item-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { DatasetItemToolMock, AddDatasetItemParams } from '@mastra/client-js';\nimport { useDatasetMutations, useDatasets } from '@mastra/react/hooks/datasets';\nimport { DatabaseIcon, Check, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { SideDialog } from '@/ds/components/SideDialog';\nimport type { SideDialogRootProps } from '@/ds/components/SideDialog';\nimport { TextAndIcon } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { toast } from '@/utils/toast';\n\nexport type SaveAsDatasetItemDialogProps = {\n initialInput: string;\n initialGroundTruth: string;\n /** JSON string of the expected trajectory */\n initialTrajectory?: string;\n /** Whether the trajectory is still being fetched */\n trajectoryLoading?: boolean;\n /** JSON string of the tool mocks (array of { toolName, args, output }) */\n initialToolMocks?: string;\n breadcrumb: ReactNode;\n isOpen: boolean;\n onClose: () => void;\n level?: SideDialogRootProps['level'];\n source?: {\n type: 'csv' | 'json' | 'trace' | 'llm' | 'experiment-result' | 'candidate-screener';\n referenceId?: string;\n };\n};\n\nexport function SaveAsDatasetItemDialog({\n initialInput,\n initialGroundTruth,\n initialTrajectory,\n trajectoryLoading,\n initialToolMocks,\n breadcrumb,\n isOpen,\n onClose,\n level = 2,\n source,\n}: SaveAsDatasetItemDialogProps) {\n const [selectedDatasetId, setSelectedDatasetId] = useState<string>('');\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [expectedTrajectory, setExpectedTrajectory] = useState('');\n const [toolMocks, setToolMocks] = useState('');\n // source is passed through — not editable in the UI\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n\n const datasets = data?.datasets ?? [];\n\n const prevOpenRef = useRef(false);\n const trajectorySeededRef = useRef(false);\n const inputSeededRef = useRef(false);\n const groundTruthSeededRef = useRef(false);\n useEffect(() => {\n if (isOpen && !prevOpenRef.current) {\n setInput(initialInput);\n setGroundTruth(initialGroundTruth);\n setExpectedTrajectory(initialTrajectory ?? '');\n setToolMocks(initialToolMocks ?? '');\n trajectorySeededRef.current = !!initialTrajectory;\n inputSeededRef.current = initialInput !== '{}';\n groundTruthSeededRef.current = !!initialGroundTruth;\n }\n prevOpenRef.current = isOpen;\n if (!isOpen) {\n trajectorySeededRef.current = false;\n inputSeededRef.current = false;\n groundTruthSeededRef.current = false;\n }\n }, [isOpen, initialInput, initialGroundTruth, initialTrajectory, initialToolMocks]);\n\n // Mark fields as user-edited so async seeding won't overwrite them.\n const handleInputChange = (value: string) => {\n inputSeededRef.current = true;\n setInput(value);\n };\n\n const handleGroundTruthChange = (value: string) => {\n groundTruthSeededRef.current = true;\n setGroundTruth(value);\n };\n\n const handleExpectedTrajectoryChange = (value: string) => {\n trajectorySeededRef.current = true;\n setExpectedTrajectory(value);\n };\n\n const handleToolMocksChange = (value: string) => {\n setToolMocks(value);\n };\n\n // Seed input when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialInput !== '{}' && !inputSeededRef.current) {\n setInput(initialInput);\n inputSeededRef.current = true;\n }\n }, [isOpen, initialInput]);\n\n // Seed groundTruth when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialGroundTruth && !groundTruthSeededRef.current) {\n setGroundTruth(initialGroundTruth);\n groundTruthSeededRef.current = true;\n }\n }, [isOpen, initialGroundTruth]);\n\n // Seed trajectory when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialTrajectory && !trajectorySeededRef.current) {\n setExpectedTrajectory(initialTrajectory);\n trajectorySeededRef.current = true;\n }\n }, [isOpen, initialTrajectory]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n let parsedTrajectory: AddDatasetItemParams['expectedTrajectory'];\n if (expectedTrajectory.trim()) {\n try {\n parsedTrajectory = JSON.parse(expectedTrajectory);\n } catch {\n toast.error('Expected Trajectory must be valid JSON');\n return;\n }\n }\n\n let parsedToolMocks: DatasetItemToolMock[] | undefined;\n if (toolMocks.trim()) {\n try {\n const parsed = JSON.parse(toolMocks);\n if (!Array.isArray(parsed)) {\n toast.error('Tool Mocks must be a JSON array');\n return;\n }\n parsedToolMocks = parsed as DatasetItemToolMock[];\n } catch {\n toast.error('Tool Mocks must be valid JSON');\n return;\n }\n }\n\n try {\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n expectedTrajectory: parsedTrajectory,\n toolMocks: parsedToolMocks,\n ...(source ? { source } : {}),\n });\n\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n\n setSelectedDatasetId('');\n setInput('{}');\n setGroundTruth('');\n setExpectedTrajectory('');\n setToolMocks('');\n onClose();\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n };\n\n const handleCancel = () => {\n setSelectedDatasetId('');\n onClose();\n };\n\n return (\n <SideDialog\n dialogTitle=\"Save as Dataset Item\"\n dialogDescription=\"Save data as a dataset item\"\n isOpen={isOpen}\n onClose={onClose}\n level={level}\n >\n <SideDialog.Top>\n {breadcrumb}›\n <TextAndIcon>\n <DatabaseIcon /> Save as Dataset Item\n </TextAndIcon>\n </SideDialog.Top>\n\n <SideDialog.Content>\n <SideDialog.Header>\n <SideDialog.Heading>\n <DatabaseIcon /> Save as Dataset Item\n </SideDialog.Heading>\n </SideDialog.Header>\n\n <Form onSubmit={handleSubmit}>\n <Field>\n <FieldLabel required>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading datasets...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel required>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={handleInputChange} showCopyButton={false} className=\"min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={handleGroundTruthChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Expected Trajectory (JSON, optional)</FieldLabel>\n <CodeEditor\n value={expectedTrajectory}\n onChange={handleExpectedTrajectoryChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Tool Mocks (JSON, optional)</FieldLabel>\n <CodeEditor\n value={toolMocks}\n onChange={handleToolMocksChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button icon={<X />} type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n icon={<Check />}\n type=\"submit\"\n variant=\"default\"\n disabled={addItem.isPending || trajectoryLoading || !selectedDatasetId || datasets.length === 0}\n >\n {addItem.isPending ? 'Saving...' : trajectoryLoading ? 'Loading...' : 'Save Item'}\n </Button>\n </div>\n </Form>\n </SideDialog.Content>\n </SideDialog>\n );\n}\n"],"names":["useState","useDatasets","useDatasetMutations","datasets","useRef","useEffect","toast","jsxs","SideDialog","TextAndIcon","jsx","DatabaseIcon","Form","Field","FieldLabel","Select","SelectTrigger","SelectValue","SelectContent","Txt","SelectItem","CodeEditor","Button","X","Check"],"mappings":";;;;;;;;;;;;;;;;;;AAqCO,SAAS,uBAAA,CAAwB;AAAA,EACtC,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAiB,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAG7C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,iBAAA,KAAsBC,oBAAA,EAAY;AAC3D,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,4BAAA,EAAoB;AAExC,EAAA,MAAMC,UAAA,GAAW,IAAA,EAAM,QAAA,IAAY,EAAC;AAEpC,EAAA,MAAM,WAAA,GAAcC,aAAO,KAAK,CAAA;AAChC,EAAA,MAAM,mBAAA,GAAsBA,aAAO,KAAK,CAAA;AACxC,EAAA,MAAM,cAAA,GAAiBA,aAAO,KAAK,CAAA;AACnC,EAAA,MAAM,oBAAA,GAAuBA,aAAO,KAAK,CAAA;AACzC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,CAAC,WAAA,CAAY,OAAA,EAAS;AAClC,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAA,cAAA,CAAe,kBAAkB,CAAA;AACjC,MAAA,qBAAA,CAAsB,qBAAqB,EAAE,CAAA;AAC7C,MAAA,YAAA,CAAa,oBAAoB,EAAE,CAAA;AACnC,MAAA,mBAAA,CAAoB,OAAA,GAAU,CAAC,CAAC,iBAAA;AAChC,MAAA,cAAA,CAAe,UAAU,YAAA,KAAiB,IAAA;AAC1C,MAAA,oBAAA,CAAqB,OAAA,GAAU,CAAC,CAAC,kBAAA;AAAA,IACnC;AACA,IAAA,WAAA,CAAY,OAAA,GAAU,MAAA;AACtB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAC9B,MAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,MAAA,oBAAA,CAAqB,OAAA,GAAU,KAAA;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,cAAc,kBAAA,EAAoB,iBAAA,EAAmB,gBAAgB,CAAC,CAAA;AAGlF,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAkB;AAC3C,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,uBAAA,GAA0B,CAAC,KAAA,KAAkB;AACjD,IAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAC/B,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,8BAAA,GAAiC,CAAC,KAAA,KAAkB;AACxD,IAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAC9B,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAkB;AAC/C,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAGA,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,YAAA,KAAiB,IAAA,IAAQ,CAAC,eAAe,OAAA,EAAS;AAC9D,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAGzB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,kBAAA,IAAsB,CAAC,oBAAA,CAAqB,OAAA,EAAS;AACjE,MAAA,cAAA,CAAe,kBAAkB,CAAA;AACjC,MAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,kBAAkB,CAAC,CAAA;AAG/B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,iBAAA,IAAqB,CAAC,mBAAA,CAAoB,OAAA,EAAS;AAC/D,MAAA,qBAAA,CAAsB,iBAAiB,CAAA;AACvC,MAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAE9B,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,KAAuB;AACjD,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAAC,WAAA,CAAM,MAAM,yBAAyB,CAAA;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AACF,MAAA,WAAA,GAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAAA,WAAA,CAAM,MAAM,0BAA0B,CAAA;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,WAAA,CAAY,MAAK,EAAG;AACtB,MAAA,IAAI;AACF,QAAA,iBAAA,GAAoB,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,MAC5C,CAAA,CAAA,MAAQ;AACN,QAAAA,WAAA,CAAM,MAAM,iCAAiC,CAAA;AAC7C,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI,kBAAA,CAAmB,MAAK,EAAG;AAC7B,MAAA,IAAI;AACF,QAAA,gBAAA,GAAmB,IAAA,CAAK,MAAM,kBAAkB,CAAA;AAAA,MAClD,CAAA,CAAA,MAAQ;AACN,QAAAA,WAAA,CAAM,MAAM,wCAAwC,CAAA;AACpD,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,SAAA,CAAU,MAAK,EAAG;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACnC,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,UAAAA,WAAA,CAAM,MAAM,iCAAiC,CAAA;AAC7C,UAAA;AAAA,QACF;AACA,QAAA,eAAA,GAAkB,MAAA;AAAA,MACpB,CAAA,CAAA,MAAQ;AACN,QAAAA,WAAA,CAAM,MAAM,+BAA+B,CAAA;AAC3C,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,WAAA,CAAY;AAAA,QACxB,SAAA,EAAW,iBAAA;AAAA,QACX,KAAA,EAAO,WAAA;AAAA,QACP,WAAA,EAAa,iBAAA;AAAA,QACb,kBAAA,EAAoB,gBAAA;AAAA,QACpB,SAAA,EAAW,eAAA;AAAA,QACX,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,OAC5B,CAAA;AAED,MAAA,MAAM,gBAAgBH,UAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,iBAAiB,CAAA;AACnE,MAAAG,WAAA,CAAM,OAAA,CAAQ,CAAA,eAAA,EAAkB,aAAA,EAAe,IAAI,CAAA,CAAA,CAAG,CAAA;AAEtD,MAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,qBAAA,CAAsB,EAAE,CAAA;AACxB,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,KAAA,EAAO;AACd,MAAAA,WAAA,CAAM,MAAM,CAAA,qBAAA,EAAwB,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAA;AAAA,IAChG;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACEC,eAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAY,sBAAA;AAAA,MACZ,iBAAA,EAAkB,6BAAA;AAAA,MAClB,MAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAACC,qBAAA,CAAW,KAAX,EACE,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,UAAW,GAAA;AAAA,0CACXC,uBAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAACC,wBAAA,EAAA,EAAa,CAAA;AAAA,YAAE;AAAA,WAAA,EAClB;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAJ,eAAA,CAACC,qBAAA,CAAW,OAAA,EAAX,EACC,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAACF,sBAAW,MAAA,EAAX,EACC,QAAA,kBAAAD,eAAA,CAACC,qBAAA,CAAW,SAAX,EACC,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAACC,wBAAA,EAAA,EAAa,CAAA;AAAA,YAAE;AAAA,WAAA,EAClB,CAAA,EACF,CAAA;AAAA,0BAEAJ,eAAA,CAACK,SAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EACd,QAAA,EAAA;AAAA,4BAAAL,eAAA,CAACM,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,gBAAA,EAAA,EAAW,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,8BAC5BP,eAAA;AAAA,gBAACQ,aAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,iBAAA;AAAA,kBACP,aAAA,EAAe,oBAAA;AAAA,kBACf,QAAA,EAAU,QAAQ,SAAA,IAAa,iBAAA;AAAA,kBAE/B,QAAA,EAAA;AAAA,oCAAAL,cAAA,CAACM,wBACC,QAAA,kBAAAN,cAAA,CAACO,kBAAA,EAAA,EAAY,aAAa,iBAAA,GAAoB,qBAAA,GAAwB,oBAAoB,CAAA,EAC5F,CAAA;AAAA,oCACAP,cAAA,CAACQ,oBAAA,EAAA,EACE,QAAA,EAAAf,UAAA,CAAS,MAAA,KAAW,CAAA,mBACnBO,cAAA,CAACS,OAAA,EAAA,EAAI,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,SAAQ,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,uBAAA,EAE1E,CAAA,GAEAhB,UAAA,CAAS,GAAA,CAAI,CAAA,OAAA,qBACXO,cAAA,CAACU,iBAAA,EAAA,EAA4B,KAAA,EAAO,OAAA,CAAQ,EAAA,EACzC,QAAA,EAAA,OAAA,CAAQ,IAAA,EAAA,EADM,OAAA,CAAQ,EAEzB,CACD,CAAA,EAEL;AAAA;AAAA;AAAA;AACF,aAAA,EACF,CAAA;AAAA,4CAECP,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,gBAAA,EAAA,EAAW,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,8BACjCJ,cAAA,CAACW,yBAAW,KAAA,EAAO,KAAA,EAAO,UAAU,iBAAA,EAAmB,cAAA,EAAgB,KAAA,EAAO,SAAA,EAAU,UAAA,EAAW;AAAA,aAAA,EACrG,CAAA;AAAA,4CAECR,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,oBAAW,QAAA,EAAA,+BAAA,EAA6B,CAAA;AAAA,8BACzCJ,cAAA;AAAA,gBAACW,qBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,WAAA;AAAA,kBACP,QAAA,EAAU,uBAAA;AAAA,kBACV,cAAA,EAAgB,KAAA;AAAA,kBAChB,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA;AAAA,4CAECR,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,oBAAW,QAAA,EAAA,sCAAA,EAAoC,CAAA;AAAA,8BAChDJ,cAAA;AAAA,gBAACW,qBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,kBAAA;AAAA,kBACP,QAAA,EAAU,8BAAA;AAAA,kBACV,cAAA,EAAgB,KAAA;AAAA,kBAChB,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA;AAAA,4CAECR,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,oBAAW,QAAA,EAAA,6BAAA,EAA2B,CAAA;AAAA,8BACvCJ,cAAA;AAAA,gBAACW,qBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,SAAA;AAAA,kBACP,QAAA,EAAU,qBAAA;AAAA,kBACV,cAAA,EAAgB,KAAA;AAAA,kBAChB,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA;AAAA,4BAEAd,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,8BAAAG,cAAA,CAACY,aAAA,EAAA,EAAO,sBAAMZ,cAAA,CAACa,aAAA,EAAA,EAAE,GAAI,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,YAAA,EAAc,QAAA,EAAA,QAAA,EAE1D,CAAA;AAAA,8BACAb,cAAA;AAAA,gBAACY,aAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,iCAAOE,iBAAA,EAAA,EAAM,CAAA;AAAA,kBACb,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAQ,SAAA;AAAA,kBACR,UAAU,OAAA,CAAQ,SAAA,IAAa,qBAAqB,CAAC,iBAAA,IAAqBrB,WAAS,MAAA,KAAW,CAAA;AAAA,kBAE7F,QAAA,EAAA,OAAA,CAAQ,SAAA,GAAY,WAAA,GAAc,iBAAA,GAAoB,YAAA,GAAe;AAAA;AAAA;AACxE,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -3,12 +3,11 @@ import { useDatasets, useDatasetMutations } from '@mastra/react/hooks/datasets';
3
3
  import { DatabaseIcon, X, Check } from 'lucide-react';
4
4
  import { useState, useRef, useEffect } from 'react';
5
5
  import { B as Button } from '../../../Button-C8QDEN9j.js';
6
- import { C as CodeEditor } from '../../../code-editor-D69saH4C.js';
7
- import { F as Field, e as FieldLabel } from '../../../field-B89BEZg4.js';
8
- import '../../../field-control-aria-DB6y41tQ.js';
6
+ import { C as CodeEditor } from '../../../code-editor-DgfDaPAD.js';
7
+ import { F as Field, e as FieldLabel } from '../../../field-Bc8Ewf_M.js';
9
8
  import { F as Form } from '../../../form-CDRsQaFS.js';
10
- import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from '../../../select-N2lgBRsg.js';
11
- import { S as SideDialog } from '../../../side-dialog-BIyr498B.js';
9
+ import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from '../../../select-BGAiIHnS.js';
10
+ import { S as SideDialog } from '../../../side-dialog-CB_wrLtE.js';
12
11
  import { T as TextAndIcon } from '../../../text-and-icon-CGupOpWs.js';
13
12
  import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
14
13
  import { t as toast } from '../../../toast-WCmYXnuT.js';
@@ -1 +1 @@
1
- {"version":3,"file":"save-as-dataset-item-dialog.es.js","sources":["../../../../src/domains/datasets/components/save-as-dataset-item-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { DatasetItemToolMock, AddDatasetItemParams } from '@mastra/client-js';\nimport { useDatasetMutations, useDatasets } from '@mastra/react/hooks/datasets';\nimport { DatabaseIcon, Check, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { SideDialog } from '@/ds/components/SideDialog';\nimport type { SideDialogRootProps } from '@/ds/components/SideDialog';\nimport { TextAndIcon } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { toast } from '@/utils/toast';\n\nexport type SaveAsDatasetItemDialogProps = {\n initialInput: string;\n initialGroundTruth: string;\n /** JSON string of the expected trajectory */\n initialTrajectory?: string;\n /** Whether the trajectory is still being fetched */\n trajectoryLoading?: boolean;\n /** JSON string of the tool mocks (array of { toolName, args, output }) */\n initialToolMocks?: string;\n breadcrumb: ReactNode;\n isOpen: boolean;\n onClose: () => void;\n level?: SideDialogRootProps['level'];\n source?: {\n type: 'csv' | 'json' | 'trace' | 'llm' | 'experiment-result' | 'candidate-screener';\n referenceId?: string;\n };\n};\n\nexport function SaveAsDatasetItemDialog({\n initialInput,\n initialGroundTruth,\n initialTrajectory,\n trajectoryLoading,\n initialToolMocks,\n breadcrumb,\n isOpen,\n onClose,\n level = 2,\n source,\n}: SaveAsDatasetItemDialogProps) {\n const [selectedDatasetId, setSelectedDatasetId] = useState<string>('');\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [expectedTrajectory, setExpectedTrajectory] = useState('');\n const [toolMocks, setToolMocks] = useState('');\n // source is passed through — not editable in the UI\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n\n const datasets = data?.datasets ?? [];\n\n const prevOpenRef = useRef(false);\n const trajectorySeededRef = useRef(false);\n const inputSeededRef = useRef(false);\n const groundTruthSeededRef = useRef(false);\n useEffect(() => {\n if (isOpen && !prevOpenRef.current) {\n setInput(initialInput);\n setGroundTruth(initialGroundTruth);\n setExpectedTrajectory(initialTrajectory ?? '');\n setToolMocks(initialToolMocks ?? '');\n trajectorySeededRef.current = !!initialTrajectory;\n inputSeededRef.current = initialInput !== '{}';\n groundTruthSeededRef.current = !!initialGroundTruth;\n }\n prevOpenRef.current = isOpen;\n if (!isOpen) {\n trajectorySeededRef.current = false;\n inputSeededRef.current = false;\n groundTruthSeededRef.current = false;\n }\n }, [isOpen, initialInput, initialGroundTruth, initialTrajectory, initialToolMocks]);\n\n // Mark fields as user-edited so async seeding won't overwrite them.\n const handleInputChange = (value: string) => {\n inputSeededRef.current = true;\n setInput(value);\n };\n\n const handleGroundTruthChange = (value: string) => {\n groundTruthSeededRef.current = true;\n setGroundTruth(value);\n };\n\n const handleExpectedTrajectoryChange = (value: string) => {\n trajectorySeededRef.current = true;\n setExpectedTrajectory(value);\n };\n\n const handleToolMocksChange = (value: string) => {\n setToolMocks(value);\n };\n\n // Seed input when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialInput !== '{}' && !inputSeededRef.current) {\n setInput(initialInput);\n inputSeededRef.current = true;\n }\n }, [isOpen, initialInput]);\n\n // Seed groundTruth when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialGroundTruth && !groundTruthSeededRef.current) {\n setGroundTruth(initialGroundTruth);\n groundTruthSeededRef.current = true;\n }\n }, [isOpen, initialGroundTruth]);\n\n // Seed trajectory when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialTrajectory && !trajectorySeededRef.current) {\n setExpectedTrajectory(initialTrajectory);\n trajectorySeededRef.current = true;\n }\n }, [isOpen, initialTrajectory]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n let parsedTrajectory: AddDatasetItemParams['expectedTrajectory'];\n if (expectedTrajectory.trim()) {\n try {\n parsedTrajectory = JSON.parse(expectedTrajectory);\n } catch {\n toast.error('Expected Trajectory must be valid JSON');\n return;\n }\n }\n\n let parsedToolMocks: DatasetItemToolMock[] | undefined;\n if (toolMocks.trim()) {\n try {\n const parsed = JSON.parse(toolMocks);\n if (!Array.isArray(parsed)) {\n toast.error('Tool Mocks must be a JSON array');\n return;\n }\n parsedToolMocks = parsed as DatasetItemToolMock[];\n } catch {\n toast.error('Tool Mocks must be valid JSON');\n return;\n }\n }\n\n try {\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n expectedTrajectory: parsedTrajectory,\n toolMocks: parsedToolMocks,\n ...(source ? { source } : {}),\n });\n\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n\n setSelectedDatasetId('');\n setInput('{}');\n setGroundTruth('');\n setExpectedTrajectory('');\n setToolMocks('');\n onClose();\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n };\n\n const handleCancel = () => {\n setSelectedDatasetId('');\n onClose();\n };\n\n return (\n <SideDialog\n dialogTitle=\"Save as Dataset Item\"\n dialogDescription=\"Save data as a dataset item\"\n isOpen={isOpen}\n onClose={onClose}\n level={level}\n >\n <SideDialog.Top>\n {breadcrumb}›\n <TextAndIcon>\n <DatabaseIcon /> Save as Dataset Item\n </TextAndIcon>\n </SideDialog.Top>\n\n <SideDialog.Content>\n <SideDialog.Header>\n <SideDialog.Heading>\n <DatabaseIcon /> Save as Dataset Item\n </SideDialog.Heading>\n </SideDialog.Header>\n\n <Form onSubmit={handleSubmit}>\n <Field>\n <FieldLabel required>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading datasets...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel required>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={handleInputChange} showCopyButton={false} className=\"min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={handleGroundTruthChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Expected Trajectory (JSON, optional)</FieldLabel>\n <CodeEditor\n value={expectedTrajectory}\n onChange={handleExpectedTrajectoryChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Tool Mocks (JSON, optional)</FieldLabel>\n <CodeEditor\n value={toolMocks}\n onChange={handleToolMocksChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button icon={<X />} type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n icon={<Check />}\n type=\"submit\"\n variant=\"default\"\n disabled={addItem.isPending || trajectoryLoading || !selectedDatasetId || datasets.length === 0}\n >\n {addItem.isPending ? 'Saving...' : trajectoryLoading ? 'Loading...' : 'Save Item'}\n </Button>\n </div>\n </Form>\n </SideDialog.Content>\n </SideDialog>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save-as-dataset-item-dialog.es.js","sources":["../../../../src/domains/datasets/components/save-as-dataset-item-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { DatasetItemToolMock, AddDatasetItemParams } from '@mastra/client-js';\nimport { useDatasetMutations, useDatasets } from '@mastra/react/hooks/datasets';\nimport { DatabaseIcon, Check, X } from 'lucide-react';\nimport { useState, useEffect, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { SideDialog } from '@/ds/components/SideDialog';\nimport type { SideDialogRootProps } from '@/ds/components/SideDialog';\nimport { TextAndIcon } from '@/ds/components/Text';\nimport { Txt } from '@/ds/components/Txt';\nimport { toast } from '@/utils/toast';\n\nexport type SaveAsDatasetItemDialogProps = {\n initialInput: string;\n initialGroundTruth: string;\n /** JSON string of the expected trajectory */\n initialTrajectory?: string;\n /** Whether the trajectory is still being fetched */\n trajectoryLoading?: boolean;\n /** JSON string of the tool mocks (array of { toolName, args, output }) */\n initialToolMocks?: string;\n breadcrumb: ReactNode;\n isOpen: boolean;\n onClose: () => void;\n level?: SideDialogRootProps['level'];\n source?: {\n type: 'csv' | 'json' | 'trace' | 'llm' | 'experiment-result' | 'candidate-screener';\n referenceId?: string;\n };\n};\n\nexport function SaveAsDatasetItemDialog({\n initialInput,\n initialGroundTruth,\n initialTrajectory,\n trajectoryLoading,\n initialToolMocks,\n breadcrumb,\n isOpen,\n onClose,\n level = 2,\n source,\n}: SaveAsDatasetItemDialogProps) {\n const [selectedDatasetId, setSelectedDatasetId] = useState<string>('');\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [expectedTrajectory, setExpectedTrajectory] = useState('');\n const [toolMocks, setToolMocks] = useState('');\n // source is passed through — not editable in the UI\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n\n const datasets = data?.datasets ?? [];\n\n const prevOpenRef = useRef(false);\n const trajectorySeededRef = useRef(false);\n const inputSeededRef = useRef(false);\n const groundTruthSeededRef = useRef(false);\n useEffect(() => {\n if (isOpen && !prevOpenRef.current) {\n setInput(initialInput);\n setGroundTruth(initialGroundTruth);\n setExpectedTrajectory(initialTrajectory ?? '');\n setToolMocks(initialToolMocks ?? '');\n trajectorySeededRef.current = !!initialTrajectory;\n inputSeededRef.current = initialInput !== '{}';\n groundTruthSeededRef.current = !!initialGroundTruth;\n }\n prevOpenRef.current = isOpen;\n if (!isOpen) {\n trajectorySeededRef.current = false;\n inputSeededRef.current = false;\n groundTruthSeededRef.current = false;\n }\n }, [isOpen, initialInput, initialGroundTruth, initialTrajectory, initialToolMocks]);\n\n // Mark fields as user-edited so async seeding won't overwrite them.\n const handleInputChange = (value: string) => {\n inputSeededRef.current = true;\n setInput(value);\n };\n\n const handleGroundTruthChange = (value: string) => {\n groundTruthSeededRef.current = true;\n setGroundTruth(value);\n };\n\n const handleExpectedTrajectoryChange = (value: string) => {\n trajectorySeededRef.current = true;\n setExpectedTrajectory(value);\n };\n\n const handleToolMocksChange = (value: string) => {\n setToolMocks(value);\n };\n\n // Seed input when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialInput !== '{}' && !inputSeededRef.current) {\n setInput(initialInput);\n inputSeededRef.current = true;\n }\n }, [isOpen, initialInput]);\n\n // Seed groundTruth when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialGroundTruth && !groundTruthSeededRef.current) {\n setGroundTruth(initialGroundTruth);\n groundTruthSeededRef.current = true;\n }\n }, [isOpen, initialGroundTruth]);\n\n // Seed trajectory when it arrives asynchronously after the dialog is already open\n useEffect(() => {\n if (isOpen && initialTrajectory && !trajectorySeededRef.current) {\n setExpectedTrajectory(initialTrajectory);\n trajectorySeededRef.current = true;\n }\n }, [isOpen, initialTrajectory]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n let parsedTrajectory: AddDatasetItemParams['expectedTrajectory'];\n if (expectedTrajectory.trim()) {\n try {\n parsedTrajectory = JSON.parse(expectedTrajectory);\n } catch {\n toast.error('Expected Trajectory must be valid JSON');\n return;\n }\n }\n\n let parsedToolMocks: DatasetItemToolMock[] | undefined;\n if (toolMocks.trim()) {\n try {\n const parsed = JSON.parse(toolMocks);\n if (!Array.isArray(parsed)) {\n toast.error('Tool Mocks must be a JSON array');\n return;\n }\n parsedToolMocks = parsed as DatasetItemToolMock[];\n } catch {\n toast.error('Tool Mocks must be valid JSON');\n return;\n }\n }\n\n try {\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n expectedTrajectory: parsedTrajectory,\n toolMocks: parsedToolMocks,\n ...(source ? { source } : {}),\n });\n\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n\n setSelectedDatasetId('');\n setInput('{}');\n setGroundTruth('');\n setExpectedTrajectory('');\n setToolMocks('');\n onClose();\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n };\n\n const handleCancel = () => {\n setSelectedDatasetId('');\n onClose();\n };\n\n return (\n <SideDialog\n dialogTitle=\"Save as Dataset Item\"\n dialogDescription=\"Save data as a dataset item\"\n isOpen={isOpen}\n onClose={onClose}\n level={level}\n >\n <SideDialog.Top>\n {breadcrumb}›\n <TextAndIcon>\n <DatabaseIcon /> Save as Dataset Item\n </TextAndIcon>\n </SideDialog.Top>\n\n <SideDialog.Content>\n <SideDialog.Header>\n <SideDialog.Heading>\n <DatabaseIcon /> Save as Dataset Item\n </SideDialog.Heading>\n </SideDialog.Header>\n\n <Form onSubmit={handleSubmit}>\n <Field>\n <FieldLabel required>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading datasets...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel required>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={handleInputChange} showCopyButton={false} className=\"min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={handleGroundTruthChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Expected Trajectory (JSON, optional)</FieldLabel>\n <CodeEditor\n value={expectedTrajectory}\n onChange={handleExpectedTrajectoryChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <Field>\n <FieldLabel>Tool Mocks (JSON, optional)</FieldLabel>\n <CodeEditor\n value={toolMocks}\n onChange={handleToolMocksChange}\n showCopyButton={false}\n className=\"min-h-20\"\n />\n </Field>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button icon={<X />} type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n icon={<Check />}\n type=\"submit\"\n variant=\"default\"\n disabled={addItem.isPending || trajectoryLoading || !selectedDatasetId || datasets.length === 0}\n >\n {addItem.isPending ? 'Saving...' : trajectoryLoading ? 'Loading...' : 'Save Item'}\n </Button>\n </div>\n </Form>\n </SideDialog.Content>\n </SideDialog>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ const Button = require('../../../Button-BfZzgZrA.cjs');
9
9
  const buttonsGroup = require('../../../buttons-group-C2lPe7sm.cjs');
10
10
  const copyButton = require('../../../copy-button-CUVxXN4H.cjs');
11
11
  const dataKeysAndValues = require('../../../data-keys-and-values-C1I--hWn.cjs');
12
- const dataPanel = require('../../../data-panel-BdeebdMA.cjs');
12
+ const dataPanel = require('../../../data-panel-Dhg7s3fD.cjs');
13
13
  const Txt = require('../../../Txt-DXjXpX9r.cjs');
14
14
  const utils_dateFormat = require('../../../utils/date-format.cjs.js');
15
15
 
@@ -5,7 +5,7 @@ import { B as Button } from '../../../Button-C8QDEN9j.js';
5
5
  import { B as ButtonsGroup } from '../../../buttons-group-BU9ErJSH.js';
6
6
  import { C as CopyButton } from '../../../copy-button-CDyuUYUr.js';
7
7
  import { D as DataKeysAndValues } from '../../../data-keys-and-values-B1u00ihh.js';
8
- import { D as DataPanel } from '../../../data-panel-BLqydW68.js';
8
+ import { D as DataPanel } from '../../../data-panel-DfVGx0Ea.js';
9
9
  import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
10
10
  import { formatTimestampPrecise } from '../../../utils/date-format.es.js';
11
11
 
@@ -5,9 +5,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const reactVirtual = require('@tanstack/react-virtual');
7
7
  const React = require('react');
8
- const dataListSkeleton = require('../../../data-list-skeleton-CfVsXhx1.cjs');
8
+ require('../../../data-list-_yDPF5wR.cjs');
9
+ const dataListSkeleton = require('../../../data-list-skeleton-maUWF7Ri.cjs');
9
10
  const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
10
- const logsDataList = require('../../../logs-data-list-DfuVMd6f.cjs');
11
+ const logsDataList = require('../../../logs-data-list-Bf_vIsFb.cjs');
11
12
 
12
13
  const COLUMNS = "6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)";
13
14
  const ROW_HEIGHT = 36;
@@ -1 +1 @@
1
- {"version":3,"file":"logs-list-view.cjs.js","sources":["../../../../src/domains/logs/components/logs-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n /** Current timestamp sort direction. When `onSortChange` is provided the Date/Time headers become sortable. */\n timestampSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'timestamp') => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n timestampSort,\n onSortChange,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: logs.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\" fit=\"container\">\n <LogsDataList.Top>\n {onSortChange ? (\n <LogsDataList.SortableTopCell sortKey=\"timestamp\" sort={timestampSort} onSortChange={onSortChange}>\n Date\n </LogsDataList.SortableTopCell>\n ) : (\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n )}\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n variant={log.level === 'error' || log.level === 'fatal' ? 'error' : 'default'}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n"],"names":["useRef","useVirtualizer","useDataListKeyboard","useEffect","jsx","LogsDataListSkeleton","jsxs","LogsDataList","Fragment"],"mappings":";;;;;;;;;;;AAQA,MAAM,OAAA,GAAU,wDAAA;AAEhB,MAAM,UAAA,GAAa,EAAA;AACnB,MAAM,QAAA,GAAW,CAAA;AAyBV,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,SAAA,GAAYA,aAA8B,IAAI,CAAA;AAEpD,EAAA,MAAM,cAAcC,2BAAA,CAAe;AAAA,IACjC,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,IAClC,cAAc,MAAM,UAAA;AAAA,IACpB,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,uCAAA,CAAoB;AAAA,IAC1C,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,YAAA,EAAc,SAAA;AAAA,IACd,UAAA,EAAY,CAAA,KAAA,KAAS,WAAA,CAAY,aAAA,CAAc,KAAK,CAAA;AAAA,IACpD,MAAA,EAAQ;AAAA,GACT,CAAA;AAYD,EAAA,MAAM,aAAA,GAAgBF,aAAO,SAAS,CAAA;AACtC,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,CAAc,OAAA,IAAW,CAAC,SAAA,EAAW;AACvC,MAAA,SAAA,CAAU,OAAA,EAAS,aAAA,CAAc,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,aAAA,CAAc,OAAA,GAAU,SAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOC,cAAA,CAACC,iCAAA,EAAA,EAAqB,OAAA,EAAS,OAAA,EAAS,KAAI,WAAA,EAAY,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,YAAA,GAAe,YAAY,eAAA,EAAgB;AACjD,EAAA,MAAM,SAAA,GAAY,YAAY,YAAA,EAAa;AAC3C,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,CAAC,CAAA,EAAG,KAAA,IAAS,CAAA;AAC7C,EAAA,MAAM,aAAA,GACJ,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,SAAA,IAAa,YAAA,CAAa,aAAa,MAAA,GAAS,CAAC,CAAA,EAAG,GAAA,IAAO,EAAE,CAAA,GAAI,CAAA;AAEzG,EAAA,uBACEC,eAAA,CAACC,6BAAa,OAAA,EAAS,OAAA,EAAS,WAAsB,SAAA,EAAU,SAAA,EAAU,KAAI,WAAA,EAC5E,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACC,yBAAA,CAAa,KAAb,EACE,QAAA,EAAA;AAAA,MAAA,YAAA,mBACCH,cAAA,CAACG,yBAAA,CAAa,eAAA,EAAb,EAA6B,SAAQ,WAAA,EAAY,IAAA,EAAM,aAAA,EAAe,YAAA,EAA4B,kBAEnG,CAAA,mBAEAH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBAE5BH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBAC1BH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBAC3BH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBAC5BH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAC7BH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,QAAA,EAAA,MAAA,EAAI;AAAA,KAAA,EAC5B,CAAA;AAAA,IAEC,IAAA,CAAK,MAAA,KAAW,CAAA,mBACfH,cAAA,CAACG,yBAAA,CAAa,SAAb,EAAqB,OAAA,EAAQ,2BAAA,EAA4B,CAAA,mBAE1DD,eAAA,CAAAE,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,cAAA,CAACG,yBAAA,CAAa,MAAA,EAAb,EAAoB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,MACxC,YAAA,CAAa,IAAI,CAAA,EAAA,KAAM;AACtB,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA;AACzB,QAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,QAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAI3B,QAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,QAAA,MAAM,aAAa,EAAA,KAAO,aAAA;AAE1B,QAAA,uBACED,eAAA;AAAA,UAACC,yBAAA,CAAa,SAAA;AAAA,UAAb;AAAA,YAEC,KAAK,WAAA,CAAY,cAAA;AAAA,YACjB,cAAY,EAAA,CAAG,KAAA;AAAA,YACd,GAAG,WAAA,CAAY,EAAA,CAAG,KAAK,CAAA;AAAA,YACxB,OAAA,EAAS,MAAM,UAAA,CAAW,GAAG,CAAA;AAAA,YAC7B,QAAA,EAAU,UAAA;AAAA,YACV,SAAS,GAAA,CAAI,KAAA,KAAU,WAAW,GAAA,CAAI,KAAA,KAAU,UAAU,OAAA,GAAU,SAAA;AAAA,YAEpE,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACG,yBAAA,CAAa,QAAA,EAAb,EAAsB,SAAA,EAAW,IAAI,SAAA,EAAW,CAAA;AAAA,6CAChDA,yBAAA,CAAa,QAAA,EAAb,EAAsB,SAAA,EAAW,IAAI,SAAA,EAAW,CAAA;AAAA,6CAChDA,yBAAA,CAAa,SAAA,EAAb,EAAuB,KAAA,EAAO,IAAI,KAAA,EAAO,CAAA;AAAA,8BAC1CH,cAAA,CAACG,0BAAa,UAAA,EAAb,EAAwB,YAAY,GAAA,CAAI,UAAA,EAAY,UAAA,EAAY,GAAA,CAAI,UAAA,EAAY,CAAA;AAAA,6CAChFA,yBAAA,CAAa,WAAA,EAAb,EAAyB,OAAA,EAAS,IAAI,OAAA,EAAS,CAAA;AAAA,6CAC/CA,yBAAA,CAAa,QAAA,EAAb,EAAsB,IAAA,EAAM,IAAI,IAAA,EAAM;AAAA;AAAA,WAAA;AAAA,UAblC;AAAA,SAcP;AAAA,MAEJ,CAAC,CAAA;AAAA,sBACDH,cAAA,CAACG,yBAAA,CAAa,MAAA,EAAb,EAAoB,QAAQ,aAAA,EAAe;AAAA,KAAA,EAC9C,CAAA;AAAA,oBAEFH,cAAA;AAAA,MAACG,yBAAA,CAAa,eAAA;AAAA,MAAb;AAAA,QACC,SAAA,EAAW,kBAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"logs-list-view.cjs.js","sources":["../../../../src/domains/logs/components/logs-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n /** Current timestamp sort direction. When `onSortChange` is provided the Date/Time headers become sortable. */\n timestampSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'timestamp') => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n timestampSort,\n onSortChange,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: logs.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\" fit=\"container\">\n <LogsDataList.Top>\n {onSortChange ? (\n <LogsDataList.SortableTopCell sortKey=\"timestamp\" sort={timestampSort} onSortChange={onSortChange}>\n Date\n </LogsDataList.SortableTopCell>\n ) : (\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n )}\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n variant={log.level === 'error' || log.level === 'fatal' ? 'error' : 'default'}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n"],"names":["useRef","useVirtualizer","useDataListKeyboard","useEffect","jsx","LogsDataListSkeleton","jsxs","LogsDataList","Fragment"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useVirtualizer } from '@tanstack/react-virtual';
3
3
  import { useRef, useEffect } from 'react';
4
- import { D as DataListSkeleton } from '../../../data-list-skeleton-BmsDYJrA.js';
4
+ import '../../../data-list-DDGpWucH.js';
5
+ import { D as DataListSkeleton } from '../../../data-list-skeleton-CJFwZBlW.js';
5
6
  import { u as useDataListKeyboard } from '../../../use-data-list-keyboard-DFQr4t38.js';
6
- import { L as LogsDataList } from '../../../logs-data-list-C262Be3o.js';
7
+ import { L as LogsDataList } from '../../../logs-data-list-Cudh6b-c.js';
7
8
 
8
9
  const COLUMNS = "6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)";
9
10
  const ROW_HEIGHT = 36;
@@ -1 +1 @@
1
- {"version":3,"file":"logs-list-view.es.js","sources":["../../../../src/domains/logs/components/logs-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n /** Current timestamp sort direction. When `onSortChange` is provided the Date/Time headers become sortable. */\n timestampSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'timestamp') => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n timestampSort,\n onSortChange,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: logs.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\" fit=\"container\">\n <LogsDataList.Top>\n {onSortChange ? (\n <LogsDataList.SortableTopCell sortKey=\"timestamp\" sort={timestampSort} onSortChange={onSortChange}>\n Date\n </LogsDataList.SortableTopCell>\n ) : (\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n )}\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n variant={log.level === 'error' || log.level === 'fatal' ? 'error' : 'default'}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n"],"names":["LogsDataListSkeleton"],"mappings":"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"}
1
+ {"version":3,"file":"logs-list-view.es.js","sources":["../../../../src/domains/logs/components/logs-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n /** Current timestamp sort direction. When `onSortChange` is provided the Date/Time headers become sortable. */\n timestampSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'timestamp') => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n timestampSort,\n onSortChange,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: logs.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\" fit=\"container\">\n <LogsDataList.Top>\n {onSortChange ? (\n <LogsDataList.SortableTopCell sortKey=\"timestamp\" sort={timestampSort} onSortChange={onSortChange}>\n Date\n </LogsDataList.SortableTopCell>\n ) : (\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n )}\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n variant={log.level === 'error' || log.level === 'fatal' ? 'error' : 'default'}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n"],"names":["LogsDataListSkeleton"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { P as PropertyFilterApplied, a as PropertyFilterActions } from '../../../property-filter-applied-CZLzY0OH.js';
2
+ import { P as PropertyFilterApplied, a as PropertyFilterActions } from '../../../property-filter-applied-DXH81ffT.js';
3
3
  import { c as cn } from '../../../cn-coERSHz5.js';
4
4
 
5
5
  function LogsToolbar({
@@ -7,7 +7,6 @@ const React = require('react');
7
7
  const checkbox = require('../../../checkbox-DNlMGoJH.cjs');
8
8
  const EmptyState = require('../../../EmptyState-ChzkDnbJ.cjs');
9
9
  const field = require('../../../field-D1SVMPMz.cjs');
10
- require('../../../field-control-aria-WzMGs0A4.cjs');
11
10
  const skeleton = require('../../../skeleton-bUFvB8ok.cjs');
12
11
  const Txt = require('../../../Txt-DXjXpX9r.cjs');
13
12
  const utils_cn = require('../../../cn-TqD01zH-.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"observation-detail-view.cjs.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Field, FieldLabel } from '../../../ds/components/Field';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { cn } from '../../../lib/utils';\nimport { observationPriorityByEmoji, observationPriorityTone } from '../lib/observation-priority';\nimport type { ObservationPriority } from '../lib/observation-priority';\nimport type { OMHistoryRecord } from '../types';\nimport { formatDate } from '@/utils/date-format';\n\nconst CodeDiff = lazy(() => import('../../../ds/components/CodeDiff').then(({ CodeDiff }) => ({ default: CodeDiff })));\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: ObservationPriority | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n return formatDate(new Date(2000, 0, 1, Number(hours), Number(minutes)), 'time') ?? time;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n if (!priority) {\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n const tone = observationPriorityTone[priority];\n return { card: tone.card, text: 'text-foreground', time: tone.time };\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const [emoji, emojiPriority] of Object.entries(observationPriorityByEmoji)) {\n if (rest.startsWith(emoji)) {\n priority = emojiPriority;\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'space-y-2 border-l border-border pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <Txt as=\"span\" variant=\"meta\" font=\"mono\" className={styles.time}>\n {formatObservationTime(item.time)}\n </Txt>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <Txt className={cn('break-words whitespace-pre-wrap', styles.text)}>{item.text}</Txt>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n Initialized\n </Txt>\n );\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"flex items-baseline justify-between gap-3 border-b border-border pb-2\">\n <div className=\"min-w-0\">\n <Txt as=\"h3\" variant=\"column\" tone=\"ink\">\n {section.title}\n </Txt>\n {section.relativeTime && (\n <Txt variant=\"meta\" tone=\"muted\">\n {section.relativeTime}\n </Txt>\n )}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"flex w-50 min-w-45 flex-col overflow-hidden border-l border-border\">\n <div className=\"border-b border-border px-4 py-2\">\n <Txt tone=\"ink\">History</Txt>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n onClick={() => onSelectRecord(record.id)}\n className={cn(\n 'text-foreground',\n 'w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left hover:bg-fill-subtle',\n isSelected && 'border-l-foreground bg-fill-hover',\n )}\n >\n <Txt as=\"span\" variant=\"caption\" className=\"block\">\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </Txt>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <EmptyState\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n variant=\"fill\"\n />\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-b border-border px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <Field orientation=\"horizontal\" className=\"gap-1.5\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <FieldLabel size=\"smaller\">Show diff</FieldLabel>\n </Field>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <Suspense fallback={<Skeleton className=\"h-32\" />}>\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n filename=\"observations.md\"\n layout=\"unified\"\n className=\"rounded-xl\"\n />\n </Suspense>\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </Txt>\n )}\n </div>\n </div>\n\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":["lazy","CodeDiff","formatDate","observationPriorityTone","observationPriorityByEmoji","jsx","jsxs","Txt","cn","useMemo","useState","useEffect","Skeleton","EmptyState","Field","Checkbox","FieldLabel","Suspense"],"mappings":"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"}
1
+ {"version":3,"file":"observation-detail-view.cjs.js","sources":["../../../../src/domains/memory/components/observation-detail-view.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, useMemo, useState } from 'react';\nimport { Checkbox } from '../../../ds/components/Checkbox';\nimport { EmptyState } from '../../../ds/components/EmptyState';\nimport { Field, FieldLabel } from '../../../ds/components/Field';\nimport { Skeleton } from '../../../ds/components/Skeleton';\nimport { Txt } from '../../../ds/components/Txt';\nimport { cn } from '../../../lib/utils';\nimport { observationPriorityByEmoji, observationPriorityTone } from '../lib/observation-priority';\nimport type { ObservationPriority } from '../lib/observation-priority';\nimport type { OMHistoryRecord } from '../types';\nimport { formatDate } from '@/utils/date-format';\n\nconst CodeDiff = lazy(() => import('../../../ds/components/CodeDiff').then(({ CodeDiff }) => ({ default: CodeDiff })));\n\ntype ParsedItem = {\n text: string;\n time: string | null;\n priority: ObservationPriority | null;\n children: ParsedItem[];\n};\n\ntype ParsedSection = {\n title: string;\n relativeTime: string | null;\n items: ParsedItem[];\n};\n\nfunction formatObservationTime(time: string | null) {\n if (!time) return null;\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) return time;\n const [, hours, minutes] = match;\n return formatDate(new Date(2000, 0, 1, Number(hours), Number(minutes)), 'time') ?? time;\n}\n\nfunction priorityClasses(priority: ParsedItem['priority'], nested: boolean) {\n if (nested) {\n return {\n card: 'bg-transparent border-transparent',\n text: 'text-muted-foreground',\n time: 'text-muted-foreground',\n };\n }\n if (!priority) {\n return {\n card: 'border-border bg-background',\n text: 'text-foreground',\n time: 'text-muted-foreground',\n };\n }\n const tone = observationPriorityTone[priority];\n return { card: tone.card, text: 'text-foreground', time: tone.time };\n}\n\nfunction parseItem(line: string): ParsedItem | null {\n const trimmed = line.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith('* ->') || trimmed.startsWith('->')) {\n const text = trimmed.replace(/^\\*?\\s*->\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n if (trimmed.startsWith('-')) {\n const text = trimmed.replace(/^-\\s*/, '').trim();\n return text ? { text, time: null, priority: null, children: [] } : null;\n }\n // Extracts a root observation line of the form `* 🔴 (11:55) some text`,\n // where the priority emoji and `(HH:MM)` timestamp are both optional:\n // → { priority: high, time: '11:55', text: 'some text' }.\n // Parsed incrementally instead of with a single regex: adjacent `\\s*` runs\n // around optional groups backtrack polynomially on adversarial input\n // (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('*')) {\n let rest = trimmed.slice(1).trimStart();\n let priority: ParsedItem['priority'] = null;\n for (const [emoji, emojiPriority] of Object.entries(observationPriorityByEmoji)) {\n if (rest.startsWith(emoji)) {\n priority = emojiPriority;\n rest = rest.slice(emoji.length).trimStart();\n break;\n }\n }\n let time: string | null = null;\n const timeMatch = rest.match(/^\\((\\d{1,2}:\\d{2})\\)/);\n if (timeMatch) {\n const [matchedText, matchedTime] = timeMatch;\n if (matchedText !== undefined && matchedTime !== undefined) {\n time = matchedTime;\n rest = rest.slice(matchedText.length).trimStart();\n }\n }\n if (rest) {\n return { text: rest, time, priority, children: [] };\n }\n }\n return { text: trimmed, time: null, priority: null, children: [] };\n}\n\nfunction parseObservations(raw: string): ParsedSection[] {\n // Extracts the text between `<observations>` and `</observations>` (falls\n // back to the whole string when the tags are absent). indexOf instead of a\n // lazy regex to avoid polynomial backtracking on adversarial input\n // (CodeQL js/polynomial-redos).\n const openTag = '<observations>';\n const openIdx = raw.indexOf(openTag);\n const closeIdx = openIdx === -1 ? -1 : raw.indexOf('</observations>', openIdx + openTag.length);\n const content = (closeIdx === -1 ? raw : raw.slice(openIdx + openTag.length, closeIdx)).trim();\n if (!content) return [];\n const lines = content.split('\\n');\n const sections: ParsedSection[] = [];\n let current: ParsedSection | null = null;\n let lastRoot: ParsedItem | null = null;\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n // Extracts a section header of the form `Date: Jul 2, 2026 (today)`,\n // where the parenthesized relative time is optional:\n // → { title: 'Jul 2, 2026', relativeTime: 'today' }.\n // Parsed with string ops instead of a lazy regex with an optional trailing\n // group, which backtracks polynomially (CodeQL js/polynomial-redos).\n if (trimmed.startsWith('Date:')) {\n let title = trimmed.slice('Date:'.length).trim();\n let relativeTime: string | null = null;\n if (title.endsWith(')')) {\n const openParen = title.lastIndexOf('(');\n const inner = openParen === -1 ? '' : title.slice(openParen + 1, -1);\n // `inner` must not contain ')' — mirrors the original `\\(([^)]+)\\)$` semantics\n if (openParen > 0 && inner && !inner.includes(')')) {\n relativeTime = inner.trim();\n title = title.slice(0, openParen).trim();\n }\n }\n if (title) {\n current = { title, relativeTime, items: [] };\n sections.push(current);\n lastRoot = null;\n continue;\n }\n }\n if (!current) {\n current = { title: 'Recent', relativeTime: null, items: [] };\n sections.push(current);\n }\n const indent = line.match(/^(\\s*)/)?.[1]?.length ?? 0;\n const isNested = indent >= 2 && (trimmed.startsWith('* ->') || trimmed.startsWith('->') || trimmed.startsWith('-'));\n const item = parseItem(line);\n if (!item) continue;\n if (isNested && lastRoot) {\n lastRoot.children.push(item);\n continue;\n }\n current.items.push(item);\n lastRoot = item;\n }\n return sections;\n}\n\nfunction ObservationItems({ items, nested = false }: { items: ParsedItem[]; nested?: boolean }) {\n return (\n <div className={nested ? 'space-y-2 border-l border-border pl-4' : 'space-y-3'}>\n {items.map((item, i) => {\n const styles = priorityClasses(item.priority, nested);\n return (\n <div key={`${item.text.slice(0, 20)}-${i}`} className=\"space-y-2\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-12 shrink-0 pt-2 text-right\">\n {item.time && (\n <Txt as=\"span\" variant=\"meta\" font=\"mono\" className={styles.time}>\n {formatObservationTime(item.time)}\n </Txt>\n )}\n </div>\n <div className={cn('min-w-0 flex-1 rounded-md border px-3 py-2', styles.card)}>\n <Txt className={cn('break-words whitespace-pre-wrap', styles.text)}>{item.text}</Txt>\n {item.children.length > 0 && (\n <div className=\"mt-3\">\n <ObservationItems items={item.children} nested />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ObservationContent({ observations }: { observations: string }) {\n const sections = useMemo(() => parseObservations(observations), [observations]);\n if (sections.length === 0) {\n return (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n Initialized\n </Txt>\n );\n }\n return (\n <div className=\"space-y-5\">\n {sections.map((section, i) => (\n <section key={`${section.title}-${i}`} className=\"space-y-3\">\n <div className=\"flex items-baseline justify-between gap-3 border-b border-border pb-2\">\n <div className=\"min-w-0\">\n <Txt as=\"h3\" variant=\"column\" tone=\"ink\">\n {section.title}\n </Txt>\n {section.relativeTime && (\n <Txt variant=\"meta\" tone=\"muted\">\n {section.relativeTime}\n </Txt>\n )}\n </div>\n </div>\n <ObservationItems items={section.items} />\n </section>\n ))}\n </div>\n );\n}\n\nfunction ObservationHistoryPanel({\n records,\n selectedRecordId,\n onSelectRecord,\n}: {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n}) {\n if (records.length <= 1) return null;\n\n return (\n <div className=\"flex w-50 min-w-45 flex-col overflow-hidden border-l border-border\">\n <div className=\"border-b border-border px-4 py-2\">\n <Txt tone=\"ink\">History</Txt>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {records.map(record => {\n const isSelected = record.id === selectedRecordId;\n return (\n <button\n key={record.id}\n type=\"button\"\n onClick={() => onSelectRecord(record.id)}\n className={cn(\n 'text-foreground',\n 'w-full cursor-pointer truncate border-l-2 border-l-transparent px-3 py-2 text-left hover:bg-fill-subtle',\n isSelected && 'border-l-foreground bg-fill-hover',\n )}\n >\n <Txt as=\"span\" variant=\"caption\" className=\"block\">\n {record.activeObservations || (\n <span className=\"text-muted-foreground italic\">\n {record.isObserving || record.isReflecting ? 'Processing\\u2026' : 'Initialized'}\n </span>\n )}\n </Txt>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface ObservationDetailViewProps {\n records: OMHistoryRecord[];\n selectedRecordId: string | null;\n onSelectRecord: (id: string | null) => void;\n isLoading?: boolean;\n}\n\nexport function ObservationDetailView({\n records,\n selectedRecordId,\n onSelectRecord,\n isLoading,\n}: ObservationDetailViewProps) {\n const [showDiff, setShowDiff] = useState(false);\n\n const sorted = useMemo(\n () => [...records].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n [records],\n );\n\n const selected = selectedRecordId ? sorted.find(r => r.id === selectedRecordId) : sorted[sorted.length - 1];\n const selectedIndex = selected ? sorted.findIndex(r => r.id === selected.id) : -1;\n const previousRecord = selectedIndex > 0 ? sorted[selectedIndex - 1] : null;\n\n useEffect(() => {\n const last = sorted.at(-1);\n if (!selectedRecordId && last) {\n onSelectRecord(last.id);\n }\n }, [selectedRecordId, sorted, onSelectRecord]);\n\n if (isLoading) {\n return (\n <div className=\"space-y-4 p-4\">\n <Skeleton className=\"h-6 w-40\" />\n <Skeleton className=\"h-32 w-full\" />\n <Skeleton className=\"h-32 w-full\" />\n </div>\n );\n }\n\n if (!selected) {\n return (\n <EmptyState\n titleSlot=\"No observations\"\n descriptionSlot=\"No observational memory snapshots available for this thread.\"\n variant=\"fill\"\n />\n );\n }\n\n const activeObservations = typeof selected.activeObservations === 'string' ? selected.activeObservations : '';\n\n return (\n <div className=\"flex size-full overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 flex-col overflow-hidden\">\n {previousRecord && (\n <div className=\"border-b border-border px-4 py-2\">\n <div className=\"flex items-start justify-end gap-3\">\n <Field orientation=\"horizontal\" className=\"gap-1.5\">\n <Checkbox checked={showDiff} onCheckedChange={v => setShowDiff(v === true)} />\n <FieldLabel size=\"smaller\">Show diff</FieldLabel>\n </Field>\n </div>\n </div>\n )}\n\n <div data-testid=\"observation-detail-body\" className=\"flex-1 overflow-y-auto p-4\">\n {showDiff && previousRecord ? (\n <Suspense fallback={<Skeleton className=\"h-32\" />}>\n <CodeDiff\n codeA={typeof previousRecord.activeObservations === 'string' ? previousRecord.activeObservations : ''}\n codeB={activeObservations}\n filename=\"observations.md\"\n layout=\"unified\"\n className=\"rounded-xl\"\n />\n </Suspense>\n ) : activeObservations ? (\n <ObservationContent observations={activeObservations} />\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n {selected.isObserving || selected.isReflecting ? 'Processing…' : 'Initialized'}\n </Txt>\n )}\n </div>\n </div>\n\n <ObservationHistoryPanel records={sorted} selectedRecordId={selected.id} onSelectRecord={onSelectRecord} />\n </div>\n );\n}\n"],"names":["lazy","CodeDiff","formatDate","observationPriorityTone","observationPriorityByEmoji","jsx","jsxs","Txt","cn","useMemo","useState","useEffect","Skeleton","EmptyState","Field","Checkbox","FieldLabel","Suspense"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { lazy, useState, useMemo, useEffect, Suspense } from 'react';
3
- import { C as Checkbox } from '../../../checkbox-mmR3rD2j.js';
3
+ import { C as Checkbox } from '../../../checkbox-B3tvJLCl.js';
4
4
  import { E as EmptyState } from '../../../EmptyState-Cu6JKbrk.js';
5
- import { F as Field, e as FieldLabel } from '../../../field-B89BEZg4.js';
6
- import '../../../field-control-aria-DB6y41tQ.js';
5
+ import { F as Field, e as FieldLabel } from '../../../field-Bc8Ewf_M.js';
7
6
  import { S as Skeleton } from '../../../skeleton-Bjxvf3Y-.js';
8
7
  import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
9
8
  import { c as cn } from '../../../cn-coERSHz5.js';