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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{Button-B5RnKrGb.cjs → Button-Bm94fEF2.cjs} +2 -2
  3. package/dist/{Button-B5RnKrGb.cjs.map → Button-Bm94fEF2.cjs.map} +1 -1
  4. package/dist/{Button-Dh5CZ6Ir.js → Button-Bx2lFdqb.js} +2 -2
  5. package/dist/{Button-Dh5CZ6Ir.js.map → Button-Bx2lFdqb.js.map} +1 -1
  6. package/dist/{EmptyState-C0TShKF9.js → EmptyState-BLd-LJOA.js} +3 -3
  7. package/dist/{EmptyState-C0TShKF9.js.map → EmptyState-BLd-LJOA.js.map} +1 -1
  8. package/dist/{EmptyState-CDPLdgbs.cjs → EmptyState-sff7IGrD.cjs} +3 -3
  9. package/dist/{EmptyState-CDPLdgbs.cjs.map → EmptyState-sff7IGrD.cjs.map} +1 -1
  10. package/dist/{ErrorState-4TTbwyNs.cjs → ErrorState-DvsG3RMz.cjs} +3 -3
  11. package/dist/{ErrorState-4TTbwyNs.cjs.map → ErrorState-DvsG3RMz.cjs.map} +1 -1
  12. package/dist/{ErrorState-D1uTstEy.js → ErrorState-t59EAa55.js} +3 -3
  13. package/dist/{ErrorState-D1uTstEy.js.map → ErrorState-t59EAa55.js.map} +1 -1
  14. package/dist/{Notice-WhHdy89l.cjs → Notice-D7mbkdZW.cjs} +2 -2
  15. package/dist/{Notice-WhHdy89l.cjs.map → Notice-D7mbkdZW.cjs.map} +1 -1
  16. package/dist/{Notice-jmHNt3gS.js → Notice-zWRcxcM3.js} +2 -2
  17. package/dist/{Notice-jmHNt3gS.js.map → Notice-zWRcxcM3.js.map} +1 -1
  18. package/dist/{PermissionDenied-C7lur6xI.js → PermissionDenied-8otNeK_X.js} +2 -2
  19. package/dist/{PermissionDenied-C7lur6xI.js.map → PermissionDenied-8otNeK_X.js.map} +1 -1
  20. package/dist/{PermissionDenied-Cao8jHEU.cjs → PermissionDenied-Dtre6Wn1.cjs} +2 -2
  21. package/dist/{PermissionDenied-Cao8jHEU.cjs.map → PermissionDenied-Dtre6Wn1.cjs.map} +1 -1
  22. package/dist/{SessionExpired-DEJgiQcL.cjs → SessionExpired-C5ADs4NL.cjs} +3 -3
  23. package/dist/{SessionExpired-DEJgiQcL.cjs.map → SessionExpired-C5ADs4NL.cjs.map} +1 -1
  24. package/dist/{SessionExpired-C0PdcdCr.js → SessionExpired-CHF__hq9.js} +3 -3
  25. package/dist/{SessionExpired-C0PdcdCr.js.map → SessionExpired-CHF__hq9.js.map} +1 -1
  26. package/dist/{code-diff-BpD8McFU.js → code-diff-BB4sqHpq.js} +3 -3
  27. package/dist/{code-diff-BpD8McFU.js.map → code-diff-BB4sqHpq.js.map} +1 -1
  28. package/dist/{code-diff-B1JxR3PF.cjs → code-diff-C-EHXZyK.cjs} +3 -3
  29. package/dist/{code-diff-B1JxR3PF.cjs.map → code-diff-C-EHXZyK.cjs.map} +1 -1
  30. package/dist/{combobox-54Hywnf9.cjs → combobox-DXwbHjvQ.cjs} +2 -2
  31. package/dist/{combobox-54Hywnf9.cjs.map → combobox-DXwbHjvQ.cjs.map} +1 -1
  32. package/dist/{combobox-CBvs2ZPx.js → combobox-sa_Pxyl4.js} +2 -2
  33. package/dist/{combobox-CBvs2ZPx.js.map → combobox-sa_Pxyl4.js.map} +1 -1
  34. package/dist/components/AlertDialog.cjs.js +1 -1
  35. package/dist/components/AlertDialog.es.js +1 -1
  36. package/dist/components/Button.cjs.js +1 -1
  37. package/dist/components/Button.es.js +1 -1
  38. package/dist/components/ClampedText.cjs.js +1 -1
  39. package/dist/components/ClampedText.es.js +1 -1
  40. package/dist/components/CodeBlock.cjs.js +8 -8
  41. package/dist/components/CodeBlock.cjs.js.map +1 -1
  42. package/dist/components/CodeBlock.es.js +8 -8
  43. package/dist/components/CodeBlock.es.js.map +1 -1
  44. package/dist/components/CodeDiff.cjs.js +1 -1
  45. package/dist/components/CodeDiff.es.js +1 -1
  46. package/dist/components/CodeEditor.cjs.js +1 -1
  47. package/dist/components/CodeEditor.es.js +1 -1
  48. package/dist/components/Columns.cjs.js +1 -1
  49. package/dist/components/Columns.es.js +1 -1
  50. package/dist/components/Combobox.cjs.js +1 -1
  51. package/dist/components/Combobox.es.js +1 -1
  52. package/dist/components/Command.cjs.js +4 -4
  53. package/dist/components/Command.cjs.js.map +1 -1
  54. package/dist/components/Command.es.js +4 -4
  55. package/dist/components/Command.es.js.map +1 -1
  56. package/dist/components/Composer.cjs.js +5 -5
  57. package/dist/components/Composer.cjs.js.map +1 -1
  58. package/dist/components/Composer.es.js +5 -5
  59. package/dist/components/Composer.es.js.map +1 -1
  60. package/dist/components/ContentBlocks.cjs.js.map +1 -1
  61. package/dist/components/ContentBlocks.es.js.map +1 -1
  62. package/dist/components/ContextMenu.cjs.js +1 -1
  63. package/dist/components/ContextMenu.cjs.js.map +1 -1
  64. package/dist/components/ContextMenu.es.js +1 -1
  65. package/dist/components/ContextMenu.es.js.map +1 -1
  66. package/dist/components/CopyButton.cjs.js +1 -1
  67. package/dist/components/CopyButton.es.js +1 -1
  68. package/dist/components/DataCodeSection.cjs.js +1 -1
  69. package/dist/components/DataCodeSection.es.js +1 -1
  70. package/dist/components/DataDetailsPanel.cjs.js +5 -5
  71. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  72. package/dist/components/DataDetailsPanel.es.js +5 -5
  73. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  74. package/dist/components/DataFilter.cjs.js +2 -2
  75. package/dist/components/DataFilter.es.js +2 -2
  76. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  77. package/dist/components/DataKeysAndValues.es.js +1 -1
  78. package/dist/components/DataList.cjs.js +7 -7
  79. package/dist/components/DataList.cjs.js.map +1 -1
  80. package/dist/components/DataList.es.js +7 -7
  81. package/dist/components/DataList.es.js.map +1 -1
  82. package/dist/components/DataPanel.cjs.js +1 -1
  83. package/dist/components/DataPanel.es.js +1 -1
  84. package/dist/components/DateRangeTimeline.cjs.js +11 -11
  85. package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
  86. package/dist/components/DateRangeTimeline.es.js +11 -11
  87. package/dist/components/DateRangeTimeline.es.js.map +1 -1
  88. package/dist/components/DateTimePicker.cjs.js +4 -4
  89. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  90. package/dist/components/DateTimePicker.es.js +4 -4
  91. package/dist/components/DateTimePicker.es.js.map +1 -1
  92. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  93. package/dist/components/DateTimeRangePicker.es.js +1 -1
  94. package/dist/components/Dialog.cjs.js +1 -1
  95. package/dist/components/Dialog.es.js +1 -1
  96. package/dist/components/Drawer.cjs.js +1 -1
  97. package/dist/components/Drawer.es.js +1 -1
  98. package/dist/components/DropdownMenu.cjs.js +1 -1
  99. package/dist/components/DropdownMenu.es.js +1 -1
  100. package/dist/components/EmptyState.cjs.js +1 -1
  101. package/dist/components/EmptyState.es.js +1 -1
  102. package/dist/components/EntityHeader.cjs.js +1 -1
  103. package/dist/components/EntityHeader.cjs.js.map +1 -1
  104. package/dist/components/EntityHeader.es.js +1 -1
  105. package/dist/components/EntityHeader.es.js.map +1 -1
  106. package/dist/components/EnvironmentVariablesEditor.cjs.js +9 -9
  107. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  108. package/dist/components/EnvironmentVariablesEditor.es.js +9 -9
  109. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  110. package/dist/components/ErrorBoundary.cjs.js +3 -3
  111. package/dist/components/ErrorBoundary.cjs.js.map +1 -1
  112. package/dist/components/ErrorBoundary.es.js +3 -3
  113. package/dist/components/ErrorBoundary.es.js.map +1 -1
  114. package/dist/components/ErrorState.cjs.js +1 -1
  115. package/dist/components/ErrorState.es.js +1 -1
  116. package/dist/components/FormFieldBlocks.cjs.js +4 -4
  117. package/dist/components/FormFieldBlocks.es.js +4 -4
  118. package/dist/components/Header.cjs.js +1 -1
  119. package/dist/components/Header.cjs.js.map +1 -1
  120. package/dist/components/Header.es.js +1 -1
  121. package/dist/components/Header.es.js.map +1 -1
  122. package/dist/components/HorizontalBars.cjs.js +1 -1
  123. package/dist/components/HorizontalBars.es.js +1 -1
  124. package/dist/components/InputGroup.cjs.js +1 -1
  125. package/dist/components/InputGroup.es.js +1 -1
  126. package/dist/components/ItemList.cjs.js +5 -5
  127. package/dist/components/ItemList.cjs.js.map +1 -1
  128. package/dist/components/ItemList.es.js +5 -5
  129. package/dist/components/ItemList.es.js.map +1 -1
  130. package/dist/components/JSONSchemaForm.cjs.js +3 -3
  131. package/dist/components/JSONSchemaForm.es.js +3 -3
  132. package/dist/components/ListSearch.cjs.js +2 -2
  133. package/dist/components/ListSearch.cjs.js.map +1 -1
  134. package/dist/components/ListSearch.es.js +2 -2
  135. package/dist/components/ListSearch.es.js.map +1 -1
  136. package/dist/components/LogsDataList.cjs.js +2 -2
  137. package/dist/components/LogsDataList.es.js +2 -2
  138. package/dist/components/MainSidebar.cjs.js +4 -4
  139. package/dist/components/MainSidebar.cjs.js.map +1 -1
  140. package/dist/components/MainSidebar.es.js +4 -4
  141. package/dist/components/MainSidebar.es.js.map +1 -1
  142. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  143. package/dist/components/MarkdownRenderer.es.js +1 -1
  144. package/dist/components/MetricsCard.cjs.js +1 -1
  145. package/dist/components/MetricsCard.es.js +1 -1
  146. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  147. package/dist/components/MetricsKpiCard.es.js +1 -1
  148. package/dist/components/MetricsLineChart.cjs.js +1 -1
  149. package/dist/components/MetricsLineChart.es.js +1 -1
  150. package/dist/components/Notice.cjs.js +1 -1
  151. package/dist/components/Notice.es.js +1 -1
  152. package/dist/components/PendingIndicator.cjs.js +1 -1
  153. package/dist/components/PendingIndicator.cjs.js.map +1 -1
  154. package/dist/components/PendingIndicator.es.js +1 -1
  155. package/dist/components/PendingIndicator.es.js.map +1 -1
  156. package/dist/components/PermissionDenied.cjs.js +1 -1
  157. package/dist/components/PermissionDenied.es.js +1 -1
  158. package/dist/components/PrevNextNav.cjs.js +1 -1
  159. package/dist/components/PrevNextNav.es.js +1 -1
  160. package/dist/components/PropertyFilter.cjs.js +9 -9
  161. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  162. package/dist/components/PropertyFilter.es.js +10 -10
  163. package/dist/components/PropertyFilter.es.js.map +1 -1
  164. package/dist/components/RuleBuilder.cjs.js +13 -13
  165. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  166. package/dist/components/RuleBuilder.es.js +13 -13
  167. package/dist/components/RuleBuilder.es.js.map +1 -1
  168. package/dist/components/SankeyChart.cjs.js +4 -4
  169. package/dist/components/SankeyChart.cjs.js.map +1 -1
  170. package/dist/components/SankeyChart.es.js +4 -4
  171. package/dist/components/SankeyChart.es.js.map +1 -1
  172. package/dist/components/ScatterPlotChart.cjs.js +1 -1
  173. package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
  174. package/dist/components/ScatterPlotChart.es.js +1 -1
  175. package/dist/components/ScatterPlotChart.es.js.map +1 -1
  176. package/dist/components/ScrollArea.cjs.js +1 -1
  177. package/dist/components/ScrollArea.es.js +1 -1
  178. package/dist/components/Select.cjs.js +1 -1
  179. package/dist/components/Select.es.js +1 -1
  180. package/dist/components/SessionExpired.cjs.js +1 -1
  181. package/dist/components/SessionExpired.es.js +1 -1
  182. package/dist/components/SettingsRow.cjs.js +1 -1
  183. package/dist/components/SettingsRow.cjs.js.map +1 -1
  184. package/dist/components/SettingsRow.es.js +1 -1
  185. package/dist/components/SettingsRow.es.js.map +1 -1
  186. package/dist/components/SideDialog.cjs.js +5 -5
  187. package/dist/components/SideDialog.cjs.js.map +1 -1
  188. package/dist/components/SideDialog.es.js +5 -5
  189. package/dist/components/SideDialog.es.js.map +1 -1
  190. package/dist/components/Steps.cjs.js +1 -1
  191. package/dist/components/Steps.cjs.js.map +1 -1
  192. package/dist/components/Steps.es.js +1 -1
  193. package/dist/components/Steps.es.js.map +1 -1
  194. package/dist/components/Table.cjs.js +2 -2
  195. package/dist/components/Table.cjs.js.map +1 -1
  196. package/dist/components/Table.es.js +2 -2
  197. package/dist/components/Table.es.js.map +1 -1
  198. package/dist/components/Tabs.cjs.js +1 -1
  199. package/dist/components/Tabs.es.js +1 -1
  200. package/dist/components/ThreadList.cjs.js +3 -3
  201. package/dist/components/ThreadList.cjs.js.map +1 -1
  202. package/dist/components/ThreadList.es.js +3 -3
  203. package/dist/components/ThreadList.es.js.map +1 -1
  204. package/dist/components/ThreadRail.cjs.js +6 -6
  205. package/dist/components/ThreadRail.cjs.js.map +1 -1
  206. package/dist/components/ThreadRail.es.js +6 -6
  207. package/dist/components/ThreadRail.es.js.map +1 -1
  208. package/dist/components/Tooltip.cjs.js +1 -1
  209. package/dist/components/Tooltip.es.js +1 -1
  210. package/dist/components/Tree.cjs.js +2 -2
  211. package/dist/components/Tree.cjs.js.map +1 -1
  212. package/dist/components/Tree.es.js +2 -2
  213. package/dist/components/Tree.es.js.map +1 -1
  214. package/dist/components/Truncate.cjs.js +2 -2
  215. package/dist/components/Truncate.es.js +2 -2
  216. package/dist/components/ai/ask-user.cjs.js +3 -3
  217. package/dist/components/ai/ask-user.cjs.js.map +1 -1
  218. package/dist/components/ai/ask-user.es.js +3 -3
  219. package/dist/components/ai/ask-user.es.js.map +1 -1
  220. package/dist/components/ai/plan.cjs.js +4 -4
  221. package/dist/components/ai/plan.cjs.js.map +1 -1
  222. package/dist/components/ai/plan.es.js +4 -4
  223. package/dist/components/ai/plan.es.js.map +1 -1
  224. package/dist/components/ai/task-list.cjs.js +6 -6
  225. package/dist/components/ai/task-list.cjs.js.map +1 -1
  226. package/dist/components/ai/task-list.es.js +6 -6
  227. package/dist/components/ai/task-list.es.js.map +1 -1
  228. package/dist/{copy-button-DNR760m7.cjs → copy-button-BKFcsNE1.cjs} +3 -3
  229. package/dist/{copy-button-DNR760m7.cjs.map → copy-button-BKFcsNE1.cjs.map} +1 -1
  230. package/dist/{copy-button-BuIpvUI7.js → copy-button-H2iaKMng.js} +3 -3
  231. package/dist/{copy-button-BuIpvUI7.js.map → copy-button-H2iaKMng.js.map} +1 -1
  232. package/dist/{data-code-section-D0BwpqvV.cjs → data-code-section-D2zjah_b.cjs} +8 -8
  233. package/dist/{data-code-section-D0BwpqvV.cjs.map → data-code-section-D2zjah_b.cjs.map} +1 -1
  234. package/dist/{data-code-section-BjqDCzy3.js → data-code-section-MHMkC6q9.js} +8 -8
  235. package/dist/{data-code-section-BjqDCzy3.js.map → data-code-section-MHMkC6q9.js.map} +1 -1
  236. package/dist/{data-keys-and-values-BMnGKbXm.js → data-keys-and-values-BJynhd6V.js} +3 -3
  237. package/dist/{data-keys-and-values-BMnGKbXm.js.map → data-keys-and-values-BJynhd6V.js.map} +1 -1
  238. package/dist/{data-keys-and-values--e2u0YXB.cjs → data-keys-and-values-sjag88jf.cjs} +3 -3
  239. package/dist/{data-keys-and-values--e2u0YXB.cjs.map → data-keys-and-values-sjag88jf.cjs.map} +1 -1
  240. package/dist/{data-list-CQWBPREX.cjs → data-list-CEGVpKNo.cjs} +5 -5
  241. package/dist/{data-list-CQWBPREX.cjs.map → data-list-CEGVpKNo.cjs.map} +1 -1
  242. package/dist/{data-list-Ca8j8X2e.js → data-list-SGIqDkMi.js} +5 -5
  243. package/dist/{data-list-Ca8j8X2e.js.map → data-list-SGIqDkMi.js.map} +1 -1
  244. package/dist/{data-list-row-wrapper-D-ieH7I9.cjs → data-list-row-wrapper-C-77LgWH.cjs} +2 -2
  245. package/dist/{data-list-row-wrapper-D-ieH7I9.cjs.map → data-list-row-wrapper-C-77LgWH.cjs.map} +1 -1
  246. package/dist/{data-list-row-wrapper-dMY1gERX.js → data-list-row-wrapper-DbGQIaO1.js} +2 -2
  247. package/dist/{data-list-row-wrapper-dMY1gERX.js.map → data-list-row-wrapper-DbGQIaO1.js.map} +1 -1
  248. package/dist/{data-list-skeleton-CIxMXF73.js → data-list-skeleton-CQvX7jIh.js} +4 -4
  249. package/dist/{data-list-skeleton-CIxMXF73.js.map → data-list-skeleton-CQvX7jIh.js.map} +1 -1
  250. package/dist/{data-list-skeleton-C-DkvqbS.cjs → data-list-skeleton-CmCTE-HQ.cjs} +4 -4
  251. package/dist/{data-list-skeleton-C-DkvqbS.cjs.map → data-list-skeleton-CmCTE-HQ.cjs.map} +1 -1
  252. package/dist/{data-list-top-cell-QZpCLDIZ.js → data-list-top-cell-D9EsRa0k.js} +5 -5
  253. package/dist/{data-list-top-cell-QZpCLDIZ.js.map → data-list-top-cell-D9EsRa0k.js.map} +1 -1
  254. package/dist/{data-list-top-cell-CL-FVkPX.cjs → data-list-top-cell-DoeqMbd1.cjs} +5 -5
  255. package/dist/{data-list-top-cell-CL-FVkPX.cjs.map → data-list-top-cell-DoeqMbd1.cjs.map} +1 -1
  256. package/dist/{data-panel-BGpCzY5K.js → data-panel-BEvHk4wg.js} +5 -5
  257. package/dist/{data-panel-BGpCzY5K.js.map → data-panel-BEvHk4wg.js.map} +1 -1
  258. package/dist/{data-panel-CsonAnlK.cjs → data-panel-BumsjXVz.cjs} +5 -5
  259. package/dist/{data-panel-CsonAnlK.cjs.map → data-panel-BumsjXVz.cjs.map} +1 -1
  260. package/dist/{date-time-range-picker-CF4a39P7.cjs → date-time-range-picker-ue0m5G27.cjs} +4 -4
  261. package/dist/{date-time-range-picker-CF4a39P7.cjs.map → date-time-range-picker-ue0m5G27.cjs.map} +1 -1
  262. package/dist/{date-time-range-picker-DDNeOyj9.js → date-time-range-picker-yJBIm34J.js} +4 -4
  263. package/dist/{date-time-range-picker-DDNeOyj9.js.map → date-time-range-picker-yJBIm34J.js.map} +1 -1
  264. package/dist/{dialog-XVpF4nQ5.cjs → dialog-ClItuCFY.cjs} +2 -2
  265. package/dist/{dialog-XVpF4nQ5.cjs.map → dialog-ClItuCFY.cjs.map} +1 -1
  266. package/dist/{dialog-DhjOHEDT.js → dialog-bnt6epW2.js} +2 -2
  267. package/dist/{dialog-DhjOHEDT.js.map → dialog-bnt6epW2.js.map} +1 -1
  268. package/dist/domains/logs/components/log-details-view.cjs.js +5 -5
  269. package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
  270. package/dist/domains/logs/components/log-details-view.es.js +5 -5
  271. package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
  272. package/dist/domains/logs/components/logs-error-content.cjs.js +4 -4
  273. package/dist/domains/logs/components/logs-error-content.es.js +4 -4
  274. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  275. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  276. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  277. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  278. package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
  279. package/dist/domains/logs/components/no-logs-info.es.js +2 -2
  280. package/dist/domains/memory/components/flame-graph.cjs.js +18 -18
  281. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  282. package/dist/domains/memory/components/flame-graph.es.js +18 -18
  283. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  284. package/dist/domains/memory/components/memory-studio-panel.cjs.js +4 -4
  285. package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
  286. package/dist/domains/memory/components/memory-studio-panel.es.js +4 -4
  287. package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
  288. package/dist/domains/memory/components/observation-detail-view.cjs.js +9 -9
  289. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  290. package/dist/domains/memory/components/observation-detail-view.es.js +9 -9
  291. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  292. package/dist/domains/memory/components/thread-context-progress.cjs.js +2 -2
  293. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  294. package/dist/domains/memory/components/thread-context-progress.es.js +2 -2
  295. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  296. package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
  297. package/dist/domains/metrics/components/bar-list.es.js +1 -1
  298. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  299. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  300. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  301. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  302. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  303. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  304. package/dist/domains/metrics/components/latency-card-view.cjs.js +3 -3
  305. package/dist/domains/metrics/components/latency-card-view.es.js +3 -3
  306. package/dist/domains/metrics/components/memory-card-view.cjs.js +3 -3
  307. package/dist/domains/metrics/components/memory-card-view.es.js +3 -3
  308. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  309. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  310. package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
  311. package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
  312. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +3 -3
  313. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +3 -3
  314. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +3 -3
  315. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +3 -3
  316. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +3 -3
  317. package/dist/domains/metrics/components/traces-volume-card-view.es.js +3 -3
  318. package/dist/domains/traces/components/no-traces-info.cjs.js +2 -2
  319. package/dist/domains/traces/components/no-traces-info.es.js +2 -2
  320. package/dist/domains/traces/components/span-data-panel-view.cjs.js +5 -5
  321. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  322. package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
  323. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  324. package/dist/domains/traces/components/span-token-usage.cjs.js +7 -7
  325. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  326. package/dist/domains/traces/components/span-token-usage.es.js +7 -7
  327. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  328. package/dist/domains/traces/components/timeline-expand-col.cjs.js +1 -1
  329. package/dist/domains/traces/components/timeline-expand-col.es.js +1 -1
  330. package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
  331. package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
  332. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -3
  333. package/dist/domains/traces/components/trace-data-panel-view.es.js +3 -3
  334. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +1 -1
  335. package/dist/domains/traces/components/trace-keys-and-values.es.js +1 -1
  336. package/dist/domains/traces/components/trace-timeline.cjs.js +1 -1
  337. package/dist/domains/traces/components/trace-timeline.cjs.js.map +1 -1
  338. package/dist/domains/traces/components/trace-timeline.es.js +1 -1
  339. package/dist/domains/traces/components/trace-timeline.es.js.map +1 -1
  340. package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
  341. package/dist/domains/traces/components/traces-error-content.es.js +3 -3
  342. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  343. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  344. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  345. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  346. package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
  347. package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
  348. package/dist/{drawer-DvuUmhic.cjs → drawer-CdsTitFp.cjs} +3 -3
  349. package/dist/{drawer-DvuUmhic.cjs.map → drawer-CdsTitFp.cjs.map} +1 -1
  350. package/dist/{drawer-Dyx25o_o.js → drawer-DZ9amYo_.js} +3 -3
  351. package/dist/{drawer-Dyx25o_o.js.map → drawer-DZ9amYo_.js.map} +1 -1
  352. package/dist/{dropdown-menu-UWIbg6mM.js → dropdown-menu-DEFygDZI.js} +2 -2
  353. package/dist/{dropdown-menu-UWIbg6mM.js.map → dropdown-menu-DEFygDZI.js.map} +1 -1
  354. package/dist/{dropdown-menu-BE2WHHln.cjs → dropdown-menu-ppWztidX.cjs} +2 -2
  355. package/dist/{dropdown-menu-BE2WHHln.cjs.map → dropdown-menu-ppWztidX.cjs.map} +1 -1
  356. package/dist/ee/signals/components/signals-empty-state.cjs.js +32 -32
  357. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  358. package/dist/ee/signals/components/signals-empty-state.es.js +32 -32
  359. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  360. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  361. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  362. package/dist/ee/topics/components/topics-layout.cjs.js +2 -2
  363. package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
  364. package/dist/ee/topics/components/topics-layout.es.js +2 -2
  365. package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
  366. package/dist/{field-block-CBdMcT-i.js → field-block-B63CpA4d.js} +2 -2
  367. package/dist/{field-block-CBdMcT-i.js.map → field-block-B63CpA4d.js.map} +1 -1
  368. package/dist/{field-block-CEbnWKc0.cjs → field-block-BcTR08I7.cjs} +2 -2
  369. package/dist/{field-block-CEbnWKc0.cjs.map → field-block-BcTR08I7.cjs.map} +1 -1
  370. package/dist/{horizontal-bars-CHoNhl-X.js → horizontal-bars-DHeyxqDT.js} +8 -8
  371. package/dist/{horizontal-bars-CHoNhl-X.js.map → horizontal-bars-DHeyxqDT.js.map} +1 -1
  372. package/dist/{horizontal-bars-aRhVh7mi.cjs → horizontal-bars-qf60G0xH.cjs} +8 -8
  373. package/dist/{horizontal-bars-aRhVh7mi.cjs.map → horizontal-bars-qf60G0xH.cjs.map} +1 -1
  374. package/dist/{input-group-QaBen5tC.cjs → input-group-CH72YUVL.cjs} +2 -2
  375. package/dist/{input-group-QaBen5tC.cjs.map → input-group-CH72YUVL.cjs.map} +1 -1
  376. package/dist/{input-group-DZnJcY3U.js → input-group-Dzs-ai0n.js} +2 -2
  377. package/dist/{input-group-DZnJcY3U.js.map → input-group-Dzs-ai0n.js.map} +1 -1
  378. package/dist/{logs-data-list-4R9mXlZ5.cjs → logs-data-list-B6XQnRed.cjs} +5 -5
  379. package/dist/{logs-data-list-4R9mXlZ5.cjs.map → logs-data-list-B6XQnRed.cjs.map} +1 -1
  380. package/dist/{logs-data-list-BXLk5vqv.js → logs-data-list-BkmYnYuf.js} +5 -5
  381. package/dist/{logs-data-list-BXLk5vqv.js.map → logs-data-list-BkmYnYuf.js.map} +1 -1
  382. package/dist/{markdown-renderer-ZzJcwfS3.js → markdown-renderer-BzKf1Gel.js} +7 -7
  383. package/dist/{markdown-renderer-ZzJcwfS3.js.map → markdown-renderer-BzKf1Gel.js.map} +1 -1
  384. package/dist/{markdown-renderer-DRnUrMmF.cjs → markdown-renderer-CD2YXUdF.cjs} +7 -7
  385. package/dist/{markdown-renderer-DRnUrMmF.cjs.map → markdown-renderer-CD2YXUdF.cjs.map} +1 -1
  386. package/dist/{metrics-card-C3gkudSv.js → metrics-card-C0lGcxb9.js} +4 -4
  387. package/dist/{metrics-card-C3gkudSv.js.map → metrics-card-C0lGcxb9.js.map} +1 -1
  388. package/dist/{metrics-card-BSXWk6GD.cjs → metrics-card-DmbKNY3U.cjs} +4 -4
  389. package/dist/{metrics-card-BSXWk6GD.cjs.map → metrics-card-DmbKNY3U.cjs.map} +1 -1
  390. package/dist/{metrics-kpi-card-C4R43XbL.js → metrics-kpi-card-AhIw9eyu.js} +2 -2
  391. package/dist/{metrics-kpi-card-C4R43XbL.js.map → metrics-kpi-card-AhIw9eyu.js.map} +1 -1
  392. package/dist/{metrics-kpi-card-_xThjpJl.cjs → metrics-kpi-card-tAReOFYk.cjs} +2 -2
  393. package/dist/{metrics-kpi-card-_xThjpJl.cjs.map → metrics-kpi-card-tAReOFYk.cjs.map} +1 -1
  394. package/dist/{metrics-line-chart-kZ1Ed_ga.cjs → metrics-line-chart-B_0w522y.cjs} +4 -4
  395. package/dist/metrics-line-chart-B_0w522y.cjs.map +1 -0
  396. package/dist/{metrics-line-chart-COIxay_u.js → metrics-line-chart-DudirJsu.js} +4 -4
  397. package/dist/metrics-line-chart-DudirJsu.js.map +1 -0
  398. package/dist/primitives/portal-container.cjs.js.map +1 -1
  399. package/dist/primitives/portal-container.es.js.map +1 -1
  400. package/dist/{property-filter-applied-DgmkZVbl.cjs → property-filter-applied-BhxbHAN8.cjs} +10 -10
  401. package/dist/{property-filter-applied-DgmkZVbl.cjs.map → property-filter-applied-BhxbHAN8.cjs.map} +1 -1
  402. package/dist/{property-filter-applied-Bs1Ck691.js → property-filter-applied-DI4w1ACS.js} +10 -10
  403. package/dist/{property-filter-applied-Bs1Ck691.js.map → property-filter-applied-DI4w1ACS.js.map} +1 -1
  404. package/dist/resize/panel-drawer.cjs.js +1 -1
  405. package/dist/resize/panel-drawer.es.js +1 -1
  406. package/dist/{scroll-area-h3DvBR0U.js → scroll-area-DZrEuKjC.js} +2 -2
  407. package/dist/{scroll-area-h3DvBR0U.js.map → scroll-area-DZrEuKjC.js.map} +1 -1
  408. package/dist/{scroll-area-BIaiA4t3.cjs → scroll-area-Dv6QagXt.cjs} +2 -2
  409. package/dist/{scroll-area-BIaiA4t3.cjs.map → scroll-area-Dv6QagXt.cjs.map} +1 -1
  410. package/dist/{search-field-block-DmqZsrrI.cjs → search-field-block-D6TdrHZX.cjs} +4 -4
  411. package/dist/{search-field-block-DmqZsrrI.cjs.map → search-field-block-D6TdrHZX.cjs.map} +1 -1
  412. package/dist/{search-field-block-CMoQ9fjl.js → search-field-block-DCnFZzRK.js} +4 -4
  413. package/dist/{search-field-block-CMoQ9fjl.js.map → search-field-block-DCnFZzRK.js.map} +1 -1
  414. package/dist/{select-CUMnhTBS.cjs → select-B6ce20XX.cjs} +3 -3
  415. package/dist/{select-CUMnhTBS.cjs.map → select-B6ce20XX.cjs.map} +1 -1
  416. package/dist/{select-LyQqK1ph.js → select-Beo8qQ0e.js} +3 -3
  417. package/dist/{select-LyQqK1ph.js.map → select-Beo8qQ0e.js.map} +1 -1
  418. package/dist/{select-field-block-BSlngEHK.js → select-field-block-DXw3tD0y.js} +3 -3
  419. package/dist/{select-field-block-BSlngEHK.js.map → select-field-block-DXw3tD0y.js.map} +1 -1
  420. package/dist/{select-field-block-BI_NZs2R.cjs → select-field-block-svlHplxW.cjs} +3 -3
  421. package/dist/{select-field-block-BI_NZs2R.cjs.map → select-field-block-svlHplxW.cjs.map} +1 -1
  422. package/dist/{tabs-tab-Ch7-lVxf.cjs → tabs-tab-BkUCE-4E.cjs} +2 -2
  423. package/dist/{tabs-tab-Ch7-lVxf.cjs.map → tabs-tab-BkUCE-4E.cjs.map} +1 -1
  424. package/dist/{tabs-tab-CQhe76fQ.js → tabs-tab-DDGltcUc.js} +2 -2
  425. package/dist/{tabs-tab-CQhe76fQ.js.map → tabs-tab-DDGltcUc.js.map} +1 -1
  426. package/dist/{text-field-block-BUvxjW9m.cjs → text-field-block-BGlwSFYC.cjs} +2 -2
  427. package/dist/{text-field-block-BUvxjW9m.cjs.map → text-field-block-BGlwSFYC.cjs.map} +1 -1
  428. package/dist/{text-field-block-DxtR1Ft4.js → text-field-block-DOiM0dpY.js} +2 -2
  429. package/dist/{text-field-block-DxtR1Ft4.js.map → text-field-block-DOiM0dpY.js.map} +1 -1
  430. package/dist/{time-picker-Box0pdQU.cjs → time-picker-BOQtPoyD.cjs} +2 -2
  431. package/dist/{time-picker-Box0pdQU.cjs.map → time-picker-BOQtPoyD.cjs.map} +1 -1
  432. package/dist/{time-picker-ew9aXG86.js → time-picker-mLzcoQMO.js} +2 -2
  433. package/dist/{time-picker-ew9aXG86.js.map → time-picker-mLzcoQMO.js.map} +1 -1
  434. package/dist/{tooltip-Ch06EF_U.js → tooltip-BFbYhBj1.js} +2 -2
  435. package/dist/{tooltip-Ch06EF_U.js.map → tooltip-BFbYhBj1.js.map} +1 -1
  436. package/dist/{tooltip-VGyJcEoE.cjs → tooltip-CLz5PtEE.cjs} +2 -2
  437. package/dist/{tooltip-VGyJcEoE.cjs.map → tooltip-CLz5PtEE.cjs.map} +1 -1
  438. package/dist/{traces-data-list-DLmFHLQ6.js → traces-data-list-Bmx7jLZc.js} +5 -5
  439. package/dist/{traces-data-list-DLmFHLQ6.js.map → traces-data-list-Bmx7jLZc.js.map} +1 -1
  440. package/dist/{traces-data-list-G69pEglx.cjs → traces-data-list-Dx9tpivx.cjs} +5 -5
  441. package/dist/{traces-data-list-G69pEglx.cjs.map → traces-data-list-Dx9tpivx.cjs.map} +1 -1
  442. package/package.json +5 -5
  443. package/dist/metrics-line-chart-COIxay_u.js.map +0 -1
  444. package/dist/metrics-line-chart-kZ1Ed_ga.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"property-filter-applied-Bs1Ck691.js","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear}>\n <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 { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[] | undefined) => 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\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 <Input\n size=\"sm\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className=\"mb-2\"\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 )}\n\n {field.isLoading ? (\n <div className=\"flex items-center gap-2 px-2 py-1.5 text-ui-sm text-neutral3\">\n <Spinner size=\"sm\" className=\"size-3 text-neutral3\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className=\"px-2 py-1.5 text-ui-sm text-neutral3\">{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div className=\"max-h-[80dvh] overflow-auto\">\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <label\n key={option.value}\n title={option.label}\n className=\"flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6\"\n >\n <Checkbox\n data-pick-multi-item=\"\"\n checked={checked}\n onCheckedChange={next => {\n const isChecked = next === true;\n const nextValues = isChecked\n ? selectedValues.includes(option.value)\n ? selectedValues\n : [...selectedValues, option.value]\n : selectedValues.filter(v => v !== option.value);\n onChange(field.id, nextValues);\n }}\n className=\"shrink-0\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n </label>\n );\n })}\n </div>\n ) : (\n <RadioGroup\n value={selectedValue ?? ''}\n onValueChange={value => onChange(field.id, value)}\n className=\"max-h-[80dvh] gap-0 overflow-auto\"\n >\n {filteredOptions.map(option => (\n <label\n key={option.value}\n title={option.label}\n className=\"flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6\"\n >\n <RadioGroupItem data-pick-multi-item=\"\" value={option.value} className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n </label>\n ))}\n {!field.omitAnyOption && (\n <label\n title=\"Any\"\n className=\"flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6\"\n >\n <RadioGroupItem data-pick-multi-item=\"\" value=\"Any\" className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">Any</span>\n </label>\n )}\n </RadioGroup>\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';\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 spacing=\"close\"\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">{display}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">\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 spacing=\"close\">\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <Input\n ref={inputRef}\n size=\"md\"\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.target as HTMLInputElement).blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n size=\"md\"\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[] | undefined) => 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 spacing=\"close\">\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled} size=\"md\">\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={8} className=\"w-64 p-2\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n size=\"md\"\n onClick={onRemove}\n >\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' && typeof token.value === 'string') {\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 onChange={(fieldId, value) => {\n // Unselecting everything (empty array) keeps the pill alive in\n // a neutral state — the user explicitly removes it via ×. This\n // lets the page-level Reset neutralize values without dropping\n // the pill structure.\n if (value === undefined) {\n removeTokenAt(index);\n return;\n }\n replaceTokenAt(index, { fieldId, value });\n }}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup spacing=\"close\" key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n size=\"md\"\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"property-filter-applied-DI4w1ACS.js","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear}>\n <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 { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[] | undefined) => 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\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 <Input\n size=\"sm\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className=\"mb-2\"\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 )}\n\n {field.isLoading ? (\n <div className=\"text-ui-sm text-neutral3 flex items-center gap-2 px-2 py-1.5\">\n <Spinner size=\"sm\" className=\"text-neutral3 size-3\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className=\"text-ui-sm text-neutral3 px-2 py-1.5\">{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div className=\"max-h-[80dvh] overflow-auto\">\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <label\n key={option.value}\n title={option.label}\n className=\"text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6 flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5\"\n >\n <Checkbox\n data-pick-multi-item=\"\"\n checked={checked}\n onCheckedChange={next => {\n const isChecked = next === true;\n const nextValues = isChecked\n ? selectedValues.includes(option.value)\n ? selectedValues\n : [...selectedValues, option.value]\n : selectedValues.filter(v => v !== option.value);\n onChange(field.id, nextValues);\n }}\n className=\"shrink-0\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n </label>\n );\n })}\n </div>\n ) : (\n <RadioGroup\n value={selectedValue ?? ''}\n onValueChange={value => onChange(field.id, value)}\n className=\"max-h-[80dvh] gap-0 overflow-auto\"\n >\n {filteredOptions.map(option => (\n <label\n key={option.value}\n title={option.label}\n className=\"text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6 flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5\"\n >\n <RadioGroupItem data-pick-multi-item=\"\" value={option.value} className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n </label>\n ))}\n {!field.omitAnyOption && (\n <label\n title=\"Any\"\n className=\"text-ui-md text-neutral4 focus-within:bg-surface4 focus-within:text-neutral6 hover:bg-surface4 hover:text-neutral6 flex min-w-0 cursor-pointer items-center gap-2 rounded-md px-2 py-1.5\"\n >\n <RadioGroupItem data-pick-multi-item=\"\" value=\"Any\" className=\"shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">Any</span>\n </label>\n )}\n </RadioGroup>\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';\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 spacing=\"close\"\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">{display}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">\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 spacing=\"close\">\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <Input\n ref={inputRef}\n size=\"md\"\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.target as HTMLInputElement).blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n size=\"md\"\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[] | undefined) => 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 spacing=\"close\">\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled} size=\"md\">\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={8} className=\"w-64 p-2\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n size=\"md\"\n onClick={onRemove}\n >\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' && typeof token.value === 'string') {\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 onChange={(fieldId, value) => {\n // Unselecting everything (empty array) keeps the pill alive in\n // a neutral state — the user explicitly removes it via ×. This\n // lets the page-level Reset neutralize values without dropping\n // the pill structure.\n if (value === undefined) {\n removeTokenAt(index);\n return;\n }\n replaceTokenAt(index, { fieldId, value });\n }}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup spacing=\"close\" key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText size=\"md\">{field.label}</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">is</ButtonsGroupText>\n <ButtonsGroupText size=\"md\">{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n size=\"md\"\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const resize_panelEdgeIcon = require('./panel-edge-icon.cjs.js');
7
7
  const resize_panelIconButton = require('./panel-icon-button.cjs.js');
8
- const drawer = require('../drawer-DvuUmhic.cjs');
8
+ const drawer = require('../drawer-CdsTitFp.cjs');
9
9
  const icons_Icon = require('../icons/Icon.cjs.js');
10
10
  require('lucide-react');
11
11
  const utils_cn = require('../cn-vA5sWo9W.cjs');
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { PanelEdgeIcon } from './panel-edge-icon.es.js';
3
3
  import { panelIconButtonClass } from './panel-icon-button.es.js';
4
- import { D as Drawer, p as DrawerTrigger, l as DrawerPortal, a as DrawerBackdrop, q as DrawerViewport, k as DrawerPopup, o as DrawerTitle } from '../drawer-Dyx25o_o.js';
4
+ import { D as Drawer, p as DrawerTrigger, l as DrawerPortal, a as DrawerBackdrop, q as DrawerViewport, k as DrawerPopup, o as DrawerTitle } from '../drawer-DZ9amYo_.js';
5
5
  import { Icon } from '../icons/Icon.es.js';
6
6
  import 'lucide-react';
7
7
  import { c as cn } from '../cn-BakJzhuv.js';
@@ -214,10 +214,10 @@ const ScrollBar = React.forwardRef(({ className, orientation = "vertical", revea
214
214
  className
215
215
  ),
216
216
  ...props,
217
- children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, { className: "duration-normal relative flex-1 rounded-full bg-neutral4/30 transition-colors hover:bg-neutral4/60" })
217
+ children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, { className: "duration-normal bg-neutral4/30 hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors" })
218
218
  }
219
219
  ));
220
220
  ScrollBar.displayName = "ScrollBar";
221
221
 
222
222
  export { ScrollArea as S, ScrollBar as a };
223
- //# sourceMappingURL=scroll-area-h3DvBR0U.js.map
223
+ //# sourceMappingURL=scroll-area-DZrEuKjC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-area-h3DvBR0U.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 { useAutoscroll } from '@/hooks/use-autoscroll';\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\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\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.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\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 /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\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 * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\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 vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\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 'duration-normal absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\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\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\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'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full rounded-[inherit]', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\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);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'duration-normal flex touch-none transition-opacity 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=\"duration-normal relative flex-1 rounded-full bg-neutral4/30 transition-colors hover:bg-neutral4/60\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollAreaPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"scroll-area-DZrEuKjC.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 { useAutoscroll } from '@/hooks/use-autoscroll';\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\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\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.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\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 /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\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 * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\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 vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\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 'duration-normal absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\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\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\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'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full rounded-[inherit]', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\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);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'duration-normal flex touch-none transition-opacity 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=\"duration-normal bg-neutral4/30 hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollAreaPrimitive"],"mappings":";;;;;;;AAUA,MAAM,2BAAA,GAA8B,GAAA;AACpC,MAAM,mCAAA,GAAsC,EAAA;AAC5C,MAAM,uBAAA,GAA0B,CAAA;AAChC,MAAM,+BAAA,GAAkC,EAAA;AAyDxC,SAAS,WAAA,CAAY,MAAkC,WAAA,EAAwC;AAC7F,EAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAElF,EAAA,MAAM,QAAA,GAAW,WAAA,KAAgB,UAAA,IAAc,WAAA,KAAgB,MAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,YAAA,IAAgB,WAAA,KAAgB,MAAA;AACnE,EAAA,MAAM,KAAA,GAAsB,EAAE,GAAA,EAAK,QAAA,EAAU,QAAQ,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAEnG,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW,OAAO,KAAA;AAEhD,EAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,IAAA,KAAA,CAAM,MAAM,IAAA,CAAK,CAAA;AACjB,IAAA,KAAA,CAAM,SAAS,IAAA,CAAK,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,IAAA,KAAA,CAAM,OAAO,IAAA,CAAK,CAAA;AAClB,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,MAAA,EAAW,KAAA,CAAM,MAAM,IAAA,CAAK,GAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,KAAA,CAAM,SAAS,IAAA,CAAK,MAAA;AACnD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,KAAA,KAAU,MAAA,EAAW,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AAEjD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAqB;AACxC,EAAA,OAAO,EAAA;AAAA,IACL,MAAM,GAAA,IAAO,uDAAA;AAAA,IACb,MAAM,MAAA,IAAU,qDAAA;AAAA,IAChB,MAAM,IAAA,IAAQ,uDAAA;AAAA,IACd,MAAM,KAAA,IAAS;AAAA,GACjB;AACF;AAEA,SAAS,uBAAA,CAAwB,KAAA,EAA2B,QAAA,EAAkB,GAAA,EAAa;AACzF,EAAA,MAAM,gBAAgB,KAAA,IAAS,QAAA;AAC/B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,aAAa,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAC/F;AAUA,MAAM,YAAA,GAAe,CAAC,EAAE,SAAA,EAAW,OAAO,gBAAA,EAAkB,eAAA,EAAiB,kBAAiB,KAAyB;AACrH,EAAA,MAAM,IAAA,GAAO,SAAA,KAAc,MAAA,GAAS,eAAA,GAAkB,gBAAA;AAEtD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,gPAAA;AAAA,QACA,qIAAA;AAAA,QACA,SAAA,KAAc,SACV,uDAAA,GACA;AAAA,OACN;AAAA,MACA,aAAA,EAAe,CAAA,KAAA,KAAS,gBAAA,CAAiB,SAAA,EAAW,KAAK,CAAA;AAAA,MACzD,WAAA,EAAa,eAAA;AAAA,MACb,cAAA,EAAgB,eAAA;AAAA,MAChB,eAAA,EAAiB,eAAA;AAAA,MACjB,MAAA,EAAQ,eAAA;AAAA,MACR,SAAS,CAAA,KAAA,KAAS;AAChB,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,gBAAA,CAAiB,SAAS,CAAA;AAAA,MACpD,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,QAAA,EAAS;AAAA;AAAA,GAC9C;AAEJ,CAAA;AAOA,MAAM,aAAA,GAAgB,CAAC,EAAE,OAAA,EAAS,eAAc,KAA0B;AACxE,EAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,MAAA,CAA8C,IAAI,CAAA;AACrF,EAAA,MAAM,mBAAA,GAAsB,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB,MAAA;AAChF,EAAA,MAAM,iBAAA,GAAoB,uBAAA;AAAA,IACxB,mBAAA,EAAqB,WAAA;AAAA,IACrB,2BAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,wBAAA,GAA2B,uBAAA;AAAA,IAC/B,mBAAA,EAAqB,kBAAA;AAAA,IACrB,mCAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,qBAAA,GAAwB,qBAAqB,SAAA,IAAa,aAAA;AAChE,EAAA,MAAM,sBAAA,GAAyB,qBAAqB,UAAA,IAAc,cAAA;AAElE,EAAA,MAAM,yBAAA,GAA4B,KAAA,CAAM,WAAA,CAAY,MAAM;AACxD,IAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AACnC,IAAA,aAAA,CAAc,qBAAqB,OAAO,CAAA;AAC1C,IAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAoB,KAAA,CAAM,WAAA;AAAA,IAC9B,CAAC,SAAA,EAAkC,UAAA,GAAa,CAAA,KAAM;AACpD,MAAA,MAAM,WAAW,OAAA,CAAQ,OAAA;AACzB,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,QAAA,CAAS,QAAA,CAAS;AAAA,QAChB,MAAM,SAAA,KAAc,OAAA,GAAU,iBAAA,GAAoB,UAAA,GAAa,CAAC,iBAAA,GAAoB,UAAA;AAAA,QACpF,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,SAAS,iBAAiB;AAAA,GAC7B;AAEA,EAAA,MAAM,6BAA6B,KAAA,CAAM,WAAA;AAAA,IACvC,CAAC,WAAkC,KAAA,KAAkD;AACnF,MAAA,KAAA,EAAO,cAAA,EAAe;AACtB,MAAA,KAAA,EAAO,eAAA,EAAgB;AACvB,MAAA,KAAA,EAAO,aAAA,CAAc,iBAAA,GAAoB,KAAA,CAAM,SAAS,CAAA;AAExD,MAAA,yBAAA,EAA0B;AAC1B,MAAA,iBAAA,CAAkB,WAAW,CAAC,CAAA;AAE9B,MAAA,oBAAA,CAAqB,OAAA,GAAU,YAAY,MAAM;AAC/C,QAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA,MAC7B,GAAG,wBAAwB,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,wBAAA,EAA0B,iBAAA,EAAmB,yBAAyB;AAAA,GACzE;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,OAAO,MAAM;AACX,MAAA,yBAAA,EAA0B;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,yBAAyB,CAAC,CAAA;AAE9B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,MAAA;AAAA,QACV,KAAA,EAAO,qBAAA;AAAA,QACP,gBAAA,EAAkB,0BAAA;AAAA,QAClB,eAAA,EAAiB,yBAAA;AAAA,QACjB,gBAAA,EAAkB,CAAA,SAAA,KAAa,iBAAA,CAAkB,SAAA,EAAW,CAAC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,sBAAA;AAAA,QACP,gBAAA,EAAkB,0BAAA;AAAA,QAClB,eAAA,EAAiB,yBAAA;AAAA,QACjB,gBAAA,EAAkB,CAAA,SAAA,KAAa,iBAAA,CAAkB,SAAA,EAAW,CAAC;AAAA;AAAA;AAC/D,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,MAAM,aAAa,KAAA,CAAM,UAAA;AAAA,EACvB,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA,GAAa,KAAA;AAAA,IACb,WAAA,GAAc,UAAA;AAAA,IACd,aAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,sBAAA,GAAyB,IAAA;AAAA,IACzB,WAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AACjD,IAAA,aAAA,CAAc,OAAA,EAAS,EAAE,OAAA,EAAS,UAAA,EAAY,CAAA;AAI9C,IAAA,MAAM,iBAAiB,KAAA,CAAM,WAAA;AAAA,MAC3B,CAAC,IAAA,KAAgC;AAC/B,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA,IAAI,OAAO,WAAA,KAAgB,UAAA,EAAY,WAAA,CAAY,IAAI,CAAA;AAAA,aAAA,IAC9C,WAAA,EAAc,WAAA,CAA8D,OAAA,GAAU,IAAA;AAAA,MACjG,CAAA;AAAA,MACA,CAAC,WAAW;AAAA,KACd;AAEA,IAAA,MAAM,aAAA,GAA4C,IAAA,KAAS,MAAA,GAAY,IAAA,GAAO,QAAA;AAC9E,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,aAAA,EAAe,WAAW,CAAA;AAEpD,IAAA,MAAM,gBAAqC,EAAC;AAC5C,IAAA,IAAI,SAAA,gBAAyB,SAAA,GAAY,SAAA;AACzC,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAC1B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,gBAAgB,YAAA,EAAc;AACvC,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAC1B,MAAA,aAAA,CAAc,SAAA,GAAY,QAAA;AAAA,IAC5B;AAMA,IAAA,MAAM,YAAA,GACJ,WAAA,KAAgB,UAAA,GACZ,EAAE,QAAA,EAAU,KAAA,EAAM,GAClB,WAAA,KAAgB,YAAA,GACd,EAAE,SAAA,EAAW,KAAA,EAAM,GACnB,MAAA;AAER,IAAA,uBACE,IAAA;AAAA,MAACA,YAAA,CAAoB,IAAA;AAAA,MAApB;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,QACpE,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAACA,YAAA,CAAoB,QAAA;AAAA,YAApB;AAAA,cACC,GAAA,EAAK,cAAA;AAAA,cACL,WAAW,EAAA,CAAG,6BAAA,EAA+B,WAAA,CAAY,KAAK,GAAG,iBAAiB,CAAA;AAAA,cAClF,KAAA,EAAO,aAAA;AAAA,cAEP,8BAACA,YAAA,CAAoB,OAAA,EAApB,EAA4B,KAAA,EAAO,cAAe,QAAA,EAAS;AAAA;AAAA,WAC9D;AAAA,UACC,iBAAiB,WAAA,KAAgB,UAAA,oBAChC,GAAA,CAAC,aAAA,EAAA,EAAc,SAAkB,aAAA,EAA8B,CAAA;AAAA,UAAA,CAE/D,WAAA,KAAgB,cAAc,WAAA,KAAgB,MAAA,yBAC7C,SAAA,EAAA,EAAU,WAAA,EAAY,UAAA,EAAW,aAAA,EAAe,sBAAA,EAAwB,CAAA;AAAA,UAAA,CAEzE,WAAA,KAAgB,gBAAgB,WAAA,KAAgB,MAAA,yBAC/C,SAAA,EAAA,EAAU,WAAA,EAAY,YAAA,EAAa,aAAA,EAAe,sBAAA,EAAwB,CAAA;AAAA,UAE5E,WAAA,KAAgB,MAAA,oBAAU,GAAA,CAACA,YAAA,CAAoB,QAApB,EAA2B;AAAA;AAAA;AAAA,KACzD;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,CAGtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,UAAA,EAAY,aAAA,GAAgB,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,qBAC1E,GAAA;AAAA,EAACA,YAAA,CAAoB,SAAA;AAAA,EAApB;AAAA,IACC,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gFAAA;AAAA,MACA,oEAAA;AAAA,MACA,aAAA,IAAiB,6BAAA;AAAA,MACjB,gBAAgB,UAAA,IAAc,mBAAA;AAAA,MAC9B,gBAAgB,YAAA,IAAgB,4BAAA;AAAA,MAChC;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAA,GAAA,CAACA,YAAA,CAAoB,KAAA,EAApB,EAA0B,WAAU,oGAAA,EAAqG;AAAA;AAC5I,CACD;AACD,SAAA,CAAU,WAAA,GAAc,WAAA;;;;"}
@@ -235,11 +235,11 @@ const ScrollBar = React__namespace.forwardRef(({ className, orientation = "verti
235
235
  className
236
236
  ),
237
237
  ...props,
238
- children: /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea.Thumb, { className: "duration-normal relative flex-1 rounded-full bg-neutral4/30 transition-colors hover:bg-neutral4/60" })
238
+ children: /* @__PURE__ */ jsxRuntime.jsx(scrollArea.ScrollArea.Thumb, { className: "duration-normal bg-neutral4/30 hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors" })
239
239
  }
240
240
  ));
241
241
  ScrollBar.displayName = "ScrollBar";
242
242
 
243
243
  exports.ScrollArea = ScrollArea;
244
244
  exports.ScrollBar = ScrollBar;
245
- //# sourceMappingURL=scroll-area-BIaiA4t3.cjs.map
245
+ //# sourceMappingURL=scroll-area-Dv6QagXt.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-area-BIaiA4t3.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 { useAutoscroll } from '@/hooks/use-autoscroll';\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\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\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.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\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 /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\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 * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\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 vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\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 'duration-normal absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\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\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\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'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full rounded-[inherit]', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\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);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'duration-normal flex touch-none transition-opacity 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=\"duration-normal relative flex-1 rounded-full bg-neutral4/30 transition-colors hover:bg-neutral4/60\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["cn","ChevronLeftIcon","ChevronRightIcon","jsx","React","jsxs","Fragment","useAutoscroll","ScrollAreaPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"scroll-area-Dv6QagXt.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 { useAutoscroll } from '@/hooks/use-autoscroll';\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\nexport type MaskSides = {\n top?: boolean;\n bottom?: boolean;\n left?: boolean;\n right?: boolean;\n /** Shorthand: sets both `left` and `right`. Per-side keys override. */\n x?: boolean;\n /** Shorthand: sets both `top` and `bottom`. Per-side keys override. */\n y?: boolean;\n};\n\n/**\n * - `true` / omitted: fade the edges that match `orientation`.\n * - `false`: no fade.\n * - object: per-side override on top of the orientation default.\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.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\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 /** @deprecated Use `mask` instead. Retained for backward compatibility. */\n showMask?: boolean;\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 * Ref to the scrolling viewport element. Use this as the scroll element for a\n * virtualizer (`getScrollElement: () => viewportRef.current`) so the list can\n * virtualize while still using the ScrollArea's overlay scrollbar + masks.\n */\n viewportRef?: React.Ref<HTMLDivElement>;\n};\n\ntype ResolvedMask = { top: boolean; bottom: boolean; left: boolean; right: boolean };\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 vertical = orientation === 'vertical' || orientation === 'both';\n const horizontal = orientation === 'horizontal' || orientation === 'both';\n const sides: ResolvedMask = { top: vertical, bottom: vertical, left: horizontal, right: horizontal };\n\n if (mask === true || mask === undefined) return sides;\n\n if (mask.y !== undefined) {\n sides.top = mask.y;\n sides.bottom = mask.y;\n }\n if (mask.x !== undefined) {\n sides.left = mask.x;\n sides.right = mask.x;\n }\n if (mask.top !== undefined) sides.top = mask.top;\n if (mask.bottom !== undefined) sides.bottom = mask.bottom;\n if (mask.left !== undefined) sides.left = mask.left;\n if (mask.right !== undefined) sides.right = mask.right;\n\n return sides;\n}\n\nfunction maskClasses(sides: ResolvedMask) {\n return cn(\n sides.top && 'data-[overflow-y-start]:mask-t-from-[calc(100%-2rem)]',\n sides.bottom && 'data-[overflow-y-end]:mask-b-from-[calc(100%-2rem)]',\n sides.left && 'data-[overflow-x-start]:mask-l-from-[calc(100%-2rem)]',\n sides.right && 'data-[overflow-x-end]:mask-r-from-[calc(100%-2rem)]',\n );\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 'duration-normal absolute inset-y-1 z-10 hidden w-8 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-neutral3 transition-colors ease-out-custom hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n 'outline-hidden focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-neutral5/55 focus-visible:outline-solid',\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\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n className,\n children,\n viewPortClassName,\n maxHeight,\n autoScroll = false,\n orientation = 'vertical',\n scrollButtons,\n mask,\n showMask,\n revealScrollbarOnHover = true,\n viewportRef,\n ...props\n },\n ref,\n ) => {\n const areaRef = React.useRef<HTMLDivElement>(null);\n useAutoscroll(areaRef, { enabled: autoScroll });\n\n // Keep the internal autoscroll ref while also exposing the viewport to callers\n // (e.g. a virtualizer's scroll element).\n const setViewportRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n areaRef.current = node;\n if (typeof viewportRef === 'function') viewportRef(node);\n else if (viewportRef) (viewportRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [viewportRef],\n );\n\n const effectiveMask: ScrollAreaMask | undefined = mask !== undefined ? mask : showMask;\n const sides = resolveMask(effectiveMask, orientation);\n\n const viewportStyle: React.CSSProperties = {};\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'\n ? { minWidth: '0px' }\n : orientation === 'horizontal'\n ? { minHeight: '0px' }\n : undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('group/scroll-area relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={setViewportRef}\n className={cn('size-full rounded-[inherit]', maskClasses(sides), viewPortClassName)}\n style={viewportStyle}\n >\n <ScrollAreaPrimitive.Content style={contentStyle}>{children}</ScrollAreaPrimitive.Content>\n </ScrollAreaPrimitive.Viewport>\n {scrollButtons && orientation !== 'vertical' && (\n <ScrollButtons areaRef={areaRef} scrollButtons={scrollButtons} />\n )}\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);\nScrollArea.displayName = 'ScrollArea';\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar> & { revealOnHover?: boolean }\n>(({ className, orientation = 'vertical', revealOnHover = true, ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'duration-normal flex touch-none transition-opacity 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=\"duration-normal bg-neutral4/30 hover:bg-neutral4/60 relative flex-1 rounded-full transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n));\nScrollBar.displayName = 'ScrollBar';\n\nexport { ScrollArea, ScrollBar };\n"],"names":["cn","ChevronLeftIcon","ChevronRightIcon","jsx","React","jsxs","Fragment","useAutoscroll","ScrollAreaPrimitive"],"mappings":"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"}
@@ -3,10 +3,10 @@
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const lucideReact = require('lucide-react');
5
5
  const React = require('react');
6
- const Button = require('./Button-B5RnKrGb.cjs');
6
+ const Button = require('./Button-Bm94fEF2.cjs');
7
7
  const input = require('./input-0R-fQTCF.cjs');
8
- const tooltip = require('./tooltip-VGyJcEoE.cjs');
9
- const fieldBlock = require('./field-block-CEbnWKc0.cjs');
8
+ const tooltip = require('./tooltip-CLz5PtEE.cjs');
9
+ const fieldBlock = require('./field-block-BcTR08I7.cjs');
10
10
  const reactVisuallyHidden = require('@radix-ui/react-visually-hidden');
11
11
  const utils_cn = require('./cn-vA5sWo9W.cjs');
12
12
 
@@ -115,4 +115,4 @@ function SearchFieldBlock({
115
115
  }
116
116
 
117
117
  exports.SearchFieldBlock = SearchFieldBlock;
118
- //# sourceMappingURL=search-field-block-DmqZsrrI.cjs.map
118
+ //# sourceMappingURL=search-field-block-D6TdrHZX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-field-block-DmqZsrrI.cjs","sources":["../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n variant?: InputProps['variant'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n};\n\nexport function SearchFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n variant,\n isMinimized,\n onMinimizedChange,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const buttonSize = size === 'default' ? 'lg' : size;\n\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={buttonSize || 'sm'}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n ) : null}\n <div className=\"group relative\">\n <Input\n ref={inputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n variant={variant}\n className={cn(\n size === 'sm' && 'px-8',\n size === 'md' && 'px-9',\n (!size || size === 'default') && 'px-10',\n size === 'lg' && 'px-11',\n )}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-neutral4 opacity-50 group-has-focus:opacity-100',\n size === 'sm' && 'size-3.5',\n size === 'md' && 'size-4',\n (!size || size === 'default') && 'size-[1.125rem]',\n size === 'lg' && 'size-5',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={buttonSize || 'lg'}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText && <FieldBlock.HelpText>{helpText}</FieldBlock.HelpText>}\n {errorMsg && <FieldBlock.ErrorMsg>{errorMsg}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"names":["useRef","useEffect","Tooltip","jsx","TooltipTrigger","Button","SearchIcon","TooltipContent","jsxs","FieldBlock","VisuallyHidden","Input","cn","XIcon"],"mappings":"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"}
1
+ {"version":3,"file":"search-field-block-D6TdrHZX.cjs","sources":["../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n variant?: InputProps['variant'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n};\n\nexport function SearchFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n variant,\n isMinimized,\n onMinimizedChange,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const buttonSize = size === 'default' ? 'lg' : size;\n\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={buttonSize || 'sm'}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n ) : null}\n <div className=\"group relative\">\n <Input\n ref={inputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n variant={variant}\n className={cn(\n size === 'sm' && 'px-8',\n size === 'md' && 'px-9',\n (!size || size === 'default') && 'px-10',\n size === 'lg' && 'px-11',\n )}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-neutral4 opacity-50 group-has-focus:opacity-100',\n size === 'sm' && 'size-3.5',\n size === 'md' && 'size-4',\n (!size || size === 'default') && 'size-[1.125rem]',\n size === 'lg' && 'size-5',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={buttonSize || 'lg'}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText && <FieldBlock.HelpText>{helpText}</FieldBlock.HelpText>}\n {errorMsg && <FieldBlock.ErrorMsg>{errorMsg}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"names":["useRef","useEffect","Tooltip","jsx","TooltipTrigger","Button","SearchIcon","TooltipContent","jsxs","FieldBlock","VisuallyHidden","Input","cn","XIcon"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { SearchIcon, XIcon } from 'lucide-react';
3
3
  import { useRef, useEffect } from 'react';
4
- import { B as Button } from './Button-Dh5CZ6Ir.js';
4
+ import { B as Button } from './Button-Bx2lFdqb.js';
5
5
  import { I as Input } from './input-DVZ0-3KP.js';
6
- import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-Ch06EF_U.js';
7
- import { F as FieldBlock } from './field-block-CBdMcT-i.js';
6
+ import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-BFbYhBj1.js';
7
+ import { F as FieldBlock } from './field-block-B63CpA4d.js';
8
8
  import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
9
9
  import { c as cn } from './cn-BakJzhuv.js';
10
10
 
@@ -113,4 +113,4 @@ function SearchFieldBlock({
113
113
  }
114
114
 
115
115
  export { SearchFieldBlock as S };
116
- //# sourceMappingURL=search-field-block-CMoQ9fjl.js.map
116
+ //# sourceMappingURL=search-field-block-DCnFZzRK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-field-block-CMoQ9fjl.js","sources":["../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n variant?: InputProps['variant'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n};\n\nexport function SearchFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n variant,\n isMinimized,\n onMinimizedChange,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const buttonSize = size === 'default' ? 'lg' : size;\n\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={buttonSize || 'sm'}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n ) : null}\n <div className=\"group relative\">\n <Input\n ref={inputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n variant={variant}\n className={cn(\n size === 'sm' && 'px-8',\n size === 'md' && 'px-9',\n (!size || size === 'default') && 'px-10',\n size === 'lg' && 'px-11',\n )}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-neutral4 opacity-50 group-has-focus:opacity-100',\n size === 'sm' && 'size-3.5',\n size === 'md' && 'size-4',\n (!size || size === 'default') && 'size-[1.125rem]',\n size === 'lg' && 'size-5',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={buttonSize || 'lg'}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText && <FieldBlock.HelpText>{helpText}</FieldBlock.HelpText>}\n {errorMsg && <FieldBlock.ErrorMsg>{errorMsg}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-field-block-DCnFZzRK.js","sources":["../src/ds/components/FormFieldBlocks/fields/search-field-block.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { Button } from '../../Button';\nimport { Input } from '../../Input';\nimport type { InputProps } from '../../Input';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../Tooltip';\nimport { FieldBlock } from '../block/field-block';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type SearchFieldBlockProps = {\n name: string;\n testId?: string;\n label?: string;\n labelIsHidden?: boolean;\n required?: boolean;\n disabled?: boolean;\n value?: string;\n placeholder?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n helpText?: string;\n error?: boolean;\n errorMsg?: string;\n layout?: 'horizontal' | 'vertical';\n className?: string;\n size?: InputProps['size'];\n variant?: InputProps['variant'];\n isMinimized?: boolean;\n onMinimizedChange?: (minimized: boolean) => void;\n};\n\nexport function SearchFieldBlock({\n name,\n helpText,\n errorMsg,\n required = false,\n disabled = false,\n value,\n label,\n labelIsHidden = false,\n layout = 'vertical',\n placeholder = 'Search...',\n onChange,\n onReset,\n className,\n size,\n variant,\n isMinimized,\n onMinimizedChange,\n}: SearchFieldBlockProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const buttonSize = size === 'default' ? 'lg' : size;\n\n useEffect(() => {\n if (isMinimized === false) {\n inputRef.current?.focus();\n }\n }, [isMinimized]);\n\n if (isMinimized) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n size={buttonSize || 'sm'}\n aria-label={label || 'Search'}\n disabled={disabled}\n onClick={() => onMinimizedChange?.(false)}\n >\n <SearchIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label || 'Search'}</TooltipContent>\n </Tooltip>\n );\n }\n\n return (\n <FieldBlock.Layout layout={layout} className={className}>\n {layout === 'horizontal' ? (\n <FieldBlock.Column>\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n </FieldBlock.Column>\n ) : null}\n <FieldBlock.Column>\n {layout === 'vertical' && label ? (\n <FieldBlock.Label name={name} required={required}>\n {labelIsHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n </FieldBlock.Label>\n ) : null}\n <div className=\"group relative\">\n <Input\n ref={inputRef}\n id={`input-${name}`}\n name={name}\n disabled={disabled}\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n size={size}\n variant={variant}\n className={cn(\n size === 'sm' && 'px-8',\n size === 'md' && 'px-9',\n (!size || size === 'default') && 'px-10',\n size === 'lg' && 'px-11',\n )}\n />\n <SearchIcon\n aria-hidden=\"true\"\n className={cn(\n 'absolute top-1/2 left-3 -translate-y-1/2 text-neutral4 opacity-50 group-has-focus:opacity-100',\n size === 'sm' && 'size-3.5',\n size === 'md' && 'size-4',\n (!size || size === 'default') && 'size-[1.125rem]',\n size === 'lg' && 'size-5',\n )}\n />\n {onReset && (value || isMinimized === false) && (\n <Button\n variant=\"ghost\"\n size={buttonSize || 'lg'}\n aria-label=\"Clear search\"\n onClick={() => {\n if (value) {\n onReset();\n }\n if (isMinimized === false) {\n onMinimizedChange?.(true);\n }\n }}\n className=\"absolute top-1/2 right-0 -translate-y-1/2\"\n >\n <XIcon />\n </Button>\n )}\n </div>\n {helpText && <FieldBlock.HelpText>{helpText}</FieldBlock.HelpText>}\n {errorMsg && <FieldBlock.ErrorMsg>{errorMsg}</FieldBlock.ErrorMsg>}\n </FieldBlock.Column>\n </FieldBlock.Layout>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ const jsxRuntime = require('react/jsx-runtime');
4
4
  const select = require('@base-ui/react/select');
5
5
  const lucideReact = require('lucide-react');
6
6
  const React = require('react');
7
- const Button = require('./Button-B5RnKrGb.cjs');
7
+ const Button = require('./Button-Bm94fEF2.cjs');
8
8
  const primitives_controlSize = require('./primitives/control-size.cjs.js');
9
9
  const primitives_portalContainer = require('./primitives/portal-container.cjs.js');
10
10
  const primitives_transitions = require('./primitives/transitions.cjs.js');
@@ -172,7 +172,7 @@ const SelectItem = React__namespace.forwardRef(({ className, children, ...props
172
172
  ),
173
173
  ...props,
174
174
  children: [
175
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(select.Select.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-4 text-neutral6" }) }) }),
175
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(select.Select.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "text-neutral6 size-4" }) }) }),
176
176
  /* @__PURE__ */ jsxRuntime.jsx(select.Select.ItemText, { children })
177
177
  ]
178
178
  }
@@ -185,4 +185,4 @@ exports.SelectGroup = SelectGroup;
185
185
  exports.SelectItem = SelectItem;
186
186
  exports.SelectTrigger = SelectTrigger;
187
187
  exports.SelectValue = SelectValue;
188
- //# sourceMappingURL=select-CUMnhTBS.cjs.map
188
+ //# sourceMappingURL=select-B6ce20XX.cjs.map