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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/dist/{alert-dialog-DVAC9zdj.js → alert-dialog-Cpx4g1sS.js} +2 -2
  2. package/dist/{alert-dialog-DVAC9zdj.js.map → alert-dialog-Cpx4g1sS.js.map} +1 -1
  3. package/dist/{alert-dialog-C-ODvRWT.cjs → alert-dialog-Djojjgjo.cjs} +2 -2
  4. package/dist/{alert-dialog-C-ODvRWT.cjs.map → alert-dialog-Djojjgjo.cjs.map} +1 -1
  5. package/dist/{code-block-vvYFcnqm.js → code-block-BzUcNWrb.js} +2 -2
  6. package/dist/{code-block-vvYFcnqm.js.map → code-block-BzUcNWrb.js.map} +1 -1
  7. package/dist/{code-block-BuGosknt.cjs → code-block-CKLCdWtP.cjs} +2 -2
  8. package/dist/{code-block-BuGosknt.cjs.map → code-block-CKLCdWtP.cjs.map} +1 -1
  9. package/dist/{combobox-fEMKH9nJ.cjs → combobox-CdTP_FZ0.cjs} +9 -2
  10. package/dist/combobox-CdTP_FZ0.cjs.map +1 -0
  11. package/dist/{combobox-so2V71F7.js → combobox-CeYDCkXk.js} +9 -2
  12. package/dist/combobox-CeYDCkXk.js.map +1 -0
  13. package/dist/{command-B_C36ppQ.cjs → command-CSl9Mfrp.cjs} +3 -3
  14. package/dist/{command-B_C36ppQ.cjs.map → command-CSl9Mfrp.cjs.map} +1 -1
  15. package/dist/{command-DMqzDhzs.js → command-DQAGSkdK.js} +3 -3
  16. package/dist/{command-DMqzDhzs.js.map → command-DQAGSkdK.js.map} +1 -1
  17. package/dist/components/AlertDialog.cjs.js +1 -1
  18. package/dist/components/AlertDialog.es.js +1 -1
  19. package/dist/components/CodeBlock.cjs.js +1 -1
  20. package/dist/components/CodeBlock.es.js +1 -1
  21. package/dist/components/Combobox.cjs.js +1 -1
  22. package/dist/components/Combobox.es.js +1 -1
  23. package/dist/components/Command.cjs.js +1 -1
  24. package/dist/components/Command.es.js +1 -1
  25. package/dist/components/CommandPalette.cjs.js +2 -2
  26. package/dist/components/CommandPalette.es.js +2 -2
  27. package/dist/components/Comment.cjs.js +1 -1
  28. package/dist/components/Comment.es.js +1 -1
  29. package/dist/components/Composer.cjs.js +2 -2
  30. package/dist/components/Composer.es.js +2 -2
  31. package/dist/components/DataCodeSection.cjs.js +1 -1
  32. package/dist/components/DataCodeSection.es.js +1 -1
  33. package/dist/components/DataList.cjs.js +17 -15
  34. package/dist/components/DataList.cjs.js.map +1 -1
  35. package/dist/components/DataList.es.js +5 -4
  36. package/dist/components/DataList.es.js.map +1 -1
  37. package/dist/components/DataPanel.cjs.js +1 -1
  38. package/dist/components/DataPanel.es.js +1 -1
  39. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  40. package/dist/components/DateTimeRangePicker.es.js +1 -1
  41. package/dist/components/Dialog.cjs.js +2 -2
  42. package/dist/components/Dialog.es.js +2 -2
  43. package/dist/components/DropdownMenu.cjs.js +1 -1
  44. package/dist/components/DropdownMenu.es.js +1 -1
  45. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  46. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  47. package/dist/components/InputGroup.cjs.js +1 -1
  48. package/dist/components/InputGroup.es.js +1 -1
  49. package/dist/components/InputNumber.cjs.js +1 -1
  50. package/dist/components/InputNumber.es.js +1 -1
  51. package/dist/components/ListSearch.cjs.js +1 -1
  52. package/dist/components/ListSearch.es.js +1 -1
  53. package/dist/components/LogsDataList.cjs.js +2 -5
  54. package/dist/components/LogsDataList.cjs.js.map +1 -1
  55. package/dist/components/LogsDataList.es.js +2 -5
  56. package/dist/components/LogsDataList.es.js.map +1 -1
  57. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  58. package/dist/components/MarkdownRenderer.es.js +1 -1
  59. package/dist/components/MetricsCard.cjs.js +1 -1
  60. package/dist/components/MetricsCard.es.js +1 -1
  61. package/dist/components/PageLayout.cjs.js +11 -8
  62. package/dist/components/PageLayout.cjs.js.map +1 -1
  63. package/dist/components/PageLayout.es.js +11 -8
  64. package/dist/components/PageLayout.es.js.map +1 -1
  65. package/dist/components/PropertyFilter.cjs.js +2 -2
  66. package/dist/components/PropertyFilter.es.js +3 -3
  67. package/dist/components/SavedViews.cjs.js +1 -1
  68. package/dist/components/SavedViews.es.js +1 -1
  69. package/dist/components/ScrollArea.cjs.js +1 -1
  70. package/dist/components/ScrollArea.es.js +1 -1
  71. package/dist/components/SearchInput.cjs.js +1 -1
  72. package/dist/components/SearchInput.es.js +1 -1
  73. package/dist/components/Sidebar.cjs.js +3 -3
  74. package/dist/components/Sidebar.es.js +3 -3
  75. package/dist/components/Tabs.cjs.js +1 -1
  76. package/dist/components/Tabs.es.js +1 -1
  77. package/dist/components/ThreadRail.cjs.js +1 -1
  78. package/dist/components/ThreadRail.es.js +1 -1
  79. package/dist/components/Workflow.cjs.js +3 -3
  80. package/dist/components/Workflow.es.js +3 -3
  81. package/dist/components/ai/activity.cjs.js +1 -1
  82. package/dist/components/ai/activity.es.js +1 -1
  83. package/dist/components/ai/plan.cjs.js +1 -1
  84. package/dist/components/ai/plan.es.js +1 -1
  85. package/dist/components/ai/task-list.cjs.js +1 -1
  86. package/dist/components/ai/task-list.es.js +1 -1
  87. package/dist/components/ai/tool-approval.cjs.js +1 -1
  88. package/dist/components/ai/tool-approval.es.js +1 -1
  89. package/dist/components/ai/tool-call.cjs.js +2 -2
  90. package/dist/components/ai/tool-call.es.js +2 -2
  91. package/dist/{composer-CxmOOUX8.js → composer-B0i1WZgt.js} +2 -2
  92. package/dist/{composer-CxmOOUX8.js.map → composer-B0i1WZgt.js.map} +1 -1
  93. package/dist/{composer-Cg5bXN1r.cjs → composer-DJsfHivH.cjs} +2 -2
  94. package/dist/{composer-Cg5bXN1r.cjs.map → composer-DJsfHivH.cjs.map} +1 -1
  95. package/dist/{data-code-section-Bs8sHDux.cjs → data-code-section-BB2RWius.cjs} +3 -3
  96. package/dist/{data-code-section-Bs8sHDux.cjs.map → data-code-section-BB2RWius.cjs.map} +1 -1
  97. package/dist/{data-code-section-CqdjmClK.js → data-code-section-DsU-ubVW.js} +3 -3
  98. package/dist/{data-code-section-CqdjmClK.js.map → data-code-section-DsU-ubVW.js.map} +1 -1
  99. package/dist/data-list-CaifGmFh.cjs +142 -0
  100. package/dist/data-list-CaifGmFh.cjs.map +1 -0
  101. package/dist/data-list-kilUFo3I.js +138 -0
  102. package/dist/data-list-kilUFo3I.js.map +1 -0
  103. package/dist/{data-list-skeleton-BNsWWamC.js → data-list-skeleton-C_zFfUy5.js} +2 -2
  104. package/dist/{data-list-skeleton-BNsWWamC.js.map → data-list-skeleton-C_zFfUy5.js.map} +1 -1
  105. package/dist/{data-list-skeleton-BGJD4qMF.cjs → data-list-skeleton-Cgo1Urkr.cjs} +6 -6
  106. package/dist/{data-list-skeleton-BGJD4qMF.cjs.map → data-list-skeleton-Cgo1Urkr.cjs.map} +1 -1
  107. package/dist/data-list-spacer-D9J0nV_S.cjs +218 -0
  108. package/dist/data-list-spacer-D9J0nV_S.cjs.map +1 -0
  109. package/dist/data-list-spacer-DGUCD6oy.js +209 -0
  110. package/dist/data-list-spacer-DGUCD6oy.js.map +1 -0
  111. package/dist/{data-list-BLfHObw8.cjs → data-list-top-DYnH-IhJ.cjs} +14 -340
  112. package/dist/data-list-top-DYnH-IhJ.cjs.map +1 -0
  113. package/dist/{data-list-B2ArWwsJ.js → data-list-top-Dk9Wz_w5.js} +6 -333
  114. package/dist/data-list-top-Dk9Wz_w5.js.map +1 -0
  115. package/dist/{data-panel-Wjgbl6zx.cjs → data-panel-CtFwwsPs.cjs} +2 -2
  116. package/dist/{data-panel-Wjgbl6zx.cjs.map → data-panel-CtFwwsPs.cjs.map} +1 -1
  117. package/dist/{data-panel-BdCw3F_h.js → data-panel-CwIdwpov.js} +2 -2
  118. package/dist/{data-panel-BdCw3F_h.js.map → data-panel-CwIdwpov.js.map} +1 -1
  119. package/dist/{date-time-range-picker-SU1Q1h1h.js → date-time-range-picker-BT9qan60.js} +2 -2
  120. package/dist/{date-time-range-picker-SU1Q1h1h.js.map → date-time-range-picker-BT9qan60.js.map} +1 -1
  121. package/dist/{date-time-range-picker-ByNvjYuV.cjs → date-time-range-picker-DQa5XLST.cjs} +2 -2
  122. package/dist/{date-time-range-picker-ByNvjYuV.cjs.map → date-time-range-picker-DQa5XLST.cjs.map} +1 -1
  123. package/dist/{dialog-B5nLi0ER.cjs → dialog-BAlSUqcF.cjs} +2 -2
  124. package/dist/{dialog-B5nLi0ER.cjs.map → dialog-BAlSUqcF.cjs.map} +1 -1
  125. package/dist/{dialog-Jz2ZfO-z.js → dialog-CboDo8Pj.js} +2 -2
  126. package/dist/{dialog-Jz2ZfO-z.js.map → dialog-CboDo8Pj.js.map} +1 -1
  127. package/dist/{dialog-action-DdkbsKfP.cjs → dialog-action-DWE9XalB.cjs} +2 -2
  128. package/dist/{dialog-action-DdkbsKfP.cjs.map → dialog-action-DWE9XalB.cjs.map} +1 -1
  129. package/dist/{dialog-action-BxXhAz-P.js → dialog-action-DpctEQ9l.js} +2 -2
  130. package/dist/{dialog-action-BxXhAz-P.js.map → dialog-action-DpctEQ9l.js.map} +1 -1
  131. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  132. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  133. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
  134. package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
  135. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  136. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  137. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -2
  138. package/dist/domains/chat/messages/dataset-save-action.es.js +2 -2
  139. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  140. package/dist/domains/chat/messages/message-row.es.js +1 -1
  141. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  142. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  143. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  144. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  145. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  146. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  147. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  148. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  151. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  152. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  153. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  154. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  155. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  156. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  158. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  159. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
  160. package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
  161. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -2
  162. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  163. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
  164. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  165. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  166. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  167. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  168. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  169. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -3
  170. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  171. package/dist/domains/logs/components/logs-list-view.es.js +2 -3
  172. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  173. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  174. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  175. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  176. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  177. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  178. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  179. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  180. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  181. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  182. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  183. package/dist/domains/metrics/components/date-range-selector.cjs.js +5 -44
  184. package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
  185. package/dist/domains/metrics/components/date-range-selector.es.js +3 -42
  186. package/dist/domains/metrics/components/date-range-selector.es.js.map +1 -1
  187. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  188. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  189. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  190. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  191. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +26 -0
  192. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -0
  193. package/dist/domains/metrics/components/metrics-time-range-chip.d.ts +2 -0
  194. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +22 -0
  195. package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -0
  196. package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
  197. package/dist/domains/metrics/components/scores-card.es.js +1 -1
  198. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  199. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  200. package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
  201. package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
  202. package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
  203. package/dist/domains/metrics/components/usage-card.es.js +1 -1
  204. package/dist/domains/metrics/components.cjs.js +2 -0
  205. package/dist/domains/metrics/components.cjs.js.map +1 -1
  206. package/dist/domains/metrics/components.es.js +1 -0
  207. package/dist/domains/metrics/components.es.js.map +1 -1
  208. package/dist/domains/metrics/hooks.cjs.js +4 -0
  209. package/dist/domains/metrics/hooks.cjs.js.map +1 -1
  210. package/dist/domains/metrics/hooks.es.js +1 -1
  211. package/dist/domains/metrics/metrics-date-presets.cjs.js +49 -0
  212. package/dist/domains/metrics/metrics-date-presets.cjs.js.map +1 -0
  213. package/dist/domains/metrics/metrics-date-presets.d.ts +2 -0
  214. package/dist/domains/metrics/metrics-date-presets.es.js +43 -0
  215. package/dist/domains/metrics/metrics-date-presets.es.js.map +1 -0
  216. package/dist/domains/metrics/metrics-filters.cjs.js +94 -0
  217. package/dist/domains/metrics/metrics-filters.cjs.js.map +1 -1
  218. package/dist/domains/metrics/metrics-filters.es.js +91 -1
  219. package/dist/domains/metrics/metrics-filters.es.js.map +1 -1
  220. package/dist/domains/metrics.cjs.js +6 -0
  221. package/dist/domains/metrics.cjs.js.map +1 -1
  222. package/dist/domains/metrics.es.js +2 -1
  223. package/dist/domains/metrics.es.js.map +1 -1
  224. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  225. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  226. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  227. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  228. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -2
  229. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  230. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -2
  231. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  232. package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
  233. package/dist/domains/traces/components/feedback-thread.es.js +3 -3
  234. package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
  235. package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
  236. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  237. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  238. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  239. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  240. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  241. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  242. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  243. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  244. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  245. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  246. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  247. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  248. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  249. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  250. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  251. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  252. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  253. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  254. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  255. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  256. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  257. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  258. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  259. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  260. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
  261. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
  262. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -3
  263. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  264. package/dist/domains/traces/components/trace-data-panel.es.js +1 -3
  265. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  266. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  267. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  268. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  269. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  270. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  271. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  272. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  273. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  274. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  275. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  276. package/dist/domains/traces/components/traces-list-view.cjs.js +6 -5
  277. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  278. package/dist/domains/traces/components/traces-list-view.es.js +5 -4
  279. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  280. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -4
  281. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  282. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -4
  283. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  284. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  285. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  286. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  287. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  288. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  289. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  290. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  291. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  292. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  293. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  294. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  295. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  296. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -0
  297. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  298. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -0
  299. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  300. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  301. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  302. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  303. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  304. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  305. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  306. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  307. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  308. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  309. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  310. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
  311. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
  312. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  313. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  314. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  315. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  316. package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
  317. package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
  318. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  319. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  320. package/dist/{dropdown-menu-D8GR_NhL.js → dropdown-menu-C6VtAiYJ.js} +43 -4
  321. package/dist/dropdown-menu-C6VtAiYJ.js.map +1 -0
  322. package/dist/{dropdown-menu-Bg96BCnK.cjs → dropdown-menu-dHvHFLji.cjs} +42 -3
  323. package/dist/dropdown-menu-dHvHFLji.cjs.map +1 -0
  324. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  325. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  326. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  327. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  328. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  329. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  330. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -4
  331. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  332. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -4
  333. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  334. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  335. package/dist/ee/signals/sankey-signals.es.js +1 -1
  336. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  337. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  338. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  339. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  340. package/dist/{input-group-DQuyC9Pz.cjs → input-group-Bj2RbkNg.cjs} +20 -3
  341. package/dist/input-group-Bj2RbkNg.cjs.map +1 -0
  342. package/dist/{input-group-CIIwoggO.js → input-group-CrumkDCF.js} +20 -3
  343. package/dist/input-group-CrumkDCF.js.map +1 -0
  344. package/dist/layout/tabbed-container.cjs.js +4 -4
  345. package/dist/layout/tabbed-container.es.js +4 -4
  346. package/dist/{list-search-Cwp-OPvC.js → list-search-C7ro2_qL.js} +2 -2
  347. package/dist/{list-search-Cwp-OPvC.js.map → list-search-C7ro2_qL.js.map} +1 -1
  348. package/dist/{list-search-C5j3HYkb.cjs → list-search-Y3z6P6IO.cjs} +2 -2
  349. package/dist/{list-search-C5j3HYkb.cjs.map → list-search-Y3z6P6IO.cjs.map} +1 -1
  350. package/dist/{logs-data-list-B-gmgU74.js → logs-data-list-1KFnVsFz.js} +3 -2
  351. package/dist/{logs-data-list-B-gmgU74.js.map → logs-data-list-1KFnVsFz.js.map} +1 -1
  352. package/dist/{logs-data-list-CaXnNnC5.cjs → logs-data-list-BafttkM2.cjs} +22 -21
  353. package/dist/{logs-data-list-CaXnNnC5.cjs.map → logs-data-list-BafttkM2.cjs.map} +1 -1
  354. package/dist/{markdown-renderer-BXTNiZbz.cjs → markdown-renderer-BRu3RpQD.cjs} +3 -3
  355. package/dist/{markdown-renderer-BXTNiZbz.cjs.map → markdown-renderer-BRu3RpQD.cjs.map} +1 -1
  356. package/dist/{markdown-renderer-Ct-q_KTF.js → markdown-renderer-WesDzhMr.js} +3 -3
  357. package/dist/{markdown-renderer-Ct-q_KTF.js.map → markdown-renderer-WesDzhMr.js.map} +1 -1
  358. package/dist/{metrics-card-C33VsuXf.js → metrics-card-BI5okAsj.js} +2 -2
  359. package/dist/{metrics-card-C33VsuXf.js.map → metrics-card-BI5okAsj.js.map} +1 -1
  360. package/dist/{metrics-card-CxOVpP1t.cjs → metrics-card-CcesVPLN.cjs} +2 -2
  361. package/dist/{metrics-card-CxOVpP1t.cjs.map → metrics-card-CcesVPLN.cjs.map} +1 -1
  362. package/dist/{plan-TXWANP1R.js → plan-CBiLa54G.js} +2 -2
  363. package/dist/{plan-TXWANP1R.js.map → plan-CBiLa54G.js.map} +1 -1
  364. package/dist/{plan-CL-lbDuy.cjs → plan-ColU7p3H.cjs} +2 -2
  365. package/dist/{plan-CL-lbDuy.cjs.map → plan-ColU7p3H.cjs.map} +1 -1
  366. package/dist/primitives/menu-item.cjs.js +2 -0
  367. package/dist/primitives/menu-item.cjs.js.map +1 -1
  368. package/dist/primitives/menu-item.es.js +2 -1
  369. package/dist/primitives/menu-item.es.js.map +1 -1
  370. package/dist/{property-filter-applied-Ru3OQoGo.js → property-filter-applied-BCeGn2zQ.js} +2 -2
  371. package/dist/{property-filter-applied-Ru3OQoGo.js.map → property-filter-applied-BCeGn2zQ.js.map} +1 -1
  372. package/dist/{property-filter-applied-BBvaTC4B.cjs → property-filter-applied-CpelyBH9.cjs} +2 -2
  373. package/dist/{property-filter-applied-BBvaTC4B.cjs.map → property-filter-applied-CpelyBH9.cjs.map} +1 -1
  374. package/dist/{reasoning-activity-CFEaSv4J.cjs → reasoning-activity-B8bR8ib_.cjs} +2 -2
  375. package/dist/{reasoning-activity-CFEaSv4J.cjs.map → reasoning-activity-B8bR8ib_.cjs.map} +1 -1
  376. package/dist/{reasoning-activity-CHlEe011.js → reasoning-activity-DLrXgE9k.js} +2 -2
  377. package/dist/{reasoning-activity-CHlEe011.js.map → reasoning-activity-DLrXgE9k.js.map} +1 -1
  378. package/dist/{scroll-area-CVgjRzTS.cjs → scroll-area-BakRKj2k.cjs} +3 -3
  379. package/dist/scroll-area-BakRKj2k.cjs.map +1 -0
  380. package/dist/{scroll-area-BywIlj3F.js → scroll-area-D6gKFavi.js} +3 -3
  381. package/dist/scroll-area-D6gKFavi.js.map +1 -0
  382. package/dist/{search-input-RybUdqzg.js → search-input-BEAKPGH8.js} +2 -2
  383. package/dist/{search-input-RybUdqzg.js.map → search-input-BEAKPGH8.js.map} +1 -1
  384. package/dist/{search-input-2DhcUIvn.cjs → search-input-DdRhkYqy.cjs} +2 -2
  385. package/dist/{search-input-2DhcUIvn.cjs.map → search-input-DdRhkYqy.cjs.map} +1 -1
  386. package/dist/{span-payload-primitives-DIxmotnO.cjs → span-payload-primitives-BymKsUAo.cjs} +2 -2
  387. package/dist/{span-payload-primitives-DIxmotnO.cjs.map → span-payload-primitives-BymKsUAo.cjs.map} +1 -1
  388. package/dist/{span-payload-primitives-dTs5UrjA.js → span-payload-primitives-DBNNkmHo.js} +2 -2
  389. package/dist/{span-payload-primitives-dTs5UrjA.js.map → span-payload-primitives-DBNNkmHo.js.map} +1 -1
  390. package/dist/src/domains/metrics/components/date-range-selector.d.ts +1 -0
  391. package/dist/src/domains/metrics/components/index.d.ts +1 -0
  392. package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +5 -0
  393. package/dist/src/domains/metrics/hooks/index.d.ts +1 -1
  394. package/dist/src/domains/metrics/metrics-date-presets.d.ts +6 -0
  395. package/dist/src/domains/metrics/metrics-filters.d.ts +23 -1
  396. package/dist/src/ds/components/Combobox/combobox.d.ts +2 -0
  397. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +19 -6
  398. package/dist/src/ds/components/InputGroup/input-group.d.ts +6 -2
  399. package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -1
  400. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +2 -1
  401. package/dist/src/ds/primitives/menu-item.d.ts +1 -0
  402. package/dist/style.css +16 -4
  403. package/dist/{tabs-list-DY_hziv7.js → tabs-list-CDep3C2w.js} +2 -2
  404. package/dist/{tabs-list-DY_hziv7.js.map → tabs-list-CDep3C2w.js.map} +1 -1
  405. package/dist/{tabs-list-xikY_dug.cjs → tabs-list-DwQsMVKI.cjs} +2 -2
  406. package/dist/{tabs-list-xikY_dug.cjs.map → tabs-list-DwQsMVKI.cjs.map} +1 -1
  407. package/dist/{tool-approval-TB8r2U_c.js → tool-approval-BK2j7aj_.js} +2 -2
  408. package/dist/{tool-approval-TB8r2U_c.js.map → tool-approval-BK2j7aj_.js.map} +1 -1
  409. package/dist/{tool-approval-S6ml_xyU.cjs → tool-approval-Bza_sgxa.cjs} +2 -2
  410. package/dist/{tool-approval-S6ml_xyU.cjs.map → tool-approval-Bza_sgxa.cjs.map} +1 -1
  411. package/dist/{tool-call-arguments-CCkJ1btR.js → tool-call-arguments-BLCAiFYg.js} +2 -2
  412. package/dist/{tool-call-arguments-CCkJ1btR.js.map → tool-call-arguments-BLCAiFYg.js.map} +1 -1
  413. package/dist/{tool-call-arguments-DyukJmhY.cjs → tool-call-arguments-CK3kQ_FX.cjs} +2 -2
  414. package/dist/{tool-call-arguments-DyukJmhY.cjs.map → tool-call-arguments-CK3kQ_FX.cjs.map} +1 -1
  415. package/dist/{tool-call-group-CZBqGjMh.js → tool-call-group-C_zxf6OA.js} +2 -2
  416. package/dist/{tool-call-group-CZBqGjMh.js.map → tool-call-group-C_zxf6OA.js.map} +1 -1
  417. package/dist/{tool-call-group-CFpdexuw.cjs → tool-call-group-Cdgv7red.cjs} +2 -2
  418. package/dist/{tool-call-group-CFpdexuw.cjs.map → tool-call-group-Cdgv7red.cjs.map} +1 -1
  419. package/dist/{traces-data-list-1X6UBM6Y.js → traces-data-list-CDvg5G_2.js} +4 -2
  420. package/dist/{traces-data-list-1X6UBM6Y.js.map → traces-data-list-CDvg5G_2.js.map} +1 -1
  421. package/dist/{traces-data-list-BXSXW3E6.cjs → traces-data-list-Dy-9AIr2.cjs} +19 -17
  422. package/dist/{traces-data-list-BXSXW3E6.cjs.map → traces-data-list-Dy-9AIr2.cjs.map} +1 -1
  423. package/dist/{workflow-data-edge-view-De0xCrVu.js → workflow-data-edge-view-BWyUa9am.js} +2 -2
  424. package/dist/{workflow-data-edge-view-De0xCrVu.js.map → workflow-data-edge-view-BWyUa9am.js.map} +1 -1
  425. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs → workflow-data-edge-view-BpnN4W_5.cjs} +2 -2
  426. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs.map → workflow-data-edge-view-BpnN4W_5.cjs.map} +1 -1
  427. package/dist/{workflow-edge-data-button-av1zCMfP.cjs → workflow-edge-data-button-Du5ZDm72.cjs} +2 -2
  428. package/dist/{workflow-edge-data-button-av1zCMfP.cjs.map → workflow-edge-data-button-Du5ZDm72.cjs.map} +1 -1
  429. package/dist/{workflow-edge-data-button-CXbj67U9.js → workflow-edge-data-button-DvGFB2L6.js} +2 -2
  430. package/dist/{workflow-edge-data-button-CXbj67U9.js.map → workflow-edge-data-button-DvGFB2L6.js.map} +1 -1
  431. package/dist/{workflow-step-action-BsBZk7j6.cjs → workflow-step-action-DNrU8on1.cjs} +2 -2
  432. package/dist/{workflow-step-action-BsBZk7j6.cjs.map → workflow-step-action-DNrU8on1.cjs.map} +1 -1
  433. package/dist/{workflow-step-action-AG05Ly8P.js → workflow-step-action-ac1gNDdn.js} +2 -2
  434. package/dist/{workflow-step-action-AG05Ly8P.js.map → workflow-step-action-ac1gNDdn.js.map} +1 -1
  435. package/package.json +7 -7
  436. package/dist/combobox-fEMKH9nJ.cjs.map +0 -1
  437. package/dist/combobox-so2V71F7.js.map +0 -1
  438. package/dist/data-list-B2ArWwsJ.js.map +0 -1
  439. package/dist/data-list-BLfHObw8.cjs.map +0 -1
  440. package/dist/dropdown-menu-Bg96BCnK.cjs.map +0 -1
  441. package/dist/dropdown-menu-D8GR_NhL.js.map +0 -1
  442. package/dist/input-group-CIIwoggO.js.map +0 -1
  443. package/dist/input-group-DQuyC9Pz.cjs.map +0 -1
  444. package/dist/scroll-area-BywIlj3F.js.map +0 -1
  445. package/dist/scroll-area-CVgjRzTS.cjs.map +0 -1
@@ -1 +1 @@
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":"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"}
1
+ {"version":3,"file":"property-filter-applied-CpelyBH9.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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"}
@@ -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-BXTNiZbz.cjs');
7
+ const markdownRenderer = require('./markdown-renderer-BRu3RpQD.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-CFEaSv4J.cjs.map
34
+ //# sourceMappingURL=reasoning-activity-B8bR8ib_.cjs.map
@@ -1 +1 @@
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;;;;"}
1
+ {"version":3,"file":"reasoning-activity-B8bR8ib_.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-Ct-q_KTF.js';
5
+ import { M as MarkdownRenderer } from './markdown-renderer-WesDzhMr.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-CHlEe011.js.map
32
+ //# sourceMappingURL=reasoning-activity-DLrXgE9k.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning-activity-CHlEe011.js","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":[],"mappings":";;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAAC,mBAAA,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,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAM,GAAA,CAAC,KAAA,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,oBACpB,GAAA;AAAA,QAAC,gBAAA;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-DLrXgE9k.js","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":[],"mappings":";;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAAC,mBAAA,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,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAM,GAAA,CAAC,KAAA,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,oBACpB,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iDAAA;AAAA,UACV,SAAA,EAAW,aAAa,CAAC,QAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
@@ -176,7 +176,7 @@ function useScrollAreaViewportContext() {
176
176
  if (!viewport) throw new Error("ScrollAreaViewport must be a direct child of ScrollArea");
177
177
  return viewport;
178
178
  }
179
- function ScrollAreaViewport({ className, children, ref }) {
179
+ function ScrollAreaViewport({ className, contentClassName, children, ref }) {
180
180
  const viewport = useScrollAreaViewportContext();
181
181
  const { areaRef } = viewport;
182
182
  const viewportRef = React__namespace.useMemo(() => mergeRefs.mergeRefs(areaRef, ref), [areaRef, ref]);
@@ -186,7 +186,7 @@ function ScrollAreaViewport({ className, children, ref }) {
186
186
  ref: viewportRef,
187
187
  className: utils_cn.cn(viewport.className, className),
188
188
  style: viewport.style,
189
- children: /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea.Content, { style: viewport.contentStyle, children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaViewportContext, { value: null, children }) })
189
+ children: /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea.Content, { className: contentClassName, style: viewport.contentStyle, children: /* @__PURE__ */ jsxRuntime.jsx(ScrollAreaViewportContext, { value: null, children }) })
190
190
  }
191
191
  );
192
192
  }
@@ -262,4 +262,4 @@ function ScrollBar({
262
262
  exports.ScrollArea = ScrollArea;
263
263
  exports.ScrollAreaViewport = ScrollAreaViewport;
264
264
  exports.ScrollBar = ScrollBar;
265
- //# sourceMappingURL=scroll-area-CVgjRzTS.cjs.map
265
+ //# sourceMappingURL=scroll-area-BakRKj2k.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area-BakRKj2k.cjs","sources":["../src/ds/components/ScrollArea/scroll-area.tsx"],"sourcesContent":["import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useAutoscroll } from '@/hooks/use-autoscroll';\nimport { mergeRefs } from '@/lib/merge-refs';\nimport { cn } from '@/lib/utils';\n\ntype Orientation = 'vertical' | 'horizontal' | 'both';\ntype ScrollButtonDirection = 'left' | 'right';\n\nconst DEFAULT_SCROLL_BUTTON_SPEED = 100;\nconst DEFAULT_SCROLL_BUTTON_INTERVAL_TIME = 20;\nconst MIN_SCROLL_BUTTON_SPEED = 1;\nconst MIN_SCROLL_BUTTON_INTERVAL_TIME = 16;\n\ntype MaskFadeDepth = `${number}${'rem' | 'px'}`;\ntype MaskSide = boolean | MaskFadeDepth;\n\nconst DEFAULT_MASK_FADE_DEPTH: MaskFadeDepth = '2rem';\nconst NO_MASK_FADE: MaskFadeDepth = '0px';\n\nconst SCROLL_DRIVEN_FADE_CLASSES = [\n 'mask-t-from-[calc(100%-min(var(--scroll-area-fade-top),var(--scroll-area-overflow-y-start,0px)))]',\n 'mask-b-from-[calc(100%-min(var(--scroll-area-fade-bottom),var(--scroll-area-overflow-y-end,0px)))]',\n 'mask-l-from-[calc(100%-min(var(--scroll-area-fade-left),var(--scroll-area-overflow-x-start,0px)))]',\n 'mask-r-from-[calc(100%-min(var(--scroll-area-fade-right),var(--scroll-area-overflow-x-end,0px)))]',\n].join(' ');\n\nexport type MaskSides = {\n top?: MaskSide;\n bottom?: MaskSide;\n left?: MaskSide;\n right?: MaskSide;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: MaskSide;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: MaskSide;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`, 2rem deep.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default; a length (`'5rem'`) sets that side's fade depth.\n *\n * A fade grows with the distance scrolled from its edge, up to its depth.\n */\nexport type ScrollAreaMask = boolean | MaskSides;\n\nexport type ScrollAreaScrollButtons =\n | boolean\n | {\n /** Pixels to scroll per repeated interval. */\n scrollSpeed?: number;\n /** Milliseconds between repeated scroll steps while the button is held. */\n scrollIntervalTime?: number;\n leftLabel?: string;\n rightLabel?: string;\n };\n\nexport type ScrollAreaProps = React.ComponentProps<typeof ScrollAreaPrimitive.Root> & {\n maxHeight?: string;\n autoScroll?: boolean;\n orientation?: Orientation;\n /** Show left/right controls for horizontal overflow. Only applies to `horizontal` and `both` orientations. */\n scrollButtons?: ScrollAreaScrollButtons;\n /** Fade content at the edges where it's clipped by overflow. Defaults to the axes matching `orientation`. */\n mask?: ScrollAreaMask;\n /**\n * Reveal the overlay scrollbar when the pointer hovers the area. When `false`,\n * the scrollbar only appears while actively scrolling. Defaults to `true`.\n */\n revealScrollbarOnHover?: boolean;\n};\n\ntype ResolvedMask = Record<'top' | 'bottom' | 'left' | 'right', MaskFadeDepth | false>;\n\ntype ScrollAreaViewportStyle = React.CSSProperties & {\n '--scroll-area-fade-top'?: MaskFadeDepth;\n '--scroll-area-fade-bottom'?: MaskFadeDepth;\n '--scroll-area-fade-left'?: MaskFadeDepth;\n '--scroll-area-fade-right'?: MaskFadeDepth;\n};\n\nconst fadeDepth = (side: MaskSide) => (side === true ? DEFAULT_MASK_FADE_DEPTH : side);\n\nfunction resolveMask(mask: ScrollAreaMask | undefined, orientation: Orientation): ResolvedMask {\n if (mask === false) return { top: false, bottom: false, left: false, right: false };\n\n const verticalFade = (orientation === 'vertical' || orientation === 'both') && DEFAULT_MASK_FADE_DEPTH;\n const horizontalFade = (orientation === 'horizontal' || orientation === 'both') && DEFAULT_MASK_FADE_DEPTH;\n const sides: ResolvedMask = { top: verticalFade, bottom: verticalFade, left: horizontalFade, right: horizontalFade };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = fadeDepth(mask.y);\n sides.bottom = fadeDepth(mask.y);\n }\n if (mask.x !== undefined) {\n sides.left = fadeDepth(mask.x);\n sides.right = fadeDepth(mask.x);\n }\n if (mask.top !== undefined) sides.top = fadeDepth(mask.top);\n if (mask.bottom !== undefined) sides.bottom = fadeDepth(mask.bottom);\n if (mask.left !== undefined) sides.left = fadeDepth(mask.left);\n if (mask.right !== undefined) sides.right = fadeDepth(mask.right);\n\n return sides;\n}\n\nconst fadeDepthVars = (sides: ResolvedMask): ScrollAreaViewportStyle => ({\n '--scroll-area-fade-top': sides.top || NO_MASK_FADE,\n '--scroll-area-fade-bottom': sides.bottom || NO_MASK_FADE,\n '--scroll-area-fade-left': sides.left || NO_MASK_FADE,\n '--scroll-area-fade-right': sides.right || NO_MASK_FADE,\n});\n\nfunction clampScrollButtonNumber(value: number | undefined, fallback: number, min: number) {\n const resolvedValue = value ?? fallback;\n return Number.isFinite(resolvedValue) ? Math.max(min, resolvedValue) : Math.max(min, fallback);\n}\n\ntype ScrollButtonProps = {\n direction: ScrollButtonDirection;\n label: string;\n onStartScrolling: (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => void;\n onStopScrolling: () => void;\n onKeyboardScroll: (direction: ScrollButtonDirection) => void;\n};\n\nconst ScrollButton = ({ direction, label, onStartScrolling, onStopScrolling, onKeyboardScroll }: ScrollButtonProps) => {\n const Icon = direction === 'left' ? ChevronLeftIcon : ChevronRightIcon;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent hover:bg-fill-subtle active:bg-fill',\n quietTextHover,\n controlStateColorTransition,\n focusRing,\n direction === 'left'\n ? 'left-1 group-data-[overflow-x-start]/scroll-area:flex'\n : 'right-1 group-data-[overflow-x-end]/scroll-area:flex',\n )}\n onPointerDown={event => onStartScrolling(direction, event)}\n onPointerUp={onStopScrolling}\n onPointerLeave={onStopScrolling}\n onPointerCancel={onStopScrolling}\n onBlur={onStopScrolling}\n onClick={event => {\n if (event.detail === 0) onKeyboardScroll(direction);\n }}\n >\n <Icon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n );\n};\n\ntype ScrollButtonsProps = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n scrollButtons: Exclude<ScrollAreaScrollButtons, false | undefined>;\n};\n\nconst ScrollButtons = ({ areaRef, scrollButtons }: ScrollButtonsProps) => {\n const scrollButtonInterval = React.useRef<ReturnType<typeof setInterval> | null>(null);\n const scrollButtonOptions = typeof scrollButtons === 'object' ? scrollButtons : undefined;\n const scrollButtonSpeed = clampScrollButtonNumber(\n scrollButtonOptions?.scrollSpeed,\n DEFAULT_SCROLL_BUTTON_SPEED,\n MIN_SCROLL_BUTTON_SPEED,\n );\n const scrollButtonIntervalTime = clampScrollButtonNumber(\n scrollButtonOptions?.scrollIntervalTime,\n DEFAULT_SCROLL_BUTTON_INTERVAL_TIME,\n MIN_SCROLL_BUTTON_INTERVAL_TIME,\n );\n const leftScrollButtonLabel = scrollButtonOptions?.leftLabel ?? 'Scroll left';\n const rightScrollButtonLabel = scrollButtonOptions?.rightLabel ?? 'Scroll right';\n\n const stopScrollButtonScrolling = React.useCallback(() => {\n if (!scrollButtonInterval.current) return;\n clearInterval(scrollButtonInterval.current);\n scrollButtonInterval.current = null;\n }, []);\n\n const scrollByDirection = React.useCallback(\n (direction: ScrollButtonDirection, multiplier = 1) => {\n const viewport = areaRef.current;\n if (!viewport) return;\n\n viewport.scrollBy({\n left: direction === 'right' ? scrollButtonSpeed * multiplier : -scrollButtonSpeed * multiplier,\n behavior: 'smooth',\n });\n },\n [areaRef, scrollButtonSpeed],\n );\n\n const startScrollButtonScrolling = React.useCallback(\n (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => {\n event?.preventDefault();\n event?.stopPropagation();\n event?.currentTarget.setPointerCapture?.(event.pointerId);\n\n stopScrollButtonScrolling();\n scrollByDirection(direction, 2);\n\n scrollButtonInterval.current = setInterval(() => {\n scrollByDirection(direction);\n }, scrollButtonIntervalTime);\n },\n [scrollButtonIntervalTime, scrollByDirection, stopScrollButtonScrolling],\n );\n\n React.useEffect(() => {\n return () => {\n stopScrollButtonScrolling();\n };\n }, [stopScrollButtonScrolling]);\n\n return (\n <>\n <ScrollButton\n direction=\"left\"\n label={leftScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n <ScrollButton\n direction=\"right\"\n label={rightScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n </>\n );\n};\n\ntype ScrollAreaViewportContextValue = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n contentStyle: React.CSSProperties | undefined;\n};\n\nconst ScrollAreaViewportContext = React.createContext<ScrollAreaViewportContextValue | null>(null);\n\nexport type ScrollAreaViewportProps = {\n className?: string;\n contentClassName?: string;\n children?: React.ReactNode;\n /** The scrolling element, e.g. a virtualizer's `getScrollElement`. */\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction useScrollAreaViewportContext() {\n const viewport = React.use(ScrollAreaViewportContext);\n if (!viewport) throw new Error('ScrollAreaViewport must be a direct child of ScrollArea');\n return viewport;\n}\n\nfunction ScrollAreaViewport({ className, contentClassName, children, ref }: ScrollAreaViewportProps) {\n const viewport = useScrollAreaViewportContext();\n const { areaRef } = viewport;\n const viewportRef = React.useMemo(() => mergeRefs(areaRef, ref), [areaRef, ref]);\n\n return (\n <ScrollAreaPrimitive.Viewport\n ref={viewportRef}\n className={cn(viewport.className, className)}\n style={viewport.style}\n >\n <ScrollAreaPrimitive.Content className={contentClassName} style={viewport.contentStyle}>\n <ScrollAreaViewportContext value={null}>{children}</ScrollAreaViewportContext>\n </ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n );\n}\n\nfunction ScrollArea({\n className,\n children,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n revealScrollbarOnHover = true,\n ...props\n}: ScrollAreaProps) {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n const sides = resolveMask(mask, orientation);\n const fadesAnySide = Object.values(sides).some(Boolean);\n\n const viewportStyle = fadeDepthVars(sides);\n if (maxHeight) viewportStyle.maxHeight = maxHeight;\n if (orientation === 'vertical') {\n viewportStyle.overflowX = 'hidden';\n viewportStyle.overflowY = 'scroll';\n } else if (orientation === 'horizontal') {\n viewportStyle.overflowX = 'scroll';\n viewportStyle.overflowY = 'hidden';\n }\n\n // Base UI's ScrollAreaContent forces `min-width: fit-content` so the\n // content can grow wider than the viewport (required for horizontal scroll\n // measurement). For vertical-only scroll we override it so children shrink\n // to the viewport width instead of forcing horizontal scroll.\n const contentStyle: React.CSSProperties | undefined =\n orientation === 'vertical' ? { minWidth: '0px' } : orientation === 'horizontal' ? { minHeight: '0px' } : undefined;\n\n const viewport: ScrollAreaViewportContextValue = {\n areaRef,\n className: cn('size-full', fadesAnySide && SCROLL_DRIVEN_FADE_CLASSES),\n style: viewportStyle,\n contentStyle,\n };\n const callerViewportCount = React.Children.toArray(children).filter(\n child => React.isValidElement(child) && child.type === ScrollAreaViewport,\n ).length;\n if (callerViewportCount > 1) throw new Error('ScrollArea takes at most one ScrollAreaViewport');\n const callerRendersViewport = callerViewportCount === 1;\n\n return (\n <ScrollAreaPrimitive.Root className={cn('group/scroll-area relative overflow-hidden', className)} {...props}>\n <ScrollAreaViewportContext value={viewport}>\n {callerRendersViewport ? children : <ScrollAreaViewport>{children}</ScrollAreaViewport>}\n </ScrollAreaViewportContext>\n {scrollButtons && orientation !== 'vertical' && <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />}\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" revealOnHover={revealScrollbarOnHover} />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" revealOnHover={revealScrollbarOnHover} />\n )}\n {orientation === 'both' && <ScrollAreaPrimitive.Corner />}\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n revealOnHover = true,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none transition-opacity duration-normal ease-out-custom select-none',\n 'opacity-0 data-[scrolling]:opacity-100 data-[scrolling]:duration-0',\n revealOnHover && 'data-[hovering]:opacity-100',\n orientation === 'vertical' && 'h-full w-1.5 p-px',\n orientation === 'horizontal' && 'h-1.5 w-full flex-col p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-muted-foreground/30 hover:bg-muted-foreground/60\" />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollAreaViewport, ScrollBar };\n"],"names":["ChevronLeftIcon","ChevronRightIcon","jsx","cn","quietTextHover","controlStateColorTransition","focusRing","React","jsxs","Fragment","mergeRefs","ScrollAreaPrimitive","useAutoscroll"],"mappings":"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"}
@@ -155,7 +155,7 @@ function useScrollAreaViewportContext() {
155
155
  if (!viewport) throw new Error("ScrollAreaViewport must be a direct child of ScrollArea");
156
156
  return viewport;
157
157
  }
158
- function ScrollAreaViewport({ className, children, ref }) {
158
+ function ScrollAreaViewport({ className, contentClassName, children, ref }) {
159
159
  const viewport = useScrollAreaViewportContext();
160
160
  const { areaRef } = viewport;
161
161
  const viewportRef = React.useMemo(() => mergeRefs(areaRef, ref), [areaRef, ref]);
@@ -165,7 +165,7 @@ function ScrollAreaViewport({ className, children, ref }) {
165
165
  ref: viewportRef,
166
166
  className: cn(viewport.className, className),
167
167
  style: viewport.style,
168
- children: /* @__PURE__ */ jsx(ScrollArea$1.Content, { style: viewport.contentStyle, children: /* @__PURE__ */ jsx(ScrollAreaViewportContext, { value: null, children }) })
168
+ children: /* @__PURE__ */ jsx(ScrollArea$1.Content, { className: contentClassName, style: viewport.contentStyle, children: /* @__PURE__ */ jsx(ScrollAreaViewportContext, { value: null, children }) })
169
169
  }
170
170
  );
171
171
  }
@@ -239,4 +239,4 @@ function ScrollBar({
239
239
  }
240
240
 
241
241
  export { ScrollArea as S, ScrollAreaViewport as a, ScrollBar as b };
242
- //# sourceMappingURL=scroll-area-BywIlj3F.js.map
242
+ //# sourceMappingURL=scroll-area-D6gKFavi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area-D6gKFavi.js","sources":["../src/ds/components/ScrollArea/scroll-area.tsx"],"sourcesContent":["import { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { useAutoscroll } from '@/hooks/use-autoscroll';\nimport { mergeRefs } from '@/lib/merge-refs';\nimport { cn } from '@/lib/utils';\n\ntype Orientation = 'vertical' | 'horizontal' | 'both';\ntype ScrollButtonDirection = 'left' | 'right';\n\nconst DEFAULT_SCROLL_BUTTON_SPEED = 100;\nconst DEFAULT_SCROLL_BUTTON_INTERVAL_TIME = 20;\nconst MIN_SCROLL_BUTTON_SPEED = 1;\nconst MIN_SCROLL_BUTTON_INTERVAL_TIME = 16;\n\ntype MaskFadeDepth = `${number}${'rem' | 'px'}`;\ntype MaskSide = boolean | MaskFadeDepth;\n\nconst DEFAULT_MASK_FADE_DEPTH: MaskFadeDepth = '2rem';\nconst NO_MASK_FADE: MaskFadeDepth = '0px';\n\nconst SCROLL_DRIVEN_FADE_CLASSES = [\n 'mask-t-from-[calc(100%-min(var(--scroll-area-fade-top),var(--scroll-area-overflow-y-start,0px)))]',\n 'mask-b-from-[calc(100%-min(var(--scroll-area-fade-bottom),var(--scroll-area-overflow-y-end,0px)))]',\n 'mask-l-from-[calc(100%-min(var(--scroll-area-fade-left),var(--scroll-area-overflow-x-start,0px)))]',\n 'mask-r-from-[calc(100%-min(var(--scroll-area-fade-right),var(--scroll-area-overflow-x-end,0px)))]',\n].join(' ');\n\nexport type MaskSides = {\n top?: MaskSide;\n bottom?: MaskSide;\n left?: MaskSide;\n right?: MaskSide;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: MaskSide;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: MaskSide;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`, 2rem deep.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default; a length (`'5rem'`) sets that side's fade depth.\n *\n * A fade grows with the distance scrolled from its edge, up to its depth.\n */\nexport type ScrollAreaMask = boolean | MaskSides;\n\nexport type ScrollAreaScrollButtons =\n | boolean\n | {\n /** Pixels to scroll per repeated interval. */\n scrollSpeed?: number;\n /** Milliseconds between repeated scroll steps while the button is held. */\n scrollIntervalTime?: number;\n leftLabel?: string;\n rightLabel?: string;\n };\n\nexport type ScrollAreaProps = React.ComponentProps<typeof ScrollAreaPrimitive.Root> & {\n maxHeight?: string;\n autoScroll?: boolean;\n orientation?: Orientation;\n /** Show left/right controls for horizontal overflow. Only applies to `horizontal` and `both` orientations. */\n scrollButtons?: ScrollAreaScrollButtons;\n /** Fade content at the edges where it's clipped by overflow. Defaults to the axes matching `orientation`. */\n mask?: ScrollAreaMask;\n /**\n * Reveal the overlay scrollbar when the pointer hovers the area. When `false`,\n * the scrollbar only appears while actively scrolling. Defaults to `true`.\n */\n revealScrollbarOnHover?: boolean;\n};\n\ntype ResolvedMask = Record<'top' | 'bottom' | 'left' | 'right', MaskFadeDepth | false>;\n\ntype ScrollAreaViewportStyle = React.CSSProperties & {\n '--scroll-area-fade-top'?: MaskFadeDepth;\n '--scroll-area-fade-bottom'?: MaskFadeDepth;\n '--scroll-area-fade-left'?: MaskFadeDepth;\n '--scroll-area-fade-right'?: MaskFadeDepth;\n};\n\nconst fadeDepth = (side: MaskSide) => (side === true ? DEFAULT_MASK_FADE_DEPTH : side);\n\nfunction resolveMask(mask: ScrollAreaMask | undefined, orientation: Orientation): ResolvedMask {\n if (mask === false) return { top: false, bottom: false, left: false, right: false };\n\n const verticalFade = (orientation === 'vertical' || orientation === 'both') && DEFAULT_MASK_FADE_DEPTH;\n const horizontalFade = (orientation === 'horizontal' || orientation === 'both') && DEFAULT_MASK_FADE_DEPTH;\n const sides: ResolvedMask = { top: verticalFade, bottom: verticalFade, left: horizontalFade, right: horizontalFade };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = fadeDepth(mask.y);\n sides.bottom = fadeDepth(mask.y);\n }\n if (mask.x !== undefined) {\n sides.left = fadeDepth(mask.x);\n sides.right = fadeDepth(mask.x);\n }\n if (mask.top !== undefined) sides.top = fadeDepth(mask.top);\n if (mask.bottom !== undefined) sides.bottom = fadeDepth(mask.bottom);\n if (mask.left !== undefined) sides.left = fadeDepth(mask.left);\n if (mask.right !== undefined) sides.right = fadeDepth(mask.right);\n\n return sides;\n}\n\nconst fadeDepthVars = (sides: ResolvedMask): ScrollAreaViewportStyle => ({\n '--scroll-area-fade-top': sides.top || NO_MASK_FADE,\n '--scroll-area-fade-bottom': sides.bottom || NO_MASK_FADE,\n '--scroll-area-fade-left': sides.left || NO_MASK_FADE,\n '--scroll-area-fade-right': sides.right || NO_MASK_FADE,\n});\n\nfunction clampScrollButtonNumber(value: number | undefined, fallback: number, min: number) {\n const resolvedValue = value ?? fallback;\n return Number.isFinite(resolvedValue) ? Math.max(min, resolvedValue) : Math.max(min, fallback);\n}\n\ntype ScrollButtonProps = {\n direction: ScrollButtonDirection;\n label: string;\n onStartScrolling: (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => void;\n onStopScrolling: () => void;\n onKeyboardScroll: (direction: ScrollButtonDirection) => void;\n};\n\nconst ScrollButton = ({ direction, label, onStartScrolling, onStopScrolling, onKeyboardScroll }: ScrollButtonProps) => {\n const Icon = direction === 'left' ? ChevronLeftIcon : ChevronRightIcon;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n className={cn(\n 'absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent hover:bg-fill-subtle active:bg-fill',\n quietTextHover,\n controlStateColorTransition,\n focusRing,\n direction === 'left'\n ? 'left-1 group-data-[overflow-x-start]/scroll-area:flex'\n : 'right-1 group-data-[overflow-x-end]/scroll-area:flex',\n )}\n onPointerDown={event => onStartScrolling(direction, event)}\n onPointerUp={onStopScrolling}\n onPointerLeave={onStopScrolling}\n onPointerCancel={onStopScrolling}\n onBlur={onStopScrolling}\n onClick={event => {\n if (event.detail === 0) onKeyboardScroll(direction);\n }}\n >\n <Icon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n );\n};\n\ntype ScrollButtonsProps = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n scrollButtons: Exclude<ScrollAreaScrollButtons, false | undefined>;\n};\n\nconst ScrollButtons = ({ areaRef, scrollButtons }: ScrollButtonsProps) => {\n const scrollButtonInterval = React.useRef<ReturnType<typeof setInterval> | null>(null);\n const scrollButtonOptions = typeof scrollButtons === 'object' ? scrollButtons : undefined;\n const scrollButtonSpeed = clampScrollButtonNumber(\n scrollButtonOptions?.scrollSpeed,\n DEFAULT_SCROLL_BUTTON_SPEED,\n MIN_SCROLL_BUTTON_SPEED,\n );\n const scrollButtonIntervalTime = clampScrollButtonNumber(\n scrollButtonOptions?.scrollIntervalTime,\n DEFAULT_SCROLL_BUTTON_INTERVAL_TIME,\n MIN_SCROLL_BUTTON_INTERVAL_TIME,\n );\n const leftScrollButtonLabel = scrollButtonOptions?.leftLabel ?? 'Scroll left';\n const rightScrollButtonLabel = scrollButtonOptions?.rightLabel ?? 'Scroll right';\n\n const stopScrollButtonScrolling = React.useCallback(() => {\n if (!scrollButtonInterval.current) return;\n clearInterval(scrollButtonInterval.current);\n scrollButtonInterval.current = null;\n }, []);\n\n const scrollByDirection = React.useCallback(\n (direction: ScrollButtonDirection, multiplier = 1) => {\n const viewport = areaRef.current;\n if (!viewport) return;\n\n viewport.scrollBy({\n left: direction === 'right' ? scrollButtonSpeed * multiplier : -scrollButtonSpeed * multiplier,\n behavior: 'smooth',\n });\n },\n [areaRef, scrollButtonSpeed],\n );\n\n const startScrollButtonScrolling = React.useCallback(\n (direction: ScrollButtonDirection, event?: React.PointerEvent<HTMLButtonElement>) => {\n event?.preventDefault();\n event?.stopPropagation();\n event?.currentTarget.setPointerCapture?.(event.pointerId);\n\n stopScrollButtonScrolling();\n scrollByDirection(direction, 2);\n\n scrollButtonInterval.current = setInterval(() => {\n scrollByDirection(direction);\n }, scrollButtonIntervalTime);\n },\n [scrollButtonIntervalTime, scrollByDirection, stopScrollButtonScrolling],\n );\n\n React.useEffect(() => {\n return () => {\n stopScrollButtonScrolling();\n };\n }, [stopScrollButtonScrolling]);\n\n return (\n <>\n <ScrollButton\n direction=\"left\"\n label={leftScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n <ScrollButton\n direction=\"right\"\n label={rightScrollButtonLabel}\n onStartScrolling={startScrollButtonScrolling}\n onStopScrolling={stopScrollButtonScrolling}\n onKeyboardScroll={direction => scrollByDirection(direction, 2)}\n />\n </>\n );\n};\n\ntype ScrollAreaViewportContextValue = {\n areaRef: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n contentStyle: React.CSSProperties | undefined;\n};\n\nconst ScrollAreaViewportContext = React.createContext<ScrollAreaViewportContextValue | null>(null);\n\nexport type ScrollAreaViewportProps = {\n className?: string;\n contentClassName?: string;\n children?: React.ReactNode;\n /** The scrolling element, e.g. a virtualizer's `getScrollElement`. */\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction useScrollAreaViewportContext() {\n const viewport = React.use(ScrollAreaViewportContext);\n if (!viewport) throw new Error('ScrollAreaViewport must be a direct child of ScrollArea');\n return viewport;\n}\n\nfunction ScrollAreaViewport({ className, contentClassName, children, ref }: ScrollAreaViewportProps) {\n const viewport = useScrollAreaViewportContext();\n const { areaRef } = viewport;\n const viewportRef = React.useMemo(() => mergeRefs(areaRef, ref), [areaRef, ref]);\n\n return (\n <ScrollAreaPrimitive.Viewport\n ref={viewportRef}\n className={cn(viewport.className, className)}\n style={viewport.style}\n >\n <ScrollAreaPrimitive.Content className={contentClassName} style={viewport.contentStyle}>\n <ScrollAreaViewportContext value={null}>{children}</ScrollAreaViewportContext>\n </ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n );\n}\n\nfunction ScrollArea({\n className,\n children,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n revealScrollbarOnHover = true,\n ...props\n}: ScrollAreaProps) {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n const sides = resolveMask(mask, orientation);\n const fadesAnySide = Object.values(sides).some(Boolean);\n\n const viewportStyle = fadeDepthVars(sides);\n if (maxHeight) viewportStyle.maxHeight = maxHeight;\n if (orientation === 'vertical') {\n viewportStyle.overflowX = 'hidden';\n viewportStyle.overflowY = 'scroll';\n } else if (orientation === 'horizontal') {\n viewportStyle.overflowX = 'scroll';\n viewportStyle.overflowY = 'hidden';\n }\n\n // Base UI's ScrollAreaContent forces `min-width: fit-content` so the\n // content can grow wider than the viewport (required for horizontal scroll\n // measurement). For vertical-only scroll we override it so children shrink\n // to the viewport width instead of forcing horizontal scroll.\n const contentStyle: React.CSSProperties | undefined =\n orientation === 'vertical' ? { minWidth: '0px' } : orientation === 'horizontal' ? { minHeight: '0px' } : undefined;\n\n const viewport: ScrollAreaViewportContextValue = {\n areaRef,\n className: cn('size-full', fadesAnySide && SCROLL_DRIVEN_FADE_CLASSES),\n style: viewportStyle,\n contentStyle,\n };\n const callerViewportCount = React.Children.toArray(children).filter(\n child => React.isValidElement(child) && child.type === ScrollAreaViewport,\n ).length;\n if (callerViewportCount > 1) throw new Error('ScrollArea takes at most one ScrollAreaViewport');\n const callerRendersViewport = callerViewportCount === 1;\n\n return (\n <ScrollAreaPrimitive.Root className={cn('group/scroll-area relative overflow-hidden', className)} {...props}>\n <ScrollAreaViewportContext value={viewport}>\n {callerRendersViewport ? children : <ScrollAreaViewport>{children}</ScrollAreaViewport>}\n </ScrollAreaViewportContext>\n {scrollButtons && orientation !== 'vertical' && <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />}\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBar orientation=\"vertical\" revealOnHover={revealScrollbarOnHover} />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBar orientation=\"horizontal\" revealOnHover={revealScrollbarOnHover} />\n )}\n {orientation === 'both' && <ScrollAreaPrimitive.Corner />}\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n revealOnHover = true,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none transition-opacity duration-normal ease-out-custom select-none',\n 'opacity-0 data-[scrolling]:opacity-100 data-[scrolling]:duration-0',\n revealOnHover && 'data-[hovering]:opacity-100',\n orientation === 'vertical' && 'h-full w-1.5 p-px',\n orientation === 'horizontal' && 'h-1.5 w-full flex-col p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-muted-foreground/30 hover:bg-muted-foreground/60\" />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollAreaViewport, ScrollBar };\n"],"names":["ScrollAreaPrimitive"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { SearchIcon, XIcon } from 'lucide-react';
3
3
  import { useRef } from 'react';
4
4
  import { F as Field, e as FieldLabel } from './field-B89BEZg4.js';
5
5
  import './field-control-aria-DB6y41tQ.js';
6
- import { I as InputGroup, a as InputGroupAddon, c as InputGroupInput, b as InputGroupButton } from './input-group-CIIwoggO.js';
6
+ import { I as InputGroup, a as InputGroupAddon, c as InputGroupInput, b as InputGroupButton } from './input-group-CrumkDCF.js';
7
7
  import { m as mergeRefs } from './merge-refs-DA1xt2OQ.js';
8
8
 
9
9
  function SearchInput({
@@ -45,4 +45,4 @@ function SearchInput({
45
45
  }
46
46
 
47
47
  export { SearchInput as S };
48
- //# sourceMappingURL=search-input-RybUdqzg.js.map
48
+ //# sourceMappingURL=search-input-BEAKPGH8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-input-RybUdqzg.js","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,SAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvC,IAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACX,GAAA,CAAC,mBAAgB,KAAA,EAAM,YAAA,EACrB,8BAAC,gBAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"search-input-BEAKPGH8.js","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,SAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvC,IAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACX,GAAA,CAAC,mBAAgB,KAAA,EAAM,YAAA,EACrB,8BAAC,gBAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -5,7 +5,7 @@ const lucideReact = require('lucide-react');
5
5
  const React = require('react');
6
6
  const field = require('./field-D1SVMPMz.cjs');
7
7
  require('./field-control-aria-WzMGs0A4.cjs');
8
- const inputGroup = require('./input-group-DQuyC9Pz.cjs');
8
+ const inputGroup = require('./input-group-Bj2RbkNg.cjs');
9
9
  const mergeRefs = require('./merge-refs-BLbKe138.cjs');
10
10
 
11
11
  function SearchInput({
@@ -47,4 +47,4 @@ function SearchInput({
47
47
  }
48
48
 
49
49
  exports.SearchInput = SearchInput;
50
- //# sourceMappingURL=search-input-2DhcUIvn.cjs.map
50
+ //# sourceMappingURL=search-input-DdRhkYqy.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-input-2DhcUIvn.cjs","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":["useRef","jsxs","Field","jsx","FieldLabel","InputGroup","InputGroupAddon","SearchIcon","InputGroupInput","mergeRefs","InputGroupButton","XIcon"],"mappings":";;;;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEC,eAAA,CAACC,eAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvCH,eAAA,CAACI,qBAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAACG,0BAAA,EAAA,EACC,QAAA,kBAAAH,cAAA,CAACI,sBAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACAJ,cAAA;AAAA,QAACK,0BAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAKC,mBAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACXN,cAAA,CAACG,8BAAgB,KAAA,EAAM,YAAA,EACrB,yCAACI,2BAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAAP,cAAA,CAACQ,iBAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"search-input-DdRhkYqy.cjs","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":["useRef","jsxs","Field","jsx","FieldLabel","InputGroup","InputGroupAddon","SearchIcon","InputGroupInput","mergeRefs","InputGroupButton","XIcon"],"mappings":";;;;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEC,eAAA,CAACC,eAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvCH,eAAA,CAACI,qBAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAACG,0BAAA,EAAA,EACC,QAAA,kBAAAH,cAAA,CAACI,sBAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACAJ,cAAA;AAAA,QAACK,0BAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAKC,mBAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACXN,cAAA,CAACG,8BAAgB,KAAA,EAAM,YAAA,EACrB,yCAACI,2BAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAAP,cAAA,CAACQ,iBAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -4,7 +4,7 @@ const jsxRuntime = require('react/jsx-runtime');
4
4
  const domains_traces_components_spanPayload_spanPayloadJson = require('./domains/traces/components/span-payload/span-payload-json.cjs.js');
5
5
  const collapsible = require('./collapsible-C6BZhVRG.cjs');
6
6
  const disclosureChevron = require('./disclosure-chevron-B_gmYFR5.cjs');
7
- const markdownRenderer = require('./markdown-renderer-BXTNiZbz.cjs');
7
+ const markdownRenderer = require('./markdown-renderer-BRu3RpQD.cjs');
8
8
  const Txt = require('./Txt-DXjXpX9r.cjs');
9
9
  const domains_chat_components_badgeWrapper = require('./domains/chat/components/badge-wrapper.cjs.js');
10
10
  const activity = require('./activity-CaFdLiPz.cjs');
@@ -75,4 +75,4 @@ exports.SpanPayloadLabel = SpanPayloadLabel;
75
75
  exports.SpanPayloadMarkdown = SpanPayloadMarkdown;
76
76
  exports.SpanPayloadTool = SpanPayloadTool;
77
77
  exports.SpanPayloadToolCalls = SpanPayloadToolCalls;
78
- //# sourceMappingURL=span-payload-primitives-DIxmotnO.cjs.map
78
+ //# sourceMappingURL=span-payload-primitives-BymKsUAo.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-DIxmotnO.cjs","sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField, SpanPayloadLabel } from './span-payload-primitives';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport function SpanPayloadTool({ value, showLabel = true }: { value: unknown; showLabel?: boolean }) {\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const hasBody = input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n {showLabel && <SpanPayloadLabel>{value.type === 'tool-result' ? 'Tool result' : 'Tool call'}</SpanPayloadLabel>}\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} showLabel={false} />\n </li>\n ))}\n </ul>\n );\n}\n"],"names":["jsx","SpanPayloadJson","presentTool","jsxs","BadgeWrapper","ActivityHeadline","Txt","MarkdownRenderer","Collapsible","CollapsibleTrigger","DisclosureChevron","CollapsibleContent"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-primitives-BymKsUAo.cjs","sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField, SpanPayloadLabel } from './span-payload-primitives';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport function SpanPayloadTool({ value, showLabel = true }: { value: unknown; showLabel?: boolean }) {\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const hasBody = input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n {showLabel && <SpanPayloadLabel>{value.type === 'tool-result' ? 'Tool result' : 'Tool call'}</SpanPayloadLabel>}\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} showLabel={false} />\n </li>\n ))}\n </ul>\n );\n}\n"],"names":["jsx","SpanPayloadJson","presentTool","jsxs","BadgeWrapper","ActivityHeadline","Txt","MarkdownRenderer","Collapsible","CollapsibleTrigger","DisclosureChevron","CollapsibleContent"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { SpanPayloadJson } from './domains/traces/components/span-payload/span-payload-json.es.js';
3
3
  import { C as Collapsible, b as CollapsibleTrigger, a as CollapsibleContent } from './collapsible-DglEffBF.js';
4
4
  import { D as DisclosureChevron } from './disclosure-chevron-BWZ8Alz1.js';
5
- import { M as MarkdownRenderer } from './markdown-renderer-Ct-q_KTF.js';
5
+ import { M as MarkdownRenderer } from './markdown-renderer-WesDzhMr.js';
6
6
  import { T as Txt } from './Txt-BuzYj7Vy.js';
7
7
  import { BadgeWrapper } from './domains/chat/components/badge-wrapper.es.js';
8
8
  import { e as ActivityHeadline } from './activity-BsrB5ADa.js';
@@ -68,4 +68,4 @@ function SpanPayloadToolCalls({ toolCalls }) {
68
68
  }
69
69
 
70
70
  export { SpanPayloadField as S, SpanPayloadMarkdown as a, SpanPayloadToolCalls as b, SpanPayloadCollapsible as c, SpanPayloadLabel as d, SpanPayloadTool as e };
71
- //# sourceMappingURL=span-payload-primitives-dTs5UrjA.js.map
71
+ //# sourceMappingURL=span-payload-primitives-DBNNkmHo.js.map