@mastra/playground-ui 63.0.0-alpha.2 → 63.0.0-alpha.4

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 (708) hide show
  1. package/README.md +98 -0
  2. package/dist/{Avatar-D6ybWljK.cjs → Avatar-0u68PVfu.cjs} +34 -42
  3. package/dist/Avatar-0u68PVfu.cjs.map +1 -0
  4. package/dist/{Avatar-C2Sz53u5.js → Avatar-BwkyFiED.js} +20 -28
  5. package/dist/Avatar-BwkyFiED.js.map +1 -0
  6. package/dist/{Button-C8QDEN9j.js → Button-60jVnaHt.js} +10 -4
  7. package/dist/Button-60jVnaHt.js.map +1 -0
  8. package/dist/{Button-BfZzgZrA.cjs → Button-CAVPKK09.cjs} +10 -4
  9. package/dist/Button-CAVPKK09.cjs.map +1 -0
  10. package/dist/{ErrorBoundary-3wDeQWo0.js → ErrorBoundary-BqNfJHRT.js} +2 -2
  11. package/dist/{ErrorBoundary-3wDeQWo0.js.map → ErrorBoundary-BqNfJHRT.js.map} +1 -1
  12. package/dist/{ErrorBoundary-BLsO6xv6.cjs → ErrorBoundary-SRNDrd4h.cjs} +2 -2
  13. package/dist/{ErrorBoundary-BLsO6xv6.cjs.map → ErrorBoundary-SRNDrd4h.cjs.map} +1 -1
  14. package/dist/{alert-dialog-j626w-Qb.cjs → alert-dialog-C-ODvRWT.cjs} +3 -3
  15. package/dist/{alert-dialog-j626w-Qb.cjs.map → alert-dialog-C-ODvRWT.cjs.map} +1 -1
  16. package/dist/{alert-dialog-R9z2SJLl.js → alert-dialog-DVAC9zdj.js} +3 -3
  17. package/dist/{alert-dialog-R9z2SJLl.js.map → alert-dialog-DVAC9zdj.js.map} +1 -1
  18. package/dist/{ask-user-card-40a18Qea.cjs → ask-user-card-BMiCYmFY.cjs} +2 -2
  19. package/dist/{ask-user-card-40a18Qea.cjs.map → ask-user-card-BMiCYmFY.cjs.map} +1 -1
  20. package/dist/{ask-user-card-xR8YiiQa.js → ask-user-card-CmfZg1wt.js} +2 -2
  21. package/dist/{ask-user-card-xR8YiiQa.js.map → ask-user-card-CmfZg1wt.js.map} +1 -1
  22. package/dist/avatar-size-CNR0U-LW.js +27 -0
  23. package/dist/avatar-size-CNR0U-LW.js.map +1 -0
  24. package/dist/avatar-size-DxStOo5A.cjs +32 -0
  25. package/dist/avatar-size-DxStOo5A.cjs.map +1 -0
  26. package/dist/{code-block-DQJ3NHRf.cjs → code-block-BuGosknt.cjs} +4 -4
  27. package/dist/{code-block-DQJ3NHRf.cjs.map → code-block-BuGosknt.cjs.map} +1 -1
  28. package/dist/{code-block-BQZUoOfS.js → code-block-vvYFcnqm.js} +4 -4
  29. package/dist/{code-block-BQZUoOfS.js.map → code-block-vvYFcnqm.js.map} +1 -1
  30. package/dist/{code-editor-D69saH4C.js → code-editor-B_v1EfzX.js} +2 -2
  31. package/dist/{code-editor-D69saH4C.js.map → code-editor-B_v1EfzX.js.map} +1 -1
  32. package/dist/{code-editor-Dg6Y6Q8z.cjs → code-editor-CH8c-KF1.cjs} +2 -2
  33. package/dist/{code-editor-Dg6Y6Q8z.cjs.map → code-editor-CH8c-KF1.cjs.map} +1 -1
  34. package/dist/{collapsible-box-B7YQWv7L.js → collapsible-box-CMmJEn3f.js} +2 -2
  35. package/dist/{collapsible-box-B7YQWv7L.js.map → collapsible-box-CMmJEn3f.js.map} +1 -1
  36. package/dist/{collapsible-box-Bu2jHdsK.cjs → collapsible-box-oUO65pxW.cjs} +2 -2
  37. package/dist/{collapsible-box-Bu2jHdsK.cjs.map → collapsible-box-oUO65pxW.cjs.map} +1 -1
  38. package/dist/{combobox-D9CFzzx8.cjs → combobox-fEMKH9nJ.cjs} +3 -3
  39. package/dist/{combobox-D9CFzzx8.cjs.map → combobox-fEMKH9nJ.cjs.map} +1 -1
  40. package/dist/{combobox-DDUIREaG.js → combobox-so2V71F7.js} +3 -3
  41. package/dist/{combobox-DDUIREaG.js.map → combobox-so2V71F7.js.map} +1 -1
  42. package/dist/{combobox-styles-BGCZADLP.cjs → combobox-styles-BJPT0TpQ.cjs} +2 -2
  43. package/dist/{combobox-styles-BGCZADLP.cjs.map → combobox-styles-BJPT0TpQ.cjs.map} +1 -1
  44. package/dist/{combobox-styles-wLpeTjOR.js → combobox-styles-BQnNIOpr.js} +2 -2
  45. package/dist/{combobox-styles-wLpeTjOR.js.map → combobox-styles-BQnNIOpr.js.map} +1 -1
  46. package/dist/{command-DbZ6CSAy.cjs → command-B_C36ppQ.cjs} +2 -2
  47. package/dist/{command-DbZ6CSAy.cjs.map → command-B_C36ppQ.cjs.map} +1 -1
  48. package/dist/{command-DtIlcv-t.js → command-DMqzDhzs.js} +2 -2
  49. package/dist/{command-DtIlcv-t.js.map → command-DMqzDhzs.js.map} +1 -1
  50. package/dist/components/AlertDialog.cjs.js +1 -1
  51. package/dist/components/AlertDialog.es.js +1 -1
  52. package/dist/components/Avatar.cjs.js +1 -1
  53. package/dist/components/Avatar.es.js +1 -1
  54. package/dist/components/Button.cjs.js +1 -1
  55. package/dist/components/Button.es.js +2 -2
  56. package/dist/components/ClampedText.cjs.js +1 -1
  57. package/dist/components/ClampedText.es.js +1 -1
  58. package/dist/components/CodeBlock.cjs.js +1 -1
  59. package/dist/components/CodeBlock.es.js +1 -1
  60. package/dist/components/CodeEditor.cjs.js +1 -1
  61. package/dist/components/CodeEditor.es.js +1 -1
  62. package/dist/components/CollapsibleBox.cjs.js +1 -1
  63. package/dist/components/CollapsibleBox.es.js +1 -1
  64. package/dist/components/Combobox.cjs.js +2 -2
  65. package/dist/components/Combobox.es.js +2 -2
  66. package/dist/components/Command.cjs.js +1 -1
  67. package/dist/components/Command.es.js +1 -1
  68. package/dist/components/CommandPalette.cjs.js +1 -1
  69. package/dist/components/CommandPalette.es.js +1 -1
  70. package/dist/components/Comment.cjs.js +2 -2
  71. package/dist/components/Comment.es.js +2 -2
  72. package/dist/components/CopyButton.cjs.js +1 -1
  73. package/dist/components/CopyButton.es.js +1 -1
  74. package/dist/components/DataCodeSection.cjs.js +1 -1
  75. package/dist/components/DataCodeSection.es.js +1 -1
  76. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  77. package/dist/components/DataDetailsPanel.es.js +2 -2
  78. package/dist/components/DataList.cjs.js +15 -17
  79. package/dist/components/DataList.cjs.js.map +1 -1
  80. package/dist/components/DataList.es.js +4 -5
  81. package/dist/components/DataList.es.js.map +1 -1
  82. package/dist/components/DataPanel.cjs.js +1 -1
  83. package/dist/components/DataPanel.es.js +1 -1
  84. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  85. package/dist/components/DateRangeTimeline.es.js +1 -1
  86. package/dist/components/DateTimePicker.cjs.js +2 -2
  87. package/dist/components/DateTimePicker.es.js +2 -2
  88. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  89. package/dist/components/DateTimeRangePicker.es.js +1 -1
  90. package/dist/components/Dialog.cjs.js +2 -2
  91. package/dist/components/Dialog.es.js +2 -2
  92. package/dist/components/DisabledFeatureButton.cjs.js +1 -1
  93. package/dist/components/DisabledFeatureButton.es.js +1 -1
  94. package/dist/components/Drawer.cjs.js +1 -1
  95. package/dist/components/Drawer.es.js +1 -1
  96. package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
  97. package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
  98. package/dist/components/ErrorBoundary.cjs.js +1 -1
  99. package/dist/components/ErrorBoundary.es.js +1 -1
  100. package/dist/components/FilterBar.cjs.js +3 -3
  101. package/dist/components/FilterBar.es.js +4 -4
  102. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  103. package/dist/components/FormFieldBlocks.es.js +2 -2
  104. package/dist/components/InputGroup.cjs.js +1 -1
  105. package/dist/components/InputGroup.es.js +1 -1
  106. package/dist/components/InputNumber.cjs.js +2 -2
  107. package/dist/components/InputNumber.es.js +2 -2
  108. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  109. package/dist/components/JSONSchemaForm.es.js +2 -2
  110. package/dist/components/ListSearch.cjs.js +1 -1
  111. package/dist/components/ListSearch.es.js +1 -1
  112. package/dist/components/LogsDataList.cjs.js +5 -2
  113. package/dist/components/LogsDataList.cjs.js.map +1 -1
  114. package/dist/components/LogsDataList.es.js +5 -2
  115. package/dist/components/LogsDataList.es.js.map +1 -1
  116. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  117. package/dist/components/MarkdownRenderer.es.js +1 -1
  118. package/dist/components/Message.cjs.js +1 -1
  119. package/dist/components/Message.es.js +1 -1
  120. package/dist/components/MetricsCard.cjs.js +1 -1
  121. package/dist/components/MetricsCard.es.js +1 -1
  122. package/dist/components/PageHeader.cjs.js +1 -1
  123. package/dist/components/PageHeader.es.js +1 -1
  124. package/dist/components/PageLayout.cjs.js +1 -1
  125. package/dist/components/PageLayout.cjs.js.map +1 -1
  126. package/dist/components/PageLayout.es.js +1 -1
  127. package/dist/components/PageLayout.es.js.map +1 -1
  128. package/dist/components/Pagination.cjs.js +17 -0
  129. package/dist/components/Pagination.cjs.js.map +1 -0
  130. package/dist/components/Pagination.d.ts +2 -0
  131. package/dist/components/Pagination.es.js +2 -0
  132. package/dist/components/Pagination.es.js.map +1 -0
  133. package/dist/components/PrevNextNav.cjs.js +1 -1
  134. package/dist/components/PrevNextNav.es.js +1 -1
  135. package/dist/components/ProductAvatar.cjs.js +19 -2
  136. package/dist/components/ProductAvatar.cjs.js.map +1 -1
  137. package/dist/components/ProductAvatar.es.js +19 -2
  138. package/dist/components/ProductAvatar.es.js.map +1 -1
  139. package/dist/components/PropertyFilter.cjs.js +3 -3
  140. package/dist/components/PropertyFilter.es.js +4 -4
  141. package/dist/components/RuleBuilder.cjs.js +2 -2
  142. package/dist/components/RuleBuilder.es.js +2 -2
  143. package/dist/components/SavedViews.cjs.js +2 -2
  144. package/dist/components/SavedViews.es.js +2 -2
  145. package/dist/components/SearchInput.cjs.js +1 -1
  146. package/dist/components/SearchInput.es.js +1 -1
  147. package/dist/components/Select.cjs.js +1 -1
  148. package/dist/components/Select.es.js +1 -1
  149. package/dist/components/SideDialog.cjs.js +1 -1
  150. package/dist/components/SideDialog.es.js +1 -1
  151. package/dist/components/Sidebar.cjs.js +3 -3
  152. package/dist/components/Sidebar.es.js +3 -3
  153. package/dist/components/Table.cjs.js +286 -47
  154. package/dist/components/Table.cjs.js.map +1 -1
  155. package/dist/components/Table.es.js +284 -49
  156. package/dist/components/Table.es.js.map +1 -1
  157. package/dist/components/Tabs.cjs.js +1 -1
  158. package/dist/components/Tabs.es.js +1 -1
  159. package/dist/components/ThreadList.cjs.js +1 -1
  160. package/dist/components/ThreadList.es.js +1 -1
  161. package/dist/components/Truncate.cjs.js +1 -1
  162. package/dist/components/Truncate.es.js +1 -1
  163. package/dist/components/Workflow.cjs.js +6 -6
  164. package/dist/components/Workflow.es.js +6 -6
  165. package/dist/components/ai/activity.cjs.js +1 -1
  166. package/dist/components/ai/activity.es.js +1 -1
  167. package/dist/components/ai/ask-user.cjs.js +1 -1
  168. package/dist/components/ai/ask-user.es.js +1 -1
  169. package/dist/components/ai/plan.cjs.js +1 -1
  170. package/dist/components/ai/plan.es.js +1 -1
  171. package/dist/components/ai/tool-approval.cjs.js +1 -1
  172. package/dist/components/ai/tool-approval.es.js +1 -1
  173. package/dist/components/ai/tool-call.cjs.js +3 -3
  174. package/dist/components/ai/tool-call.es.js +3 -3
  175. package/dist/{copy-button-CUVxXN4H.cjs → copy-button-5tVWqoTk.cjs} +2 -2
  176. package/dist/{copy-button-CUVxXN4H.cjs.map → copy-button-5tVWqoTk.cjs.map} +1 -1
  177. package/dist/{copy-button-CDyuUYUr.js → copy-button-Af_Qt7G1.js} +2 -2
  178. package/dist/{copy-button-CDyuUYUr.js.map → copy-button-Af_Qt7G1.js.map} +1 -1
  179. package/dist/{data-code-section-B2Ea7FwM.cjs → data-code-section-Bs8sHDux.cjs} +5 -5
  180. package/dist/{data-code-section-B2Ea7FwM.cjs.map → data-code-section-Bs8sHDux.cjs.map} +1 -1
  181. package/dist/{data-code-section-DrJYy1dR.js → data-code-section-CqdjmClK.js} +5 -5
  182. package/dist/{data-code-section-DrJYy1dR.js.map → data-code-section-CqdjmClK.js.map} +1 -1
  183. package/dist/{data-list-top-BJCC62oy.js → data-list-B2ArWwsJ.js} +332 -5
  184. package/dist/data-list-B2ArWwsJ.js.map +1 -0
  185. package/dist/{data-list-top-Ds-NWyPO.cjs → data-list-BLfHObw8.cjs} +339 -13
  186. package/dist/data-list-BLfHObw8.cjs.map +1 -0
  187. package/dist/{data-list-skeleton-CfVsXhx1.cjs → data-list-skeleton-BGJD4qMF.cjs} +6 -6
  188. package/dist/{data-list-skeleton-CfVsXhx1.cjs.map → data-list-skeleton-BGJD4qMF.cjs.map} +1 -1
  189. package/dist/{data-list-skeleton-BmsDYJrA.js → data-list-skeleton-BNsWWamC.js} +2 -2
  190. package/dist/{data-list-skeleton-BmsDYJrA.js.map → data-list-skeleton-BNsWWamC.js.map} +1 -1
  191. package/dist/{data-panel-COU5dbUJ.js → data-panel-BdCw3F_h.js} +46 -23
  192. package/dist/data-panel-BdCw3F_h.js.map +1 -0
  193. package/dist/{data-panel-CTqb-0qN.cjs → data-panel-Wjgbl6zx.cjs} +45 -22
  194. package/dist/data-panel-Wjgbl6zx.cjs.map +1 -0
  195. package/dist/{date-time-range-picker-BvRPfy1i.cjs → date-time-range-picker-ByNvjYuV.cjs} +3 -3
  196. package/dist/{date-time-range-picker-BvRPfy1i.cjs.map → date-time-range-picker-ByNvjYuV.cjs.map} +1 -1
  197. package/dist/{date-time-range-picker-CIfaXUuy.js → date-time-range-picker-SU1Q1h1h.js} +3 -3
  198. package/dist/{date-time-range-picker-CIfaXUuy.js.map → date-time-range-picker-SU1Q1h1h.js.map} +1 -1
  199. package/dist/{dialog-DQI9ChYf.cjs → dialog-B5nLi0ER.cjs} +3 -3
  200. package/dist/{dialog-DQI9ChYf.cjs.map → dialog-B5nLi0ER.cjs.map} +1 -1
  201. package/dist/{dialog-DlZmNahd.js → dialog-Jz2ZfO-z.js} +3 -3
  202. package/dist/{dialog-DlZmNahd.js.map → dialog-Jz2ZfO-z.js.map} +1 -1
  203. package/dist/{dialog-action-c4nfPomF.js → dialog-action-BxXhAz-P.js} +3 -3
  204. package/dist/{dialog-action-c4nfPomF.js.map → dialog-action-BxXhAz-P.js.map} +1 -1
  205. package/dist/{dialog-action-gdo9CwUv.cjs → dialog-action-DdkbsKfP.cjs} +3 -3
  206. package/dist/{dialog-action-gdo9CwUv.cjs.map → dialog-action-DdkbsKfP.cjs.map} +1 -1
  207. package/dist/domains/auth/components/session-expired.cjs.js +1 -1
  208. package/dist/domains/auth/components/session-expired.es.js +1 -1
  209. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  210. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  211. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  212. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  213. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  214. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  215. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
  216. package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
  217. package/dist/domains/chat/messages/dataset-save-action.cjs.js +6 -5
  218. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  219. package/dist/domains/chat/messages/dataset-save-action.es.js +6 -5
  220. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  221. package/dist/domains/chat/messages/message-row.cjs.js +3 -3
  222. package/dist/domains/chat/messages/message-row.es.js +3 -3
  223. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  224. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  225. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  226. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  227. package/dist/domains/chat/messages/skill-message.cjs.js +1 -1
  228. package/dist/domains/chat/messages/skill-message.es.js +1 -1
  229. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  230. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  231. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +4 -4
  232. package/dist/domains/chat/tools/badges/agent-badge.es.js +4 -4
  233. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  234. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  235. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
  236. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
  237. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  238. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  239. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  240. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  241. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  242. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  243. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  244. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  245. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  246. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  247. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  248. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  249. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  250. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  251. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
  252. package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
  253. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +5 -4
  254. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  255. package/dist/domains/chat/tools/badges/workflow-badge.es.js +5 -4
  256. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  257. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
  258. package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
  259. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  260. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  261. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +11 -6
  262. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
  263. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +11 -6
  264. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
  265. package/dist/domains/logs/components/log-data-panel.cjs.js +3 -3
  266. package/dist/domains/logs/components/log-data-panel.es.js +3 -3
  267. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  268. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  269. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  270. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  271. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  272. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  273. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  274. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  275. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  276. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  277. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  278. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  279. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  280. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  281. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  282. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  283. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  284. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  285. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  286. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  287. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  288. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  289. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  290. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  291. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  292. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  293. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  294. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  295. package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
  296. package/dist/domains/metrics/components/scores-card.es.js +1 -1
  297. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  298. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  299. package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
  300. package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
  301. package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
  302. package/dist/domains/metrics/components/usage-card.es.js +1 -1
  303. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +5 -4
  304. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
  305. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +5 -4
  306. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
  307. package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
  308. package/dist/domains/scores/components/score-data-panel.es.js +2 -2
  309. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  310. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  311. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  312. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  313. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  314. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  315. package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
  316. package/dist/domains/traces/components/feedback-thread.es.js +4 -4
  317. package/dist/domains/traces/components/span-data-panel-view.cjs.js +3 -3
  318. package/dist/domains/traces/components/span-data-panel-view.es.js +3 -3
  319. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  320. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  321. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  322. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  323. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  324. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  325. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  326. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  327. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  328. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  329. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  330. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  331. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  332. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  333. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +3 -3
  334. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +3 -3
  335. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  336. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  337. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  338. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  339. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  340. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  341. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  342. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  343. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  344. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  345. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
  346. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
  347. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -2
  348. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  349. package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -2
  350. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  351. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  352. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  353. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
  354. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
  355. package/dist/domains/traces/components/trace-data-panel.cjs.js +4 -3
  356. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  357. package/dist/domains/traces/components/trace-data-panel.es.js +4 -3
  358. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  359. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  360. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  361. package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
  362. package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
  363. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  364. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  365. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
  366. package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
  367. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  368. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  369. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  370. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  371. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  372. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  373. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  374. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  375. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  376. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  377. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  378. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  379. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  380. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  381. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  382. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  383. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  384. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  385. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
  386. package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
  387. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  388. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  389. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  390. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  391. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  392. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  393. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  394. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  395. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  396. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  397. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  398. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  399. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  400. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  401. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
  402. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
  403. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  404. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  405. package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
  406. package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
  407. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  408. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  409. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  410. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  411. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
  412. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
  413. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  414. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  415. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
  416. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
  417. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  418. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  419. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
  420. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
  421. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
  422. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
  423. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +2 -2
  424. package/dist/domains/workflows/workflow/workflow-run-data.es.js +2 -2
  425. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  426. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  427. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  428. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  429. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +3 -3
  430. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +3 -3
  431. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  432. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  433. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  434. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  435. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
  436. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
  437. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  438. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  439. package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
  440. package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
  441. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  442. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  443. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  444. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  445. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
  446. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
  447. package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
  448. package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
  449. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
  450. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  451. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  452. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  453. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  454. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  455. package/dist/domains/workspace/components/workspace-tree.cjs.js +2 -2
  456. package/dist/domains/workspace/components/workspace-tree.es.js +2 -2
  457. package/dist/{drawer-CeUYCG-S.cjs → drawer-C6PBqg__.cjs} +2 -2
  458. package/dist/{drawer-CeUYCG-S.cjs.map → drawer-C6PBqg__.cjs.map} +1 -1
  459. package/dist/{drawer-CZlqOjd2.js → drawer-CwVDeB8H.js} +2 -2
  460. package/dist/{drawer-CZlqOjd2.js.map → drawer-CwVDeB8H.js.map} +1 -1
  461. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +4 -6
  462. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
  463. package/dist/ee/signals/components/entity-index-compact-grid.es.js +6 -8
  464. package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
  465. package/dist/ee/signals/components/entity-index-list.cjs.js +33 -32
  466. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  467. package/dist/ee/signals/components/entity-index-list.es.js +35 -34
  468. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  469. package/dist/ee/signals/components/entity-index-model.cjs.js +7 -0
  470. package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
  471. package/dist/ee/signals/components/entity-index-model.es.js +7 -1
  472. package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
  473. package/dist/ee/signals/components/entity-index-status.cjs.js +26 -0
  474. package/dist/ee/signals/components/entity-index-status.cjs.js.map +1 -0
  475. package/dist/ee/signals/components/entity-index-status.d.ts +2 -0
  476. package/dist/ee/signals/components/entity-index-status.es.js +22 -0
  477. package/dist/ee/signals/components/entity-index-status.es.js.map +1 -0
  478. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  479. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  480. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +15 -13
  481. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  482. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +15 -13
  483. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  484. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  485. package/dist/ee/signals/examples-pager.es.js +1 -1
  486. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  487. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  488. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  489. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  490. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  491. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  492. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  493. package/dist/ee/signals/signals-error-state.es.js +1 -1
  494. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  495. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  496. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  497. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  498. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  499. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  500. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  501. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  502. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  503. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  504. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  505. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  506. package/dist/{filter-bar-chip-C_371aon.cjs → filter-bar-chip-BBErw_aR.cjs} +3 -3
  507. package/dist/{filter-bar-chip-C_371aon.cjs.map → filter-bar-chip-BBErw_aR.cjs.map} +1 -1
  508. package/dist/{filter-bar-chip-Dc6phYqZ.js → filter-bar-chip-DvRTWRwT.js} +3 -3
  509. package/dist/{filter-bar-chip-Dc6phYqZ.js.map → filter-bar-chip-DvRTWRwT.js.map} +1 -1
  510. package/dist/{input-group-BWsGYnES.js → input-group-CIIwoggO.js} +2 -2
  511. package/dist/{input-group-BWsGYnES.js.map → input-group-CIIwoggO.js.map} +1 -1
  512. package/dist/{input-group-Cy7k5JRg.cjs → input-group-DQuyC9Pz.cjs} +2 -2
  513. package/dist/{input-group-Cy7k5JRg.cjs.map → input-group-DQuyC9Pz.cjs.map} +1 -1
  514. package/dist/layout/tabbed-container.cjs.js +4 -4
  515. package/dist/layout/tabbed-container.es.js +4 -4
  516. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  517. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  518. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  519. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  520. package/dist/lib/form/components/date-field.cjs.js +1 -1
  521. package/dist/lib/form/components/date-field.es.js +1 -1
  522. package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
  523. package/dist/lib/form/components/form-submit-row.es.js +1 -1
  524. package/dist/lib/form/components/record-field.cjs.js +1 -1
  525. package/dist/lib/form/components/record-field.es.js +1 -1
  526. package/dist/lib/form/components/select-field.cjs.js +1 -1
  527. package/dist/lib/form/components/select-field.es.js +1 -1
  528. package/dist/lib/form/components/submit-button.cjs.js +1 -1
  529. package/dist/lib/form/components/submit-button.es.js +1 -1
  530. package/dist/{list-search-xHadeMHl.cjs → list-search-C5j3HYkb.cjs} +2 -2
  531. package/dist/{list-search-xHadeMHl.cjs.map → list-search-C5j3HYkb.cjs.map} +1 -1
  532. package/dist/{list-search-BNnMwbpv.js → list-search-Cwp-OPvC.js} +2 -2
  533. package/dist/{list-search-BNnMwbpv.js.map → list-search-Cwp-OPvC.js.map} +1 -1
  534. package/dist/{logs-data-list-C262Be3o.js → logs-data-list-B-gmgU74.js} +2 -3
  535. package/dist/{logs-data-list-C262Be3o.js.map → logs-data-list-B-gmgU74.js.map} +1 -1
  536. package/dist/{logs-data-list-DfuVMd6f.cjs → logs-data-list-CaXnNnC5.cjs} +21 -22
  537. package/dist/{logs-data-list-DfuVMd6f.cjs.map → logs-data-list-CaXnNnC5.cjs.map} +1 -1
  538. package/dist/{markdown-renderer-DaXAim8y.cjs → markdown-renderer-BXTNiZbz.cjs} +3 -3
  539. package/dist/{markdown-renderer-DaXAim8y.cjs.map → markdown-renderer-BXTNiZbz.cjs.map} +1 -1
  540. package/dist/{markdown-renderer-D5Wjk1Cs.js → markdown-renderer-Ct-q_KTF.js} +3 -3
  541. package/dist/{markdown-renderer-D5Wjk1Cs.js.map → markdown-renderer-Ct-q_KTF.js.map} +1 -1
  542. package/dist/{message-copy-button-CREuo4t5.cjs → message-copy-button-Cni-zv0j.cjs} +2 -2
  543. package/dist/{message-copy-button-CREuo4t5.cjs.map → message-copy-button-Cni-zv0j.cjs.map} +1 -1
  544. package/dist/{message-copy-button-BlwQej7y.js → message-copy-button-DDgqbtbv.js} +2 -2
  545. package/dist/{message-copy-button-BlwQej7y.js.map → message-copy-button-DDgqbtbv.js.map} +1 -1
  546. package/dist/{metrics-card-oEbbYDo7.js → metrics-card-C33VsuXf.js} +2 -2
  547. package/dist/{metrics-card-oEbbYDo7.js.map → metrics-card-C33VsuXf.js.map} +1 -1
  548. package/dist/{metrics-card-Bv2A5G41.cjs → metrics-card-CxOVpP1t.cjs} +2 -2
  549. package/dist/{metrics-card-Bv2A5G41.cjs.map → metrics-card-CxOVpP1t.cjs.map} +1 -1
  550. package/dist/new/layout/app-shell.cjs.js +9 -4
  551. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  552. package/dist/new/layout/app-shell.es.js +10 -5
  553. package/dist/new/layout/app-shell.es.js.map +1 -1
  554. package/dist/new/layout/page-header.cjs.js +1 -1
  555. package/dist/new/layout/page-header.es.js +1 -1
  556. package/dist/{page-header-CLxPq7T5.cjs → page-header-9Q9vOrh-.cjs} +3 -9
  557. package/dist/page-header-9Q9vOrh-.cjs.map +1 -0
  558. package/dist/{page-header-Bf0zLkyY.js → page-header-d2cK2zOg.js} +3 -9
  559. package/dist/page-header-d2cK2zOg.js.map +1 -0
  560. package/dist/pagination-range-BlUsZjqD.js +191 -0
  561. package/dist/pagination-range-BlUsZjqD.js.map +1 -0
  562. package/dist/pagination-range-C0i6gunh.cjs +200 -0
  563. package/dist/pagination-range-C0i6gunh.cjs.map +1 -0
  564. package/dist/{plan-CdtX72kw.cjs → plan-CL-lbDuy.cjs} +4 -4
  565. package/dist/{plan-CdtX72kw.cjs.map → plan-CL-lbDuy.cjs.map} +1 -1
  566. package/dist/{plan-Cl3-JgbI.js → plan-TXWANP1R.js} +4 -4
  567. package/dist/{plan-Cl3-JgbI.js.map → plan-TXWANP1R.js.map} +1 -1
  568. package/dist/primitives/menu-item.cjs.js +1 -1
  569. package/dist/primitives/menu-item.es.js +1 -1
  570. package/dist/primitives/raised-surface.cjs.js +2 -0
  571. package/dist/primitives/raised-surface.cjs.js.map +1 -1
  572. package/dist/primitives/raised-surface.es.js +2 -1
  573. package/dist/primitives/raised-surface.es.js.map +1 -1
  574. package/dist/primitives/trigger-button.cjs.js +1 -1
  575. package/dist/primitives/trigger-button.es.js +1 -1
  576. package/dist/{property-filter-applied-BeLCh3zo.cjs → property-filter-applied-BBvaTC4B.cjs} +2 -2
  577. package/dist/{property-filter-applied-BeLCh3zo.cjs.map → property-filter-applied-BBvaTC4B.cjs.map} +1 -1
  578. package/dist/{property-filter-applied-CZLzY0OH.js → property-filter-applied-Ru3OQoGo.js} +2 -2
  579. package/dist/{property-filter-applied-CZLzY0OH.js.map → property-filter-applied-Ru3OQoGo.js.map} +1 -1
  580. package/dist/{reasoning-activity-DehWtcyc.cjs → reasoning-activity-CFEaSv4J.cjs} +2 -2
  581. package/dist/{reasoning-activity-DehWtcyc.cjs.map → reasoning-activity-CFEaSv4J.cjs.map} +1 -1
  582. package/dist/{reasoning-activity-CIuVSAGA.js → reasoning-activity-CHlEe011.js} +2 -2
  583. package/dist/{reasoning-activity-CIuVSAGA.js.map → reasoning-activity-CHlEe011.js.map} +1 -1
  584. package/dist/resize/panel-drawer.cjs.js +1 -1
  585. package/dist/resize/panel-drawer.es.js +1 -1
  586. package/dist/{search-input-UtTJMjJu.cjs → search-input-2DhcUIvn.cjs} +2 -2
  587. package/dist/{search-input-UtTJMjJu.cjs.map → search-input-2DhcUIvn.cjs.map} +1 -1
  588. package/dist/{search-input-fqSrRTLU.js → search-input-RybUdqzg.js} +2 -2
  589. package/dist/{search-input-fqSrRTLU.js.map → search-input-RybUdqzg.js.map} +1 -1
  590. package/dist/{select-N2lgBRsg.js → select-BvYdi3X0.js} +2 -2
  591. package/dist/{select-N2lgBRsg.js.map → select-BvYdi3X0.js.map} +1 -1
  592. package/dist/{select-Cdz5I0A5.cjs → select-D5cu0K7R.cjs} +2 -2
  593. package/dist/{select-Cdz5I0A5.cjs.map → select-D5cu0K7R.cjs.map} +1 -1
  594. package/dist/{side-dialog-DldgOJIk.cjs → side-dialog-CUQGSSLs.cjs} +4 -4
  595. package/dist/{side-dialog-DldgOJIk.cjs.map → side-dialog-CUQGSSLs.cjs.map} +1 -1
  596. package/dist/{side-dialog-CWQL33WR.js → side-dialog-DSxU1To7.js} +4 -4
  597. package/dist/{side-dialog-CWQL33WR.js.map → side-dialog-DSxU1To7.js.map} +1 -1
  598. package/dist/{span-payload-primitives-sEGOgFlX.cjs → span-payload-primitives-DIxmotnO.cjs} +2 -2
  599. package/dist/{span-payload-primitives-sEGOgFlX.cjs.map → span-payload-primitives-DIxmotnO.cjs.map} +1 -1
  600. package/dist/{span-payload-primitives-WqYTBiGx.js → span-payload-primitives-dTs5UrjA.js} +2 -2
  601. package/dist/{span-payload-primitives-WqYTBiGx.js.map → span-payload-primitives-dTs5UrjA.js.map} +1 -1
  602. package/dist/src/ds/components/Avatar/avatar-group.d.ts +1 -1
  603. package/dist/src/ds/components/DataPanel/data-panel-context.d.ts +3 -0
  604. package/dist/src/ds/components/DataPanel/data-panel-root.d.ts +28 -9
  605. package/dist/src/ds/components/DataPanel/index.d.ts +1 -1
  606. package/dist/src/ds/components/Pagination/index.d.ts +2 -0
  607. package/dist/src/ds/components/Pagination/pagination-context.d.ts +10 -0
  608. package/dist/src/ds/components/Pagination/pagination-range.d.ts +8 -0
  609. package/dist/src/ds/components/Pagination/pagination.d.ts +23 -0
  610. package/dist/src/ds/components/ProductAvatar/ProductAvatar.d.ts +3 -1
  611. package/dist/src/ds/components/ProductAvatar/product-avatar-size.d.ts +3 -0
  612. package/dist/src/ds/components/Table/Cells.d.ts +6 -2
  613. package/dist/src/ds/components/Table/Table.d.ts +30 -7
  614. package/dist/src/ds/components/Table/index.d.ts +10 -0
  615. package/dist/src/ds/components/Table/table-align.d.ts +7 -0
  616. package/dist/src/ds/components/Table/table-context.d.ts +4 -0
  617. package/dist/src/ds/components/Table/table-pagination.d.ts +7 -0
  618. package/dist/src/ds/components/Table/table-row-button.d.ts +3 -0
  619. package/dist/src/ds/components/Table/table-row-link.d.ts +3 -0
  620. package/dist/src/ds/components/Table/table-row-target.d.ts +2 -0
  621. package/dist/src/ds/components/Table/table-sort-button.d.ts +6 -0
  622. package/dist/src/ds/primitives/raised-surface.d.ts +5 -0
  623. package/dist/src/ee/signals/components/entity-index-model.d.ts +5 -0
  624. package/dist/src/ee/signals/components/entity-index-status.d.ts +4 -0
  625. package/dist/style.css +200 -24
  626. package/dist/{tabs-tab-D9ndsGQu.cjs → tabs-tab-CqcY4tHE.cjs} +2 -2
  627. package/dist/{tabs-tab-D9ndsGQu.cjs.map → tabs-tab-CqcY4tHE.cjs.map} +1 -1
  628. package/dist/{tabs-tab-BchiQf0E.js → tabs-tab-CzpXzpf-.js} +2 -2
  629. package/dist/{tabs-tab-BchiQf0E.js.map → tabs-tab-CzpXzpf-.js.map} +1 -1
  630. package/dist/{thread-list-D6tyuO1M.cjs → thread-list-D-VuTZnC.cjs} +2 -2
  631. package/dist/{thread-list-D6tyuO1M.cjs.map → thread-list-D-VuTZnC.cjs.map} +1 -1
  632. package/dist/{thread-list-2YHnS82L.js → thread-list-Duf5N74Z.js} +2 -2
  633. package/dist/{thread-list-2YHnS82L.js.map → thread-list-Duf5N74Z.js.map} +1 -1
  634. package/dist/{time-picker-J7GaNaEd.js → time-picker-CF6_miti.js} +2 -2
  635. package/dist/{time-picker-J7GaNaEd.js.map → time-picker-CF6_miti.js.map} +1 -1
  636. package/dist/{time-picker-D7hr3X0_.cjs → time-picker-DbDeIg8E.cjs} +2 -2
  637. package/dist/{time-picker-D7hr3X0_.cjs.map → time-picker-DbDeIg8E.cjs.map} +1 -1
  638. package/dist/{tool-approval-BpskZTWy.cjs → tool-approval-S6ml_xyU.cjs} +3 -3
  639. package/dist/{tool-approval-BpskZTWy.cjs.map → tool-approval-S6ml_xyU.cjs.map} +1 -1
  640. package/dist/{tool-approval-nsbG8-qI.js → tool-approval-TB8r2U_c.js} +3 -3
  641. package/dist/{tool-approval-nsbG8-qI.js.map → tool-approval-TB8r2U_c.js.map} +1 -1
  642. package/dist/{tool-call-arguments-RKyYP3xh.js → tool-call-arguments-CCkJ1btR.js} +3 -3
  643. package/dist/{tool-call-arguments-RKyYP3xh.js.map → tool-call-arguments-CCkJ1btR.js.map} +1 -1
  644. package/dist/{tool-call-arguments-Bj2MA4SW.cjs → tool-call-arguments-DyukJmhY.cjs} +3 -3
  645. package/dist/{tool-call-arguments-Bj2MA4SW.cjs.map → tool-call-arguments-DyukJmhY.cjs.map} +1 -1
  646. package/dist/{tool-call-mono-BAYC7OZl.js → tool-call-mono-CASKyxNt.js} +2 -2
  647. package/dist/{tool-call-mono-BAYC7OZl.js.map → tool-call-mono-CASKyxNt.js.map} +1 -1
  648. package/dist/{tool-call-mono-C42l0zrM.cjs → tool-call-mono-D8XffwXR.cjs} +2 -2
  649. package/dist/{tool-call-mono-C42l0zrM.cjs.map → tool-call-mono-D8XffwXR.cjs.map} +1 -1
  650. package/dist/{tool-call-output-CO6lqtGh.js → tool-call-output-qgqn19KC.js} +2 -2
  651. package/dist/{tool-call-output-CO6lqtGh.js.map → tool-call-output-qgqn19KC.js.map} +1 -1
  652. package/dist/{tool-call-output-BDua5O1z.cjs → tool-call-output-xx1drXqO.cjs} +2 -2
  653. package/dist/{tool-call-output-BDua5O1z.cjs.map → tool-call-output-xx1drXqO.cjs.map} +1 -1
  654. package/dist/{tool-card-BtPh44u6.js → tool-card-BftktBoV.js} +4 -4
  655. package/dist/{tool-card-BtPh44u6.js.map → tool-card-BftktBoV.js.map} +1 -1
  656. package/dist/{tool-card-C0pNVEva.cjs → tool-card-NFkMpChW.cjs} +4 -4
  657. package/dist/{tool-card-C0pNVEva.cjs.map → tool-card-NFkMpChW.cjs.map} +1 -1
  658. package/dist/{traces-data-list-_mFOMw0U.js → traces-data-list-1X6UBM6Y.js} +2 -4
  659. package/dist/{traces-data-list-_mFOMw0U.js.map → traces-data-list-1X6UBM6Y.js.map} +1 -1
  660. package/dist/{traces-data-list-Cf_PpmSN.cjs → traces-data-list-BXSXW3E6.cjs} +17 -19
  661. package/dist/{traces-data-list-Cf_PpmSN.cjs.map → traces-data-list-BXSXW3E6.cjs.map} +1 -1
  662. package/dist/{use-workflow-graph-runtime-CwDL7DzY.cjs → use-workflow-graph-runtime-C8TkqjvM.cjs} +3 -3
  663. package/dist/{use-workflow-graph-runtime-CwDL7DzY.cjs.map → use-workflow-graph-runtime-C8TkqjvM.cjs.map} +1 -1
  664. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js → use-workflow-graph-runtime-DX56livO.js} +3 -3
  665. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js.map → use-workflow-graph-runtime-DX56livO.js.map} +1 -1
  666. package/dist/{workflow-code-dialog-content-CNDoMFAV.js → workflow-code-dialog-content-DG-Lmvgu.js} +3 -3
  667. package/dist/{workflow-code-dialog-content-CNDoMFAV.js.map → workflow-code-dialog-content-DG-Lmvgu.js.map} +1 -1
  668. package/dist/{workflow-code-dialog-content-B7YU2kfe.cjs → workflow-code-dialog-content-vC_ddCYp.cjs} +3 -3
  669. package/dist/{workflow-code-dialog-content-B7YU2kfe.cjs.map → workflow-code-dialog-content-vC_ddCYp.cjs.map} +1 -1
  670. package/dist/{workflow-condition-card-DnSlcZ2s.js → workflow-condition-card-DMkPh5TM.js} +3 -3
  671. package/dist/{workflow-condition-card-DnSlcZ2s.js.map → workflow-condition-card-DMkPh5TM.js.map} +1 -1
  672. package/dist/{workflow-condition-card-CbaDpVa_.cjs → workflow-condition-card-bn5mrwKe.cjs} +3 -3
  673. package/dist/{workflow-condition-card-CbaDpVa_.cjs.map → workflow-condition-card-bn5mrwKe.cjs.map} +1 -1
  674. package/dist/{workflow-data-edge-view-BaA6YJye.js → workflow-data-edge-view-De0xCrVu.js} +2 -2
  675. package/dist/{workflow-data-edge-view-BaA6YJye.js.map → workflow-data-edge-view-De0xCrVu.js.map} +1 -1
  676. package/dist/{workflow-data-edge-view-BHvpuvmp.cjs → workflow-data-edge-view-kmB6j-ui.cjs} +2 -2
  677. package/dist/{workflow-data-edge-view-BHvpuvmp.cjs.map → workflow-data-edge-view-kmB6j-ui.cjs.map} +1 -1
  678. package/dist/{workflow-debug-controls-h7Q-RlJ2.js → workflow-debug-controls-CJTqoarc.js} +2 -2
  679. package/dist/{workflow-debug-controls-h7Q-RlJ2.js.map → workflow-debug-controls-CJTqoarc.js.map} +1 -1
  680. package/dist/{workflow-debug-controls-D9rmMeH-.cjs → workflow-debug-controls-CqaM7s-K.cjs} +2 -2
  681. package/dist/{workflow-debug-controls-D9rmMeH-.cjs.map → workflow-debug-controls-CqaM7s-K.cjs.map} +1 -1
  682. package/dist/{workflow-edge-data-button-6EDXzRxr.js → workflow-edge-data-button-CXbj67U9.js} +4 -4
  683. package/dist/{workflow-edge-data-button-6EDXzRxr.js.map → workflow-edge-data-button-CXbj67U9.js.map} +1 -1
  684. package/dist/{workflow-edge-data-button-Cz2rcoDr.cjs → workflow-edge-data-button-av1zCMfP.cjs} +4 -4
  685. package/dist/{workflow-edge-data-button-Cz2rcoDr.cjs.map → workflow-edge-data-button-av1zCMfP.cjs.map} +1 -1
  686. package/dist/{workflow-step-action-DmUW2AMM.js → workflow-step-action-AG05Ly8P.js} +2 -2
  687. package/dist/{workflow-step-action-DmUW2AMM.js.map → workflow-step-action-AG05Ly8P.js.map} +1 -1
  688. package/dist/{workflow-step-action-Ssz6Z2t5.cjs → workflow-step-action-BsBZk7j6.cjs} +2 -2
  689. package/dist/{workflow-step-action-Ssz6Z2t5.cjs.map → workflow-step-action-BsBZk7j6.cjs.map} +1 -1
  690. package/package.json +11 -11
  691. package/dist/Avatar-C2Sz53u5.js.map +0 -1
  692. package/dist/Avatar-D6ybWljK.cjs.map +0 -1
  693. package/dist/Button-BfZzgZrA.cjs.map +0 -1
  694. package/dist/Button-C8QDEN9j.js.map +0 -1
  695. package/dist/data-list-DkVOwk8l.cjs +0 -142
  696. package/dist/data-list-DkVOwk8l.cjs.map +0 -1
  697. package/dist/data-list-Dv2lP-dU.js +0 -138
  698. package/dist/data-list-Dv2lP-dU.js.map +0 -1
  699. package/dist/data-list-spacer-DEMquKp9.js +0 -209
  700. package/dist/data-list-spacer-DEMquKp9.js.map +0 -1
  701. package/dist/data-list-spacer-pXP8xDlg.cjs +0 -218
  702. package/dist/data-list-spacer-pXP8xDlg.cjs.map +0 -1
  703. package/dist/data-list-top-BJCC62oy.js.map +0 -1
  704. package/dist/data-list-top-Ds-NWyPO.cjs.map +0 -1
  705. package/dist/data-panel-COU5dbUJ.js.map +0 -1
  706. package/dist/data-panel-CTqb-0qN.cjs.map +0 -1
  707. package/dist/page-header-Bf0zLkyY.js.map +0 -1
  708. package/dist/page-header-CLxPq7T5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"plan-Cl3-JgbI.js","sources":["../src/ds/components/ai/plan/plan.tsx"],"sourcesContent":["import { CheckIcon, ClipboardList, CopyIcon, Maximize2, Minimize2 } from 'lucide-react';\nimport { createContext, useContext } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { CollapsibleBox, DEFAULT_COLLAPSED_HEIGHT, useCollapsibleBox } from '@/ds/components/CollapsibleBox';\nimport type { CollapsibleBoxState } from '@/ds/components/CollapsibleBox';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nconst PlanContext = createContext<CollapsibleBoxState | null>(null);\n\nconst usePlanContext = () => {\n const context = useContext(PlanContext);\n\n if (!context) {\n throw new Error('Plan compound components must be rendered inside <Plan>.');\n }\n\n return context;\n};\n\nexport interface PlanProps extends ComponentProps<'div'> {\n collapsedHeight?: number;\n}\n\nexport function Plan({ children, collapsedHeight = DEFAULT_COLLAPSED_HEIGHT, className, ...props }: PlanProps) {\n const contextValue = useCollapsibleBox({ collapsedHeight });\n\n return (\n <PlanContext.Provider value={contextValue}>\n <div data-slot=\"plan\" className={cn('w-full overflow-hidden rounded-xl bg-card', className)} {...props}>\n {children}\n </div>\n </PlanContext.Provider>\n );\n}\n\nexport type PlanHeaderProps = ComponentProps<'div'>;\n\nexport function PlanHeader({ children, className, ...props }: PlanHeaderProps) {\n return (\n <div\n data-slot=\"plan-header\"\n className={cn('flex min-h-10 items-center justify-between gap-3 px-4 pt-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type PlanLabelProps = ComponentProps<'div'>;\n\nexport function PlanLabel({ children = 'Plan', className, ...props }: PlanLabelProps) {\n return (\n <div data-slot=\"plan-label\" className={cn('flex min-w-0 items-center gap-2', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <ClipboardList />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanHeaderActionsProps = ComponentProps<'div'>;\n\nexport function PlanHeaderActions({ children, className, ...props }: PlanHeaderActionsProps) {\n return (\n <div data-slot=\"plan-header-actions\" className={cn('flex shrink-0 items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanStatusProps = Omit<ComponentProps<typeof Badge>, 'icon' | 'indicator' | 'size'>;\n\nexport function PlanStatus({ children, variant = 'neutral', ...props }: PlanStatusProps) {\n return (\n <Badge {...props} variant={variant} size=\"xs\" indicator=\"dot\">\n {children}\n </Badge>\n );\n}\n\nexport interface PlanCopyButtonProps extends Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'tooltip' | 'type' | 'variant'\n> {\n content: string;\n}\n\nexport function PlanCopyButton({ content, ...props }: PlanCopyButtonProps) {\n const { isCopied, handleCopy } = useCopyToClipboard({\n text: content,\n copiedDuration: 1500,\n showToast: false,\n });\n\n return (\n <Button\n {...props}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n tooltip=\"Copy plan\"\n aria-label=\"Copy plan\"\n onClick={handleCopy}\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n );\n}\n\nexport type PlanBodyProps = ComponentProps<'div'>;\n\nexport function PlanBody({ children, className, ...props }: PlanBodyProps) {\n return (\n <div data-slot=\"plan-body\" className={cn('px-5 pt-4 pb-5', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanIntroProps = ComponentProps<'div'>;\n\nexport function PlanIntro({ children, className, ...props }: PlanIntroProps) {\n return (\n <div data-slot=\"plan-intro\" className={cn('mb-5 space-y-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanTitleProps extends Omit<ComponentProps<typeof Txt<'h3'>>, 'as' | 'children' | 'variant'> {\n children: ReactNode;\n}\n\nexport function PlanTitle({ children, className, ...props }: PlanTitleProps) {\n return (\n <Txt {...props} as=\"h3\" variant=\"heading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n\nexport interface PlanPathProps extends Omit<\n ComponentProps<typeof Txt<'p'>>,\n 'as' | 'children' | 'font' | 'title' | 'variant'\n> {\n children: string;\n}\n\nconst getFileName = (path: string) => {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? path;\n};\n\nexport function PlanPath({ children, className, ...props }: PlanPathProps) {\n return (\n <Txt\n {...props}\n as=\"p\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n title={children}\n className={cn('max-w-full truncate overflow-hidden', className)}\n >\n {getFileName(children)}\n </Txt>\n );\n}\n\nexport type PlanMainProps = ComponentProps<'div'>;\n\nexport function PlanMain({ children, className, ...props }: PlanMainProps) {\n return (\n <div data-slot=\"plan-main\" className={cn('relative', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanContentProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanContent({ children, ...props }: PlanContentProps) {\n const state = usePlanContext();\n\n return (\n <CollapsibleBox data-slot=\"plan-content\" state={state} {...props}>\n <div className=\"[&_code]:bg-muted [&_h1]:text-title [&_h2]:text-heading [&_h3]:text-subheading [&_p]:text-body\">\n <MarkdownRenderer className=\"text-foreground\">{children}</MarkdownRenderer>\n </div>\n </CollapsibleBox>\n );\n}\n\nexport interface PlanFileProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanFile({ children, className, ...props }: PlanFileProps) {\n return (\n <div data-slot=\"plan-file\" className={className} {...props}>\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className=\"mb-2\">\n Plan file\n </Txt>\n <Txt as=\"p\" variant=\"caption\" tone=\"ink\" font=\"mono\" className=\"break-all\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanControlsProps = ComponentProps<'div'>;\n\nexport function PlanControls({ children, className, ...props }: PlanControlsProps) {\n const hasActions = Boolean(children);\n\n return (\n <div\n data-slot=\"plan-controls\"\n className={cn('relative z-10 mt-4 flex justify-center empty:hidden', className)}\n {...props}\n >\n {hasActions ? (\n <div className=\"grid w-full max-w-sm grid-cols-[1fr_auto_1fr] items-center gap-2 px-10\">{children}</div>\n ) : (\n <PlanExpandButton />\n )}\n </div>\n );\n}\n\nexport type PlanActionGroupProps = ComponentProps<'div'>;\n\nexport function PlanActionGroup({ children, className, ...props }: PlanActionGroupProps) {\n return (\n <div data-slot=\"plan-action-group\" className={cn('flex justify-start gap-2 empty:hidden', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanExpandButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'type'\n>;\n\nexport function PlanExpandButton({ className, variant = 'default', ...props }: PlanExpandButtonProps) {\n const { isExpanded, isClipped, toggleExpanded } = usePlanContext();\n\n // Nothing to expand: the collapsed card already shows the whole plan.\n if (!isClipped && !isExpanded) return null;\n\n return (\n <Button\n {...props}\n className={cn('shrink-0 whitespace-nowrap', className)}\n type=\"button\"\n variant={variant}\n size=\"sm\"\n aria-label={isExpanded ? 'Collapse plan' : 'Expand plan'}\n onClick={toggleExpanded}\n icon={isExpanded ? <Minimize2 /> : <Maximize2 />}\n >\n {isExpanded ? 'Collapse plan' : 'Expand plan'}\n </Button>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-TXWANP1R.js","sources":["../src/ds/components/ai/plan/plan.tsx"],"sourcesContent":["import { CheckIcon, ClipboardList, CopyIcon, Maximize2, Minimize2 } from 'lucide-react';\nimport { createContext, useContext } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { CollapsibleBox, DEFAULT_COLLAPSED_HEIGHT, useCollapsibleBox } from '@/ds/components/CollapsibleBox';\nimport type { CollapsibleBoxState } from '@/ds/components/CollapsibleBox';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\nimport { cn } from '@/lib/utils';\n\nconst PlanContext = createContext<CollapsibleBoxState | null>(null);\n\nconst usePlanContext = () => {\n const context = useContext(PlanContext);\n\n if (!context) {\n throw new Error('Plan compound components must be rendered inside <Plan>.');\n }\n\n return context;\n};\n\nexport interface PlanProps extends ComponentProps<'div'> {\n collapsedHeight?: number;\n}\n\nexport function Plan({ children, collapsedHeight = DEFAULT_COLLAPSED_HEIGHT, className, ...props }: PlanProps) {\n const contextValue = useCollapsibleBox({ collapsedHeight });\n\n return (\n <PlanContext.Provider value={contextValue}>\n <div data-slot=\"plan\" className={cn('w-full overflow-hidden rounded-xl bg-card', className)} {...props}>\n {children}\n </div>\n </PlanContext.Provider>\n );\n}\n\nexport type PlanHeaderProps = ComponentProps<'div'>;\n\nexport function PlanHeader({ children, className, ...props }: PlanHeaderProps) {\n return (\n <div\n data-slot=\"plan-header\"\n className={cn('flex min-h-10 items-center justify-between gap-3 px-4 pt-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type PlanLabelProps = ComponentProps<'div'>;\n\nexport function PlanLabel({ children = 'Plan', className, ...props }: PlanLabelProps) {\n return (\n <div data-slot=\"plan-label\" className={cn('flex min-w-0 items-center gap-2', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <ClipboardList />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanHeaderActionsProps = ComponentProps<'div'>;\n\nexport function PlanHeaderActions({ children, className, ...props }: PlanHeaderActionsProps) {\n return (\n <div data-slot=\"plan-header-actions\" className={cn('flex shrink-0 items-center gap-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanStatusProps = Omit<ComponentProps<typeof Badge>, 'icon' | 'indicator' | 'size'>;\n\nexport function PlanStatus({ children, variant = 'neutral', ...props }: PlanStatusProps) {\n return (\n <Badge {...props} variant={variant} size=\"xs\" indicator=\"dot\">\n {children}\n </Badge>\n );\n}\n\nexport interface PlanCopyButtonProps extends Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'tooltip' | 'type' | 'variant'\n> {\n content: string;\n}\n\nexport function PlanCopyButton({ content, ...props }: PlanCopyButtonProps) {\n const { isCopied, handleCopy } = useCopyToClipboard({\n text: content,\n copiedDuration: 1500,\n showToast: false,\n });\n\n return (\n <Button\n {...props}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n tooltip=\"Copy plan\"\n aria-label=\"Copy plan\"\n onClick={handleCopy}\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n );\n}\n\nexport type PlanBodyProps = ComponentProps<'div'>;\n\nexport function PlanBody({ children, className, ...props }: PlanBodyProps) {\n return (\n <div data-slot=\"plan-body\" className={cn('px-5 pt-4 pb-5', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanIntroProps = ComponentProps<'div'>;\n\nexport function PlanIntro({ children, className, ...props }: PlanIntroProps) {\n return (\n <div data-slot=\"plan-intro\" className={cn('mb-5 space-y-1', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanTitleProps extends Omit<ComponentProps<typeof Txt<'h3'>>, 'as' | 'children' | 'variant'> {\n children: ReactNode;\n}\n\nexport function PlanTitle({ children, className, ...props }: PlanTitleProps) {\n return (\n <Txt {...props} as=\"h3\" variant=\"heading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n\nexport interface PlanPathProps extends Omit<\n ComponentProps<typeof Txt<'p'>>,\n 'as' | 'children' | 'font' | 'title' | 'variant'\n> {\n children: string;\n}\n\nconst getFileName = (path: string) => {\n const segments = path.split(/[\\\\/]/).filter(Boolean);\n return segments[segments.length - 1] ?? path;\n};\n\nexport function PlanPath({ children, className, ...props }: PlanPathProps) {\n return (\n <Txt\n {...props}\n as=\"p\"\n variant=\"meta\"\n tone=\"muted\"\n font=\"mono\"\n title={children}\n className={cn('max-w-full truncate overflow-hidden', className)}\n >\n {getFileName(children)}\n </Txt>\n );\n}\n\nexport type PlanMainProps = ComponentProps<'div'>;\n\nexport function PlanMain({ children, className, ...props }: PlanMainProps) {\n return (\n <div data-slot=\"plan-main\" className={cn('relative', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface PlanContentProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanContent({ children, ...props }: PlanContentProps) {\n const state = usePlanContext();\n\n return (\n <CollapsibleBox data-slot=\"plan-content\" state={state} {...props}>\n <div className=\"[&_code]:bg-muted [&_h1]:text-title [&_h2]:text-heading [&_h3]:text-subheading [&_p]:text-body\">\n <MarkdownRenderer className=\"text-foreground\">{children}</MarkdownRenderer>\n </div>\n </CollapsibleBox>\n );\n}\n\nexport interface PlanFileProps extends Omit<ComponentProps<'div'>, 'children'> {\n children: string;\n}\n\nexport function PlanFile({ children, className, ...props }: PlanFileProps) {\n return (\n <div data-slot=\"plan-file\" className={className} {...props}>\n <Txt as=\"p\" variant=\"meta\" tone=\"muted\" className=\"mb-2\">\n Plan file\n </Txt>\n <Txt as=\"p\" variant=\"caption\" tone=\"ink\" font=\"mono\" className=\"break-all\">\n {children}\n </Txt>\n </div>\n );\n}\n\nexport type PlanControlsProps = ComponentProps<'div'>;\n\nexport function PlanControls({ children, className, ...props }: PlanControlsProps) {\n const hasActions = Boolean(children);\n\n return (\n <div\n data-slot=\"plan-controls\"\n className={cn('relative z-10 mt-4 flex justify-center empty:hidden', className)}\n {...props}\n >\n {hasActions ? (\n <div className=\"grid w-full max-w-sm grid-cols-[1fr_auto_1fr] items-center gap-2 px-10\">{children}</div>\n ) : (\n <PlanExpandButton />\n )}\n </div>\n );\n}\n\nexport type PlanActionGroupProps = ComponentProps<'div'>;\n\nexport function PlanActionGroup({ children, className, ...props }: PlanActionGroupProps) {\n return (\n <div data-slot=\"plan-action-group\" className={cn('flex justify-start gap-2 empty:hidden', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PlanExpandButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'aria-label' | 'children' | 'onClick' | 'size' | 'type'\n>;\n\nexport function PlanExpandButton({ className, variant = 'default', ...props }: PlanExpandButtonProps) {\n const { isExpanded, isClipped, toggleExpanded } = usePlanContext();\n\n // Nothing to expand: the collapsed card already shows the whole plan.\n if (!isClipped && !isExpanded) return null;\n\n return (\n <Button\n {...props}\n className={cn('shrink-0 whitespace-nowrap', className)}\n type=\"button\"\n variant={variant}\n size=\"sm\"\n aria-label={isExpanded ? 'Collapse plan' : 'Expand plan'}\n onClick={toggleExpanded}\n icon={isExpanded ? <Minimize2 /> : <Maximize2 />}\n >\n {isExpanded ? 'Collapse plan' : 'Expand plan'}\n </Button>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const Button = require('../Button-BfZzgZrA.cjs');
5
+ const Button = require('../Button-CAVPKK09.cjs');
6
6
  const primitives_raisedSurface = require('./raised-surface.cjs.js');
7
7
  const utils_cn = require('../cn-TqD01zH-.cjs');
8
8
 
@@ -1,4 +1,4 @@
1
- import { b as buttonVariants } from '../Button-C8QDEN9j.js';
1
+ import { b as buttonVariants } from '../Button-60jVnaHt.js';
2
2
  import { overlaySurfaceStyle } from './raised-surface.es.js';
3
3
  import { c as cn } from '../cn-coERSHz5.js';
4
4
 
@@ -9,10 +9,12 @@ const raisedSurfaceStyle = "bg-card hover:bg-card active:bg-card shadow-raised "
9
9
  const overlaySurfaceStyle = "bg-card shadow-overlay " + fieldsOnSurface;
10
10
  const dialogSurfaceStyle = "bg-dialog shadow-overlay " + fieldsOnDialog;
11
11
  const frameSurfaceStyle = "bg-background shadow-raised " + fieldsOnPage;
12
+ const frameFillStyle = "bg-background " + fieldsOnPage;
12
13
  const surfaceStateLayerStyle = "state-layer";
13
14
  const surfaceGroupStateLayerStyle = "relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle";
14
15
 
15
16
  exports.dialogSurfaceStyle = dialogSurfaceStyle;
17
+ exports.frameFillStyle = frameFillStyle;
16
18
  exports.frameSurfaceStyle = frameSurfaceStyle;
17
19
  exports.overlaySurfaceStyle = overlaySurfaceStyle;
18
20
  exports.raisedSurfaceStyle = raisedSurfaceStyle;
@@ -1 +1 @@
1
- {"version":3,"file":"raised-surface.cjs.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `src/index.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":";;;;AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAO3D,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;;;;;;"}
1
+ {"version":3,"file":"raised-surface.cjs.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `src/index.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":";;;;AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAM3D,MAAM,iBAAiB,gBAAA,GAAmB;AAO1C,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;;;;;;;"}
@@ -5,8 +5,9 @@ const raisedSurfaceStyle = "bg-card hover:bg-card active:bg-card shadow-raised "
5
5
  const overlaySurfaceStyle = "bg-card shadow-overlay " + fieldsOnSurface;
6
6
  const dialogSurfaceStyle = "bg-dialog shadow-overlay " + fieldsOnDialog;
7
7
  const frameSurfaceStyle = "bg-background shadow-raised " + fieldsOnPage;
8
+ const frameFillStyle = "bg-background " + fieldsOnPage;
8
9
  const surfaceStateLayerStyle = "state-layer";
9
10
  const surfaceGroupStateLayerStyle = "relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle";
10
11
 
11
- export { dialogSurfaceStyle, frameSurfaceStyle, overlaySurfaceStyle, raisedSurfaceStyle, surfaceGroupStateLayerStyle, surfaceStateLayerStyle };
12
+ export { dialogSurfaceStyle, frameFillStyle, frameSurfaceStyle, overlaySurfaceStyle, raisedSurfaceStyle, surfaceGroupStateLayerStyle, surfaceStateLayerStyle };
12
13
  //# sourceMappingURL=raised-surface.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"raised-surface.es.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `src/index.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":"AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAO3D,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;"}
1
+ {"version":3,"file":"raised-surface.es.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `src/index.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":"AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAM3D,MAAM,iBAAiB,gBAAA,GAAmB;AAO1C,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const React = require('react');
7
7
  const primitives_controlSize = require('./control-size.cjs.js');
8
- const Button = require('../Button-BfZzgZrA.cjs');
8
+ const Button = require('../Button-CAVPKK09.cjs');
9
9
  const utils_cn = require('../cn-TqD01zH-.cjs');
10
10
 
11
11
  function _interopNamespaceDefault(e) {
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { controlTriggerOpenStateFor } from './control-size.es.js';
4
- import { B as Button } from '../Button-C8QDEN9j.js';
4
+ import { B as Button } from '../Button-60jVnaHt.js';
5
5
  import { c as cn } from '../cn-coERSHz5.js';
6
6
 
7
7
  function resolveTriggerRender({
@@ -2,7 +2,7 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const lucideReact = require('lucide-react');
5
- const Button = require('./Button-BfZzgZrA.cjs');
5
+ const Button = require('./Button-CAVPKK09.cjs');
6
6
  const dropdownMenu = require('./dropdown-menu-Bg96BCnK.cjs');
7
7
  const React = require('react');
8
8
  const buttonsGroup = require('./buttons-group-C2lPe7sm.cjs');
@@ -340,4 +340,4 @@ function PropertyFilterApplied({
340
340
  exports.PickMultiPanel = PickMultiPanel;
341
341
  exports.PropertyFilterActions = PropertyFilterActions;
342
342
  exports.PropertyFilterApplied = PropertyFilterApplied;
343
- //# sourceMappingURL=property-filter-applied-BeLCh3zo.cjs.map
343
+ //# sourceMappingURL=property-filter-applied-BBvaTC4B.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-filter-applied-BeLCh3zo.cjs","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":["jsxs","jsx","Button","XIcon","DropdownMenu","EllipsisVerticalIcon","SaveIcon","Trash2Icon","cn","menuItemClass","useFluidMenuItemRef","menuItemCheckClass","CheckIcon","useState","useFluidMenu","useMemo","Fragment","menuSearchClasses","SearchIcon","passwordManagerOptOutProps","menuEmptyClass","Spinner","FluidMenuItems","TooltipProvider","Tooltip","TooltipTrigger","ButtonsGroup","ButtonsGroupText","LockIcon","TooltipContent","useRef","useEffect","Input","Popover","PopoverTrigger","PopoverContent","MENU_SIDE_OFFSET"],"mappings":"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"}
1
+ {"version":3,"file":"property-filter-applied-BBvaTC4B.cjs","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":["jsxs","jsx","Button","XIcon","DropdownMenu","EllipsisVerticalIcon","SaveIcon","Trash2Icon","cn","menuItemClass","useFluidMenuItemRef","menuItemCheckClass","CheckIcon","useState","useFluidMenu","useMemo","Fragment","menuSearchClasses","SearchIcon","passwordManagerOptOutProps","menuEmptyClass","Spinner","FluidMenuItems","TooltipProvider","Tooltip","TooltipTrigger","ButtonsGroup","ButtonsGroupText","LockIcon","TooltipContent","useRef","useEffect","Input","Popover","PopoverTrigger","PopoverContent","MENU_SIDE_OFFSET"],"mappings":";;;;;;;;;;;;;;;;;AAoBO,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,YAAA,GAAe,CAAC,EAAE,WAAA,IAAe,MAAA,IAAU,aAAA,CAAA;AACjD,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc,OAAO,IAAA;AAEtC,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,OAAA,oBACCC,cAAA,CAACC,aAAA,EAAA,EAAO,QAAA,EAAoB,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,OAAA,EAAS,IAAA,kBAAMD,cAAA,CAACE,iBAAA,EAAA,EAAM,CAAA,EAAI,QAAA,EAAA,OAAA,EAEzE,CAAA;AAAA,IAGD,YAAA,oCACEC,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,cAAA,CAACG,yBAAA,CAAa,OAAA,EAAb,EAAqB,OAAA,EAAO,MAC3B,QAAA,kBAAAH,cAAA,CAACC,aAAA,EAAA,EAAO,QAAA,EAAoB,IAAA,EAAK,MAAK,YAAA,EAAW,qBAAA,EAC/C,QAAA,kBAAAD,cAAA,CAACI,gCAAA,EAAA,EAAqB,GACxB,CAAA,EACF,CAAA;AAAA,sBACAL,eAAA,CAACI,yBAAA,CAAa,OAAA,EAAb,EAAqB,OAAM,KAAA,EACzB,QAAA,EAAA;AAAA,QAAA,WAAA,oCACEA,yBAAA,CAAa,IAAA,EAAb,EAAkB,QAAA,EAAU,MAAM,aAAY,EAC7C,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAACE,iBAAA,EAAA,EAAM,CAAA;AAAA,UAAE;AAAA,SAAA,EAEX,CAAA;AAAA,QAED,gBAAgB,MAAA,IAAU,aAAA,CAAA,oBAAkBF,cAAA,CAACG,yBAAA,CAAa,WAAb,EAAuB,CAAA;AAAA,QACpE,MAAA,oCACEA,yBAAA,CAAa,IAAA,EAAb,EAAkB,QAAA,EAAU,MAAM,QAAO,EACxC,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAACK,oBAAA,EAAA,EAAS,CAAA;AAAA,UAAE;AAAA,SAAA,EAEd,CAAA;AAAA,QAED,aAAA,oCACEF,yBAAA,CAAa,IAAA,EAAb,EAAkB,QAAA,EAAU,MAAM,eAAc,EAC/C,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAACM,sBAAA,EAAA,EAAW,CAAA;AAAA,UAAE;AAAA,SAAA,EAEhB;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;AC3DA,MAAM,kBAAA,GAAqBC,WAAA,CAAGC,iCAAA,EAAe,+BAA+B,CAAA;AAE5E,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,uBACET,eAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAKU,wCAAA,EAAuC;AAAA,MAC5C,IAAA,EAAK,QAAA;AAAA,MACL,IAAA;AAAA,MACA,cAAA,EAAc,OAAA;AAAA,MACd,iBAAe,OAAA,IAAW,MAAA;AAAA,MAC1B,sBAAA,EAAqB,EAAA;AAAA,MACrB,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW,kBAAA;AAAA,MACX,OAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAChD,2BACCA,cAAA,CAAC,MAAA,EAAA,EAAK,WAAWU,sCAAA,EACf,QAAA,kBAAAV,cAAA,CAACW,yBAAU,CAAA,EACb;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAiBO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAS,EAAwB;AAC/E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,OAAOC,iCAAA,EAA6B;AAC1C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,SAAA,EAAWN,WAAA,CAAG,iCAAA,EAAmC,IAAA,CAAK,kBAAkB,CAAA;AAAA,IACxE,GAAG,IAAA,CAAK,iBAAA,CAAkB,EAAE;AAAA,GAC9B;AAEA,EAAA,MAAM,eAAA,GAAkBO,cAAQ,MAAM;AACpC,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,KAAA,CAAM,OAAA;AACrB,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AAEzB,EAAA,MAAM,KAAA,GAAQA,aAAA,CAAQ,MAAM,MAAA,CAAO,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,KAAY,KAAA,CAAM,EAAE,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,CAAM,EAAE,CAAC,CAAA;AAGxF,EAAA,MAAM,aAAA,GAAgB,OAAO,KAAA,EAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,KAAA,GAAQ,CAAC,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,YAAA,GAAe,MAAA;AAC3G,EAAA,MAAM,cAAA,GAAiBA,cAAkB,MAAM;AAC7C,IAAA,MAAM,QAAQ,KAAA,EAAO,KAAA;AACrB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AACjC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,CAAC,KAAK,CAAA;AAC5C,IAAA,OAAO,EAAC;AAAA,EACV,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBACEf,eAAA,CAAAgB,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,eAAe,KAAA,oBACpBhB,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWiB,sCAAkB,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAAhB,cAAA,CAACiB,sBAAA,EAAA,EAAW,SAAA,EAAWD,qCAAA,CAAkB,IAAA,EAAM,CAAA;AAAA,sBAC/ChB,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,QAAA,EAAU,CAAA,CAAA,KAAK,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACtC,WAAA,EAAa,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,CAAM,aAAa,CAAA,GAAA,CAAA;AAAA,UAChD,WAAWgB,qCAAA,CAAkB,KAAA;AAAA,UAC5B,GAAGE,6DAAA;AAAA,UACJ,WAAW,CAAA,CAAA,KAAK;AACd,YAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC3B,YAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,aAAA,CAAc,OAAA,CAAqB,yBAAyB,CAAA;AAC5E,YAAA,MAAM,KAAA,GAAQ,KAAA,EAAO,aAAA,CAA2B,wCAAwC,CAAA;AACxF,YAAA,IAAI,CAAC,KAAA,EAAO;AACZ,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,KAAA,CAAM,KAAA,EAAM;AAAA,UACd;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAGD,KAAA,CAAM,4BACLnB,eAAA,CAAC,KAAA,EAAA,EAAI,WAAWQ,WAAA,CAAGY,kCAAA,EAAgB,KAAK,CAAA,EACtC,QAAA,EAAA;AAAA,sBAAAnB,cAAA,CAACoB,eAAA,EAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,MAAE;AAAA,KAAA,EAEhE,CAAA,GACE,eAAA,CAAgB,MAAA,KAAW,CAAA,mBAC7BpB,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWO,WAAA,CAAGY,kCAAA,EAAgB,KAAK,CAAA,EAAI,QAAA,EAAA,KAAA,CAAM,SAAA,IAAa,oBAAmB,CAAA,GAChF,KAAA,CAAM,KAAA,mBACRnB,cAAA,CAAC,KAAA,EAAA,EAAK,GAAG,SAAA,EACP,QAAA,kBAAAA,cAAA,CAACqB,mCAAA,EAAA,EAAe,IAAA,EACb,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAA,MAAA,KAAU;AAC7B,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACpD,MAAA,uBACErB,cAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,UAAA;AAAA,UACL,OAAA;AAAA,UACA,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,SAAS,MACP,QAAA;AAAA,YACE,KAAA,CAAM,EAAA;AAAA,YACN,OAAA,GAAU,cAAA,CAAe,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,MAAA,CAAO,KAAK,CAAA,GAAI,CAAC,GAAG,cAAA,EAAgB,MAAA,CAAO,KAAK;AAAA;AAC7F,SAAA;AAAA,QARG,MAAA,CAAO;AAAA,OAUd;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA,EACF,CAAA,mBAEAA,cAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,YAAA,EAAc,GAAG,SAAA,EACzB,QAAA,kBAAAD,eAAA,CAACsB,mCAAA,EAAA,EAAe,IAAA,EACb,QAAA,EAAA;AAAA,MAAA,eAAA,CAAgB,IAAI,CAAA,MAAA,qBACnBrB,cAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAS,kBAAkB,MAAA,CAAO,KAAA;AAAA,UAClC,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,SAAS,MAAM,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,OAAO,KAAK;AAAA,SAAA;AAAA,QAJzC,MAAA,CAAO;AAAA,OAMf,CAAA;AAAA,MACA,CAAC,MAAM,aAAA,oBACNA,cAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,SAAS,aAAA,KAAkB,KAAA;AAAA,UAC3B,KAAA,EAAM,KAAA;AAAA,UACN,OAAA,EAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,KAAK;AAAA;AAAA;AACzC,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;ACpIA,SAAS,oBAAoB,KAAA,EAA0B;AACrD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC7E,EAAA,OAAO,KAAA;AACT;AAEA,MAAM,sBAAA,GAAyB,uEAAA;AAE/B,SAAS,iBAAA,CAAkB,OAA4B,KAAA,EAAkC;AACvF,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,OAAA,EAAS;AAChD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAC/B,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,IAAS,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,IACrF;AACA,IAAA,OAAO,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,KAAA,KAAU,KAAK,GAAG,KAAA,IAAS,KAAA;AAAA,EAC9D;AACA,EAAA,OAAO,oBAAoB,KAAK,CAAA;AAClC;AAQA,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,KAAA,EAAO,gBAAe,EAAyB;AAC/E,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,4BAAA,CAAA;AAEpC,EAAA,uBACEA,cAAA,CAACsB,uBAAA,EAAA,EAAgB,aAAA,EAAe,GAAA,EAC9B,0CAACC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAvB,cAAA,CAACwB,sBAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAAzB,eAAA;AAAA,MAAC0B,yBAAA;AAAA,MAAA;AAAA,QACC,wBAAsB,KAAA,CAAM,EAAA;AAAA,QAC5B,2BAAA,EAA0B,QAAA;AAAA,QAC1B,QAAA,EAAU,CAAA;AAAA,QACV,YAAA,EAAY,aAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,0BAAAzB,cAAA,CAAC0B,6BAAA,EAAA,EAAkB,gBAAM,KAAA,EAAM,CAAA;AAAA,0BAC/B1B,cAAA,CAAC0B,iCAAiB,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,0BACpB1B,cAAA,CAAC0B,iCAAkB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,0BAC3B1B,cAAA,CAAC0B,6BAAA,EAAA,EACC,QAAA,kBAAA1B,cAAA,CAAC2B,oBAAA,EAAA,EAAS,CAAA,EACZ;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACA3B,cAAA,CAAC4B,0BAAgB,QAAA,EAAA,cAAA,EAAe;AAAA,GAAA,EAClC,CAAA,EACF,CAAA;AAEJ;AAWA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,EAAO,UAAU,QAAA,EAAU,QAAA,EAAU,WAAU,EAAuB;AAIpG,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIhB,eAAS,KAAK,CAAA;AACxC,EAAA,MAAM,QAAA,GAAWiB,aAAyB,IAAI,CAAA;AAE9C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,IAAA,EAAK,KAAM,KAAA,WAAgB,KAAK,CAAA;AAAA,EAE5C,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,EAAW,QAAA,CAAS,OAAA,EAAS,KAAA,EAAM;AAAA,EACzC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,uCACGL,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAzB,cAAA,CAAC0B,6BAAA,EAAA,EAAkB,gBAAM,KAAA,EAAM,CAAA;AAAA,oBAC/B1B,cAAA,CAAC0B,iCAAiB,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,oBACpB1B,cAAA;AAAA,MAAC+B,WAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,QAAA;AAAA,QACA,KAAA,EAAO,KAAA;AAAA,QACP,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,CAAA;AAAA,QACtD,UAAU,CAAA,CAAA,KAAK;AACb,UAAA,MAAM,IAAA,GAAO,EAAE,MAAA,CAAO,KAAA;AACtB,UAAA,QAAA,CAAS,IAAI,CAAA;AAGb,UAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,KAAA,WAAgB,IAAI,CAAA;AAAA,QAC1C,CAAA;AAAA,QACA,WAAW,CAAA,CAAA,KAAK;AACd,UAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,YAAA,IAAI,OAAA,KAAY,KAAA,EAAO,QAAA,CAAS,OAAO,CAAA;AAAA,UACzC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,QAAA,CAAS,KAAK,CAAA;AACd,YAAA,CAAA,CAAE,cAAc,IAAA,EAAK;AAAA,UACvB;AAAA,QACF;AAAA;AAAA,KACF;AAAA,oBACA/B,cAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA;AAAA,QACA,YAAA,EAAY,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,OAAA,CAAA;AAAA,QACjC,WAAA,EAAa,CAAA,CAAA,KAAK,CAAA,CAAE,cAAA,EAAe;AAAA,QACnC,OAAA,EAAS,QAAA;AAAA,QAET,yCAACC,iBAAA,EAAA,EAAM;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;AAWA,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,KAAA,EAAO,QAAQ,QAAA,EAAU,QAAA,EAAU,UAAS,EAA4B;AAC3G,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIU,eAAS,KAAK,CAAA;AAEtC,EAAA,uCACGa,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAzB,cAAA,CAAC0B,6BAAA,EAAA,EAAkB,gBAAM,KAAA,EAAM,CAAA;AAAA,oBAC/B1B,cAAA,CAAC0B,iCAAiB,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,oBACpB3B,eAAA,CAACiC,eAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,OAAA,EACjC,QAAA,EAAA;AAAA,sBAAAhC,cAAA,CAACiC,sBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAjC,cAAA,CAACC,aAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EACnB,QAAA,EAAA,mBAAA,CAAoB,KAAA,CAAM,KAAK,CAAA,EAClC,CAAA,EACF,CAAA;AAAA,sBACAD,cAAA,CAACkC,sBAAA,EAAA,EAAe,KAAA,EAAM,OAAA,EAAQ,YAAYC,oCAAA,EAAkB,SAAA,EAAU,UAAA,EAAW,uBAAA,EAAqB,MACpG,QAAA,kBAAAnC,cAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAc,MAAA,EAAgB,UAAoB,CAAA,EACpE;AAAA,KAAA,EACF,CAAA;AAAA,oBACAA,cAAA,CAACC,aAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,UAAoB,YAAA,EAAY,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,OAAA,CAAA,EAAW,OAAA,EAAS,QAAA,EAC7F,QAAA,kBAAAD,cAAA,CAACE,qBAAM,CAAA,EACT;AAAA,GAAA,EACF,CAAA;AAEJ;AAUO,SAAS,qBAAA,CAAsB;AAAA,EACpC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA,GAAuB;AACzB,CAAA,EAA+B;AAC7B,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEhC,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,cAAA,IAAkB,EAAE,CAAA;AAE9C,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAe,IAAA,KAA8B;AACnE,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,MAAM,CAAA;AACvB,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAkB;AACvC,IAAA,cAAA,CAAe,OAAO,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,uBACEF,cAAA,CAAC,SAAI,SAAA,EAAU,mCAAA,EACZ,iBAAO,GAAA,CAAI,CAAC,OAAO,KAAA,KAAU;AAC5B,IAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,MAAM,OAAO,CAAA;AACrD,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAChC,MAAA,uBACEA,cAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,cAAA,EAAgB;AAAA,SAAA;AAAA,QAHX,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,OAIhC;AAAA,IAEJ;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AACxD,MAAA,uBACEA,cAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,QAAA;AAAA,UACA,SAAA,EAAW,qBAAqB,KAAA,CAAM,OAAA;AAAA,UACtC,QAAA,EAAU,CAAA,SAAA,KAAa,cAAA,CAAe,KAAA,EAAO,EAAE,SAAS,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,UACzF,QAAA,EAAU,MAAM,aAAA,CAAc,KAAK;AAAA,SAAA;AAAA,QAN9B,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,OAOhC;AAAA,IAEJ;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA,uBACEA,cAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UAIA,QAAA,EAAU,CAAC,OAAA,EAAS,KAAA,KAAU,eAAe,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,UACtE,QAAA,EAAU,MAAM,aAAA,CAAc,KAAK;AAAA,SAAA;AAAA,QAT9B,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,OAUhC;AAAA,IAEJ;AAEA,IAAA,uCACGyB,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAzB,cAAA,CAAC0B,6BAAA,EAAA,EAAkB,gBAAM,KAAA,EAAM,CAAA;AAAA,sBAC/B1B,cAAA,CAAC0B,iCAAiB,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,sBACpB1B,cAAA,CAAC0B,6BAAA,EAAA,EAAkB,QAAA,EAAA,mBAAA,CAAoB,KAAA,CAAM,KAAK,CAAA,EAAE,CAAA;AAAA,sBACpD1B,cAAA;AAAA,QAACC,aAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,QAAA;AAAA,UACA,YAAA,EAAY,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,OAAA,CAAA;AAAA,UACjC,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,UAElC,yCAACC,iBAAA,EAAA,EAAM;AAAA;AAAA;AACT,KAAA,EAAA,EAXiB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAY5C,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { XIcon, EllipsisVerticalIcon, SaveIcon, Trash2Icon, SearchIcon, CheckIcon, LockIcon } from 'lucide-react';
3
- import { B as Button } from './Button-C8QDEN9j.js';
3
+ import { B as Button } from './Button-60jVnaHt.js';
4
4
  import { D as DropdownMenu } from './dropdown-menu-D8GR_NhL.js';
5
5
  import { useState, useMemo, useRef, useEffect } from 'react';
6
6
  import { B as ButtonsGroup, a as ButtonsGroupText } from './buttons-group-BU9ErJSH.js';
@@ -336,4 +336,4 @@ function PropertyFilterApplied({
336
336
  }
337
337
 
338
338
  export { PropertyFilterApplied as P, PropertyFilterActions as a, PickMultiPanel as b };
339
- //# sourceMappingURL=property-filter-applied-CZLzY0OH.js.map
339
+ //# sourceMappingURL=property-filter-applied-Ru3OQoGo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-filter-applied-CZLzY0OH.js","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"property-filter-applied-Ru3OQoGo.js","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ const jsxRuntime = require('react/jsx-runtime');
4
4
  const lucideReact = require('lucide-react');
5
5
  const activity = require('./activity-CaFdLiPz.cjs');
6
6
  const reasoningVisibility = require('./reasoning-visibility-DXho4jGC.cjs');
7
- const markdownRenderer = require('./markdown-renderer-DaXAim8y.cjs');
7
+ const markdownRenderer = require('./markdown-renderer-BXTNiZbz.cjs');
8
8
 
9
9
  function ReasoningActivity({ defaultOpen = true, ...content }) {
10
10
  if (!reasoningVisibility.hasVisibleReasoning(content)) return null;
@@ -31,4 +31,4 @@ function ReasoningActivity({ defaultOpen = true, ...content }) {
31
31
  }
32
32
 
33
33
  exports.ReasoningActivity = ReasoningActivity;
34
- //# sourceMappingURL=reasoning-activity-DehWtcyc.cjs.map
34
+ //# sourceMappingURL=reasoning-activity-CFEaSv4J.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning-activity-DehWtcyc.cjs","sources":["../src/ds/components/ai/activity/presets/reasoning-activity.tsx"],"sourcesContent":["import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n"],"names":["hasVisibleReasoning","jsx","ActivityItem","Brain","MarkdownRenderer"],"mappings":";;;;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAACA,uCAAA,CAAoB,OAAO,CAAA,EAAG,OAAO,IAAA;AAE1C,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,GAAI,OAAA;AACtC,EAAA,MAAM,IAAA,GAAO,WAAW,yCAAA,GAA4C,IAAA;AAEpE,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMD,cAAA,CAACE,iBAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,MACzB,KAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,YAAY,SAAA,GAAY,MAAA;AAAA,MAChC,WAAA;AAAA,MACA,YAAA,EAAW,WAAA;AAAA,MAEV,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,oBACpBF,cAAA;AAAA,QAACG,iCAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iDAAA;AAAA,UACV,SAAA,EAAW,aAAa,CAAC,QAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"reasoning-activity-CFEaSv4J.cjs","sources":["../src/ds/components/ai/activity/presets/reasoning-activity.tsx"],"sourcesContent":["import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n"],"names":["hasVisibleReasoning","jsx","ActivityItem","Brain","MarkdownRenderer"],"mappings":";;;;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAACA,uCAAA,CAAoB,OAAO,CAAA,EAAG,OAAO,IAAA;AAE1C,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,GAAI,OAAA;AACtC,EAAA,MAAM,IAAA,GAAO,WAAW,yCAAA,GAA4C,IAAA;AAEpE,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMD,cAAA,CAACE,iBAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,MACzB,KAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,YAAY,SAAA,GAAY,MAAA;AAAA,MAChC,WAAA;AAAA,MACA,YAAA,EAAW,WAAA;AAAA,MAEV,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,oBACpBF,cAAA;AAAA,QAACG,iCAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iDAAA;AAAA,UACV,SAAA,EAAW,aAAa,CAAC,QAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { Brain } from 'lucide-react';
3
3
  import { g as ActivityItem } from './activity-BsrB5ADa.js';
4
4
  import { h as hasVisibleReasoning } from './reasoning-visibility-B9rA0AIj.js';
5
- import { M as MarkdownRenderer } from './markdown-renderer-D5Wjk1Cs.js';
5
+ import { M as MarkdownRenderer } from './markdown-renderer-Ct-q_KTF.js';
6
6
 
7
7
  function ReasoningActivity({ defaultOpen = true, ...content }) {
8
8
  if (!hasVisibleReasoning(content)) return null;
@@ -29,4 +29,4 @@ function ReasoningActivity({ defaultOpen = true, ...content }) {
29
29
  }
30
30
 
31
31
  export { ReasoningActivity as R };
32
- //# sourceMappingURL=reasoning-activity-CIuVSAGA.js.map
32
+ //# sourceMappingURL=reasoning-activity-CHlEe011.js.map