@mastra/playground-ui 66.0.0 → 66.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1070) hide show
  1. package/dist/{CodeEditor-DaJm0o69.cjs → CodeEditor-CJ9jC9lu.cjs} +2 -2
  2. package/dist/{CodeEditor-DaJm0o69.cjs.map → CodeEditor-CJ9jC9lu.cjs.map} +1 -1
  3. package/dist/{CodeEditor-CZC9DMKA.js → CodeEditor-CPVxj7WS.js} +2 -2
  4. package/dist/{CodeEditor-CZC9DMKA.js.map → CodeEditor-CPVxj7WS.js.map} +1 -1
  5. package/dist/{Composer-CFkNhdTm.cjs → Composer-BcueJvdX.cjs} +2 -2
  6. package/dist/{Composer-CFkNhdTm.cjs.map → Composer-BcueJvdX.cjs.map} +1 -1
  7. package/dist/{Composer-CLTgWusX.js → Composer-D1gF-0jZ.js} +2 -2
  8. package/dist/{Composer-CLTgWusX.js.map → Composer-D1gF-0jZ.js.map} +1 -1
  9. package/dist/{DataCodeSection-DbmVZNM5.cjs → DataCodeSection-CZRPsStI.cjs} +4 -4
  10. package/dist/{DataCodeSection-DbmVZNM5.cjs.map → DataCodeSection-CZRPsStI.cjs.map} +1 -1
  11. package/dist/{DataCodeSection-Bztq-SaU.js → DataCodeSection-Ckd47p_S.js} +4 -4
  12. package/dist/{DataCodeSection-Bztq-SaU.js.map → DataCodeSection-Ckd47p_S.js.map} +1 -1
  13. package/dist/{DataDetailsPanel-Dg_iUJ6L.cjs → DataDetailsPanel-DFhM9H5D.cjs} +3 -3
  14. package/dist/{DataDetailsPanel-Dg_iUJ6L.cjs.map → DataDetailsPanel-DFhM9H5D.cjs.map} +1 -1
  15. package/dist/{DataDetailsPanel-CvAIsV60.js → DataDetailsPanel-_CK0Huk6.js} +3 -3
  16. package/dist/{DataDetailsPanel-CvAIsV60.js.map → DataDetailsPanel-_CK0Huk6.js.map} +1 -1
  17. package/dist/{DataKeysAndValues-CHQcnHzv.cjs → DataKeysAndValues-DsH6AbAo.cjs} +6 -3
  18. package/dist/{DataKeysAndValues-CHQcnHzv.cjs.map → DataKeysAndValues-DsH6AbAo.cjs.map} +1 -1
  19. package/dist/{DataKeysAndValues-B2jquIjh.js → DataKeysAndValues-PwOmGxyp.js} +6 -3
  20. package/dist/{DataKeysAndValues-B2jquIjh.js.map → DataKeysAndValues-PwOmGxyp.js.map} +1 -1
  21. package/dist/{DataList-DlmchFgW.cjs → DataList-Cmk08jUV.cjs} +2 -2
  22. package/dist/{DataList-DlmchFgW.cjs.map → DataList-Cmk08jUV.cjs.map} +1 -1
  23. package/dist/{DataList-Bg533xtT.js → DataList-Ve3omCXT.js} +2 -2
  24. package/dist/{DataList-Bg533xtT.js.map → DataList-Ve3omCXT.js.map} +1 -1
  25. package/dist/{DataPanel-Ded_OhrA.cjs → DataPanel-C0Ll76Ne.cjs} +3 -3
  26. package/dist/{DataPanel-Ded_OhrA.cjs.map → DataPanel-C0Ll76Ne.cjs.map} +1 -1
  27. package/dist/{DataPanel-CfLkwH2X.js → DataPanel-CY1W5LHJ.js} +3 -3
  28. package/dist/{DataPanel-CfLkwH2X.js.map → DataPanel-CY1W5LHJ.js.map} +1 -1
  29. package/dist/{DateTimeRangePicker-BdnZI6g9.js → DateTimeRangePicker-ByMbLdom.js} +2 -2
  30. package/dist/{DateTimeRangePicker-BdnZI6g9.js.map → DateTimeRangePicker-ByMbLdom.js.map} +1 -1
  31. package/dist/{DateTimeRangePicker-BZrHuA3p.cjs → DateTimeRangePicker-DGbH5WOn.cjs} +2 -2
  32. package/dist/{DateTimeRangePicker-BZrHuA3p.cjs.map → DateTimeRangePicker-DGbH5WOn.cjs.map} +1 -1
  33. package/dist/{Dialog-CsKvRy5F.js → Dialog-CKtTR8h3.js} +2 -2
  34. package/dist/{Dialog-CsKvRy5F.js.map → Dialog-CKtTR8h3.js.map} +1 -1
  35. package/dist/{Dialog-CcdHS0vM.cjs → Dialog-CjaiCrkv.cjs} +2 -2
  36. package/dist/{Dialog-CcdHS0vM.cjs.map → Dialog-CjaiCrkv.cjs.map} +1 -1
  37. package/dist/{FilterBar-DELb-BMY.js → FilterBar-Dk3QEuT6.js} +3 -3
  38. package/dist/{FilterBar-DELb-BMY.js.map → FilterBar-Dk3QEuT6.js.map} +1 -1
  39. package/dist/{FilterBar-DGAF8V_g.cjs → FilterBar-gEvoWDXA.cjs} +3 -3
  40. package/dist/{FilterBar-DGAF8V_g.cjs.map → FilterBar-gEvoWDXA.cjs.map} +1 -1
  41. package/dist/{LogsDataList-DyVM83Rx.js → LogsDataList-Cslabh8K.js} +2 -2
  42. package/dist/{LogsDataList-DyVM83Rx.js.map → LogsDataList-Cslabh8K.js.map} +1 -1
  43. package/dist/{LogsDataList-DQ-3y06q.cjs → LogsDataList-DMmxAt_t.cjs} +2 -2
  44. package/dist/{LogsDataList-DQ-3y06q.cjs.map → LogsDataList-DMmxAt_t.cjs.map} +1 -1
  45. package/dist/{MarkdownRenderer-CMLH1J0C.cjs → MarkdownRenderer-BgqKfmRm.cjs} +4 -4
  46. package/dist/{MarkdownRenderer-CMLH1J0C.cjs.map → MarkdownRenderer-BgqKfmRm.cjs.map} +1 -1
  47. package/dist/{MarkdownRenderer-CRvDuEFW.js → MarkdownRenderer-DKCDXaLy.js} +4 -4
  48. package/dist/{MarkdownRenderer-CRvDuEFW.js.map → MarkdownRenderer-DKCDXaLy.js.map} +1 -1
  49. package/dist/{Message-HHJCqNIW.cjs → Message-BF9cpYaw.cjs} +2 -2
  50. package/dist/{Message-HHJCqNIW.cjs.map → Message-BF9cpYaw.cjs.map} +1 -1
  51. package/dist/{Message-Cl4sAJLl.js → Message-Bkf6Ro9H.js} +2 -2
  52. package/dist/{Message-Cl4sAJLl.js.map → Message-Bkf6Ro9H.js.map} +1 -1
  53. package/dist/{MetricsCard-eh9P4d2i.js → MetricsCard-C9GWgT58.js} +3 -3
  54. package/dist/{MetricsCard-eh9P4d2i.js.map → MetricsCard-C9GWgT58.js.map} +1 -1
  55. package/dist/{MetricsCard-B7A4Daun.cjs → MetricsCard-Dly_H3oX.cjs} +3 -3
  56. package/dist/{MetricsCard-B7A4Daun.cjs.map → MetricsCard-Dly_H3oX.cjs.map} +1 -1
  57. package/dist/{MetricsLineChart-CkuPY5an.cjs → MetricsLineChart-2m4LVL1N.cjs} +48 -43
  58. package/dist/MetricsLineChart-2m4LVL1N.cjs.map +1 -0
  59. package/dist/{MetricsLineChart-B9nzVOUV.js → MetricsLineChart-DKzuRU2q.js} +49 -44
  60. package/dist/MetricsLineChart-DKzuRU2q.js.map +1 -0
  61. package/dist/{MetricsStackedBarChart-D-o5Ocsv.js → MetricsStackedBarChart-DJB4aByt.js} +48 -26
  62. package/dist/MetricsStackedBarChart-DJB4aByt.js.map +1 -0
  63. package/dist/{MetricsStackedBarChart-EsJMtxYG.cjs → MetricsStackedBarChart-NATtwA_W.cjs} +47 -25
  64. package/dist/MetricsStackedBarChart-NATtwA_W.cjs.map +1 -0
  65. package/dist/MetricsTable-CRPeLHe1.js +292 -0
  66. package/dist/MetricsTable-CRPeLHe1.js.map +1 -0
  67. package/dist/MetricsTable-D-aZf3dk.cjs +297 -0
  68. package/dist/MetricsTable-D-aZf3dk.cjs.map +1 -0
  69. package/dist/{PageLayout-DSHnu66K.js → PageLayout-CyM_Op3c.js} +2 -2
  70. package/dist/{PageLayout-DSHnu66K.js.map → PageLayout-CyM_Op3c.js.map} +1 -1
  71. package/dist/{PageLayout-UfRYZurn.cjs → PageLayout-DFRzcnkf.cjs} +2 -2
  72. package/dist/{PageLayout-UfRYZurn.cjs.map → PageLayout-DFRzcnkf.cjs.map} +1 -1
  73. package/dist/ShareBar-3Z5np-NY.cjs +456 -0
  74. package/dist/ShareBar-3Z5np-NY.cjs.map +1 -0
  75. package/dist/ShareBar-D6dWWl4C.js +451 -0
  76. package/dist/ShareBar-D6dWWl4C.js.map +1 -0
  77. package/dist/{Workflow-BTl4BP2P.js → Workflow-BVWvgDmI.js} +6 -6
  78. package/dist/{Workflow-BTl4BP2P.js.map → Workflow-BVWvgDmI.js.map} +1 -1
  79. package/dist/{Workflow-C2-hqh4S.cjs → Workflow-BeF6pIO9.cjs} +6 -6
  80. package/dist/{Workflow-C2-hqh4S.cjs.map → Workflow-BeF6pIO9.cjs.map} +1 -1
  81. package/dist/{activity-B4CnOYnh.cjs → activity-QyLJcBKc.cjs} +82 -40
  82. package/dist/activity-QyLJcBKc.cjs.map +1 -0
  83. package/dist/{activity-Dc-NsOSz.js → activity-ihrl0JtH.js} +71 -41
  84. package/dist/activity-ihrl0JtH.js.map +1 -0
  85. package/dist/chart-plot.css +32 -0
  86. package/dist/{combobox-Bi1vnOZt.cjs → combobox-C-E7_q4j.cjs} +9 -18
  87. package/dist/combobox-C-E7_q4j.cjs.map +1 -0
  88. package/dist/{combobox-BgQrNpCO.js → combobox-CDS2pBqz.js} +9 -18
  89. package/dist/combobox-CDS2pBqz.js.map +1 -0
  90. package/dist/components/AlertDialog.cjs.js +1 -1
  91. package/dist/components/AlertDialog.es.js +1 -1
  92. package/dist/components/CodeBlock.cjs.js +3 -3
  93. package/dist/components/CodeBlock.es.js +3 -3
  94. package/dist/components/CodeEditor.cjs.js +1 -1
  95. package/dist/components/CodeEditor.es.js +1 -1
  96. package/dist/components/Combobox.cjs.js +1 -1
  97. package/dist/components/Combobox.es.js +1 -1
  98. package/dist/components/Command.cjs.js +8 -14
  99. package/dist/components/Command.cjs.js.map +1 -1
  100. package/dist/components/Command.es.js +8 -14
  101. package/dist/components/Command.es.js.map +1 -1
  102. package/dist/components/CommandPalette.cjs.js +2 -4
  103. package/dist/components/CommandPalette.cjs.js.map +1 -1
  104. package/dist/components/CommandPalette.es.js +2 -4
  105. package/dist/components/CommandPalette.es.js.map +1 -1
  106. package/dist/components/Composer.cjs.js +1 -1
  107. package/dist/components/Composer.es.js +1 -1
  108. package/dist/components/ContextMenu.cjs.js +1 -1
  109. package/dist/components/ContextMenu.es.js +1 -1
  110. package/dist/components/DataCodeSection.cjs.js +1 -1
  111. package/dist/components/DataCodeSection.es.js +1 -1
  112. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  113. package/dist/components/DataDetailsPanel.es.js +1 -1
  114. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  115. package/dist/components/DataKeysAndValues.es.js +1 -1
  116. package/dist/components/DataList.cjs.js +3 -3
  117. package/dist/components/DataList.es.js +3 -3
  118. package/dist/components/DataPanel.cjs.js +1 -1
  119. package/dist/components/DataPanel.es.js +1 -1
  120. package/dist/components/DateTimePicker.cjs.js +1 -1
  121. package/dist/components/DateTimePicker.es.js +1 -1
  122. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  123. package/dist/components/DateTimeRangePicker.es.js +1 -1
  124. package/dist/components/Dialog.cjs.js +1 -1
  125. package/dist/components/Dialog.es.js +1 -1
  126. package/dist/components/DropdownMenu.cjs.js +1 -1
  127. package/dist/components/DropdownMenu.es.js +1 -1
  128. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
  129. package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
  130. package/dist/components/FilterBar.cjs.js +2 -2
  131. package/dist/components/FilterBar.es.js +2 -2
  132. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  133. package/dist/components/FormFieldBlocks.es.js +1 -1
  134. package/dist/components/JSONSchemaForm.cjs.js +1 -1
  135. package/dist/components/JSONSchemaForm.es.js +1 -1
  136. package/dist/components/LogsDataList.cjs.js +2 -2
  137. package/dist/components/LogsDataList.es.js +2 -2
  138. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  139. package/dist/components/MarkdownRenderer.es.js +1 -1
  140. package/dist/components/Message.cjs.js +1 -1
  141. package/dist/components/Message.es.js +1 -1
  142. package/dist/components/MetricsCard.cjs.js +1 -1
  143. package/dist/components/MetricsCard.es.js +1 -1
  144. package/dist/components/MetricsLineChart.cjs.js +1 -1
  145. package/dist/components/MetricsLineChart.es.js +1 -1
  146. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  147. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  148. package/dist/components/MetricsTable.cjs.js +2 -142
  149. package/dist/components/MetricsTable.es.js +1 -142
  150. package/dist/components/PageLayout.cjs.js +1 -1
  151. package/dist/components/PageLayout.es.js +1 -1
  152. package/dist/components/Pagination.cjs.js +1 -1
  153. package/dist/components/Pagination.es.js +1 -1
  154. package/dist/components/PropertyFilter.cjs.js +47 -54
  155. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  156. package/dist/components/PropertyFilter.es.js +49 -56
  157. package/dist/components/PropertyFilter.es.js.map +1 -1
  158. package/dist/components/RuleBuilder.cjs.js +1 -1
  159. package/dist/components/RuleBuilder.es.js +1 -1
  160. package/dist/components/SavedViews.cjs.js +3 -3
  161. package/dist/components/SavedViews.es.js +3 -3
  162. package/dist/components/ScrollArea.cjs.js +1 -1
  163. package/dist/components/ScrollArea.es.js +1 -1
  164. package/dist/components/SegmentedName.cjs.js +19 -0
  165. package/dist/components/SegmentedName.cjs.js.map +1 -0
  166. package/dist/components/SegmentedName.d.ts +1 -0
  167. package/dist/components/SegmentedName.es.js +18 -0
  168. package/dist/components/SegmentedName.es.js.map +1 -0
  169. package/dist/components/Select.cjs.js +1 -1
  170. package/dist/components/Select.es.js +1 -1
  171. package/dist/components/SeriesMark.cjs.js +16 -8
  172. package/dist/components/SeriesMark.cjs.js.map +1 -1
  173. package/dist/components/SeriesMark.es.js +16 -8
  174. package/dist/components/SeriesMark.es.js.map +1 -1
  175. package/dist/components/ShareBar.cjs.js +3 -0
  176. package/dist/components/ShareBar.d.ts +1 -0
  177. package/dist/components/ShareBar.es.js +1 -0
  178. package/dist/components/SideDialog.cjs.js +3 -3
  179. package/dist/components/SideDialog.es.js +3 -3
  180. package/dist/components/Sidebar.cjs.js +6 -6
  181. package/dist/components/Sidebar.es.js +6 -6
  182. package/dist/components/Table.cjs.js +3 -28
  183. package/dist/components/Table.cjs.js.map +1 -1
  184. package/dist/components/Table.es.js +1 -26
  185. package/dist/components/Table.es.js.map +1 -1
  186. package/dist/components/Tabs.cjs.js +2 -2
  187. package/dist/components/Tabs.es.js +2 -2
  188. package/dist/components/ThreadRail.cjs.js +1 -1
  189. package/dist/components/ThreadRail.es.js +1 -1
  190. package/dist/components/Workflow.cjs.js +1 -1
  191. package/dist/components/Workflow.es.js +1 -1
  192. package/dist/components/ai/activity.cjs.js +3 -1
  193. package/dist/components/ai/activity.es.js +1 -1
  194. package/dist/components/ai/plan.cjs.js +2 -2
  195. package/dist/components/ai/plan.es.js +2 -2
  196. package/dist/components/ai/task-list.cjs.js +1 -1
  197. package/dist/components/ai/task-list.es.js +1 -1
  198. package/dist/components/ai/tool-approval.cjs.js +1 -1
  199. package/dist/components/ai/tool-approval.es.js +1 -1
  200. package/dist/components/ai/tool-call.cjs.js +2 -1
  201. package/dist/components/ai/tool-call.es.js +2 -2
  202. package/dist/{context-menu-BHhHokFj.cjs → context-menu-DTFPCyae.cjs} +7 -16
  203. package/dist/context-menu-DTFPCyae.cjs.map +1 -0
  204. package/dist/{context-menu-DuBHimPI.js → context-menu-Dv0NU0oM.js} +7 -16
  205. package/dist/context-menu-Dv0NU0oM.js.map +1 -0
  206. package/dist/{data-list-v93EXSHc.cjs → data-list-BkimqE_P.cjs} +14 -24
  207. package/dist/data-list-BkimqE_P.cjs.map +1 -0
  208. package/dist/{data-list-DjSo5V1C.js → data-list-evmf5xWI.js} +14 -24
  209. package/dist/data-list-evmf5xWI.js.map +1 -0
  210. package/dist/domains/chat/activity/activity-disclosure-provider.cjs.js +17 -0
  211. package/dist/domains/chat/activity/activity-disclosure-provider.cjs.js.map +1 -0
  212. package/dist/domains/chat/activity/activity-disclosure-provider.d.ts +1 -0
  213. package/dist/domains/chat/activity/activity-disclosure-provider.es.js +16 -0
  214. package/dist/domains/chat/activity/activity-disclosure-provider.es.js.map +1 -0
  215. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +60 -0
  216. package/dist/domains/chat/activity/activity-stretch-line.cjs.js.map +1 -0
  217. package/dist/domains/chat/activity/activity-stretch-line.d.ts +1 -0
  218. package/dist/domains/chat/activity/activity-stretch-line.es.js +59 -0
  219. package/dist/domains/chat/activity/activity-stretch-line.es.js.map +1 -0
  220. package/dist/domains/chat/activity/components/activity-fold.cjs.js +65 -0
  221. package/dist/domains/chat/activity/components/activity-fold.cjs.js.map +1 -0
  222. package/dist/domains/chat/activity/components/activity-fold.d.ts +1 -0
  223. package/dist/domains/chat/activity/components/activity-fold.es.js +64 -0
  224. package/dist/domains/chat/activity/components/activity-fold.es.js.map +1 -0
  225. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +29 -0
  226. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js.map +1 -0
  227. package/dist/domains/chat/activity/components/activity-timed-trigger.d.ts +1 -0
  228. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +28 -0
  229. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js.map +1 -0
  230. package/dist/domains/chat/activity/components/calls-group.cjs.js +30 -0
  231. package/dist/domains/chat/activity/components/calls-group.cjs.js.map +1 -0
  232. package/dist/domains/chat/activity/components/calls-group.d.ts +1 -0
  233. package/dist/domains/chat/activity/components/calls-group.es.js +29 -0
  234. package/dist/domains/chat/activity/components/calls-group.es.js.map +1 -0
  235. package/dist/domains/chat/activity/components/calls-panel.cjs.js +36 -0
  236. package/dist/domains/chat/activity/components/calls-panel.cjs.js.map +1 -0
  237. package/dist/domains/chat/activity/components/calls-panel.d.ts +1 -0
  238. package/dist/domains/chat/activity/components/calls-panel.es.js +35 -0
  239. package/dist/domains/chat/activity/components/calls-panel.es.js.map +1 -0
  240. package/dist/domains/chat/activity/components/reading-row.cjs.js +50 -0
  241. package/dist/domains/chat/activity/components/reading-row.cjs.js.map +1 -0
  242. package/dist/domains/chat/activity/components/reading-row.d.ts +1 -0
  243. package/dist/domains/chat/activity/components/reading-row.es.js +47 -0
  244. package/dist/domains/chat/activity/components/reading-row.es.js.map +1 -0
  245. package/dist/domains/chat/activity/components/stretch-content.cjs.js +37 -0
  246. package/dist/domains/chat/activity/components/stretch-content.cjs.js.map +1 -0
  247. package/dist/domains/chat/activity/components/stretch-content.d.ts +1 -0
  248. package/dist/domains/chat/activity/components/stretch-content.es.js +36 -0
  249. package/dist/domains/chat/activity/components/stretch-content.es.js.map +1 -0
  250. package/dist/domains/chat/activity/components/stretch-segment.cjs.js +20 -0
  251. package/dist/domains/chat/activity/components/stretch-segment.cjs.js.map +1 -0
  252. package/dist/domains/chat/activity/components/stretch-segment.d.ts +1 -0
  253. package/dist/domains/chat/activity/components/stretch-segment.es.js +19 -0
  254. package/dist/domains/chat/activity/components/stretch-segment.es.js.map +1 -0
  255. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +14 -0
  256. package/dist/domains/chat/activity/components/stretch-thought.cjs.js.map +1 -0
  257. package/dist/domains/chat/activity/components/stretch-thought.d.ts +1 -0
  258. package/dist/domains/chat/activity/components/stretch-thought.es.js +13 -0
  259. package/dist/domains/chat/activity/components/stretch-thought.es.js.map +1 -0
  260. package/dist/domains/chat/activity/model/activity-members.cjs.js +0 -0
  261. package/dist/domains/chat/activity/model/activity-members.d.ts +1 -0
  262. package/dist/domains/chat/activity/model/activity-members.es.js +0 -0
  263. package/dist/domains/chat/activity/model/activity-segments.cjs.js +22 -0
  264. package/dist/domains/chat/activity/model/activity-segments.cjs.js.map +1 -0
  265. package/dist/domains/chat/activity/model/activity-segments.d.ts +1 -0
  266. package/dist/domains/chat/activity/model/activity-segments.es.js +21 -0
  267. package/dist/domains/chat/activity/model/activity-segments.es.js.map +1 -0
  268. package/dist/domains/chat/activity/model/activity-words.cjs.js +94 -0
  269. package/dist/domains/chat/activity/model/activity-words.cjs.js.map +1 -0
  270. package/dist/domains/chat/activity/model/activity-words.d.ts +1 -0
  271. package/dist/domains/chat/activity/model/activity-words.es.js +89 -0
  272. package/dist/domains/chat/activity/model/activity-words.es.js.map +1 -0
  273. package/dist/domains/chat/activity/model/disclosure-store.cjs.js +54 -0
  274. package/dist/domains/chat/activity/model/disclosure-store.cjs.js.map +1 -0
  275. package/dist/domains/chat/activity/model/disclosure-store.d.ts +1 -0
  276. package/dist/domains/chat/activity/model/disclosure-store.es.js +53 -0
  277. package/dist/domains/chat/activity/model/disclosure-store.es.js.map +1 -0
  278. package/dist/domains/chat/activity/use-activity-disclosure.cjs.js +32 -0
  279. package/dist/domains/chat/activity/use-activity-disclosure.cjs.js.map +1 -0
  280. package/dist/domains/chat/activity/use-activity-disclosure.d.ts +1 -0
  281. package/dist/domains/chat/activity/use-activity-disclosure.es.js +28 -0
  282. package/dist/domains/chat/activity/use-activity-disclosure.es.js.map +1 -0
  283. package/dist/domains/chat/activity.cjs.js +9 -0
  284. package/dist/domains/chat/activity.d.ts +1 -0
  285. package/dist/domains/chat/activity.es.js +5 -0
  286. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  287. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  288. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
  289. package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
  290. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  291. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  292. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  293. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  294. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +2 -2
  295. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +2 -2
  296. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +1 -1
  297. package/dist/domains/chat/messages/assistant-message-actions.es.js +1 -1
  298. package/dist/domains/chat/messages/dataset-save-action.cjs.js +3 -3
  299. package/dist/domains/chat/messages/dataset-save-action.es.js +3 -3
  300. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  301. package/dist/domains/chat/messages/message-row.es.js +4 -4
  302. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  303. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  304. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  305. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  306. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  307. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  308. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  309. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  310. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  311. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  312. package/dist/domains/chat/messages/skill-message.cjs.js +3 -3
  313. package/dist/domains/chat/messages/skill-message.es.js +3 -3
  314. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  315. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  316. package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
  317. package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
  318. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  319. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  320. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  321. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  322. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +2 -2
  323. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +2 -2
  324. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  325. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  326. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  327. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  328. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  329. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  330. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  331. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  332. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  333. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  334. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  335. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  336. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  337. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  338. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
  339. package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
  340. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  341. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  342. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +1 -1
  343. package/dist/domains/chat/tools/connect-prompt-tool.es.js +1 -1
  344. package/dist/domains/chat/tools/tool-card-kind.cjs.js +1 -1
  345. package/dist/domains/chat/tools/tool-card-kind.es.js +1 -1
  346. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  347. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  348. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  349. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  350. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +2 -2
  351. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +2 -2
  352. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
  353. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
  354. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
  355. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
  356. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +3 -3
  357. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +3 -3
  358. package/dist/domains/llm/model-name-parts.cjs.js +17 -0
  359. package/dist/domains/llm/model-name-parts.cjs.js.map +1 -0
  360. package/dist/domains/llm/model-name-parts.d.ts +1 -0
  361. package/dist/domains/llm/model-name-parts.es.js +16 -0
  362. package/dist/domains/llm/model-name-parts.es.js.map +1 -0
  363. package/dist/domains/llm/provider-mark.cjs.js +21 -0
  364. package/dist/domains/llm/provider-mark.cjs.js.map +1 -0
  365. package/dist/domains/llm/provider-mark.d.ts +1 -0
  366. package/dist/domains/llm/provider-mark.es.js +20 -0
  367. package/dist/domains/llm/provider-mark.es.js.map +1 -0
  368. package/dist/domains/llm.cjs.js +4 -0
  369. package/dist/domains/llm.es.js +3 -1
  370. package/dist/domains/logs/components/log-data-panel.cjs.js +3 -3
  371. package/dist/domains/logs/components/log-data-panel.es.js +3 -3
  372. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  373. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  374. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  375. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  376. package/dist/domains/metrics/components/agent-runs-card.cjs.js +3 -3
  377. package/dist/domains/metrics/components/agent-runs-card.es.js +3 -3
  378. package/dist/domains/metrics/components/breakdown/breakdown-figure.cjs.js +17 -0
  379. package/dist/domains/metrics/components/breakdown/breakdown-figure.cjs.js.map +1 -0
  380. package/dist/domains/metrics/components/breakdown/breakdown-figure.d.ts +1 -0
  381. package/dist/domains/metrics/components/breakdown/breakdown-figure.es.js +16 -0
  382. package/dist/domains/metrics/components/breakdown/breakdown-figure.es.js.map +1 -0
  383. package/dist/domains/metrics/components/breakdown/breakdown-frame.cjs.js +1 -1
  384. package/dist/domains/metrics/components/breakdown/breakdown-frame.es.js +1 -1
  385. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.cjs.js +29 -0
  386. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.cjs.js.map +1 -0
  387. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.d.ts +1 -0
  388. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.es.js +28 -0
  389. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.es.js.map +1 -0
  390. package/dist/domains/metrics/components/breakdown/breakdown-row-name.cjs.js +28 -0
  391. package/dist/domains/metrics/components/breakdown/breakdown-row-name.cjs.js.map +1 -0
  392. package/dist/domains/metrics/components/breakdown/breakdown-row-name.d.ts +1 -0
  393. package/dist/domains/metrics/components/breakdown/breakdown-row-name.es.js +27 -0
  394. package/dist/domains/metrics/components/breakdown/breakdown-row-name.es.js.map +1 -0
  395. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  396. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  397. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js +129 -104
  398. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js.map +1 -1
  399. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js +130 -105
  400. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js.map +1 -1
  401. package/dist/domains/metrics/components/breakdown/breakdown-text.cjs.js +18 -0
  402. package/dist/domains/metrics/components/breakdown/breakdown-text.cjs.js.map +1 -0
  403. package/dist/domains/metrics/components/breakdown/breakdown-text.d.ts +1 -0
  404. package/dist/domains/metrics/components/breakdown/breakdown-text.es.js +17 -0
  405. package/dist/domains/metrics/components/breakdown/breakdown-text.es.js.map +1 -0
  406. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  407. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  408. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  409. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  410. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  411. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  412. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  413. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  414. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  415. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  416. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +2 -2
  417. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +2 -2
  418. package/dist/domains/metrics/components/failure-rate-card.cjs.js +2 -2
  419. package/dist/domains/metrics/components/failure-rate-card.es.js +2 -2
  420. package/dist/domains/metrics/components/latency-card.cjs.js +2 -2
  421. package/dist/domains/metrics/components/latency-card.es.js +2 -2
  422. package/dist/domains/metrics/components/scores-card.cjs.js +2 -2
  423. package/dist/domains/metrics/components/scores-card.es.js +2 -2
  424. package/dist/domains/metrics/components/token-usage-card.cjs.js +3 -3
  425. package/dist/domains/metrics/components/token-usage-card.es.js +3 -3
  426. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  427. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  428. package/dist/domains/metrics/components/trace-volume-card.cjs.js +5 -9
  429. package/dist/domains/metrics/components/trace-volume-card.cjs.js.map +1 -1
  430. package/dist/domains/metrics/components/trace-volume-card.es.js +5 -9
  431. package/dist/domains/metrics/components/trace-volume-card.es.js.map +1 -1
  432. package/dist/domains/metrics/components/usage-card.cjs.js +5 -9
  433. package/dist/domains/metrics/components/usage-card.cjs.js.map +1 -1
  434. package/dist/domains/metrics/components/usage-card.es.js +5 -9
  435. package/dist/domains/metrics/components/usage-card.es.js.map +1 -1
  436. package/dist/domains/metrics/lib/breakdown-table.cjs.js +0 -10
  437. package/dist/domains/metrics/lib/breakdown-table.cjs.js.map +1 -1
  438. package/dist/domains/metrics/lib/breakdown-table.es.js +1 -10
  439. package/dist/domains/metrics/lib/breakdown-table.es.js.map +1 -1
  440. package/dist/domains/metrics/lib/breakdown.cjs.js +6 -2
  441. package/dist/domains/metrics/lib/breakdown.cjs.js.map +1 -1
  442. package/dist/domains/metrics/lib/breakdown.es.js +6 -2
  443. package/dist/domains/metrics/lib/breakdown.es.js.map +1 -1
  444. package/dist/domains/observability/components/observability-histogram.cjs.js +79 -0
  445. package/dist/domains/observability/components/observability-histogram.cjs.js.map +1 -0
  446. package/dist/domains/observability/components/observability-histogram.d.ts +1 -0
  447. package/dist/domains/observability/components/observability-histogram.es.js +78 -0
  448. package/dist/domains/observability/components/observability-histogram.es.js.map +1 -0
  449. package/dist/domains/observability/components/observability-list-body.cjs.js +12 -7
  450. package/dist/domains/observability/components/observability-list-body.cjs.js.map +1 -1
  451. package/dist/domains/observability/components/observability-list-body.es.js +12 -7
  452. package/dist/domains/observability/components/observability-list-body.es.js.map +1 -1
  453. package/dist/domains/observability/components/observability-page-layout.cjs.js +1 -1
  454. package/dist/domains/observability/components/observability-page-layout.es.js +1 -1
  455. package/dist/domains/observability/lib/histogram-buckets.cjs.js +174 -0
  456. package/dist/domains/observability/lib/histogram-buckets.cjs.js.map +1 -0
  457. package/dist/domains/observability/lib/histogram-buckets.d.ts +1 -0
  458. package/dist/domains/observability/lib/histogram-buckets.es.js +168 -0
  459. package/dist/domains/observability/lib/histogram-buckets.es.js.map +1 -0
  460. package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
  461. package/dist/domains/scores/components/score-data-panel.es.js +2 -2
  462. package/dist/domains/scores/components/span-scoring.cjs.js +2 -2
  463. package/dist/domains/scores/components/span-scoring.es.js +2 -2
  464. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  465. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  466. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  467. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  468. package/dist/domains/skills/skill-simple-form.cjs.js +58 -0
  469. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -0
  470. package/dist/domains/skills/skill-simple-form.d.ts +1 -0
  471. package/dist/domains/skills/skill-simple-form.es.js +57 -0
  472. package/dist/domains/skills/skill-simple-form.es.js.map +1 -0
  473. package/dist/domains/spans/components/spans-explorer-body.cjs.js +28 -19
  474. package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
  475. package/dist/domains/spans/components/spans-explorer-body.es.js +28 -19
  476. package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
  477. package/dist/domains/spans/components/spans-explorer-histogram.cjs.js +43 -0
  478. package/dist/domains/spans/components/spans-explorer-histogram.cjs.js.map +1 -0
  479. package/dist/domains/spans/components/spans-explorer-histogram.d.ts +1 -0
  480. package/dist/domains/spans/components/spans-explorer-histogram.es.js +42 -0
  481. package/dist/domains/spans/components/spans-explorer-histogram.es.js.map +1 -0
  482. package/dist/domains/spans/components/spans-filter-bar.cjs.js +4 -2
  483. package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
  484. package/dist/domains/spans/components/spans-filter-bar.es.js +4 -2
  485. package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
  486. package/dist/domains/threads/components/threads-filter-bar.cjs.js +4 -2
  487. package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
  488. package/dist/domains/threads/components/threads-filter-bar.es.js +4 -2
  489. package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
  490. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  491. package/dist/domains/traces/components/feedback-thread.es.js +1 -1
  492. package/dist/domains/traces/components/format-trace-thread-messages.cjs.js +52 -0
  493. package/dist/domains/traces/components/format-trace-thread-messages.cjs.js.map +1 -1
  494. package/dist/domains/traces/components/format-trace-thread-messages.es.js +51 -1
  495. package/dist/domains/traces/components/format-trace-thread-messages.es.js.map +1 -1
  496. package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js +23 -0
  497. package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js.map +1 -0
  498. package/dist/domains/traces/components/read-only-tool-call-provider.d.ts +1 -0
  499. package/dist/domains/traces/components/read-only-tool-call-provider.es.js +22 -0
  500. package/dist/domains/traces/components/read-only-tool-call-provider.es.js.map +1 -0
  501. package/dist/domains/traces/components/span-data-panel-view.cjs.js +517 -170
  502. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  503. package/dist/domains/traces/components/span-data-panel-view.es.js +525 -178
  504. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  505. package/dist/domains/traces/components/span-details-view.cjs.js +20 -12
  506. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  507. package/dist/domains/traces/components/span-details-view.es.js +23 -15
  508. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  509. package/dist/domains/traces/components/span-outcome.cjs.js +49 -0
  510. package/dist/domains/traces/components/span-outcome.cjs.js.map +1 -0
  511. package/dist/domains/traces/components/span-outcome.d.ts +1 -0
  512. package/dist/domains/traces/components/span-outcome.es.js +48 -0
  513. package/dist/domains/traces/components/span-outcome.es.js.map +1 -0
  514. package/dist/domains/traces/components/span-outcome.utils.cjs.js +360 -0
  515. package/dist/domains/traces/components/span-outcome.utils.cjs.js.map +1 -0
  516. package/dist/domains/traces/components/span-outcome.utils.d.ts +1 -0
  517. package/dist/domains/traces/components/span-outcome.utils.es.js +357 -0
  518. package/dist/domains/traces/components/span-outcome.utils.es.js.map +1 -0
  519. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +33 -16
  520. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js.map +1 -1
  521. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +33 -17
  522. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js.map +1 -1
  523. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +3 -3
  524. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +3 -3
  525. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +4 -12
  526. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  527. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +4 -12
  528. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  529. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +59 -2
  530. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
  531. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +59 -2
  532. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
  533. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  534. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  535. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  536. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  537. package/dist/domains/traces/components/span-payload/span-payload-processor-fields.cjs.js +135 -0
  538. package/dist/domains/traces/components/span-payload/span-payload-processor-fields.cjs.js.map +1 -0
  539. package/dist/domains/traces/components/span-payload/span-payload-processor-fields.d.ts +1 -0
  540. package/dist/domains/traces/components/span-payload/span-payload-processor-fields.es.js +129 -0
  541. package/dist/domains/traces/components/span-payload/span-payload-processor-fields.es.js.map +1 -0
  542. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +17 -115
  543. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js.map +1 -1
  544. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +16 -114
  545. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js.map +1 -1
  546. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +33 -22
  547. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
  548. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +34 -23
  549. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
  550. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +62 -19
  551. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
  552. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +62 -20
  553. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
  554. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  555. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  556. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +52 -141
  557. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
  558. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +55 -144
  559. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
  560. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +99 -0
  561. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js.map +1 -0
  562. package/dist/domains/traces/components/span-payload/span-processor-mutations.d.ts +1 -0
  563. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +98 -0
  564. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js.map +1 -0
  565. package/dist/domains/traces/components/span-payload/span-signal-details.cjs.js +1 -1
  566. package/dist/domains/traces/components/span-payload/span-signal-details.es.js +1 -1
  567. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +51 -3
  568. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js.map +1 -1
  569. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +49 -5
  570. package/dist/domains/traces/components/span-payload/span-tools-section.es.js.map +1 -1
  571. package/dist/domains/traces/components/span-payload/use-span-tool-calls.cjs.js +15 -0
  572. package/dist/domains/traces/components/span-payload/use-span-tool-calls.cjs.js.map +1 -0
  573. package/dist/domains/traces/components/span-payload/use-span-tool-calls.d.ts +1 -0
  574. package/dist/domains/traces/components/span-payload/use-span-tool-calls.es.js +14 -0
  575. package/dist/domains/traces/components/span-payload/use-span-tool-calls.es.js.map +1 -0
  576. package/dist/domains/traces/components/span-payload.cjs.js +6 -1
  577. package/dist/domains/traces/components/span-payload.es.js +5 -4
  578. package/dist/domains/traces/components/span-prompt-changes.cjs.js +267 -0
  579. package/dist/domains/traces/components/span-prompt-changes.cjs.js.map +1 -0
  580. package/dist/domains/traces/components/span-prompt-changes.d.ts +1 -0
  581. package/dist/domains/traces/components/span-prompt-changes.es.js +266 -0
  582. package/dist/domains/traces/components/span-prompt-changes.es.js.map +1 -0
  583. package/dist/domains/traces/components/span-prompt-impact.cjs.js +32 -0
  584. package/dist/domains/traces/components/span-prompt-impact.cjs.js.map +1 -0
  585. package/dist/domains/traces/components/span-prompt-impact.d.ts +1 -0
  586. package/dist/domains/traces/components/span-prompt-impact.es.js +29 -0
  587. package/dist/domains/traces/components/span-prompt-impact.es.js.map +1 -0
  588. package/dist/domains/traces/components/span-rows.cjs.js +1 -1
  589. package/dist/domains/traces/components/span-rows.es.js +1 -1
  590. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  591. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  592. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  593. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  594. package/dist/domains/traces/components/span-token-usage.cjs.js +1 -41
  595. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  596. package/dist/domains/traces/components/span-token-usage.es.js +3 -42
  597. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  598. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  599. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  600. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  601. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  602. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  603. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  604. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  605. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  606. package/dist/domains/traces/components/timeline-name-col.cjs.js +3 -10
  607. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  608. package/dist/domains/traces/components/timeline-name-col.es.js +4 -11
  609. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  610. package/dist/domains/traces/components/trace-columns-menu.cjs.js +8 -11
  611. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  612. package/dist/domains/traces/components/trace-columns-menu.es.js +8 -11
  613. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  614. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -3
  615. package/dist/domains/traces/components/trace-data-panel-view.es.js +3 -3
  616. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
  617. package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
  618. package/dist/domains/traces/components/trace-details-view.cjs.js +3 -3
  619. package/dist/domains/traces/components/trace-details-view.es.js +3 -3
  620. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  621. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  622. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  623. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  624. package/dist/domains/traces/components/trace-span-panel.cjs.js +0 -1
  625. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  626. package/dist/domains/traces/components/trace-span-panel.es.js +0 -1
  627. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  628. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  629. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  630. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +26 -38
  631. package/dist/domains/traces/components/trace-thread-item-view.cjs.js.map +1 -1
  632. package/dist/domains/traces/components/trace-thread-item-view.es.js +26 -38
  633. package/dist/domains/traces/components/trace-thread-item-view.es.js.map +1 -1
  634. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  635. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  636. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +44 -27
  637. package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -1
  638. package/dist/domains/traces/components/trace-time-range-chip.es.js +44 -27
  639. package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -1
  640. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +12 -2
  641. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js.map +1 -1
  642. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +12 -3
  643. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js.map +1 -1
  644. package/dist/domains/traces/components/traces-explorer/traces-explorer-body.cjs.js +2 -1
  645. package/dist/domains/traces/components/traces-explorer/traces-explorer-body.cjs.js.map +1 -1
  646. package/dist/domains/traces/components/traces-explorer/traces-explorer-body.es.js +2 -1
  647. package/dist/domains/traces/components/traces-explorer/traces-explorer-body.es.js.map +1 -1
  648. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  649. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  650. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +3 -1
  651. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
  652. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +3 -1
  653. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
  654. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.cjs.js +78 -0
  655. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.cjs.js.map +1 -0
  656. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.d.ts +1 -0
  657. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.es.js +77 -0
  658. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.es.js.map +1 -0
  659. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.cjs.js +3 -2
  660. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.cjs.js.map +1 -1
  661. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.es.js +3 -2
  662. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.es.js.map +1 -1
  663. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +1 -1
  664. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  665. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +1 -1
  666. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  667. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +5 -2
  668. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  669. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +6 -3
  670. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  671. package/dist/domains/traces/components/traces-explorer.cjs.js +2 -0
  672. package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
  673. package/dist/domains/traces/components/traces-explorer.es.js +2 -0
  674. package/dist/domains/traces/components/traces-explorer.es.js.map +1 -1
  675. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  676. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  677. package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
  678. package/dist/domains/traces/components/traces-list-view.es.js +3 -3
  679. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  680. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  681. package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
  682. package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
  683. package/dist/domains/traces/components.cjs.js +8 -3
  684. package/dist/domains/traces/components.es.js +7 -6
  685. package/dist/domains/traces/hooks/use-trace-span-navigation.cjs.js +1 -1
  686. package/dist/domains/traces/hooks/use-trace-span-navigation.es.js +1 -1
  687. package/dist/domains/traces/types.cjs.js +10 -0
  688. package/dist/domains/traces/types.cjs.js.map +1 -1
  689. package/dist/domains/traces/types.es.js +9 -1
  690. package/dist/domains/traces/types.es.js.map +1 -1
  691. package/dist/domains/traces.cjs.js +10 -3
  692. package/dist/domains/traces.es.js +8 -7
  693. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  694. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  695. package/dist/domains/workflows/components/workflow-entity-header.cjs.js +1 -1
  696. package/dist/domains/workflows/components/workflow-entity-header.es.js +1 -1
  697. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  698. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  699. package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
  700. package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
  701. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  702. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  703. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  704. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  705. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  706. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  707. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  708. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  709. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  710. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  711. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  712. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  713. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  714. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  715. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  716. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  717. package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
  718. package/dist/domains/workflows/workflow/utils.es.js +1 -1
  719. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  720. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  721. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  722. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  723. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  724. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  725. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +1 -1
  726. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +1 -1
  727. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  728. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  729. package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
  730. package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
  731. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  732. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  733. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  734. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  735. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +2 -2
  736. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +2 -2
  737. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
  738. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
  739. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
  740. package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
  741. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  742. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  743. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  744. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  745. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  746. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  747. package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
  748. package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
  749. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  750. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  751. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  752. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  753. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  754. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  755. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  756. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  757. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +4 -4
  758. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +4 -4
  759. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  760. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  761. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  762. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  763. package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
  764. package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
  765. package/dist/{dropdown-menu-Caic-zHy.js → dropdown-menu-B4jY3J9e.js} +6 -13
  766. package/dist/dropdown-menu-B4jY3J9e.js.map +1 -0
  767. package/dist/{dropdown-menu-C-3jXKWx.cjs → dropdown-menu-BETTTPBB.cjs} +6 -13
  768. package/dist/dropdown-menu-BETTTPBB.cjs.map +1 -0
  769. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  770. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  771. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  772. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  773. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
  774. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
  775. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  776. package/dist/ee/signals/sankey-signals.es.js +1 -1
  777. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  778. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  779. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  780. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  781. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  782. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  783. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  784. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  785. package/dist/{filter-bar-chip-B8YhZSsE.js → filter-bar-chip-B3pgpngW.js} +32 -42
  786. package/dist/filter-bar-chip-B3pgpngW.js.map +1 -0
  787. package/dist/{filter-bar-chip-BDIsuGcB.cjs → filter-bar-chip-CyTAmjt6.cjs} +36 -40
  788. package/dist/filter-bar-chip-CyTAmjt6.cjs.map +1 -0
  789. package/dist/hooks/use-autoscroll.cjs.js +15 -6
  790. package/dist/hooks/use-autoscroll.cjs.js.map +1 -1
  791. package/dist/hooks/use-autoscroll.es.js +15 -6
  792. package/dist/hooks/use-autoscroll.es.js.map +1 -1
  793. package/dist/layout/tabbed-container.cjs.js +1 -1
  794. package/dist/layout/tabbed-container.es.js +1 -1
  795. package/dist/lib/form/components/select-field.cjs.js +1 -1
  796. package/dist/lib/form/components/select-field.es.js +1 -1
  797. package/dist/{pagination-range-BG8eIaxA.js → pagination-range-BCcIngy8.js} +14 -99
  798. package/dist/pagination-range-BCcIngy8.js.map +1 -0
  799. package/dist/{pagination-range-DFqtQ-3z.cjs → pagination-range-BvsZH7e4.cjs} +12 -97
  800. package/dist/pagination-range-BvsZH7e4.cjs.map +1 -0
  801. package/dist/primitives/chart-axes.cjs.js +27 -5
  802. package/dist/primitives/chart-axes.cjs.js.map +1 -1
  803. package/dist/primitives/chart-axes.es.js +27 -6
  804. package/dist/primitives/chart-axes.es.js.map +1 -1
  805. package/dist/primitives/chart-frame.cjs.js +28 -1
  806. package/dist/primitives/chart-frame.cjs.js.map +1 -1
  807. package/dist/primitives/chart-frame.es.js +28 -1
  808. package/dist/primitives/chart-frame.es.js.map +1 -1
  809. package/dist/primitives/chart-plot.cjs.js +78 -12
  810. package/dist/primitives/chart-plot.cjs.js.map +1 -1
  811. package/dist/primitives/chart-plot.es.js +78 -12
  812. package/dist/primitives/chart-plot.es.js.map +1 -1
  813. package/dist/primitives/chart-tooltip-position.cjs.js +57 -0
  814. package/dist/primitives/chart-tooltip-position.cjs.js.map +1 -0
  815. package/dist/primitives/chart-tooltip-position.d.ts +1 -0
  816. package/dist/primitives/chart-tooltip-position.es.js +56 -0
  817. package/dist/primitives/chart-tooltip-position.es.js.map +1 -0
  818. package/dist/primitives/charts/drag-selection/drag-selection-band.cjs.js +36 -0
  819. package/dist/primitives/charts/drag-selection/drag-selection-band.cjs.js.map +1 -0
  820. package/dist/primitives/charts/drag-selection/drag-selection-band.d.ts +1 -0
  821. package/dist/primitives/charts/drag-selection/drag-selection-band.es.js +35 -0
  822. package/dist/primitives/charts/drag-selection/drag-selection-band.es.js.map +1 -0
  823. package/dist/primitives/charts/drag-selection/drag-selection-range.cjs.js +44 -0
  824. package/dist/primitives/charts/drag-selection/drag-selection-range.cjs.js.map +1 -0
  825. package/dist/primitives/charts/drag-selection/drag-selection-range.d.ts +1 -0
  826. package/dist/primitives/charts/drag-selection/drag-selection-range.es.js +41 -0
  827. package/dist/primitives/charts/drag-selection/drag-selection-range.es.js.map +1 -0
  828. package/dist/primitives/charts/drag-selection/use-drag-selection.cjs.js +80 -0
  829. package/dist/primitives/charts/drag-selection/use-drag-selection.cjs.js.map +1 -0
  830. package/dist/primitives/charts/drag-selection/use-drag-selection.d.ts +1 -0
  831. package/dist/primitives/charts/drag-selection/use-drag-selection.es.js +78 -0
  832. package/dist/primitives/charts/drag-selection/use-drag-selection.es.js.map +1 -0
  833. package/dist/primitives/charts/drag-selection.cjs.js +10 -0
  834. package/dist/primitives/charts/drag-selection.d.ts +1 -0
  835. package/dist/primitives/charts/drag-selection.es.js +4 -0
  836. package/dist/primitives/form-element.cjs.js +1 -1
  837. package/dist/primitives/form-element.cjs.js.map +1 -1
  838. package/dist/primitives/form-element.es.js +1 -1
  839. package/dist/primitives/form-element.es.js.map +1 -1
  840. package/dist/primitives/menu-item.cjs.js +6 -5
  841. package/dist/primitives/menu-item.cjs.js.map +1 -1
  842. package/dist/primitives/menu-item.es.js +6 -6
  843. package/dist/primitives/menu-item.es.js.map +1 -1
  844. package/dist/primitives/menu-scroll-area.cjs.js +4 -10
  845. package/dist/primitives/menu-scroll-area.cjs.js.map +1 -1
  846. package/dist/primitives/menu-scroll-area.es.js +4 -10
  847. package/dist/primitives/menu-scroll-area.es.js.map +1 -1
  848. package/dist/{property-filter-applied-CC8wQtPa.js → property-filter-applied-DRglaEj-.js} +27 -39
  849. package/dist/property-filter-applied-DRglaEj-.js.map +1 -0
  850. package/dist/{property-filter-applied-I8Iz2j9O.cjs → property-filter-applied-DqsPFbYM.cjs} +26 -38
  851. package/dist/property-filter-applied-DqsPFbYM.cjs.map +1 -0
  852. package/dist/{scroll-area-CpCAy8S0.cjs → scroll-area-BP4gPZ4G.cjs} +13 -7
  853. package/dist/scroll-area-BP4gPZ4G.cjs.map +1 -0
  854. package/dist/{scroll-area-Dh9UQ7HP.js → scroll-area-C226l0v0.js} +13 -7
  855. package/dist/scroll-area-C226l0v0.js.map +1 -0
  856. package/dist/{select-D7PoE2w6.js → select-BbFpEBAY.js} +2 -5
  857. package/dist/select-BbFpEBAY.js.map +1 -0
  858. package/dist/{select-Dtc73TLB.cjs → select-NySY9Men.cjs} +2 -5
  859. package/dist/select-NySY9Men.cjs.map +1 -0
  860. package/dist/{span-payload-primitives-rxerCV7Y.cjs → span-payload-primitives-D3OO0u6u.cjs} +33 -21
  861. package/dist/span-payload-primitives-D3OO0u6u.cjs.map +1 -0
  862. package/dist/{span-payload-primitives-Fi1kSYyM.js → span-payload-primitives-DTV7eUY-.js} +33 -21
  863. package/dist/span-payload-primitives-DTV7eUY-.js.map +1 -0
  864. package/dist/src/domains/chat/activity/activity-disclosure-provider.d.ts +5 -0
  865. package/dist/src/domains/chat/activity/activity-stretch-line.d.ts +10 -0
  866. package/dist/src/domains/chat/activity/components/activity-fold.d.ts +16 -0
  867. package/dist/src/domains/chat/activity/components/activity-timed-trigger.d.ts +9 -0
  868. package/dist/src/domains/chat/activity/components/calls-group.d.ts +6 -0
  869. package/dist/src/domains/chat/activity/components/calls-panel.d.ts +6 -0
  870. package/dist/src/domains/chat/activity/components/reading-row.d.ts +10 -0
  871. package/dist/src/domains/chat/activity/components/stretch-content.d.ts +9 -0
  872. package/dist/src/domains/chat/activity/components/stretch-segment.d.ts +6 -0
  873. package/dist/src/domains/chat/activity/components/stretch-thought.d.ts +5 -0
  874. package/dist/src/domains/chat/activity/index.d.ts +7 -0
  875. package/dist/src/domains/chat/activity/model/activity-members.d.ts +22 -0
  876. package/dist/src/domains/chat/activity/model/activity-segments.d.ts +9 -0
  877. package/dist/src/domains/chat/activity/model/activity-words.d.ts +24 -0
  878. package/dist/src/domains/chat/activity/model/disclosure-store.d.ts +22 -0
  879. package/dist/src/domains/chat/activity/use-activity-disclosure.d.ts +10 -0
  880. package/dist/src/domains/llm/index.d.ts +3 -0
  881. package/dist/src/domains/llm/model-name-parts.d.ts +6 -0
  882. package/dist/src/domains/llm/provider-mark.d.ts +11 -0
  883. package/dist/src/domains/metrics/components/breakdown/breakdown-figure.d.ts +6 -0
  884. package/dist/src/domains/metrics/components/breakdown/breakdown-row-mark.d.ts +9 -0
  885. package/dist/src/domains/metrics/components/breakdown/breakdown-row-name.d.ts +6 -0
  886. package/dist/src/domains/metrics/components/breakdown/breakdown-text.d.ts +4 -0
  887. package/dist/src/domains/metrics/lib/breakdown-table.d.ts +0 -5
  888. package/dist/src/domains/metrics/lib/breakdown.d.ts +2 -0
  889. package/dist/src/domains/observability/components/observability-histogram.d.ts +20 -0
  890. package/dist/src/domains/observability/components/observability-list-body.d.ts +4 -2
  891. package/dist/src/domains/observability/lib/histogram-buckets.d.ts +43 -0
  892. package/dist/src/domains/skills/skill-simple-form.d.ts +10 -0
  893. package/dist/src/domains/spans/components/spans-explorer-histogram.d.ts +18 -0
  894. package/dist/src/domains/spans/hooks/use-spans-list-source.d.ts +1 -0
  895. package/dist/src/domains/threads/hooks/use-threads-list-source.d.ts +1 -0
  896. package/dist/src/domains/traces/components/format-trace-thread-messages.d.ts +14 -0
  897. package/dist/src/domains/traces/components/read-only-tool-call-provider.d.ts +5 -0
  898. package/dist/src/domains/traces/components/span-data-panel-view.d.ts +10 -10
  899. package/dist/src/domains/traces/components/span-outcome.d.ts +9 -0
  900. package/dist/src/domains/traces/components/span-outcome.utils.d.ts +32 -0
  901. package/dist/src/domains/traces/components/span-payload/index.d.ts +4 -3
  902. package/dist/src/domains/traces/components/span-payload/span-error-renderer.d.ts +2 -0
  903. package/dist/src/domains/traces/components/span-payload/span-payload-json.d.ts +5 -1
  904. package/dist/src/domains/traces/components/span-payload/span-payload-primitives.d.ts +7 -2
  905. package/dist/src/domains/traces/components/span-payload/span-payload-processor-fields.d.ts +106 -0
  906. package/dist/src/domains/traces/components/span-payload/span-payload-processor.d.ts +1 -4
  907. package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +10 -16
  908. package/dist/src/domains/traces/components/span-payload/span-payload-section.d.ts +20 -1
  909. package/dist/src/domains/traces/components/span-payload/span-processor-attributes.d.ts +4 -4
  910. package/dist/src/domains/traces/components/span-payload/span-processor-mutations.d.ts +5 -0
  911. package/dist/src/domains/traces/components/span-payload/span-tools-section.d.ts +19 -2
  912. package/dist/src/domains/traces/components/span-payload/use-span-tool-calls.d.ts +3 -0
  913. package/dist/src/domains/traces/components/span-prompt-changes.d.ts +10 -0
  914. package/dist/src/domains/traces/components/span-prompt-impact.d.ts +13 -0
  915. package/dist/src/domains/traces/components/span-token-usage.d.ts +0 -7
  916. package/dist/src/domains/traces/components/trace-span-panel.d.ts +2 -2
  917. package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +7 -4
  918. package/dist/src/domains/traces/components/traces-explorer/index.d.ts +2 -0
  919. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-actions.d.ts +6 -1
  920. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-body.d.ts +3 -1
  921. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  922. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-histogram.d.ts +7 -0
  923. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-layout.d.ts +1 -1
  924. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +1 -0
  925. package/dist/src/domains/traces/index.d.ts +1 -1
  926. package/dist/src/domains/traces/types.d.ts +4 -1
  927. package/dist/src/ds/components/Combobox/combobox-parts.d.ts +1 -1
  928. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +1 -1
  929. package/dist/src/ds/components/DataList/data-list-group.d.ts +1 -1
  930. package/dist/src/ds/components/DataList/shared.d.ts +5 -5
  931. package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +2 -0
  932. package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +1 -1
  933. package/dist/src/ds/components/MetricsStackedBarChart/metrics-stacked-bar-chart.d.ts +8 -0
  934. package/dist/src/ds/components/MetricsTable/metrics-table-header.d.ts +15 -0
  935. package/dist/src/ds/components/MetricsTable/metrics-table-rows.d.ts +15 -0
  936. package/dist/src/ds/components/MetricsTable/metrics-table-types.d.ts +23 -5
  937. package/dist/src/ds/components/MetricsTable/metrics-table.d.ts +2 -1
  938. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -2
  939. package/dist/src/ds/components/SegmentedName/index.d.ts +1 -0
  940. package/dist/src/ds/components/SegmentedName/segmented-name.d.ts +10 -0
  941. package/dist/src/ds/components/SeriesMark/series-mark.d.ts +12 -7
  942. package/dist/src/ds/components/ShareBar/index.d.ts +2 -0
  943. package/dist/src/ds/components/ShareBar/share-bar-classes.d.ts +2 -0
  944. package/dist/src/ds/components/ShareBar/share-bar-row.d.ts +16 -0
  945. package/dist/src/ds/components/ShareBar/share-bar-rows.d.ts +71 -0
  946. package/dist/src/ds/components/ShareBar/share-bar-skeleton.d.ts +9 -0
  947. package/dist/src/ds/components/ShareBar/share-bar-types.d.ts +62 -0
  948. package/dist/src/ds/components/ShareBar/share-bar.d.ts +8 -0
  949. package/dist/src/ds/components/ai/activity/activity.d.ts +10 -3
  950. package/dist/src/ds/components/ai/activity/index.d.ts +1 -0
  951. package/dist/src/ds/components/ai/activity/presets/reasoning-text.d.ts +6 -0
  952. package/dist/src/ds/components/ai/activity/presets/reasoning-visibility.d.ts +2 -0
  953. package/dist/src/ds/components/ai/tool-call/index.d.ts +1 -0
  954. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +115 -0
  955. package/dist/src/ds/primitives/chart-axes.d.ts +23 -3
  956. package/dist/src/ds/primitives/chart-tooltip-position.d.ts +18 -0
  957. package/dist/src/ds/primitives/charts/drag-selection/drag-selection-band.d.ts +15 -0
  958. package/dist/src/ds/primitives/charts/drag-selection/drag-selection-range.d.ts +26 -0
  959. package/dist/src/ds/primitives/charts/drag-selection/index.d.ts +25 -0
  960. package/dist/src/ds/primitives/charts/drag-selection/use-drag-selection.d.ts +42 -0
  961. package/dist/src/ds/primitives/menu-item.d.ts +1 -0
  962. package/dist/src/ds/primitives/menu-scroll-area.d.ts +2 -4
  963. package/dist/src/hooks/use-autoscroll.d.ts +5 -1
  964. package/dist/src/utils/date-format.d.ts +2 -0
  965. package/dist/style.css +171 -99
  966. package/dist/{tabbed-container-Dt9F_Lb5.cjs → tabbed-container-CBTb0LgE.cjs} +5 -5
  967. package/dist/{tabbed-container-Dt9F_Lb5.cjs.map → tabbed-container-CBTb0LgE.cjs.map} +1 -1
  968. package/dist/{tabbed-container-DHmygeKi.js → tabbed-container-x2mfK07d.js} +5 -5
  969. package/dist/{tabbed-container-DHmygeKi.js.map → tabbed-container-x2mfK07d.js.map} +1 -1
  970. package/dist/table-pagination-S7ksCNCo.js +30 -0
  971. package/dist/table-pagination-S7ksCNCo.js.map +1 -0
  972. package/dist/table-pagination-lBp5luHp.cjs +35 -0
  973. package/dist/table-pagination-lBp5luHp.cjs.map +1 -0
  974. package/dist/{tabs-content-DJ-d-ICe.cjs → tabs-content-DgR3Hik1.cjs} +2 -2
  975. package/dist/{tabs-content-DJ-d-ICe.cjs.map → tabs-content-DgR3Hik1.cjs.map} +1 -1
  976. package/dist/{tabs-content-CDCk47md.js → tabs-content-cpV6A9c3.js} +2 -2
  977. package/dist/{tabs-content-CDCk47md.js.map → tabs-content-cpV6A9c3.js.map} +1 -1
  978. package/dist/{tabs-tab-BjqT5Xf6.cjs → tabs-tab-Qp3RJ17z.cjs} +2 -2
  979. package/dist/{tabs-tab-BjqT5Xf6.cjs.map → tabs-tab-Qp3RJ17z.cjs.map} +1 -1
  980. package/dist/{tabs-tab-BGD5YdnH.js → tabs-tab-UT1JliwK.js} +2 -2
  981. package/dist/{tabs-tab-BGD5YdnH.js.map → tabs-tab-UT1JliwK.js.map} +1 -1
  982. package/dist/{tool-approval-BKV0gUqO.cjs → tool-approval-6E73C0r6.cjs} +4 -4
  983. package/dist/{tool-approval-BKV0gUqO.cjs.map → tool-approval-6E73C0r6.cjs.map} +1 -1
  984. package/dist/{tool-approval-CveZata3.js → tool-approval-BXlro6fV.js} +4 -4
  985. package/dist/{tool-approval-CveZata3.js.map → tool-approval-BXlro6fV.js.map} +1 -1
  986. package/dist/{tool-call-vlw4UndQ.js → tool-call-CItJ8KLA.js} +122 -5
  987. package/dist/tool-call-CItJ8KLA.js.map +1 -0
  988. package/dist/{tool-call-B7XLocND.cjs → tool-call-Dq9xF3WD.cjs} +127 -4
  989. package/dist/tool-call-Dq9xF3WD.cjs.map +1 -0
  990. package/dist/{tool-card-DYBulq2F.js → tool-card-Bd8weXze.js} +3 -3
  991. package/dist/{tool-card-DYBulq2F.js.map → tool-card-Bd8weXze.js.map} +1 -1
  992. package/dist/{tool-card-DjZAuYpR.cjs → tool-card-o5u4YCR0.cjs} +3 -3
  993. package/dist/{tool-card-DjZAuYpR.cjs.map → tool-card-o5u4YCR0.cjs.map} +1 -1
  994. package/dist/tool-presentation-D2uUj1AB.cjs.map +1 -1
  995. package/dist/tool-presentation-DKfIKLQy.js.map +1 -1
  996. package/dist/{use-workflow-graph-runtime-CBfWZ5Jw.cjs → use-workflow-graph-runtime-DkwQjMEV.cjs} +3 -3
  997. package/dist/{use-workflow-graph-runtime-CBfWZ5Jw.cjs.map → use-workflow-graph-runtime-DkwQjMEV.cjs.map} +1 -1
  998. package/dist/{use-workflow-graph-runtime-BTolLtAq.js → use-workflow-graph-runtime-deTN_q_G.js} +3 -3
  999. package/dist/{use-workflow-graph-runtime-BTolLtAq.js.map → use-workflow-graph-runtime-deTN_q_G.js.map} +1 -1
  1000. package/dist/utils/date-format.cjs.js +15 -0
  1001. package/dist/utils/date-format.cjs.js.map +1 -1
  1002. package/dist/utils/date-format.es.js +15 -1
  1003. package/dist/utils/date-format.es.js.map +1 -1
  1004. package/package.json +9 -9
  1005. package/dist/MetricsLineChart-B9nzVOUV.js.map +0 -1
  1006. package/dist/MetricsLineChart-CkuPY5an.cjs.map +0 -1
  1007. package/dist/MetricsShareList-BY-4i5ng.js +0 -605
  1008. package/dist/MetricsShareList-BY-4i5ng.js.map +0 -1
  1009. package/dist/MetricsShareList-BoXqQZRh.cjs +0 -616
  1010. package/dist/MetricsShareList-BoXqQZRh.cjs.map +0 -1
  1011. package/dist/MetricsStackedBarChart-D-o5Ocsv.js.map +0 -1
  1012. package/dist/MetricsStackedBarChart-EsJMtxYG.cjs.map +0 -1
  1013. package/dist/activity-B4CnOYnh.cjs.map +0 -1
  1014. package/dist/activity-Dc-NsOSz.js.map +0 -1
  1015. package/dist/combobox-BgQrNpCO.js.map +0 -1
  1016. package/dist/combobox-Bi1vnOZt.cjs.map +0 -1
  1017. package/dist/components/MetricsShareList.cjs.js +0 -4
  1018. package/dist/components/MetricsShareList.d.ts +0 -1
  1019. package/dist/components/MetricsShareList.es.js +0 -1
  1020. package/dist/components/MetricsTable.cjs.js.map +0 -1
  1021. package/dist/components/MetricsTable.es.js.map +0 -1
  1022. package/dist/components/fluid-hover-highlight.cjs.js +0 -24
  1023. package/dist/components/fluid-hover-highlight.cjs.js.map +0 -1
  1024. package/dist/components/fluid-hover-highlight.d.ts +0 -1
  1025. package/dist/components/fluid-hover-highlight.es.js +0 -23
  1026. package/dist/components/fluid-hover-highlight.es.js.map +0 -1
  1027. package/dist/context-menu-BHhHokFj.cjs.map +0 -1
  1028. package/dist/context-menu-DuBHimPI.js.map +0 -1
  1029. package/dist/data-list-DjSo5V1C.js.map +0 -1
  1030. package/dist/data-list-v93EXSHc.cjs.map +0 -1
  1031. package/dist/dropdown-menu-C-3jXKWx.cjs.map +0 -1
  1032. package/dist/dropdown-menu-Caic-zHy.js.map +0 -1
  1033. package/dist/filter-bar-chip-B8YhZSsE.js.map +0 -1
  1034. package/dist/filter-bar-chip-BDIsuGcB.cjs.map +0 -1
  1035. package/dist/hooks/use-fluid-hover.cjs.js +0 -351
  1036. package/dist/hooks/use-fluid-hover.cjs.js.map +0 -1
  1037. package/dist/hooks/use-fluid-hover.d.ts +0 -1
  1038. package/dist/hooks/use-fluid-hover.es.js +0 -345
  1039. package/dist/hooks/use-fluid-hover.es.js.map +0 -1
  1040. package/dist/pagination-range-BG8eIaxA.js.map +0 -1
  1041. package/dist/pagination-range-DFqtQ-3z.cjs.map +0 -1
  1042. package/dist/primitives/fluid-menu.cjs.js +0 -136
  1043. package/dist/primitives/fluid-menu.cjs.js.map +0 -1
  1044. package/dist/primitives/fluid-menu.d.ts +0 -1
  1045. package/dist/primitives/fluid-menu.es.js +0 -131
  1046. package/dist/primitives/fluid-menu.es.js.map +0 -1
  1047. package/dist/property-filter-applied-CC8wQtPa.js.map +0 -1
  1048. package/dist/property-filter-applied-I8Iz2j9O.cjs.map +0 -1
  1049. package/dist/scroll-area-CpCAy8S0.cjs.map +0 -1
  1050. package/dist/scroll-area-Dh9UQ7HP.js.map +0 -1
  1051. package/dist/select-D7PoE2w6.js.map +0 -1
  1052. package/dist/select-Dtc73TLB.cjs.map +0 -1
  1053. package/dist/span-payload-primitives-Fi1kSYyM.js.map +0 -1
  1054. package/dist/span-payload-primitives-rxerCV7Y.cjs.map +0 -1
  1055. package/dist/src/components/fluid-hover-highlight.d.ts +0 -6
  1056. package/dist/src/ds/components/MetricsLineChart/clickable-dot.d.ts +0 -8
  1057. package/dist/src/ds/components/MetricsShareList/index.d.ts +0 -3
  1058. package/dist/src/ds/components/MetricsShareList/metrics-share-list-classes.d.ts +0 -8
  1059. package/dist/src/ds/components/MetricsShareList/metrics-share-list-header.d.ts +0 -3
  1060. package/dist/src/ds/components/MetricsShareList/metrics-share-list-row.d.ts +0 -18
  1061. package/dist/src/ds/components/MetricsShareList/metrics-share-list-rows.d.ts +0 -66
  1062. package/dist/src/ds/components/MetricsShareList/metrics-share-list-skeleton.d.ts +0 -12
  1063. package/dist/src/ds/components/MetricsShareList/metrics-share-list-types.d.ts +0 -109
  1064. package/dist/src/ds/components/MetricsShareList/metrics-share-list.d.ts +0 -11
  1065. package/dist/src/ds/components/Pagination/pagination-context.d.ts +0 -10
  1066. package/dist/src/ds/primitives/fluid-menu.d.ts +0 -69
  1067. package/dist/src/hooks/use-fluid-hover.d.ts +0 -145
  1068. package/dist/tool-call-B7XLocND.cjs.map +0 -1
  1069. package/dist/tool-call-vlw4UndQ.js.map +0 -1
  1070. /package/dist/src/ds/components/{MetricsShareList/metrics-share-list-show-more.d.ts → ShareBar/share-bar-show-more.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricsShareList-BoXqQZRh.cjs","names":["cn","_Fragment","InfoTooltip","cn","Txt","ChevronDownIcon","ChevronUpIcon","_Fragment","Skeleton","cn","Txt","cn","useState","_Fragment","Txt"],"sources":["../src/ds/components/MetricsShareList/metrics-share-list-classes.ts","../src/ds/components/MetricsShareList/metrics-share-list-header.tsx","../src/ds/components/MetricsShareList/metrics-share-list-row.tsx","../src/ds/components/MetricsShareList/metrics-share-list-rows.ts","../src/ds/components/MetricsShareList/metrics-share-list-show-more.tsx","../src/ds/components/MetricsShareList/metrics-share-list-skeleton.tsx","../src/ds/components/MetricsShareList/metrics-share-list.tsx"],"sourcesContent":["export const ROW = '-mx-2 flex w-[calc(100%+1rem)] items-center gap-3 rounded-md px-2 py-1 text-left';\nexport const NUM = 'shrink-0 text-right text-body-sm tabular-nums';\n\n/**\n * The label column's width when left-aligned text columns follow it: fixed, so they sit right beside\n * the label and a spacer pushes the number columns to the right edge. Otherwise the label takes the\n * free space. It gives way first when the row is tight, down to `min-w-32`.\n */\nexport const FIXED_LABEL = 'w-56 min-w-32 shrink';\n","import { FIXED_LABEL } from './metrics-share-list-classes';\nimport type {\n MetricsShareListColumn,\n MetricsShareListHeaderProps,\n MetricsShareListSort,\n} from './metrics-share-list-types';\nimport { InfoTooltip } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\ntype HeaderCell = Pick<MetricsShareListColumn, 'label' | 'sortKey' | 'align' | 'description'> & { width: string };\n\n/** Column headers, aligned to the list's columns. Sortable when given `onSortChange`. */\nexport function MetricsShareListHeader({\n columns = [],\n valueLabel,\n valueWidth = 'w-14',\n valueSortKey,\n valueDescription,\n showShare = true,\n showStrip = true,\n sort,\n onSortChange,\n className,\n}: MetricsShareListHeaderProps) {\n const sortable = Boolean(onSortChange);\n const left = columns.filter(c => c.align === 'left').map(c => ({ ...c, width: c.width ?? 'w-16' }));\n const cells: HeaderCell[] = [\n ...columns.filter(c => c.align !== 'left').map(c => ({ ...c, width: c.width ?? 'w-16' })),\n ...(showShare ? [{ label: 'Share', width: 'w-12' }] : []),\n { label: valueLabel, width: valueWidth, sortKey: valueSortKey, description: valueDescription },\n ];\n return (\n <div\n aria-hidden={sortable || cells.some(c => c.description !== undefined) ? undefined : true}\n role={sortable ? 'row' : undefined}\n className={cn(\n 'flex shrink-0 items-center gap-3 text-column text-placeholder',\n left.length > 0 && 'w-full',\n className,\n )}\n >\n {left.length > 0 && (\n <>\n {/* Under the row's swatch and label, so left-aligned headers sit over their cells. */}\n {showStrip && <span aria-hidden className=\"size-2 shrink-0\" />}\n <span aria-hidden className={FIXED_LABEL} />\n {left.map(cell => (\n <HeaderCellView key={cell.label} cell={cell} sort={sort} onSortChange={onSortChange} />\n ))}\n <span aria-hidden className=\"flex-1\" />\n </>\n )}\n {cells.map(cell => (\n <HeaderCellView key={cell.label} cell={cell} sort={sort} onSortChange={onSortChange} />\n ))}\n </div>\n );\n}\n\nfunction HeaderCellView({\n cell: { label, width, sortKey, align = 'right', description },\n sort,\n onSortChange,\n}: {\n cell: HeaderCell;\n sort?: MetricsShareListSort;\n onSortChange?: (sort: MetricsShareListSort) => void;\n}) {\n const left = align === 'left';\n const active = sortKey !== undefined && sort?.key === sortKey;\n const direction = active ? sort.direction : undefined;\n return (\n <span\n role={onSortChange ? 'columnheader' : undefined}\n aria-sort={sortKey && onSortChange ? (direction ?? 'none') : undefined}\n className={cn('flex shrink-0 items-center gap-1', left ? 'justify-start' : 'justify-end', width)}\n >\n <HeaderTitle label={label} left={left} sortKey={sortKey} direction={direction} onSortChange={onSortChange} />\n {description && (\n <InfoTooltip aria-label={`About ${label}`} contentClassName=\"max-w-72\">\n {description}\n </InfoTooltip>\n )}\n </span>\n );\n}\n\n/** The header's text, or a sort button when the column sorts. */\nfunction HeaderTitle({\n label,\n left,\n sortKey,\n direction,\n onSortChange,\n}: {\n label: string;\n left: boolean;\n sortKey?: string;\n direction?: MetricsShareListSort['direction'];\n onSortChange?: (sort: MetricsShareListSort) => void;\n}) {\n if (!sortKey || !onSortChange) return label;\n const next: MetricsShareListSort = {\n key: sortKey,\n direction: direction === 'descending' ? 'ascending' : 'descending',\n };\n return (\n <button\n type=\"button\"\n onClick={() => onSortChange(next)}\n className={cn(\n 'whitespace-nowrap',\n left ? 'text-left' : 'text-right',\n 'hover:text-muted-foreground',\n direction && 'text-muted-foreground',\n )}\n >\n {label}\n {direction && <span aria-hidden>{direction === 'descending' ? ' ↓' : ' ↑'}</span>}\n </button>\n );\n}\n","import type { CSSProperties, ElementType, ReactNode } from 'react';\nimport { FIXED_LABEL, NUM, ROW } from './metrics-share-list-classes';\nimport type { ShownRow } from './metrics-share-list-rows';\nimport type { MetricsShareListColumn } from './metrics-share-list-types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport type ShareListRowProps = {\n row: ShownRow;\n columns: MetricsShareListColumn[];\n valueWidth: string;\n /** The row's share, formatted; no Share column when unset. */\n share?: string;\n /** The colour swatch keying the row to the strip. */\n swatch: boolean;\n highlighted: boolean;\n dimmed: boolean;\n onHover: () => void;\n LinkComponent?: ElementType;\n};\n\n/** One ranked row: swatch, label, extra cells, share and value. */\nexport function ShareListRow({\n row,\n columns,\n valueWidth,\n share,\n swatch,\n highlighted,\n dimmed,\n onHover,\n LinkComponent,\n}: ShareListRowProps) {\n const hasLeft = columns.some(c => c.align === 'left');\n const className = cn(\n ROW,\n 'transition-[background-color,opacity] duration-150',\n highlighted && 'bg-fill-subtle',\n (row.href || row.onClick) && 'hover:bg-fill-subtle',\n );\n return (\n <li>\n <RowShell\n row={row}\n LinkComponent={LinkComponent}\n className={className}\n style={{ opacity: dimmed ? 0.5 : 1 }}\n onMouseEnter={onHover}\n >\n {swatch && (\n <span\n className=\"size-2 shrink-0 rounded-[2px]\"\n style={{ backgroundColor: row.paint.color, opacity: row.paint.alpha }}\n />\n )}\n <RowLabel row={row} fixed={hasLeft} />\n {columns.map((c, i) =>\n c.align === 'left' ? (\n <span key={c.label} className={cn('min-w-0 shrink-0 truncate', c.width ?? 'w-16')}>\n <Txt as=\"span\" variant=\"body-sm\" tone=\"muted\">\n {row.cells?.[i]}\n </Txt>\n </span>\n ) : null,\n )}\n {hasLeft && <span aria-hidden className=\"flex-1\" />}\n {columns.map((c, i) =>\n c.align === 'left' ? null : (\n <span\n key={c.label}\n className={cn(NUM, c.emphasis ? 'text-foreground' : 'text-muted-foreground', c.width ?? 'w-16')}\n >\n {row.cells?.[i]}\n </span>\n ),\n )}\n {share !== undefined && <span className={cn(NUM, 'w-12 text-muted-foreground')}>{share}</span>}\n <span className={cn(NUM, 'text-foreground', valueWidth)}>{row.value}</span>\n </RowShell>\n </li>\n );\n}\n\n/** A link for `href` rows, a button for `onClick` rows, a plain row otherwise. */\nfunction RowShell({\n row,\n LinkComponent,\n ...props\n}: {\n row: ShownRow;\n LinkComponent?: ElementType;\n className: string;\n style: CSSProperties;\n onMouseEnter: () => void;\n children: ReactNode;\n}) {\n if (row.href) {\n const Anchor = LinkComponent ?? 'a';\n return <Anchor href={row.href} {...props} />;\n }\n if (row.onClick) return <button type=\"button\" onClick={row.onClick} {...props} />;\n return <div {...props} />;\n}\n\n/** A block line box, like the skeleton's, so loaded and loading rows share a height. */\nfunction RowLabel({ row, fixed }: { row: ShownRow; fixed: boolean }) {\n const width = fixed ? FIXED_LABEL : 'flex-1';\n if (typeof row.label !== 'string') {\n return (\n <span className={cn('flex min-w-0', width)} title={row.title}>\n {row.label}\n </span>\n );\n }\n return (\n <span className={cn('min-w-0 truncate', width)} title={row.title ?? row.label}>\n <Txt as=\"span\" variant=\"body-sm\" tone=\"ink\">\n {row.label}\n </Txt>\n </span>\n );\n}\n","import type { MetricsShareListProps, MetricsShareListRow } from './metrics-share-list-types';\n\n/** A row's color and how strongly it shows: fainter rows fade toward the card, not to gray. */\nexport type Paint = { color: string; alpha: number };\n\n/** A listed row with its color and the strip segment it highlights. */\nexport type ShownRow = MetricsShareListRow & { paint: Paint; segment: string };\n\nexport type StripSegment = { key: string; paint: Paint; /** flex-grow, in percent of the strip. */ grow: number };\n\ntype Palette = NonNullable<MetricsShareListProps['palette']>;\n\n/** Brand green, toned down for large fills. Theme token: tuned for dark and light. */\nexport const DEFAULT_COLOR = 'var(--chart-share-1)';\n/**\n * Cool hues for long lists: green, sky, violet, teal, indigo, ordered so neighbours sit far\n * apart on the wheel; no warning amber or error red. The first row's color leads.\n */\nconst HUES = [1, 2, 3, 4, 5].map(i => `var(--chart-share-${i})`);\n/** The palette after a custom lead color: violet, teal, sky, indigo, then green last. */\nconst CUSTOM_LEAD_HUES = [3, 4, 2, 5, 1].map(i => `var(--chart-share-${i})`);\nconst SHADES = [1, 0.7, 0.48, 0.32, 0.2, 0.14];\nconst REST: Paint = { color: 'var(--chart-share-rest)', alpha: 1 };\n/** Rows with their own strip segment; past that, segments get too thin and share the gray one. */\nconst SEGMENTS = 50;\nexport const REST_KEY = '__rest';\n\nfunction rowColors(base: string, count: number, palette: Palette): Paint[] {\n if (palette === 'hues') {\n // A lead color from the palette moves to the front. Any other color leads the violet and teal\n // hues first: custom leads are usually green or blue, which sit next to the palette's own\n // green and sky.\n const hues = HUES.includes(base) ? [base, ...HUES.filter(h => h !== base)] : [base, ...CUSTOM_LEAD_HUES];\n return Array.from({ length: count }, (_, i) => ({\n color: hues[i % hues.length] ?? base,\n alpha: [1, 0.55, 0.3][Math.floor(i / hues.length)] ?? 0.2,\n }));\n }\n return Array.from({ length: count }, (_, i) => ({ color: base, alpha: SHADES[i] ?? 0.1 }));\n}\n\nexport const sumShares = (rows: MetricsShareListRow[]) => rows.reduce((sum, r) => sum + Math.max(r.share, 0), 0);\n\n/**\n * Largest first, so the strongest color is always the biggest share. A missing, negative or\n * infinite share counts as zero, so one bad row can't break the order or the percentages.\n */\nexport function rankRows(rows: MetricsShareListRow[]): MetricsShareListRow[] {\n return rows\n .map(r => (Number.isFinite(r.share) && r.share > 0 ? r : { ...r, share: 0 }))\n .toSorted((a, b) => b.share - a.share);\n}\n\ntype Colors = { color: string; palette: Palette };\n\n/** The top rows, then one \"Other\" row folding the tail, unless that would hide a single row. */\nexport function foldRows(\n ranked: MetricsShareListRow[],\n { limit, other, color, palette, sort }: Colors & Pick<MetricsShareListProps, 'other' | 'sort'> & { limit: number },\n) {\n if (ranked.length <= limit + 1) {\n const strip = paintRows(ranked, color, palette);\n return { shown: sortRows(strip, sort), strip, rest: [] };\n }\n const rest = ranked.slice(limit);\n const folded = other?.(rest);\n const otherRow: ShownRow = {\n key: REST_KEY,\n label: `Other (${rest.length})`,\n share: sumShares(rest),\n value: folded?.value,\n cells: folded?.cells,\n paint: REST,\n segment: REST_KEY,\n };\n const strip = paintRows(ranked.slice(0, limit), color, palette);\n return { shown: [...sortRows(strip, sort), otherRow], strip, rest };\n}\n\nfunction paintRows(rows: MetricsShareListRow[], color: string, palette: Palette): ShownRow[] {\n const colors = rowColors(color, rows.length, palette);\n return rows.map((r, i) => ({ ...r, paint: ownPaint(r) ?? colors[i] ?? REST, segment: r.key }));\n}\n\nconst ownPaint = (row: MetricsShareListRow): Paint | undefined =>\n row.color ? { color: row.color, alpha: 1 } : undefined;\n\n/**\n * Rows in the order of `sort`; rows without a value for it go last either way, and ties keep\n * their share order. No sort keeps the share order.\n */\nexport function sortRows<T extends MetricsShareListRow>(rows: T[], sort?: MetricsShareListProps['sort']): T[] {\n if (!sort) return rows;\n const sign = sort.direction === 'ascending' ? 1 : -1;\n const valueOf = (row: T) => {\n const v = row.sortValues?.[sort.key];\n return typeof v === 'number' && Number.isFinite(v) ? v : undefined;\n };\n return rows.toSorted((a, b) => {\n const x = valueOf(a);\n const y = valueOf(b);\n if (x === undefined || y === undefined) return x === y ? 0 : x === undefined ? 1 : -1;\n return (x - y) * sign;\n });\n}\n\n/**\n * The first `count` rows in `sort` order, plus the active row when it falls past them. Colours\n * and the strip follow share: the top rows by share have their own segments, and rows past the\n * strip's own segments are gray and share its \"everything else\" segment.\n */\nexport function pageRows(\n ranked: MetricsShareListRow[],\n {\n count,\n activeKey,\n color,\n palette,\n sort,\n }: Colors & Pick<MetricsShareListProps, 'sort'> & { count: number; activeKey?: string },\n) {\n const own = Math.min(count, ranked.length, SEGMENTS);\n const colors = rowColors(color, own, palette);\n const rank = new Map(ranked.map((r, i) => [r.key, i]));\n const paint = (r: MetricsShareListRow): ShownRow => {\n const i = rank.get(r.key) ?? ranked.length;\n return i < own\n ? { ...r, paint: ownPaint(r) ?? colors[i] ?? REST, segment: r.key }\n : { ...r, paint: REST, segment: REST_KEY };\n };\n return {\n shown: listedRows(sortRows(ranked, sort), count, activeKey).map(paint),\n strip: ranked.slice(0, own).map(paint),\n rest: ranked.slice(own),\n };\n}\n\nfunction listedRows(ordered: MetricsShareListRow[], count: number, activeKey?: string) {\n const listed = ordered.slice(0, count);\n const active = activeKey ? ordered.findIndex(r => r.key === activeKey) : -1;\n const pinned = active >= count ? ordered[active] : undefined;\n return pinned ? [...listed, pinned] : listed;\n}\n\n/** One segment per row with its own color, then everything else in one gray segment. */\nexport function stripSegments(strip: ShownRow[], rest: MetricsShareListRow[]): StripSegment[] {\n const own = strip.filter(r => r.segment !== REST_KEY).map(r => ({ key: r.key, share: r.share, paint: r.paint }));\n const gray = rest.length ? [{ key: REST_KEY, share: sumShares(rest), paint: REST }] : [];\n const segments = [...own, ...gray].filter(s => s.share > 0);\n // Grow factors in percent: flex-grow values that sum below 1 (shares like $0.09 of cost)\n // would leave the rest of the strip empty.\n const total = segments.reduce((sum, s) => sum + s.share, 0);\n return segments.map(s => ({ key: s.key, paint: s.paint, grow: (s.share / total) * 100 }));\n}\n\n/** The strip segment a hovered row (or segment) lights up. */\nexport function hoveredSegment(shown: ShownRow[], hover?: string) {\n if (hover === undefined) return undefined;\n return shown.find(r => r.key === hover)?.segment ?? hover;\n}\n\n/** Dim every segment but the lit one, while one is. */\nexport const isSegmentDimmed = (key: string, lit?: string) => lit !== undefined && lit !== key;\n\n/** Dim every row but the hovered one; hovering the gray segment keeps all its rows lit. */\nexport function isRowDimmed(row: ShownRow, hover?: string) {\n if (hover === undefined || hover === row.key) return false;\n return !(hover === REST_KEY && row.segment === REST_KEY);\n}\n\nexport const fmtShare = (n: number, total: number) => {\n const r = n / (total || 1);\n if (!(r > 0)) return '0%';\n if (r < 0.001) return '<0.1%';\n return `${(r * 100).toFixed(r < 0.1 ? 1 : 0)}%`;\n};\n","import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\n/** The list's last row: pages more rows in, or collapses back to the top rows. */\nexport function ShowMore({\n shown,\n total,\n limit,\n pageSize,\n onMore,\n onLess,\n}: {\n shown: number;\n total: number;\n limit: number;\n pageSize: number;\n onMore: () => void;\n onLess: () => void;\n}) {\n if (total <= limit) return null;\n const left = total - shown;\n const button =\n 'flex items-center gap-1.5 rounded-md px-2 py-1 text-body-sm font-medium text-muted-foreground transition-colors duration-150 hover:bg-fill-subtle hover:text-foreground';\n const n = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n return (\n <li className=\"-mx-2 flex items-center gap-1\">\n {left > 0 && (\n <button type=\"button\" onClick={onMore} className={button}>\n <ChevronDownIcon className=\"size-3.5 shrink-0\" />\n Show {Math.min(left, pageSize)} more\n </button>\n )}\n {shown > limit && (\n <button type=\"button\" onClick={onLess} className={button}>\n <ChevronUpIcon className=\"size-3.5 shrink-0\" />\n Show top {limit}\n </button>\n )}\n {left > 0 && (\n <span className=\"ml-auto pr-2 text-body-sm text-placeholder tabular-nums\">\n {n.format(shown)} of {n.format(total)}\n </span>\n )}\n </li>\n );\n}\n","import type { ReactNode } from 'react';\nimport { FIXED_LABEL, NUM, ROW } from './metrics-share-list-classes';\nimport type { MetricsShareListColumn } from './metrics-share-list-types';\nimport { Skeleton } from '@/ds/components/Skeleton';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst LABEL_WIDTHS = ['w-32', 'w-24', 'w-36', 'w-20', 'w-28'];\n\n/** A skeleton bar centred in a number or label cell's line box. */\nfunction Bar({ className }: { className: string }) {\n return (\n <>\n {'​'}\n <Skeleton className={cn('absolute top-1/2 h-3.5 -translate-y-1/2', className)} />\n </>\n );\n}\n\n/** The list while loading, in the real rows' markup (line boxes, paddings, columns). */\nexport function ShareListSkeleton({\n rows,\n columns,\n valueWidth,\n showShare,\n showStrip,\n header,\n}: {\n rows: number;\n columns: MetricsShareListColumn[];\n valueWidth: string;\n showShare: boolean;\n showStrip: boolean;\n /** Column headers between the strip and the rows, when the list puts them there. */\n header?: ReactNode;\n}) {\n const left = columns.filter(c => c.align === 'left');\n const right = columns.filter(c => c.align !== 'left');\n const hasLeft = left.length > 0;\n return (\n <>\n {showStrip && (\n <div className=\"flex h-2\">\n <Skeleton className=\"size-full rounded-full\" />\n </div>\n )}\n {header}\n <ul className=\"grid min-w-0 grid-cols-1 gap-0.5\" aria-busy>\n {Array.from({ length: rows }, (_, i) => (\n <li key={i} className={ROW}>\n {showStrip && <Skeleton className=\"size-2 shrink-0 rounded-[2px]\" />}\n <span className={cn('min-w-0', hasLeft ? FIXED_LABEL : 'flex-1')}>\n <Txt as=\"span\" variant=\"body-sm\" className=\"relative\">\n <Bar className={cn('left-0', LABEL_WIDTHS[i % LABEL_WIDTHS.length])} />\n </Txt>\n </span>\n {left.map(c => (\n <span key={c.label} className={cn(NUM, 'relative', c.width ?? 'w-16')}>\n <Bar className=\"left-0 w-16\" />\n </span>\n ))}\n {hasLeft && <span aria-hidden className=\"flex-1\" />}\n {right.map(c => (\n <span key={c.label} className={cn(NUM, 'relative', c.width ?? 'w-16')}>\n <Bar className=\"right-0 w-10\" />\n </span>\n ))}\n {showShare && (\n <span className={cn(NUM, 'relative w-12')}>\n <Bar className=\"right-0 w-9\" />\n </span>\n )}\n <span className={cn(NUM, 'relative', valueWidth)}>\n <Bar className=\"right-0 w-12\" />\n </span>\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { MetricsShareListHeader } from './metrics-share-list-header';\nimport { ShareListRow } from './metrics-share-list-row';\nimport {\n DEFAULT_COLOR,\n fmtShare,\n foldRows,\n hoveredSegment,\n isRowDimmed,\n isSegmentDimmed,\n pageRows,\n rankRows,\n stripSegments,\n sumShares,\n} from './metrics-share-list-rows';\nimport { ShowMore } from './metrics-share-list-show-more';\nimport { ShareListSkeleton } from './metrics-share-list-skeleton';\nimport type { MetricsShareListProps } from './metrics-share-list-types';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\n/**\n * Each row's share of a total: one 100% strip on top, the ranked rows below with their share\n * and values. Hovering a segment or a row highlights the pair; every segment has its row, so\n * there is no tooltip. A non-zero share always gets a visible segment; a zero gets none.\n */\nexport function MetricsShareList({\n showHeader = true,\n headerPlacement = 'top',\n className,\n ...props\n}: MetricsShareListProps) {\n const {\n columns = [],\n valueLabel,\n valueWidth = 'w-14',\n valueSortKey,\n valueDescription,\n showShare = true,\n showStrip = true,\n sort,\n onSortChange,\n } = props;\n const belowStrip = headerPlacement === 'below-strip';\n const header = showHeader && (\n <div className={cn('flex justify-end', belowStrip && 'pt-3 pb-0.5')}>\n <MetricsShareListHeader\n columns={columns}\n valueLabel={valueLabel}\n valueWidth={valueWidth}\n valueSortKey={valueSortKey}\n valueDescription={valueDescription}\n showShare={showShare}\n showStrip={showStrip}\n sort={sort}\n onSortChange={onSortChange}\n />\n </div>\n );\n return (\n <div className={cn('grid grid-cols-1', belowStrip ? 'gap-0' : 'gap-4', className)}>\n {!belowStrip && header}\n <ShareListBody {...props} header={belowStrip ? header : undefined} />\n </div>\n );\n}\n\n/** Below the header: a skeleton while loading, the empty message, or the strip and its rows. */\nfunction ShareListBody({\n rows,\n columns = [],\n valueLabel,\n valueWidth = 'w-14',\n palette = 'shades',\n color = DEFAULT_COLOR,\n limit = 5,\n overflow = 'other',\n pageSize = 50,\n other,\n activeKey,\n emptyState = 'No data in this range.',\n isLoading = false,\n LinkComponent,\n showShare = true,\n showStrip = true,\n sort,\n header,\n}: Omit<MetricsShareListProps, 'showHeader' | 'headerPlacement' | 'className'> & {\n /** Column headers between the strip and the rows (`headerPlacement=\"below-strip\"`). */\n header?: ReactNode;\n}) {\n const [hover, setHover] = useState<string>();\n // Extra pages opened with \"Show more\", so the row count follows `limit` when it changes.\n const [pages, setPages] = useState(0);\n const count = limit + pages * pageSize;\n\n if (isLoading) {\n return (\n <ShareListSkeleton\n rows={overflow === 'other' ? limit + 1 : limit}\n columns={columns}\n valueWidth={valueWidth}\n showShare={showShare}\n showStrip={showStrip}\n header={header}\n />\n );\n }\n\n const ranked = rankRows(rows);\n if (ranked.length === 0) {\n return (\n <>\n <Txt variant=\"body-sm\" tone=\"muted\" className=\"py-6 text-center\">\n {emptyState}\n </Txt>\n {header}\n </>\n );\n }\n\n const total = sumShares(ranked);\n const paging = overflow === 'more';\n const { shown, strip, rest } = paging\n ? pageRows(ranked, { count, activeKey, color, palette, sort })\n : foldRows(ranked, { limit, other, color, palette, sort });\n const segments = stripSegments(strip, rest);\n const litSegment = hoveredSegment(shown, hover);\n const clearHover = () => setHover(undefined);\n\n return (\n <>\n {showStrip && (\n <div className=\"flex h-2 gap-0.5\" onMouseLeave={clearHover}>\n {segments.map(s => (\n <span\n key={s.key}\n data-testid=\"metrics-share-segment\"\n onMouseEnter={() => setHover(s.key)}\n className=\"h-full min-w-[3px] transition-opacity duration-150 first:rounded-l-full last:rounded-r-full\"\n style={{\n flex: `${s.grow} 1 0`,\n backgroundColor: s.paint.color,\n opacity: s.paint.alpha * (isSegmentDimmed(s.key, litSegment) ? 0.3 : 1),\n }}\n />\n ))}\n </div>\n )}\n {header}\n <ul className=\"grid min-w-0 grid-cols-1 gap-0.5\" onMouseLeave={clearHover}>\n {shown.map(r => (\n <ShareListRow\n key={r.key}\n row={r}\n columns={columns}\n valueWidth={valueWidth}\n share={showShare ? fmtShare(r.share, total) : undefined}\n swatch={showStrip}\n highlighted={hover === r.key || activeKey === r.key}\n dimmed={isRowDimmed(r, hover)}\n onHover={() => setHover(r.key)}\n LinkComponent={LinkComponent}\n />\n ))}\n {paging && (\n <ShowMore\n shown={Math.min(count, ranked.length)}\n total={ranked.length}\n limit={limit}\n pageSize={pageSize}\n onMore={() => setPages(p => p + 1)}\n onLess={() => setPages(0)}\n />\n )}\n </ul>\n </>\n );\n}\n\nMetricsShareList.Header = MetricsShareListHeader;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricsStackedBarChart-D-o5Ocsv.js","names":["_Fragment"],"sources":["../src/ds/components/MetricsStackedBarChart/metrics-stacked-bar-chart.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Bar, CartesianGrid, ComposedChart, LabelList, Line, Rectangle, ReferenceLine, Tooltip } from 'recharts';\nimport type { LabelProps } from 'recharts';\nimport { ChartSkeleton } from '@/ds/components/ChartSkeleton';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChartLegend, MetricsLineChartTooltip } from '@/ds/components/MetricsLineChart';\nimport { CHART_GRID_PROPS, useChartSize } from '@/ds/primitives/chart-axes';\nimport type { ChartXLabels } from '@/ds/primitives/chart-axes';\nimport { singleBarBox, stackedSegmentBox } from '@/ds/primitives/chart-column-layout';\nimport type { SegmentBox } from '@/ds/primitives/chart-column-layout';\nimport {\n CHART_TICK,\n Y_AXIS_WIDTH,\n compactNumber,\n dataMax,\n isWholeData,\n timeXAxis,\n valueYAxis,\n} from '@/ds/primitives/chart-frame';\nimport type { ChartHeight } from '@/ds/primitives/chart-frame';\nimport { CHART_AXIS_FONT_SIZE, CHART_MARGIN } from '@/ds/primitives/chart-layout';\nimport { ChartPlot } from '@/ds/primitives/chart-plot';\nimport { useChartDefsId } from '@/ds/primitives/use-chart-defs-id';\nimport { cn } from '@/lib/utils';\n\n/** Corner radius of every segment; thin segments scale it down so they stay crisp rectangles. */\nconst RADIUS = 2;\n/** Pixels between stacked segments, so neighbouring segments read as separate blocks. */\nconst SEGMENT_GAP = 2;\n/** Opacity at the base of a segment's gradient (the top is fully opaque). */\nconst GRADIENT_BASE = 0.75;\n/** Single-series bars: translucent body under a solid cap that marks the value. */\nconst CAP_BODY = 0.55;\nconst CAP_HEIGHT = 3;\n/** Opacity of the other columns while one is hovered. */\nconst DIMMED = 0.3;\nconst COLUMN_LABEL_SPACE = 16;\n\ntype SegmentProps = {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n index?: number;\n payload?: Record<string, unknown>;\n};\n\nfunction segmentShape({\n fill,\n color,\n capped,\n keys,\n dataKey,\n}: {\n fill: string;\n color: string;\n capped: boolean;\n /** The column's data keys, bottom to top. */\n keys: string[];\n dataKey: string;\n}) {\n return function Segment({ x = 0, width = 0, index, payload, ...geo }: SegmentProps) {\n const values = keys.map(k => Number(payload?.[k]) || 0);\n const self = keys.indexOf(dataKey);\n const box = { y: geo.y ?? 0, height: Math.max(geo.height ?? 0, 0) };\n // Every non-zero value gets a few readable pixels; zeros draw nothing.\n const laid =\n keys.length > 1\n ? stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })\n : singleBarBox(values[self] ?? 0, box);\n if (!laid) return <g />;\n const { y, height: h } = laid;\n const radius = Math.min(RADIUS, Math.floor(h / 3));\n // Dimming is a CSS rule keyed on `data-bucket` (see `HoverDim`), so hovering re-renders no bars.\n const bucket = { 'data-bucket': index, style: { transition: 'opacity 150ms ease-out' } };\n\n if (capped) {\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={color} fillOpacity={CAP_BODY} />\n <Rectangle x={x} y={y} width={width} height={Math.min(CAP_HEIGHT, h)} radius={radius} fill={color} />\n </g>\n );\n }\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={fill} />\n </g>\n );\n };\n}\n\n/**\n * Dims every column but the hovered one. Its own tiny state, so a hover only re-renders this\n * <style> tag: with hundreds of buckets, re-rendering the bars on each move froze the pointer.\n */\nfunction HoverDim({ scope, setter }: { scope: string; setter: { current: (index: number | undefined) => void } }) {\n const [hovered, setHovered] = useState<number>();\n useLayoutEffect(() => {\n setter.current = setHovered;\n }, [setter]);\n if (hovered === undefined) return null;\n return (\n <style>{`[data-chart-scope=\"${scope}\"] [data-bucket]:not([data-bucket=\"${hovered}\"]){opacity:${DIMMED}}`}</style>\n );\n}\n\n/** A line drawn over the bars on its own scale, e.g. average wake time over cold starts. */\nexport type MetricsStackedBarChartOverlay = MetricsLineChartSeries & {\n valueFormatter?: (value: number) => string;\n};\n\nexport type MetricsStackedBarChartProps = {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n /** Pixels, or `fill` to grow with the parent (a flex column, e.g. a card's content). */\n height?: ChartHeight;\n yDomain?: [number, number];\n /** Formats tooltip values, and y-axis ticks unless `axisFormatter` is set. */\n valueFormatter?: (value: number) => string;\n /** Formats y-axis ticks, when they need a shorter form than the tooltip. */\n axisFormatter?: (value: number) => string;\n showLegend?: boolean;\n referenceLine?: { value: number; label: string; color: string };\n /**\n * `gradient`: segments fade gently toward the base. Reads best for stacks.\n * `capped`: a translucent body under a solid cap that marks the value. Reads best for one\n * value per column.\n */\n variant?: 'gradient' | 'capped';\n /**\n * Set to `false` to drop the y-axis labels and let the plot span the card. The gridlines stay\n * for relative scale; exact values come from the tooltip and the card's summary.\n */\n showYAxis?: boolean;\n /** Adds a \"Total\" row (the column's height) to the tooltip. Defaults to on for stacks. */\n showTotal?: boolean;\n /** Row field printed under the x-axis. */\n xKey?: string;\n /** Row field with the bucket's start time (ms), which places labels on round clock times. */\n timestampKey?: string;\n /** `auto` fits as many labels as the width allows; `edges` prints only the first and last. */\n xLabels?: ChartXLabels;\n /** Row field for the tooltip heading (e.g. a longer date); defaults to the x-axis label. */\n tooltipLabelKey?: string;\n columnLabelKey?: string;\n /** Click a column (e.g. to open its traces); the plot shows a pointer cursor. */\n onBucketClick?: (row: Record<string, unknown>, index: number) => void;\n /** One dashed line over the bars, on its own hidden scale (e.g. a duration over counts). */\n overlay?: MetricsStackedBarChartOverlay;\n /** Show a ghost of the chart while data loads, in the chart's own footprint. */\n isLoading?: boolean;\n className?: string;\n};\n\nexport function MetricsStackedBarChart(props: MetricsStackedBarChartProps) {\n const { data, series, overlay, height = 210, showLegend = true, isLoading = false, className } = props;\n const id = useChartDefsId();\n const root = cn(height === 'fill' && 'flex min-h-0 flex-1 flex-col', className);\n const legend = overlay ? [...series, { ...overlay, dashed: true }] : series;\n // The legend stays while loading: it comes from the series, not the data.\n return (\n <div className={root} data-chart-scope={id}>\n {showLegend && <MetricsLineChartLegend data={isLoading ? undefined : data} series={legend} className=\"mb-4\" />}\n {isLoading ? <ChartSkeleton kind=\"bar\" height={height} /> : <BarPlot {...props} id={id} />}\n </div>\n );\n}\n\n/** The plot itself, once the data is in; `id` scopes its gradients and hover rule. */\nfunction BarPlot({\n data,\n series,\n height = 210,\n yDomain,\n valueFormatter,\n axisFormatter,\n referenceLine,\n variant = 'gradient',\n showYAxis = true,\n showTotal = series.length > 1,\n xKey = 'time',\n timestampKey = 'tsMs',\n xLabels = 'auto',\n tooltipLabelKey,\n columnLabelKey,\n onBucketClick,\n overlay,\n id,\n}: MetricsStackedBarChartProps & { id: string }) {\n const setHovered = useRef<(index: number | undefined) => void>(() => {});\n const { size, onResize, ref } = useChartSize();\n\n const keyList = series.map(s => s.dataKey).join('\\u0000');\n const colorList = series.map(s => s.color).join('\\u0000');\n // Stable shapes, so Recharts doesn't re-render every bar when the parent re-renders.\n const shapes = useMemo(() => {\n const keys = keyList.split('\\u0000');\n const colors = colorList.split('\\u0000');\n return keys.map((dataKey, i) =>\n segmentShape({\n fill: `url(#${id}-bar-${i})`,\n color: colors[i] ?? '',\n capped: variant === 'capped',\n keys,\n dataKey,\n }),\n );\n }, [keyList, colorList, variant, id]);\n\n const format = valueFormatter ?? compactNumber.format;\n const plotWidth = size.width - (showYAxis ? Y_AXIS_WIDTH : 0);\n const margin = columnLabelKey ? { ...CHART_MARGIN, top: CHART_MARGIN.top + COLUMN_LABEL_SPACE } : CHART_MARGIN;\n\n return (\n <>\n <HoverDim scope={id} setter={setHovered} />\n <ChartPlot height={height} plotRef={ref} onResize={onResize} clickable={!!onBucketClick}>\n <ComposedChart\n data={data}\n margin={margin}\n onMouseMove={state => {\n const index = state?.activeTooltipIndex;\n setHovered.current(index === undefined || index === null ? undefined : Number(index));\n }}\n onMouseLeave={() => setHovered.current(undefined)}\n onClick={state => {\n const i = state?.activeTooltipIndex;\n const row = i === undefined || i === null ? undefined : data[Number(i)];\n if (onBucketClick && row) onBucketClick(row, Number(i));\n }}\n >\n <defs>\n {series.map((s, i) => (\n <linearGradient key={s.dataKey} id={`${id}-bar-${i}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={s.color} stopOpacity={1} />\n <stop offset=\"100%\" stopColor={s.color} stopOpacity={GRADIENT_BASE} />\n </linearGradient>\n ))}\n </defs>\n <CartesianGrid {...CHART_GRID_PROPS} />\n {timeXAxis({ data, xKey, timestampKey, xLabels, plotWidth })}\n {valueYAxis({\n show: showYAxis,\n size,\n formatter: axisFormatter ?? format,\n domain: yDomain,\n // A reference line above the bars stays on the axis.\n max: Math.max(\n dataMax(\n data,\n series.map(s => s.dataKey),\n true,\n ),\n referenceLine?.value ?? 0,\n ),\n integer: isWholeData(\n data,\n series.map(s => s.dataKey),\n ),\n })}\n {overlay &&\n valueYAxis({\n id: 'overlay',\n show: false,\n size,\n formatter: overlay.valueFormatter ?? compactNumber.format,\n max: dataMax(data, [overlay.dataKey]),\n integer: isWholeData(data, [overlay.dataKey]),\n right: true,\n })}\n <Tooltip\n cursor={false}\n content={\n <MetricsLineChartTooltip\n formatValue={format}\n showTotal={showTotal && !overlay}\n labelKey={tooltipLabelKey}\n formatByKey={overlay?.valueFormatter ? { [overlay.dataKey]: overlay.valueFormatter } : undefined}\n />\n }\n />\n {series.map((s, i) => (\n <Bar\n key={s.dataKey}\n dataKey={s.dataKey}\n name={s.label}\n stackId=\"1\"\n fill={s.color}\n maxBarSize={28}\n isAnimationActive={false}\n shape={shapes[i]}\n >\n {columnLabelKey && (\n <LabelList\n dataKey={columnLabelKey}\n content={(props: LabelProps) => (\n <ColumnLabel\n {...props}\n row={data[Number(props.index)]}\n keys={series.map(({ dataKey }) => dataKey)}\n self={i}\n color={s.color}\n />\n )}\n />\n )}\n </Bar>\n ))}\n {overlay && (\n <Line\n yAxisId=\"overlay\"\n type=\"monotone\"\n dataKey={overlay.dataKey}\n name={overlay.label}\n stroke={overlay.color}\n strokeWidth={1.75}\n strokeDasharray=\"4 3\"\n dot={false}\n activeDot={{ r: 3.5, fill: overlay.color, stroke: 'var(--background)', strokeWidth: 2 }}\n isAnimationActive={false}\n connectNulls\n />\n )}\n {referenceLine && (\n <ReferenceLine\n y={referenceLine.value}\n ifOverflow=\"extendDomain\"\n stroke={referenceLine.color}\n strokeDasharray=\"4 4\"\n label={{ value: referenceLine.label, position: 'insideTopLeft', ...CHART_TICK }}\n />\n )}\n </ComposedChart>\n </ChartPlot>\n </>\n );\n}\n\ntype ColumnLabelProps = LabelProps & {\n row: MetricsStackedBarChartProps['data'][number] | undefined;\n keys: string[];\n self: number;\n color: string;\n};\n\nfunction paintedTop(values: number[], self: number, box: SegmentBox) {\n if (values.length > 1) return stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })?.y;\n return singleBarBox(values[self] ?? 0, box)?.y;\n}\n\nfunction ColumnLabel({ x, y, width, height, value, row, keys, self, color }: ColumnLabelProps) {\n if (value === undefined || value === null || value === '') return null;\n const values = keys.map(key => Number(row?.[key]) || 0);\n const topmost = values.findLastIndex(v => v > 0);\n if (self !== (topmost === -1 ? keys.length - 1 : topmost)) return null;\n const top = paintedTop(values, self, { y: Number(y), height: Math.max(Number(height), 0) }) ?? Number(y);\n return (\n <text\n x={Number(x) + Number(width) / 2}\n y={top - 6}\n textAnchor=\"middle\"\n fontSize={CHART_AXIS_FONT_SIZE}\n fill={color}\n className=\"tabular-nums\"\n >\n {String(value)}\n </text>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricsStackedBarChart-EsJMtxYG.cjs","names":["stackedSegmentBox","singleBarBox","Rectangle","useState","useChartDefsId","cn","MetricsLineChartLegend","ChartSkeleton","useRef","useChartSize","useMemo","compactNumber","CHART_MARGIN","_Fragment","ChartPlot","ComposedChart","CartesianGrid","CHART_GRID_PROPS","timeXAxis","valueYAxis","dataMax","isWholeData","Tooltip","MetricsLineChartTooltip","Bar","LabelList","Line","ReferenceLine","CHART_TICK"],"sources":["../src/ds/components/MetricsStackedBarChart/metrics-stacked-bar-chart.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Bar, CartesianGrid, ComposedChart, LabelList, Line, Rectangle, ReferenceLine, Tooltip } from 'recharts';\nimport type { LabelProps } from 'recharts';\nimport { ChartSkeleton } from '@/ds/components/ChartSkeleton';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChartLegend, MetricsLineChartTooltip } from '@/ds/components/MetricsLineChart';\nimport { CHART_GRID_PROPS, useChartSize } from '@/ds/primitives/chart-axes';\nimport type { ChartXLabels } from '@/ds/primitives/chart-axes';\nimport { singleBarBox, stackedSegmentBox } from '@/ds/primitives/chart-column-layout';\nimport type { SegmentBox } from '@/ds/primitives/chart-column-layout';\nimport {\n CHART_TICK,\n Y_AXIS_WIDTH,\n compactNumber,\n dataMax,\n isWholeData,\n timeXAxis,\n valueYAxis,\n} from '@/ds/primitives/chart-frame';\nimport type { ChartHeight } from '@/ds/primitives/chart-frame';\nimport { CHART_AXIS_FONT_SIZE, CHART_MARGIN } from '@/ds/primitives/chart-layout';\nimport { ChartPlot } from '@/ds/primitives/chart-plot';\nimport { useChartDefsId } from '@/ds/primitives/use-chart-defs-id';\nimport { cn } from '@/lib/utils';\n\n/** Corner radius of every segment; thin segments scale it down so they stay crisp rectangles. */\nconst RADIUS = 2;\n/** Pixels between stacked segments, so neighbouring segments read as separate blocks. */\nconst SEGMENT_GAP = 2;\n/** Opacity at the base of a segment's gradient (the top is fully opaque). */\nconst GRADIENT_BASE = 0.75;\n/** Single-series bars: translucent body under a solid cap that marks the value. */\nconst CAP_BODY = 0.55;\nconst CAP_HEIGHT = 3;\n/** Opacity of the other columns while one is hovered. */\nconst DIMMED = 0.3;\nconst COLUMN_LABEL_SPACE = 16;\n\ntype SegmentProps = {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n index?: number;\n payload?: Record<string, unknown>;\n};\n\nfunction segmentShape({\n fill,\n color,\n capped,\n keys,\n dataKey,\n}: {\n fill: string;\n color: string;\n capped: boolean;\n /** The column's data keys, bottom to top. */\n keys: string[];\n dataKey: string;\n}) {\n return function Segment({ x = 0, width = 0, index, payload, ...geo }: SegmentProps) {\n const values = keys.map(k => Number(payload?.[k]) || 0);\n const self = keys.indexOf(dataKey);\n const box = { y: geo.y ?? 0, height: Math.max(geo.height ?? 0, 0) };\n // Every non-zero value gets a few readable pixels; zeros draw nothing.\n const laid =\n keys.length > 1\n ? stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })\n : singleBarBox(values[self] ?? 0, box);\n if (!laid) return <g />;\n const { y, height: h } = laid;\n const radius = Math.min(RADIUS, Math.floor(h / 3));\n // Dimming is a CSS rule keyed on `data-bucket` (see `HoverDim`), so hovering re-renders no bars.\n const bucket = { 'data-bucket': index, style: { transition: 'opacity 150ms ease-out' } };\n\n if (capped) {\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={color} fillOpacity={CAP_BODY} />\n <Rectangle x={x} y={y} width={width} height={Math.min(CAP_HEIGHT, h)} radius={radius} fill={color} />\n </g>\n );\n }\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={fill} />\n </g>\n );\n };\n}\n\n/**\n * Dims every column but the hovered one. Its own tiny state, so a hover only re-renders this\n * <style> tag: with hundreds of buckets, re-rendering the bars on each move froze the pointer.\n */\nfunction HoverDim({ scope, setter }: { scope: string; setter: { current: (index: number | undefined) => void } }) {\n const [hovered, setHovered] = useState<number>();\n useLayoutEffect(() => {\n setter.current = setHovered;\n }, [setter]);\n if (hovered === undefined) return null;\n return (\n <style>{`[data-chart-scope=\"${scope}\"] [data-bucket]:not([data-bucket=\"${hovered}\"]){opacity:${DIMMED}}`}</style>\n );\n}\n\n/** A line drawn over the bars on its own scale, e.g. average wake time over cold starts. */\nexport type MetricsStackedBarChartOverlay = MetricsLineChartSeries & {\n valueFormatter?: (value: number) => string;\n};\n\nexport type MetricsStackedBarChartProps = {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n /** Pixels, or `fill` to grow with the parent (a flex column, e.g. a card's content). */\n height?: ChartHeight;\n yDomain?: [number, number];\n /** Formats tooltip values, and y-axis ticks unless `axisFormatter` is set. */\n valueFormatter?: (value: number) => string;\n /** Formats y-axis ticks, when they need a shorter form than the tooltip. */\n axisFormatter?: (value: number) => string;\n showLegend?: boolean;\n referenceLine?: { value: number; label: string; color: string };\n /**\n * `gradient`: segments fade gently toward the base. Reads best for stacks.\n * `capped`: a translucent body under a solid cap that marks the value. Reads best for one\n * value per column.\n */\n variant?: 'gradient' | 'capped';\n /**\n * Set to `false` to drop the y-axis labels and let the plot span the card. The gridlines stay\n * for relative scale; exact values come from the tooltip and the card's summary.\n */\n showYAxis?: boolean;\n /** Adds a \"Total\" row (the column's height) to the tooltip. Defaults to on for stacks. */\n showTotal?: boolean;\n /** Row field printed under the x-axis. */\n xKey?: string;\n /** Row field with the bucket's start time (ms), which places labels on round clock times. */\n timestampKey?: string;\n /** `auto` fits as many labels as the width allows; `edges` prints only the first and last. */\n xLabels?: ChartXLabels;\n /** Row field for the tooltip heading (e.g. a longer date); defaults to the x-axis label. */\n tooltipLabelKey?: string;\n columnLabelKey?: string;\n /** Click a column (e.g. to open its traces); the plot shows a pointer cursor. */\n onBucketClick?: (row: Record<string, unknown>, index: number) => void;\n /** One dashed line over the bars, on its own hidden scale (e.g. a duration over counts). */\n overlay?: MetricsStackedBarChartOverlay;\n /** Show a ghost of the chart while data loads, in the chart's own footprint. */\n isLoading?: boolean;\n className?: string;\n};\n\nexport function MetricsStackedBarChart(props: MetricsStackedBarChartProps) {\n const { data, series, overlay, height = 210, showLegend = true, isLoading = false, className } = props;\n const id = useChartDefsId();\n const root = cn(height === 'fill' && 'flex min-h-0 flex-1 flex-col', className);\n const legend = overlay ? [...series, { ...overlay, dashed: true }] : series;\n // The legend stays while loading: it comes from the series, not the data.\n return (\n <div className={root} data-chart-scope={id}>\n {showLegend && <MetricsLineChartLegend data={isLoading ? undefined : data} series={legend} className=\"mb-4\" />}\n {isLoading ? <ChartSkeleton kind=\"bar\" height={height} /> : <BarPlot {...props} id={id} />}\n </div>\n );\n}\n\n/** The plot itself, once the data is in; `id` scopes its gradients and hover rule. */\nfunction BarPlot({\n data,\n series,\n height = 210,\n yDomain,\n valueFormatter,\n axisFormatter,\n referenceLine,\n variant = 'gradient',\n showYAxis = true,\n showTotal = series.length > 1,\n xKey = 'time',\n timestampKey = 'tsMs',\n xLabels = 'auto',\n tooltipLabelKey,\n columnLabelKey,\n onBucketClick,\n overlay,\n id,\n}: MetricsStackedBarChartProps & { id: string }) {\n const setHovered = useRef<(index: number | undefined) => void>(() => {});\n const { size, onResize, ref } = useChartSize();\n\n const keyList = series.map(s => s.dataKey).join('\\u0000');\n const colorList = series.map(s => s.color).join('\\u0000');\n // Stable shapes, so Recharts doesn't re-render every bar when the parent re-renders.\n const shapes = useMemo(() => {\n const keys = keyList.split('\\u0000');\n const colors = colorList.split('\\u0000');\n return keys.map((dataKey, i) =>\n segmentShape({\n fill: `url(#${id}-bar-${i})`,\n color: colors[i] ?? '',\n capped: variant === 'capped',\n keys,\n dataKey,\n }),\n );\n }, [keyList, colorList, variant, id]);\n\n const format = valueFormatter ?? compactNumber.format;\n const plotWidth = size.width - (showYAxis ? Y_AXIS_WIDTH : 0);\n const margin = columnLabelKey ? { ...CHART_MARGIN, top: CHART_MARGIN.top + COLUMN_LABEL_SPACE } : CHART_MARGIN;\n\n return (\n <>\n <HoverDim scope={id} setter={setHovered} />\n <ChartPlot height={height} plotRef={ref} onResize={onResize} clickable={!!onBucketClick}>\n <ComposedChart\n data={data}\n margin={margin}\n onMouseMove={state => {\n const index = state?.activeTooltipIndex;\n setHovered.current(index === undefined || index === null ? undefined : Number(index));\n }}\n onMouseLeave={() => setHovered.current(undefined)}\n onClick={state => {\n const i = state?.activeTooltipIndex;\n const row = i === undefined || i === null ? undefined : data[Number(i)];\n if (onBucketClick && row) onBucketClick(row, Number(i));\n }}\n >\n <defs>\n {series.map((s, i) => (\n <linearGradient key={s.dataKey} id={`${id}-bar-${i}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={s.color} stopOpacity={1} />\n <stop offset=\"100%\" stopColor={s.color} stopOpacity={GRADIENT_BASE} />\n </linearGradient>\n ))}\n </defs>\n <CartesianGrid {...CHART_GRID_PROPS} />\n {timeXAxis({ data, xKey, timestampKey, xLabels, plotWidth })}\n {valueYAxis({\n show: showYAxis,\n size,\n formatter: axisFormatter ?? format,\n domain: yDomain,\n // A reference line above the bars stays on the axis.\n max: Math.max(\n dataMax(\n data,\n series.map(s => s.dataKey),\n true,\n ),\n referenceLine?.value ?? 0,\n ),\n integer: isWholeData(\n data,\n series.map(s => s.dataKey),\n ),\n })}\n {overlay &&\n valueYAxis({\n id: 'overlay',\n show: false,\n size,\n formatter: overlay.valueFormatter ?? compactNumber.format,\n max: dataMax(data, [overlay.dataKey]),\n integer: isWholeData(data, [overlay.dataKey]),\n right: true,\n })}\n <Tooltip\n cursor={false}\n content={\n <MetricsLineChartTooltip\n formatValue={format}\n showTotal={showTotal && !overlay}\n labelKey={tooltipLabelKey}\n formatByKey={overlay?.valueFormatter ? { [overlay.dataKey]: overlay.valueFormatter } : undefined}\n />\n }\n />\n {series.map((s, i) => (\n <Bar\n key={s.dataKey}\n dataKey={s.dataKey}\n name={s.label}\n stackId=\"1\"\n fill={s.color}\n maxBarSize={28}\n isAnimationActive={false}\n shape={shapes[i]}\n >\n {columnLabelKey && (\n <LabelList\n dataKey={columnLabelKey}\n content={(props: LabelProps) => (\n <ColumnLabel\n {...props}\n row={data[Number(props.index)]}\n keys={series.map(({ dataKey }) => dataKey)}\n self={i}\n color={s.color}\n />\n )}\n />\n )}\n </Bar>\n ))}\n {overlay && (\n <Line\n yAxisId=\"overlay\"\n type=\"monotone\"\n dataKey={overlay.dataKey}\n name={overlay.label}\n stroke={overlay.color}\n strokeWidth={1.75}\n strokeDasharray=\"4 3\"\n dot={false}\n activeDot={{ r: 3.5, fill: overlay.color, stroke: 'var(--background)', strokeWidth: 2 }}\n isAnimationActive={false}\n connectNulls\n />\n )}\n {referenceLine && (\n <ReferenceLine\n y={referenceLine.value}\n ifOverflow=\"extendDomain\"\n stroke={referenceLine.color}\n strokeDasharray=\"4 4\"\n label={{ value: referenceLine.label, position: 'insideTopLeft', ...CHART_TICK }}\n />\n )}\n </ComposedChart>\n </ChartPlot>\n </>\n );\n}\n\ntype ColumnLabelProps = LabelProps & {\n row: MetricsStackedBarChartProps['data'][number] | undefined;\n keys: string[];\n self: number;\n color: string;\n};\n\nfunction paintedTop(values: number[], self: number, box: SegmentBox) {\n if (values.length > 1) return stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })?.y;\n return singleBarBox(values[self] ?? 0, box)?.y;\n}\n\nfunction ColumnLabel({ x, y, width, height, value, row, keys, self, color }: ColumnLabelProps) {\n if (value === undefined || value === null || value === '') return null;\n const values = keys.map(key => Number(row?.[key]) || 0);\n const topmost = values.findLastIndex(v => v > 0);\n if (self !== (topmost === -1 ? keys.length - 1 : topmost)) return null;\n const top = paintedTop(values, self, { y: Number(y), height: Math.max(Number(height), 0) }) ?? Number(y);\n return (\n <text\n x={Number(x) + Number(width) / 2}\n y={top - 6}\n textAnchor=\"middle\"\n fontSize={CHART_AXIS_FONT_SIZE}\n fill={color}\n className=\"tabular-nums\"\n >\n {String(value)}\n </text>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity-B4CnOYnh.cjs","names":["createContext","useContext","useState","useId","Collapsible","cn","CollapsibleTrigger","Shimmer","Txt","useArriving","DisclosureChevron","X","CollapsibleContent","truncateString","Bell","_Fragment","Badge","Txt","ExternalLink","Brain","MarkdownRenderer","Layers","Info","Badge","_Fragment","Txt"],"sources":["../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n toggle: () => void;\n}\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n className,\n children,\n ...props\n}: ActivityProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider value={{ open, foldable, status, toggle: () => handleOpenChange(!open) }}>\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn('flex w-full min-w-0 items-center gap-2 px-1.5 py-1', className)}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityLabel = ({ className, ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className={cn('max-w-[55%] shrink-0 truncate', className)} {...props} />\n);\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n font?: 'mono' | 'sans';\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ font = 'mono', wrap = false, className, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n\n return (\n <Txt\n as=\"span\"\n variant=\"meta\"\n tone=\"muted\"\n font={font === 'mono' ? 'mono' : undefined}\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', arriving, className)}\n {...props}\n />\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => (\n <span\n aria-hidden\n className={cn('min-w-2 flex-1', rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]', className)}\n {...props}\n />\n);\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable } = useActivity();\n\n return (\n <span className={cn('flex size-4 shrink-0 items-center justify-center', className)} {...props}>\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n !foldable && 'opacity-0',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n detailFont?: ActivityDetailProps['font'];\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n detailFont,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status } = useActivity();\n const hasBadges = Boolean(badges);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(description && 'max-w-none min-w-0 shrink')}>{description || label}</ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail font={detailFont} wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport const ActivityContent = ({ className, children, ...props }: ComponentProps<typeof CollapsibleContent>) => (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n \"relative ml-[14px] flex max-w-full min-w-0 flex-col gap-1.5 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n className,\n )}\n >\n {children}\n </div>\n </CollapsibleContent>\n);\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n detailFont?: ActivityDetailProps['font'];\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n detailFont,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline\n icon={icon}\n label={label}\n detail={detail}\n detailFont={detailFont}\n wrapDetail={!folds}\n badges={badges}\n />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n detailFont=\"sans\"\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || text.trim().length > 0;\n}\n","import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n","import { Info, Layers } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n}\n\nconst signalKinds = {\n state: {\n icon: <Layers className=\"text-badge-purple-indicator\" aria-hidden />,\n body: { variant: 'caption' },\n },\n reactive: {\n icon: <Info aria-hidden />,\n body: { variant: 'caption' },\n },\n reminder: {\n icon: <Info className=\"text-info-indicator\" aria-hidden />,\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nexport function SignalActivity({ kind, label, message, detail, mode, defaultOpen }: SignalActivityProps) {\n const { icon, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={icon}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity-Dc-NsOSz.js","names":["ActivityIcon","_Fragment","_Fragment"],"sources":["../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n toggle: () => void;\n}\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n className,\n children,\n ...props\n}: ActivityProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider value={{ open, foldable, status, toggle: () => handleOpenChange(!open) }}>\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn('flex w-full min-w-0 items-center gap-2 px-1.5 py-1', className)}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityLabel = ({ className, ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className={cn('max-w-[55%] shrink-0 truncate', className)} {...props} />\n);\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n font?: 'mono' | 'sans';\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ font = 'mono', wrap = false, className, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n\n return (\n <Txt\n as=\"span\"\n variant=\"meta\"\n tone=\"muted\"\n font={font === 'mono' ? 'mono' : undefined}\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', arriving, className)}\n {...props}\n />\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => (\n <span\n aria-hidden\n className={cn('min-w-2 flex-1', rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]', className)}\n {...props}\n />\n);\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable } = useActivity();\n\n return (\n <span className={cn('flex size-4 shrink-0 items-center justify-center', className)} {...props}>\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n !foldable && 'opacity-0',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n detailFont?: ActivityDetailProps['font'];\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n detailFont,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status } = useActivity();\n const hasBadges = Boolean(badges);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(description && 'max-w-none min-w-0 shrink')}>{description || label}</ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail font={detailFont} wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport const ActivityContent = ({ className, children, ...props }: ComponentProps<typeof CollapsibleContent>) => (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n \"relative ml-[14px] flex max-w-full min-w-0 flex-col gap-1.5 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n className,\n )}\n >\n {children}\n </div>\n </CollapsibleContent>\n);\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n detailFont?: ActivityDetailProps['font'];\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n detailFont,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline\n icon={icon}\n label={label}\n detail={detail}\n detailFont={detailFont}\n wrapDetail={!folds}\n badges={badges}\n />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n detailFont=\"sans\"\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || text.trim().length > 0;\n}\n","import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n","import { Info, Layers } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n}\n\nconst signalKinds = {\n state: {\n icon: <Layers className=\"text-badge-purple-indicator\" aria-hidden />,\n body: { variant: 'caption' },\n },\n reactive: {\n icon: <Info aria-hidden />,\n body: { variant: 'caption' },\n },\n reminder: {\n icon: <Info className=\"text-info-indicator\" aria-hidden />,\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nexport function SignalActivity({ kind, label, message, detail, mode, defaultOpen }: SignalActivityProps) {\n const { icon, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={icon}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox-BgQrNpCO.js","names":["BaseCombobox","_Fragment","React","BaseCombobox","_Fragment","React","Combobox"],"sources":["../src/ds/components/Combobox/combobox-styles.ts","../src/ds/components/Combobox/combobox-parts.tsx","../src/ds/components/Combobox/combobox.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { buttonVariants, isIconButtonSize } from '../Button/Button';\nimport type { ButtonSize } from '../Button/Button';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport type { ControlTriggerVisualVariant } from '@/ds/primitives/control-size';\nimport { fieldTriggerErrorBorder, fieldTriggerStyle, fieldTriggerWidthStyle } from '@/ds/primitives/form-element';\nimport {\n menuItemCheckClass,\n menuItemClass,\n menuPopupClass,\n menuPositionerClass,\n menuSearchClasses,\n menuEmptyClass,\n} from '@/ds/primitives/menu-item';\nimport { cn } from '@/lib/utils';\n\n/**\n * A combobox is a form field, so it reuses the Button's size/shape recipe,\n * mirroring `SelectTrigger`: `default` (the Input's overlay surface — the\n * default here too) and `ghost` (borderless, for breadcrumbs/inline pickers). Only the high-emphasis `primary`\n * look is intentionally NOT offered (a field is not a call-to-action).\n */\nexport type ComboboxVisualVariant = ControlTriggerVisualVariant;\nexport type ComboboxLegacyVariant = 'link';\nexport type ComboboxVariant = ComboboxVisualVariant | ComboboxLegacyVariant;\n\nfunction normalizeComboboxVariant(variant: ComboboxVariant): ComboboxVisualVariant {\n return variant === 'link' ? 'ghost' : variant;\n}\n\n/**\n * Single source of truth for both the single- and multi-select combobox\n * triggers. A combobox = a button + a trailing chevron, so it reuses the Button\n * recipe (variant colors, size = height/text/padding/radius, unified border\n * focus, disabled) and layers only the combobox-specific extras — exactly like\n * `SelectTrigger`.\n */\nexport function comboboxTriggerClass({\n variant,\n size,\n className,\n}: {\n variant: ComboboxVariant;\n size: ButtonSize;\n className?: string;\n}): string {\n const visualVariant = normalizeComboboxVariant(variant);\n\n return cn(\n buttonVariants({ variant: visualVariant, size }),\n visualVariant === 'default' && fieldTriggerStyle,\n // Fill the field and push the value left / chevron right (Button's base\n // centers its content with `justify-center`). Icon sizes are a fixed square\n // showing only the chevron, so they keep Button's centering.\n !isIconButtonSize(size) && cn(fieldTriggerWidthStyle, 'justify-between'),\n // Read as \"active\" while the popup is open, per variant (see map above).\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-muted-foreground',\n fieldTriggerErrorBorder,\n className,\n );\n}\n\n/** Options are shared menu items, which already grow to fit a second line. */\nexport const comboboxItemClass = cva(menuItemClass, {\n variants: {\n multiple: {\n false: '',\n true: '',\n },\n },\n defaultVariants: {\n multiple: false,\n },\n});\n\nexport const comboboxStyles = {\n /** @deprecated A `Field` lays out the combobox and its error. */\n root: 'flex flex-col gap-1.5',\n\n /** Chevron icon in trigger — decorative icon token shared by every field. */\n chevron: 'ml-2 h-4 w-4 shrink-0 text-muted-foreground',\n\n /** Placeholder text color */\n placeholder: 'text-muted-foreground',\n\n /**\n * Popup container — shared menu popup, but the search row sits edge-to-edge\n * above the list, so padding/scrolling move to the list itself.\n */\n popup: cn(menuPopupClass, 'max-h-none overflow-hidden p-0'),\n\n /** Positioner */\n positioner: cn(menuPositionerClass, 'pointer-events-auto'),\n\n /** Search input container — borderless top section, hairline divider below. */\n searchContainer: menuSearchClasses.container,\n\n /** Search icon */\n searchIcon: menuSearchClasses.icon,\n\n /** Search input */\n searchInput: cn(menuSearchClasses.input, 'disabled:cursor-not-allowed disabled:opacity-50'),\n\n /** Empty state */\n empty: cn(menuEmptyClass, 'empty:hidden'),\n\n /** Options list */\n // `empty:p-0` — Empty renders outside the List, so an empty List must not leave its padding behind.\n list: 'p-1 empty:p-0',\n\n /** Scroll container around the List; hosts the fluid highlight so it scrolls with the rows. */\n listScroller: 'max-h-dropdown overflow-y-auto overflow-x-hidden',\n\n /** Option item base — rounded-lg sits concentrically inside rounded-xl + p-1. */\n item: comboboxItemClass({ multiple: false }),\n\n /** Multi-select item — same item rhythm with a right-aligned selected check. */\n itemMulti: comboboxItemClass({ multiple: true }),\n\n /** Right-aligned slot grouping end content + selection check. */\n itemRightSlot: 'ml-auto flex items-center gap-2 shrink-0',\n\n /** Check indicator container — inline, shown only when item is selected. */\n checkContainer: cn(menuItemCheckClass, 'ml-0'),\n\n /** Check icon (single select) */\n checkIcon: 'size-full',\n\n /** Option label/description wrapper */\n optionText: 'flex flex-col gap-0.5 min-w-0',\n\n /** Option label */\n optionLabel: 'truncate',\n\n /** Option description */\n optionDescription: 'text-caption text-muted-foreground truncate',\n\n /** Option end slot — `ml-auto` makes it push right inside flex containers (used by multi-select). */\n optionEnd: 'ml-auto flex items-center shrink-0',\n\n /** @deprecated A `FieldError` colors the error. */\n error: 'text-body-sm text-destructive-foreground',\n} as const;\n","// Composable Combobox parts: shadcn's structure and names (https://ui.shadcn.com/docs/components/combobox),\n// built on Base UI like theirs, styled with our design system. The root is `ComboboxRoot` because\n// `Combobox` is the options-driven component in combobox.tsx.\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { Check, ChevronDown, ChevronsUpDown, Search, X } from 'lucide-react';\nimport * as React from 'react';\nimport { comboboxItemClass, comboboxStyles, comboboxTriggerClass } from './combobox-styles';\nimport type { ComboboxVariant } from './combobox-styles';\nimport { isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize, TextButtonSize } from '@/ds/components/Button/Button';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuLabelClass, menuSeparatorClass } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { usePopupAnchor } from '@/ds/primitives/popup-anchor';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\n/**\n * Root. Same props as Base UI's `Combobox.Root` (`items`, `value`, `onValueChange`, `multiple`,\n * `autoHighlight`, `filter`, ...). Pick one of three shapes:\n * - Search in the field: `ComboboxInput` + `ComboboxContent`.\n * - Multiple, chips in the field: `ComboboxChips` (chips + `ComboboxChipsInput`) + `ComboboxContent`.\n * - Compact trigger, search in the popup: `ComboboxTrigger` + `ComboboxContent` starting with\n * `ComboboxSearch`. For small triggers (an icon, a ghost button in a toolbar).\n */\nfunction ComboboxRoot<Value, Multiple extends boolean | undefined = false>(\n props: BaseCombobox.Root.Props<Value, Multiple>,\n) {\n return <BaseCombobox.Root {...props} />;\n}\n\n/**\n * The field surface: today's trigger look, focus shown while the input inside has focus. The\n * chevron ends every field, at the same padding as today's Combobox trigger.\n */\nconst fieldClass = (size: TextButtonSize = 'md') =>\n cn(\n comboboxTriggerClass({ variant: 'default', size }),\n // The Button recipe brightens icons on hover; a field's chevron stays muted.\n 'cursor-text gap-2 focus-within:[--surface-rim:var(--field-rim-focus)] not-disabled:hover:[&_svg]:text-muted-foreground',\n // Disabled like other form elements (muted text, not-allowed cursor), keyed off the input.\n 'has-[input:disabled]:cursor-not-allowed has-[input:disabled]:bg-field-disabled has-[input:disabled]:[&_*]:cursor-not-allowed has-[input:disabled]:[&_*]:text-muted-foreground',\n // The input inside carries `aria-invalid`; the field shows it like other invalid fields.\n 'has-[[aria-invalid=true]]:[--field-rim-focus:var(--destructive-indicator)] has-[[aria-invalid=true]]:[--field-rim:var(--destructive-indicator)]',\n );\n\n/**\n * Text starts 0.9em in (the Button recipe's padding, shared with Select and today's Combobox).\n * The chevron is a 22px circle; its arrow's ink sits 6.33px inside the circle's edge (3px circle\n * inset + 3.33px icon inset), so the end padding puts that ink 0.9em from the end, like the text.\n */\nconst fieldPx = '0.9em';\n\n/** Inline so it wins over the Button recipe's `px` (same layer, later in the sheet). */\nconst fieldStyle: React.CSSProperties = {\n paddingInlineStart: fieldPx,\n paddingInlineEnd: `calc(${fieldPx} - 6.33px)`,\n};\n\n/**\n * Chips sit 4px from the field's edge on top, bottom and left: 3px visible inside the 1px rim,\n * the same 3px as the gap between chips. A chip is the field height minus that padding (22px).\n */\nconst chipsFieldStyle: React.CSSProperties = {\n // Longhands only: a `padding` shorthand here would also reset the chevron's end padding.\n paddingBlock: '4px',\n paddingInlineStart: '4px',\n paddingInlineEnd: fieldStyle.paddingInlineEnd,\n};\n\n// `w-0` + `flex-1`: an input's default width (about 20 characters) would otherwise set the field's\n// minimum width, so it couldn't shrink into a narrow column.\nconst inputClass =\n 'h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none placeholder:text-muted-foreground';\n\n/** Caret at the end of the value instead of selecting it, the way a text field behaves. */\nfunction moveCaretToEnd(event: React.FocusEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n // Deferred one frame so it runs after the click places the caret; clicking the label lands here too.\n requestAnimationFrame(() => input.setSelectionRange(input.value.length, input.value.length));\n}\n\n/**\n * The selected value, for a compact `ComboboxTrigger` or a custom display. `children` can be a\n * function of the value; `placeholder` shows while nothing is selected.\n */\nfunction ComboboxValue(props: BaseCombobox.Value.Props) {\n return <BaseCombobox.Value data-slot=\"combobox-value\" {...props} />;\n}\n\n/** The round chevron button that ends ComboboxInput and ComboboxChips. */\nfunction ComboboxFieldTrigger() {\n return (\n <BaseCombobox.Trigger\n data-slot=\"combobox-field-trigger\"\n aria-label=\"Show options\"\n // A round button target: the circle fills on hover, the chevron keeps its color.\n className=\"flex size-5.5 shrink-0 cursor-pointer items-center justify-center rounded-full text-muted-foreground not-data-disabled:hover:bg-fill\"\n >\n {/* Sized like Select's chevron: outside the icon rung, so it keeps Lucide's default stroke\n (1.33px at 16px) instead of the rung's 1px. */}\n <ChevronDown className=\"size-4\" />\n </BaseCombobox.Trigger>\n );\n}\n\ntype ComboboxTriggerProps = Omit<BaseCombobox.Trigger.Props, 'className'> & {\n className?: string;\n /** The Button-recipe look, like Select: `default` (field surface), `outline` or `ghost`. */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) show only `icon` (or the chevron); `children` stay as accessible text. */\n size?: ButtonSize;\n /** Shown before the value, or alone at icon sizes (e.g. a filter icon), replacing the chevron there. */\n icon?: React.ReactNode;\n showChevron?: boolean;\n};\n\n/**\n * A compact trigger that opens the list, with the search inside the popup (`ComboboxSearch`). For\n * small triggers such as an icon or a ghost button; a form field uses ComboboxInput instead.\n * `children` is what the trigger shows, usually `<ComboboxValue placeholder=\"…\" />`.\n */\nfunction ComboboxTrigger({\n className,\n children,\n variant = 'default',\n size = 'md',\n icon,\n showChevron = !(icon && isIconButtonSize(size)),\n ...props\n}: ComboboxTriggerProps) {\n const iconOnly = isIconButtonSize(size);\n return (\n <BaseCombobox.Trigger\n data-slot=\"combobox-trigger\"\n data-shape={iconOnly ? 'icon' : undefined}\n className={comboboxTriggerClass({ variant, size, className })}\n {...props}\n >\n {iconOnly ? (\n <>\n {icon}\n <span className=\"sr-only\">{children}</span>\n </>\n ) : (\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n {icon}\n <span className=\"truncate\">{children}</span>\n </span>\n )}\n {/* Wrapped so the svg escapes Button's `[&>svg]` adornments, like today's Combobox chevron. */}\n {showChevron ? (\n <span className=\"flex shrink-0 items-center\">\n <ChevronsUpDown className={cn(comboboxStyles.chevron, iconOnly && 'ml-0')} />\n </span>\n ) : null}\n </BaseCombobox.Trigger>\n );\n}\n\n/** An × that clears the value. ComboboxInput renders it with `showClear`. */\nfunction ComboboxClear({ className, ...props }: BaseCombobox.Clear.Props) {\n return (\n <BaseCombobox.Clear\n data-slot=\"combobox-clear\"\n aria-label=\"Clear\"\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:text-foreground',\n className,\n )}\n {...props}\n >\n <X className=\"size-3.5\" />\n </BaseCombobox.Clear>\n );\n}\n\ntype ComboboxInputProps = Omit<BaseCombobox.Input.Props, 'size'> & {\n /** The field height, from the control sizes. `md` by default. */\n size?: TextButtonSize;\n /** Shown before the text, e.g. the selected item's icon. */\n start?: React.ReactNode;\n /** The chevron button at the end. On by default. */\n showTrigger?: boolean;\n /** An × before the chevron that clears the value. */\n showClear?: boolean;\n};\n\n/**\n * The field you type in to filter, showing the selected value while it's closed. `children` render\n * inside the field before the chevron (e.g. a muted \"4 items\" detail). The list opens at the\n * field's width. Inside a `Field`, the label and errors link to it.\n */\nfunction ComboboxInput({\n className,\n children,\n showTrigger = true,\n showClear = false,\n size,\n start,\n onFocus,\n ...props\n}: ComboboxInputProps) {\n return (\n <BaseCombobox.InputGroup data-slot=\"combobox-input\" className={cn(fieldClass(size), className)} style={fieldStyle}>\n {start ? <span className=\"flex shrink-0 items-center\">{start}</span> : null}\n <BaseCombobox.Input\n onFocus={event => {\n moveCaretToEnd(event);\n onFocus?.(event);\n }}\n className={inputClass}\n {...passwordManagerOptOutProps}\n {...props}\n />\n {children ? <span className=\"flex shrink-0 items-center gap-2 text-muted-foreground\">{children}</span> : null}\n {showClear ? <ComboboxClear /> : null}\n {showTrigger ? <ComboboxFieldTrigger /> : null}\n </BaseCombobox.InputGroup>\n );\n}\n\n/**\n * The search row at the top of the popup, for a compact `ComboboxTrigger`. The same row as today's\n * Combobox: a search icon, a borderless input and a hairline under it.\n */\nfunction ComboboxSearch({ className, ...props }: BaseCombobox.Input.Props) {\n return (\n <div data-slot=\"combobox-search\" className={comboboxStyles.searchContainer}>\n <Search className={comboboxStyles.searchIcon} />\n <BaseCombobox.Input\n className={cn(comboboxStyles.searchInput, className)}\n {...passwordManagerOptOutProps}\n {...props}\n />\n </div>\n );\n}\n\ntype ComboboxContentProps = BaseCombobox.Popup.Props &\n Pick<BaseCombobox.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'anchor'> & {\n /** Where the popup portals to. Defaults to the nearest dialog or drawer, so it stays interactive there. */\n container?: PortalContainer;\n };\n\n/**\n * The popup. Under a field (ComboboxInput or ComboboxChips) it opens at the field's width; under a\n * compact ComboboxTrigger it takes the trigger's width, at least 11rem. Either way the width never\n * follows the filtered items, so it holds still while you type; long labels truncate.\n */\nfunction ComboboxContent({\n className,\n side = 'bottom',\n sideOffset = 4,\n align = 'start',\n alignOffset = 0,\n anchor,\n container,\n ...props\n}: ComboboxContentProps) {\n const popupAnchor = usePopupAnchor();\n const resolvedContainer = usePortalContainer(container);\n return (\n <BaseCombobox.Portal container={resolvedContainer}>\n <BaseCombobox.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n // Base UI anchors to the field (the InputGroup of ComboboxInput or ComboboxChips), or to the\n // trigger when the input is in the popup; a crumb switcher anchors to the whole crumb.\n anchor={anchor ?? popupAnchor}\n positionMethod={FLOATING_POSITION_METHOD}\n className={comboboxStyles.positioner}\n >\n <BaseCombobox.Popup\n data-slot=\"combobox-content\"\n // With the popup's `min-w-[max(11rem,var(--anchor-width))]`: the anchor's width, at least 11rem.\n className={cn(comboboxStyles.popup, 'w-(--anchor-width)', className)}\n {...props}\n />\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\n/** The scrolling list. Children: a render function per item (or per group), like Base UI's List. */\nfunction ComboboxList({ className, ...props }: BaseCombobox.List.Props) {\n const menu = useFluidMenu();\n return (\n <ScrollArea maxHeight=\"var(--spacing-dropdown)\">\n <ScrollAreaViewport className=\"scroll-py-8\">\n <div className={menu.containerClassName} {...menu.getContainerProps({})}>\n <FluidMenuItems menu={menu}>\n <BaseCombobox.List data-slot=\"combobox-list\" className={cn(comboboxStyles.list, className)} {...props} />\n </FluidMenuItems>\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n );\n}\n\n/** One option. A check shows on the right while it's selected; the hover highlight slides between items. */\nfunction ComboboxItem({ className, children, ref, ...props }: BaseCombobox.Item.Props) {\n return (\n <BaseCombobox.Item\n // Registers the item with the list's sliding highlight (FluidMenuItems).\n ref={useFluidMenuItemRef(ref)}\n data-slot=\"combobox-item\"\n className={cn(comboboxItemClass({}), className)}\n {...props}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">{children}</span>\n <span className={comboboxStyles.checkContainer}>\n <BaseCombobox.ItemIndicator>\n <Check className={comboboxStyles.checkIcon} />\n </BaseCombobox.ItemIndicator>\n </span>\n </BaseCombobox.Item>\n );\n}\n\n/** Title over a description inside an item (shadcn's Item / ItemTitle / ItemDescription). */\nfunction ComboboxItemContent({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span data-slot=\"combobox-item-content\" className={cn('flex min-w-0 flex-col gap-0.5', className)} {...props} />\n );\n}\n\nfunction ComboboxItemTitle({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"combobox-item-title\" className={cn('truncate', className)} {...props} />;\n}\n\n/** Muted, up to two lines. */\nfunction ComboboxItemDescription({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"combobox-item-description\"\n // `whitespace-normal`: the item recipe's `[&>span]:truncate` makes its content `nowrap`, which\n // would cut the description off mid-word on one line instead of clamping it at two.\n className={cn('line-clamp-2 text-caption whitespace-normal text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** Muted text at the end of an item, e.g. its kind (\"Agent\"). */\nfunction ComboboxItemEnd({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"combobox-item-end\"\n className={cn('ml-auto shrink-0 text-caption text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** A section of items. Pass the section's `items`; render them with ComboboxCollection. */\nfunction ComboboxGroup(props: BaseCombobox.Group.Props) {\n return <BaseCombobox.Group data-slot=\"combobox-group\" {...props} />;\n}\n\n/** A group's heading, styled like menu section labels. */\nfunction ComboboxLabel({ className, ...props }: BaseCombobox.GroupLabel.Props) {\n return <BaseCombobox.GroupLabel data-slot=\"combobox-label\" className={cn(menuLabelClass, className)} {...props} />;\n}\n\n/** Renders a group's filtered items, one render function call per item. */\nfunction ComboboxCollection(props: BaseCombobox.Collection.Props) {\n return <BaseCombobox.Collection data-slot=\"combobox-collection\" {...props} />;\n}\n\n/** Shows its children only when the filter matches nothing. */\nfunction ComboboxEmpty({ className, ...props }: BaseCombobox.Empty.Props) {\n return <BaseCombobox.Empty data-slot=\"combobox-empty\" className={cn(comboboxStyles.empty, className)} {...props} />;\n}\n\nfunction ComboboxSeparator({ className, ...props }: BaseCombobox.Separator.Props) {\n return (\n <BaseCombobox.Separator data-slot=\"combobox-separator\" className={cn(menuSeparatorClass, className)} {...props} />\n );\n}\n\n/**\n * Multi-select field: chips for the picked items, then ComboboxChipsInput. The chips and input wrap\n * inside their own area so the chevron keeps its place on the first row. While the field is one\n * line it keeps the pill shape of every other field; once chips wrap it takes the Textarea corner.\n */\nfunction ComboboxChips({ className, children, 'aria-label': ariaLabel, ...props }: BaseCombobox.InputGroup.Props) {\n // On the inner chips area, so a caller's `ref` reaches the field without merging refs.\n const chipsRef = React.useRef<HTMLDivElement>(null);\n const [multiline, setMultiline] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const field = chipsRef.current?.parentElement;\n // No observer (e.g. jsdom in tests): the field keeps its one-row shape.\n if (!field || typeof ResizeObserver === 'undefined') return;\n // One row is the control height (the field's `min-height`); anything taller means the chips wrapped.\n // The 1px slack absorbs subpixel rounding.\n const rowHeight = parseFloat(getComputedStyle(field).minHeight) || 0;\n const observer = new ResizeObserver(() => setMultiline(field.offsetHeight > rowHeight + 1));\n observer.observe(field);\n return () => observer.disconnect();\n }, []);\n\n // Chips inside an InputGroup, like Base UI's multi-select example: the popup anchors to the group.\n return (\n <BaseCombobox.InputGroup\n data-slot=\"combobox-chips\"\n data-multiline={multiline ? '' : undefined}\n style={chipsFieldStyle}\n className={cn(\n fieldClass(),\n 'h-auto min-h-control-md items-start data-multiline:rounded-xl',\n // The chips field keeps its resting look: no open tint, no placeholder color. InputGroup sets those\n // attributes, which the trigger recipe styles.\n 'data-[placeholder]:text-foreground data-[popup-open]:[--surface-tint:transparent]',\n className,\n )}\n {...props}\n >\n {/* The label names the chips toolbar, as it did when Chips was the outer element. */}\n <BaseCombobox.Chips ref={chipsRef} aria-label={ariaLabel} className=\"flex min-w-0 flex-1 flex-wrap gap-[3px]\">\n {children}\n </BaseCombobox.Chips>\n {/* Same height as a chip, so the chevron centers on the first row. */}\n <span className=\"flex h-5.5 shrink-0 items-center\">\n <ComboboxFieldTrigger />\n </span>\n </BaseCombobox.InputGroup>\n );\n}\n\n/** One picked item inside ComboboxChips. The × (or Backspace in the input) removes it. */\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: BaseCombobox.Chip.Props & { showRemove?: boolean }) {\n return (\n <BaseCombobox.Chip\n data-slot=\"combobox-chip\"\n className={cn(\n // 8px from the left edge to the text, 6px from the text to the ×'s ink, 8px from the ink to\n // the right edge. Text in the controls' role (`text-label`), like the field value.\n 'flex h-5.5 items-center rounded-full bg-fill pl-2 text-label text-foreground',\n !showRemove && 'pr-2',\n className,\n )}\n {...props}\n >\n {children}\n {showRemove ? (\n <BaseCombobox.ChipRemove\n data-slot=\"combobox-chip-remove\"\n aria-label={typeof children === 'string' ? `Remove ${children}` : 'Remove'}\n // The whole right end is the hit area: full height, from the gap to the chip's edge. The ×'s\n // ink sits 2.5px inside its 12px icon, so 3.5px / 5.5px padding put it 6px / 8px out.\n className=\"flex h-full cursor-pointer items-center rounded-r-full pr-[5.5px] pl-[3.5px] text-muted-foreground not-data-disabled:hover:text-foreground\"\n >\n {/* Inline so the button's color wins over the field's `[&_svg]` icon colors. */}\n <X className=\"size-3\" style={{ color: 'inherit' }} />\n </BaseCombobox.ChipRemove>\n ) : null}\n </BaseCombobox.Chip>\n );\n}\n\n/** The text input after the chips in ComboboxChips. */\nfunction ComboboxChipsInput({ className, onFocus, ...props }: BaseCombobox.Input.Props) {\n return (\n <BaseCombobox.Input\n data-slot=\"combobox-chip-input\"\n onFocus={event => {\n moveCaretToEnd(event);\n onFocus?.(event);\n }}\n className={cn(\n inputClass,\n // Text lines up with other fields' text when there are no chips; 4px after a chip otherwise.\n // Not `first:`: Base UI inserts a hidden Dismiss element before the input while open.\n 'h-5.5 w-0 min-w-12 flex-1 pl-[calc(0.9em_-_4px)] [[data-slot=combobox-chip]~&]:pl-1',\n className,\n )}\n {...passwordManagerOptOutProps}\n {...props}\n />\n );\n}\n\nexport type { ComboboxTriggerProps, ComboboxInputProps, ComboboxContentProps };\n\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxSearch,\n ComboboxValue,\n ComboboxClear,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxItemContent,\n ComboboxItemTitle,\n ComboboxItemDescription,\n ComboboxItemEnd,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n};\n","import { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\nimport {\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n ComboboxValue,\n} from './combobox-parts';\nimport { comboboxStyles } from './combobox-styles';\nimport type { ComboboxVariant } from './combobox-styles';\nimport { Button, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName, useFieldAriaIds } from '@/ds/components/Field/field-control-aria';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks/block/field-block';\nimport { fieldErrorId } from '@/ds/components/FormFieldBlocks/block/field-error-id';\nimport { deprecatedErrorAria } from '@/ds/primitives/form-element';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\nexport type { ComboboxVariant } from './combobox-styles';\n\nexport type ComboboxOption = {\n label: string;\n value: string;\n description?: string;\n displayLabel?: React.ReactNode;\n start?: React.ReactNode;\n end?: React.ReactNode;\n /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */\n keywords?: readonly string[];\n};\n\ntype ComboboxSharedProps = {\n options: ComboboxOption[];\n placeholder?: React.ReactNode;\n /** The search row's placeholder for compact triggers. A field (inside a `Field`) searches in itself and shows `placeholder`. */\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n disabled?: boolean;\n /**\n * `default` inside a `Field` is a form field you type in to search. `ghost` (and the legacy `outline`/`link`),\n * or any variant outside a `Field`, is a compact trigger with the search inside the popup.\n */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) render a chevron-only trigger with the search in the popup; pass `aria-label` to name it. */\n size?: ButtonSize;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n container?: PortalContainer;\n id?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n /** Which edge of the trigger the popup lines up with. `end` opens it leftwards (e.g. an icon trigger at the end of a row). */\n align?: 'start' | 'center' | 'end';\n showChevron?: boolean;\n iconOnlyValue?: boolean;\n allowCustomValue?: boolean;\n /** Called with the search text as it changes (and with `''` after a compact trigger's selection resets it). */\n onInputValueChange?: (value: string) => void;\n /** @deprecated Wrap the combobox in `<Field invalid>` with a `FieldError`. */\n error?: string;\n /** @deprecated Only keyed the `error` message id; a `Field` links its error without one. */\n name?: string;\n};\n\nexport type ComboboxSingleProps = ComboboxSharedProps & {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport type ComboboxMultipleProps = ComboboxSharedProps & {\n multiple: true;\n value?: readonly string[];\n onValueChange?: (value: string[]) => void;\n clearLabel?: string;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nconst EMPTY_VALUES: readonly string[] = [];\n\nfunction isMultipleCombobox(props: ComboboxProps): props is ComboboxMultipleProps {\n return props.multiple === true;\n}\n\n/** The text a field shows for its value: a plain-text `displayLabel` wins over `label`. */\nfunction optionText(option: ComboboxOption) {\n return typeof option.displayLabel === 'string' ? option.displayLabel : option.label;\n}\n\n/** Inputs take a text placeholder only; a ReactNode placeholder keeps the compact trigger. */\nfunction textPlaceholder(placeholder: React.ReactNode) {\n return typeof placeholder === 'string' ? placeholder : undefined;\n}\n\n/**\n * How the combobox renders:\n * - `field`: a single select inside a `Field` searches in the field, like a text input.\n * - `chips`: a multiple select inside a `Field` shows its picks as chips and searches in the field.\n * - `trigger`: everything else (toolbars, breadcrumbs, inline pickers that callers lay out as a button)\n * keeps a compact trigger with the search inside the popup.\n */\ntype ComboboxShape = 'field' | 'chips' | 'trigger';\n\nfunction getComboboxShape({\n inFieldContext,\n multiple,\n variant,\n size,\n iconOnlyValue,\n showChevron,\n placeholder,\n}: {\n inFieldContext: boolean;\n multiple: boolean;\n variant: ComboboxVariant;\n size: ButtonSize;\n iconOnlyValue: boolean;\n showChevron: boolean;\n placeholder: React.ReactNode;\n}): ComboboxShape {\n if (!inFieldContext) return 'trigger';\n if (variant !== 'default') return 'trigger';\n if (isIconButtonSize(size)) return 'trigger';\n if (iconOnlyValue || !showChevron) return 'trigger';\n if (placeholder !== undefined && textPlaceholder(placeholder) === undefined) return 'trigger';\n if (!multiple) return 'field';\n // The chips field is tuned to the medium control height.\n if (size !== 'md') return 'trigger';\n return 'chips';\n}\n\n/** A \"Use “text”\" option for typed text that isn't one of the options yet. */\nfunction getCustomOption(options: ComboboxOption[], inputValue: string): ComboboxOption | undefined {\n const value = inputValue.trim();\n if (!value) return undefined;\n // A field shows the selected option's text while it's closed; that isn't a new value.\n if (options.some(option => option.value === value || optionText(option) === value)) return undefined;\n return { label: `Use “${value}”`, value };\n}\n\n/** Matches the label like Base UI's default filter, the text a field shows, and any keywords. */\nfunction useOptionFilter() {\n const { contains } = BaseCombobox.useFilter();\n return (option: ComboboxOption, query: string) =>\n [option.label, optionText(option), ...(option.keywords ?? [])].some(text => contains(text, query));\n}\n\n/** Names the control when nothing else does: an `id` or a `Field` links a label to it instead. */\nfunction getFallbackAriaLabel({ hasLabel, multiple }: { hasLabel: boolean; multiple: boolean }) {\n if (hasLabel) return undefined;\n return multiple ? 'Select options' : 'Select option';\n}\n\nfunction getControlProps({\n id,\n ariaLabel,\n ariaDescribedBy,\n hasLabel,\n multiple,\n error,\n errorName,\n}: {\n id?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n hasLabel: boolean;\n multiple: boolean;\n error?: string;\n errorName: string;\n}) {\n const describedBy = [ariaDescribedBy, error ? fieldErrorId(errorName) : undefined].filter(Boolean).join(' ');\n return {\n id,\n 'aria-label': ariaLabel ?? getFallbackAriaLabel({ hasLabel, multiple }),\n ...keepOwnAccessibleName({ 'aria-label': ariaLabel }),\n ...deprecatedErrorAria(Boolean(error)),\n 'aria-describedby': describedBy || undefined,\n };\n}\n\ntype ControlProps = ReturnType<typeof getControlProps>;\n\nfunction triggerClassName({ iconOnlyValue, className }: { iconOnlyValue: boolean; className?: string }) {\n return cn(iconOnlyValue && 'w-auto px-2.5', className);\n}\n\nfunction ComboboxOptionText({ option }: { option: ComboboxOption }) {\n return (\n <span className={comboboxStyles.optionText}>\n <span className={comboboxStyles.optionLabel}>{option.label}</span>\n {option.description && <span className={comboboxStyles.optionDescription}>{option.description}</span>}\n </span>\n );\n}\n\nfunction ComboboxClearFooter({ label, onClear }: { label: string; onClear: () => void }) {\n return (\n <div className=\"border-t border-border p-1\">\n <Button\n type=\"button\"\n variant=\"destructive-ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={onClear}\n icon={<X />}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n/** The popup: the search row for a compact trigger (a field searches in itself), then the options. */\nfunction ComboboxOptionsContent({\n showSearch,\n searchPlaceholder,\n emptyText,\n align,\n container,\n footer,\n}: {\n showSearch: boolean;\n searchPlaceholder: string;\n emptyText: string;\n align: 'start' | 'center' | 'end';\n container?: PortalContainer;\n footer?: React.ReactNode;\n}) {\n return (\n <ComboboxContent align={align} container={container}>\n {showSearch ? <ComboboxSearch placeholder={searchPlaceholder} /> : null}\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(option: ComboboxOption) => (\n <ComboboxItem key={option.value} value={option}>\n {option.start}\n <ComboboxOptionText option={option} />\n {option.end ? <span className={comboboxStyles.optionEnd}>{option.end}</span> : null}\n </ComboboxItem>\n )}\n </ComboboxList>\n {footer}\n </ComboboxContent>\n );\n}\n\ntype TriggerLookProps = {\n variant: ComboboxVariant;\n size: ButtonSize;\n showChevron: boolean;\n iconOnlyValue: boolean;\n className?: string;\n};\n\nfunction SingleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedOption,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedOption?: ComboboxOption;\n look: TriggerLookProps;\n}) {\n if (shape === 'field') {\n return (\n <ComboboxInput\n {...controlProps}\n size={isIconButtonSize(look.size) ? undefined : look.size}\n placeholder={textPlaceholder(placeholder)}\n start={selectedOption?.start}\n className={look.className}\n />\n );\n }\n\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n icon={isIconButtonSize(look.size) ? undefined : selectedOption?.start}\n className={triggerClassName(look)}\n >\n {selectedOption?.displayLabel ?? <ComboboxValue placeholder={placeholder} />}\n </ComboboxTrigger>\n );\n}\n\nfunction MultipleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedCount,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedCount: number;\n look: TriggerLookProps;\n}) {\n if (shape === 'chips') {\n return (\n <ComboboxChips className={look.className}>\n <ComboboxValue>\n {(items: ComboboxOption[]) => (\n <>\n {items.map(item => (\n <ComboboxChip key={item.value}>{item.label}</ComboboxChip>\n ))}\n <ComboboxChipsInput\n {...controlProps}\n placeholder={items.length === 0 ? textPlaceholder(placeholder) : undefined}\n />\n </>\n )}\n </ComboboxValue>\n </ComboboxChips>\n );\n }\n\n const text = selectedCount === 0 ? placeholder : `${selectedCount} selected`;\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n className={triggerClassName(look)}\n >\n <span className={cn(selectedCount === 0 && comboboxStyles.placeholder)}>{text}</span>\n </ComboboxTrigger>\n );\n}\n\ntype ShapeProps = { shape: ComboboxShape; controlProps: ControlProps };\n\nfunction SingleCombobox({\n shape,\n controlProps,\n options,\n value,\n onValueChange,\n placeholder = 'Select option...',\n searchPlaceholder = 'Search...',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n showChevron = true,\n iconOnlyValue = false,\n allowCustomValue = false,\n onInputValueChange,\n}: ComboboxSingleProps & ShapeProps) {\n // The search text: a field's own text, or the compact trigger's popup search.\n const [inputValue, setInputValue] = React.useState('');\n const filter = useOptionFilter();\n const inField = shape === 'field';\n const selectedOption = options.find(option => option.value === value);\n const customOption = allowCustomValue ? getCustomOption(options, inputValue) : undefined;\n const items = customOption ? [customOption, ...options] : options;\n\n function handleInputValueChange(next: string) {\n setInputValue(next);\n onInputValueChange?.(next);\n }\n\n function handleValueChange(item: ComboboxOption | null) {\n if (!item) return;\n onValueChange?.(item.value);\n // A field shows the picked option; a compact trigger's popup search starts empty next time.\n if (!inField) handleInputValueChange('');\n }\n\n return (\n <ComboboxRoot\n autoHighlight\n items={items}\n filter={filter}\n itemToStringLabel={optionText}\n // Base UI's \"nothing selected\" is null.\n value={selectedOption ?? null}\n // A field owns its text (the selected option's, or the search); a compact trigger's search is reset here.\n inputValue={inField ? undefined : inputValue}\n onInputValueChange={handleInputValueChange}\n onValueChange={handleValueChange}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <SingleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedOption={selectedOption}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n showSearch={!inField}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n />\n </ComboboxRoot>\n );\n}\n\nfunction MultipleCombobox({\n shape,\n controlProps,\n options,\n value = EMPTY_VALUES,\n onValueChange,\n clearLabel,\n placeholder = 'Select options...',\n searchPlaceholder = 'Search...',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n showChevron = true,\n iconOnlyValue = false,\n}: ComboboxMultipleProps & ShapeProps) {\n const filter = useOptionFilter();\n const selectedValues = new Set(value);\n const selectedOptions = options.filter(option => selectedValues.has(option.value));\n const footer =\n clearLabel && selectedOptions.length > 0 ? (\n <ComboboxClearFooter label={clearLabel} onClear={() => onValueChange?.([])} />\n ) : undefined;\n\n return (\n <ComboboxRoot\n multiple\n autoHighlight\n items={options}\n filter={filter}\n value={selectedOptions}\n onValueChange={items => onValueChange?.(items.map(item => item.value))}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <MultipleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedCount={selectedOptions.length}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n showSearch={shape !== 'chips'}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n footer={footer}\n />\n </ComboboxRoot>\n );\n}\n\n/**\n * A searchable select driven by `options`, built on the Combobox parts.\n *\n * Inside a `Field`, a `default` combobox searches right in the field: a text field for a single value,\n * removable chips for `multiple`. Everywhere else (outside a `Field`, `ghost` and icon-size triggers,\n * custom non-text placeholders) it keeps a compact trigger with the search inside the popup. For anything\n * these props don't cover (groups, rich items), compose the parts directly (`ComboboxRoot`, ...).\n */\nexport function Combobox(props: ComboboxProps) {\n const field = useFieldAriaIds();\n const generatedName = React.useId();\n const multiple = isMultipleCombobox(props);\n const shape = getComboboxShape({\n inFieldContext: Boolean(field),\n multiple,\n variant: props.variant ?? 'default',\n size: props.size ?? 'md',\n iconOnlyValue: props.iconOnlyValue ?? false,\n showChevron: props.showChevron ?? true,\n placeholder: props.placeholder,\n });\n const errorName = props.name ?? generatedName;\n const controlProps = getControlProps({\n id: props.id,\n ariaLabel: props['aria-label'],\n ariaDescribedBy: props['aria-describedby'],\n hasLabel: Boolean(props.id || field),\n multiple,\n error: props.error,\n errorName,\n });\n\n const root = isMultipleCombobox(props) ? (\n <MultipleCombobox {...props} shape={shape} controlProps={controlProps} />\n ) : (\n <SingleCombobox {...props} shape={shape} controlProps={controlProps} />\n );\n\n if (!props.error) return root;\n\n return (\n <div className={comboboxStyles.root}>\n {root}\n <FieldBlock.ErrorMsg name={errorName}>{props.error}</FieldBlock.ErrorMsg>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,SAAS,yBAAyB,SAAiD;CACjF,OAAO,YAAY,SAAS,UAAU;AACxC;;;;;;;;AASA,SAAgB,qBAAqB,EACnC,SACA,MACA,aAKS;CACT,MAAM,gBAAgB,yBAAyB,OAAO;CAEtD,OAAO,GACL,eAAe;EAAE,SAAS;EAAe;CAAK,CAAC,GAC/C,kBAAkB,aAAA,8TAIlB,CAAC,iBAAiB,IAAI,KAAK,GAAA,oDAA2B,iBAAiB,GAEvE,wBAAwB,gBACxB,4CACA,yBACA,SACF;AACF;;AAGA,IAAa,oBAAoB,IAAI,eAAe;CAClD,UAAU,EACR,UAAU;EACR,OAAO;EACP,MAAM;CACR,EACF;CACA,iBAAiB,EACf,UAAU,MACZ;AACF,CAAC;AAED,IAAa,iBAAiB;;CAE5B,MAAM;;CAGN,SAAS;;CAGT,aAAa;;;;;CAMb,OAAO,GAAG,gBAAgB,gCAAgC;;CAG1D,YAAY,GAAG,qBAAqB,qBAAqB;;CAGzD,iBAAiB,kBAAkB;;CAGnC,YAAY,kBAAkB;;CAG9B,aAAa,GAAG,kBAAkB,OAAO,iDAAiD;;CAG1F,OAAO,GAAG,gBAAgB,cAAc;;CAIxC,MAAM;;CAGN,cAAc;;CAGd,MAAM,kBAAkB,EAAE,UAAU,MAAM,CAAC;;CAG3C,WAAW,kBAAkB,EAAE,UAAU,KAAK,CAAC;;CAG/C,eAAe;;CAGf,gBAAgB,GAAG,oBAAoB,MAAM;;CAG7C,WAAW;;CAGX,YAAY;;CAGZ,aAAa;;CAGb,mBAAmB;;CAGnB,WAAW;;CAGX,OAAO;AACT;;;;;;;;;;ACnHA,SAAS,aACP,OACA;CACA,OAAO,oBAACA,SAAa,MAAd,EAAmB,GAAI,MAAQ,CAAA;AACxC;;;;;AAMA,IAAM,cAAc,OAAuB,SACzC,GACE,qBAAqB;CAAE,SAAS;CAAW;AAAK,CAAC,GAEjD,0HAEA,iLAEA,iJACF;;;;;;AAOF,IAAM,UAAU;;AAGhB,IAAM,aAAkC;CACtC,oBAAoB;CACpB,kBAAkB,QAAQ,QAAQ;AACpC;;;;;AAMA,IAAM,kBAAuC;CAE3C,cAAc;CACd,oBAAoB;CACpB,kBAAkB,WAAW;AAC/B;AAIA,IAAM,aACJ;;AAGF,SAAS,eAAe,OAA2C;CACjE,MAAM,QAAQ,MAAM;CAEpB,4BAA4B,MAAM,kBAAkB,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM,CAAC;AAC7F;;;;;AAMA,SAAS,cAAc,OAAiC;CACtD,OAAO,oBAACA,SAAa,OAAd;EAAoB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACpE;;AAGA,SAAS,uBAAuB;CAC9B,OACE,oBAACA,SAAa,SAAd;EACE,aAAU;EACV,cAAW;EAEX,WAAU;EAIV,UAAA,oBAAC,aAAD,EAAa,WAAU,SAAU,CAAA;CACb,CAAA;AAE1B;;;;;;AAkBA,SAAS,gBAAgB,EACvB,WACA,UACA,UAAU,WACV,OAAO,MACP,MACA,cAAc,EAAE,QAAQ,iBAAiB,IAAI,IAC7C,GAAG,SACoB;CACvB,MAAM,WAAW,iBAAiB,IAAI;CACtC,OACE,qBAACA,SAAa,SAAd;EACE,aAAU;EACV,cAAY,WAAW,SAAS,KAAA;EAChC,WAAW,qBAAqB;GAAE;GAAS;GAAM;EAAU,CAAC;EAC5D,GAAI;EAJN,UAAA,CAMG,WACC,qBAAAC,YAAA,EAAA,UAAA,CACG,MACD,oBAAC,QAAD;GAAM,WAAU;GAAW;EAAe,CAAA,CAC1C,EAAA,CAAA,IAEF,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACG,MACD,oBAAC,QAAD;IAAM,WAAU;IAAY;GAAe,CAAA,CACvC;EAGP,CAAA,GAAA,cACC,oBAAC,QAAD;GAAM,WAAU;GACd,UAAA,oBAAC,gBAAD,EAAgB,WAAW,GAAG,eAAe,SAAS,YAAY,MAAM,EAAI,CAAA;EACxE,CAAA,IACJ,IACgB;;AAE1B;;AAGA,SAAS,cAAc,EAAE,WAAW,GAAG,SAAmC;CACxE,OACE,oBAACD,SAAa,OAAd;EACE,aAAU;EACV,cAAW;EACX,WAAW,GACT,6GACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAAC,GAAD,EAAG,WAAU,WAAY,CAAA;CACP,CAAA;AAExB;;;;;;AAkBA,SAAS,cAAc,EACrB,WACA,UACA,cAAc,MACd,YAAY,OACZ,MACA,OACA,SACA,GAAG,SACkB;CACrB,OACE,qBAACA,SAAa,YAAd;EAAyB,aAAU;EAAiB,WAAW,GAAG,WAAW,IAAI,GAAG,SAAS;EAAG,OAAO;EAAvG,UAAA;GACG,QAAQ,oBAAC,QAAD;IAAM,WAAU;IAA8B,UAAA;GAAY,CAAA,IAAI;GACvE,oBAACA,SAAa,OAAd;IACE,UAAS,UAAS;KAChB,eAAe,KAAK;KACpB,UAAU,KAAK;IACjB;IACA,WAAW;IACX,GAAI;IACJ,GAAI;GACL,CAAA;GACA,WAAW,oBAAC,QAAD;IAAM,WAAU;IAA0D;GAAe,CAAA,IAAI;GACxG,YAAY,oBAAC,eAAD,CAAgB,CAAA,IAAI;GAChC,cAAc,oBAAC,sBAAD,CAAuB,CAAA,IAAI;EACnB;;AAE7B;;;;;AAMA,SAAS,eAAe,EAAE,WAAW,GAAG,SAAmC;CACzE,OACE,qBAAC,OAAD;EAAK,aAAU;EAAkB,WAAW,eAAe;EAA3D,UAAA,CACE,oBAAC,QAAD,EAAQ,WAAW,eAAe,WAAa,CAAA,GAC/C,oBAACA,SAAa,OAAd;GACE,WAAW,GAAG,eAAe,aAAa,SAAS;GACnD,GAAI;GACJ,GAAI;EACL,CAAA,CACE;;AAET;;;;;;AAaA,SAAS,gBAAgB,EACvB,WACA,OAAO,UACP,aAAa,GACb,QAAQ,SACR,cAAc,GACd,QACA,WACA,GAAG,SACoB;CACvB,MAAM,cAAc,eAAe;CACnC,MAAM,oBAAoB,mBAAmB,SAAS;CACtD,OACE,oBAACA,SAAa,QAAd;EAAqB,WAAW;EAC9B,UAAA,oBAACA,SAAa,YAAd;GACQ;GACM;GACL;GACM;GAGb,QAAQ,UAAU;GAClB,gBAAgB;GAChB,WAAW,eAAe;GAE1B,UAAA,oBAACA,SAAa,OAAd;IACE,aAAU;IAEV,WAAW,GAAG,eAAe,OAAO,sBAAsB,SAAS;IACnE,GAAI;GACL,CAAA;EACsB,CAAA;CACN,CAAA;AAEzB;;AAGA,SAAS,aAAa,EAAE,WAAW,GAAG,SAAkC;CACtE,MAAM,OAAO,aAAa;CAC1B,OACE,oBAAC,YAAD;EAAY,WAAU;EACpB,UAAA,oBAAC,oBAAD;GAAoB,WAAU;GAC5B,UAAA,oBAAC,OAAD;IAAK,WAAW,KAAK;IAAoB,GAAI,KAAK,kBAAkB,CAAC,CAAC;IACpE,UAAA,oBAAC,gBAAD;KAAsB;KACpB,UAAA,oBAACA,SAAa,MAAd;MAAmB,aAAU;MAAgB,WAAW,GAAG,eAAe,MAAM,SAAS;MAAG,GAAI;KAAQ,CAAA;IAC1F,CAAA;GACb,CAAA;EACa,CAAA;CACV,CAAA;AAEhB;;AAGA,SAAS,aAAa,EAAE,WAAW,UAAU,KAAK,GAAG,SAAkC;CACrF,OACE,qBAACA,SAAa,MAAd;EAEE,KAAK,oBAAoB,GAAG;EAC5B,aAAU;EACV,WAAW,GAAG,kBAAkB,CAAC,CAAC,GAAG,SAAS;EAC9C,GAAI;EALN,UAAA,CAOE,oBAAC,QAAD;GAAM,WAAU;GAA0C;EAAe,CAAA,GACzE,oBAAC,QAAD;GAAM,WAAW,eAAe;GAC9B,UAAA,oBAACA,SAAa,eAAd,EAAA,UACE,oBAAC,OAAD,EAAO,WAAW,eAAe,UAAY,CAAA,EACnB,CAAA;EACxB,CAAA,CACW;;AAEvB;;AAGA,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAuC;CAClF,OACE,oBAAC,QAAD;EAAM,aAAU;EAAwB,WAAW,GAAG,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnH;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAuC;CAChF,OAAO,oBAAC,QAAD;EAAM,aAAU;EAAsB,WAAW,GAAG,YAAY,SAAS;EAAG,GAAI;CAAQ,CAAA;AACjG;;AAGA,SAAS,wBAAwB,EAAE,WAAW,GAAG,SAAuC;CACtF,OACE,oBAAC,QAAD;EACE,aAAU;EAGV,WAAW,GAAG,qEAAqE,SAAS;EAC5F,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAuC;CAC9E,OACE,oBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,uDAAuD,SAAS;EAC9E,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,cAAc,OAAiC;CACtD,OAAO,oBAACA,SAAa,OAAd;EAAoB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACpE;;AAGA,SAAS,cAAc,EAAE,WAAW,GAAG,SAAwC;CAC7E,OAAO,oBAACA,SAAa,YAAd;EAAyB,aAAU;EAAiB,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAQ,CAAA;AACnH;;AAGA,SAAS,mBAAmB,OAAsC;CAChE,OAAO,oBAACA,SAAa,YAAd;EAAyB,aAAU;EAAsB,GAAI;CAAQ,CAAA;AAC9E;;AAGA,SAAS,cAAc,EAAE,WAAW,GAAG,SAAmC;CACxE,OAAO,oBAACA,SAAa,OAAd;EAAoB,aAAU;EAAiB,WAAW,GAAG,eAAe,OAAO,SAAS;EAAG,GAAI;CAAQ,CAAA;AACpH;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAuC;CAChF,OACE,oBAACA,SAAa,WAAd;EAAwB,aAAU;EAAqB,WAAW,GAAG,oBAAoB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAErH;;;;;;AAOA,SAAS,cAAc,EAAE,WAAW,UAAU,cAAc,WAAW,GAAG,SAAwC;CAEhH,MAAM,WAAWE,QAAM,OAAuB,IAAI;CAClD,MAAM,CAAC,WAAW,gBAAgBA,QAAM,SAAS,KAAK;CAEtD,QAAM,sBAAsB;EAC1B,MAAM,QAAQ,SAAS,SAAS;EAEhC,IAAI,CAAC,SAAS,OAAO,mBAAmB,aAAa;EAGrD,MAAM,YAAY,WAAW,iBAAiB,KAAK,CAAC,CAAC,SAAS,KAAK;EACnE,MAAM,WAAW,IAAI,qBAAqB,aAAa,MAAM,eAAe,YAAY,CAAC,CAAC;EAC1F,SAAS,QAAQ,KAAK;EACtB,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,CAAC;CAGL,OACE,qBAACF,SAAa,YAAd;EACE,aAAU;EACV,kBAAgB,YAAY,KAAK,KAAA;EACjC,OAAO;EACP,WAAW,GACT,WAAW,GACX,iEAGA,qFACA,SACF;EACA,GAAI;EAZN,UAAA,CAeE,oBAACA,SAAa,OAAd;GAAoB,KAAK;GAAU,cAAY;GAAW,WAAU;GACjE;EACiB,CAAA,GAEpB,oBAAC,QAAD;GAAM,WAAU;GACd,UAAA,oBAAC,sBAAD,CAAuB,CAAA;EACnB,CAAA,CACiB;;AAE7B;;AAGA,SAAS,aAAa,EACpB,WACA,UACA,aAAa,MACb,GAAG,SACkD;CACrD,OACE,qBAACA,SAAa,MAAd;EACE,aAAU;EACV,WAAW,GAGT,gFACA,CAAC,cAAc,QACf,SACF;EACA,GAAI;EATN,UAAA,CAWG,UACA,aACC,oBAACA,SAAa,YAAd;GACE,aAAU;GACV,cAAY,OAAO,aAAa,WAAW,UAAU,aAAa;GAGlE,WAAU;GAGV,UAAA,oBAAC,GAAD;IAAG,WAAU;IAAS,OAAO,EAAE,OAAO,UAAU;GAAI,CAAA;EAC7B,CAAA,IACvB,IACa;;AAEvB;;AAGA,SAAS,mBAAmB,EAAE,WAAW,SAAS,GAAG,SAAmC;CACtF,OACE,oBAACA,SAAa,OAAd;EACE,aAAU;EACV,UAAS,UAAS;GAChB,eAAe,KAAK;GACpB,UAAU,KAAK;EACjB;EACA,WAAW,GACT,YAGA,uFACA,SACF;EACA,GAAI;EACJ,GAAI;CACL,CAAA;AAEL;;AClZA,IAAM,eAAkC,CAAC;AAEzC,SAAS,mBAAmB,OAAsD;CAChF,OAAO,MAAM,aAAa;AAC5B;;AAGA,SAAS,WAAW,QAAwB;CAC1C,OAAO,OAAO,OAAO,iBAAiB,WAAW,OAAO,eAAe,OAAO;AAChF;;AAGA,SAAS,gBAAgB,aAA8B;CACrD,OAAO,OAAO,gBAAgB,WAAW,cAAc,KAAA;AACzD;AAWA,SAAS,iBAAiB,EACxB,gBACA,UACA,SACA,MACA,eACA,aACA,eASgB;CAChB,IAAI,CAAC,gBAAgB,OAAO;CAC5B,IAAI,YAAY,WAAW,OAAO;CAClC,IAAI,iBAAiB,IAAI,GAAG,OAAO;CACnC,IAAI,iBAAiB,CAAC,aAAa,OAAO;CAC1C,IAAI,gBAAgB,KAAA,KAAa,gBAAgB,WAAW,MAAM,KAAA,GAAW,OAAO;CACpF,IAAI,CAAC,UAAU,OAAO;CAEtB,IAAI,SAAS,MAAM,OAAO;CAC1B,OAAO;AACT;;AAGA,SAAS,gBAAgB,SAA2B,YAAgD;CAClG,MAAM,QAAQ,WAAW,KAAK;CAC9B,IAAI,CAAC,OAAO,OAAO,KAAA;CAEnB,IAAI,QAAQ,MAAK,WAAU,OAAO,UAAU,SAAS,WAAW,MAAM,MAAM,KAAK,GAAG,OAAO,KAAA;CAC3F,OAAO;EAAE,OAAO,QAAQ,MAAM;EAAI;CAAM;AAC1C;;AAGA,SAAS,kBAAkB;CACzB,MAAM,EAAE,aAAaG,SAAa,UAAU;CAC5C,QAAQ,QAAwB,UAC9B;EAAC,OAAO;EAAO,WAAW,MAAM;EAAG,GAAI,OAAO,YAAY,CAAC;CAAE,CAAC,CAAC,MAAK,SAAQ,SAAS,MAAM,KAAK,CAAC;AACrG;;AAGA,SAAS,qBAAqB,EAAE,UAAU,YAAsD;CAC9F,IAAI,UAAU,OAAO,KAAA;CACrB,OAAO,WAAW,mBAAmB;AACvC;AAEA,SAAS,gBAAgB,EACvB,IACA,WACA,iBACA,UACA,UACA,OACA,aASC;CACD,MAAM,cAAc,CAAC,iBAAiB,QAAQ,aAAa,SAAS,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAC3G,OAAO;EACL;EACA,cAAc,aAAa,qBAAqB;GAAE;GAAU;EAAS,CAAC;EACtE,GAAG,sBAAsB,EAAE,cAAc,UAAU,CAAC;EACpD,GAAG,oBAAoB,QAAQ,KAAK,CAAC;EACrC,oBAAoB,eAAe,KAAA;CACrC;AACF;AAIA,SAAS,iBAAiB,EAAE,eAAe,aAA6D;CACtG,OAAO,GAAG,iBAAiB,iBAAiB,SAAS;AACvD;AAEA,SAAS,mBAAmB,EAAE,UAAsC;CAClE,OACE,qBAAC,QAAD;EAAM,WAAW,eAAe;EAAhC,UAAA,CACE,oBAAC,QAAD;GAAM,WAAW,eAAe;GAAc,UAAA,OAAO;EAAY,CAAA,GAChE,OAAO,eAAe,oBAAC,QAAD;GAAM,WAAW,eAAe;GAAoB,UAAA,OAAO;EAAkB,CAAA,CAChG;;AAEV;AAEA,SAAS,oBAAoB,EAAE,OAAO,WAAmD;CACvF,OACE,oBAAC,OAAD;EAAK,WAAU;EACb,UAAA,oBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,WAAU;GACV,SAAS;GACT,MAAM,oBAAC,GAAD,CAAI,CAAA;GAET,UAAA;EACK,CAAA;CACL,CAAA;AAET;;AAGA,SAAS,uBAAuB,EAC9B,YACA,mBACA,WACA,OACA,WACA,UAQC;CACD,OACE,qBAAC,iBAAD;EAAwB;EAAkB;EAA1C,UAAA;GACG,aAAa,oBAAC,gBAAD,EAAgB,aAAa,kBAAoB,CAAA,IAAI;GACnE,oBAAC,eAAD,EAAA,UAAgB,UAAyB,CAAA;GACzC,oBAAC,cAAD,EAAA,WACI,WACA,qBAAC,cAAD;IAAiC,OAAO;IAAxC,UAAA;KACG,OAAO;KACR,oBAAC,oBAAD,EAA4B,OAAS,CAAA;KACpC,OAAO,MAAM,oBAAC,QAAD;MAAM,WAAW,eAAe;MAAY,UAAA,OAAO;KAAU,CAAA,IAAI;IACnE;GAJK,GAAA,OAAO,KAIZ,EAEJ,CAAA;GACb;EACc;;AAErB;AAUA,SAAS,sBAAsB,EAC7B,OACA,cACA,aACA,gBACA,QAOC;CACD,IAAI,UAAU,SACZ,OACE,oBAAC,eAAD;EACE,GAAI;EACJ,MAAM,iBAAiB,KAAK,IAAI,IAAI,KAAA,IAAY,KAAK;EACrD,aAAa,gBAAgB,WAAW;EACxC,OAAO,gBAAgB;EACvB,WAAW,KAAK;CACjB,CAAA;CAIL,OACE,oBAAC,iBAAD;EACE,GAAI;EACJ,SAAS,KAAK;EACd,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,MAAM,iBAAiB,KAAK,IAAI,IAAI,KAAA,IAAY,gBAAgB;EAChE,WAAW,iBAAiB,IAAI;EAE/B,UAAA,gBAAgB,gBAAgB,oBAAC,eAAD,EAA4B,YAAc,CAAA;CAC5D,CAAA;AAErB;AAEA,SAAS,wBAAwB,EAC/B,OACA,cACA,aACA,eACA,QAOC;CACD,IAAI,UAAU,SACZ,OACE,oBAAC,eAAD;EAAe,WAAW,KAAK;EAC7B,UAAA,oBAAC,eAAD,EAAA,WACI,UACA,qBAAAC,YAAA,EAAA,UAAA,CACG,MAAM,KAAI,SACT,oBAAC,cAAD,EAAA,UAAgC,KAAK,MAAoB,GAAtC,KAAK,KAAiC,CAC1D,GACD,oBAAC,oBAAD;GACE,GAAI;GACJ,aAAa,MAAM,WAAW,IAAI,gBAAgB,WAAW,IAAI,KAAA;EAClE,CAAA,CACD,EAAA,CAAA,EAES,CAAA;CACF,CAAA;CAInB,MAAM,OAAO,kBAAkB,IAAI,cAAc,GAAG,cAAc;CAClE,OACE,oBAAC,iBAAD;EACE,GAAI;EACJ,SAAS,KAAK;EACd,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,WAAW,iBAAiB,IAAI;EAEhC,UAAA,oBAAC,QAAD;GAAM,WAAW,GAAG,kBAAkB,KAAK,eAAe,WAAW;GAAI,UAAA;EAAW,CAAA;CACrE,CAAA;AAErB;AAIA,SAAS,eAAe,EACtB,OACA,cACA,SACA,OACA,eACA,cAAc,oBACd,oBAAoB,aACpB,YAAY,oBACZ,WACA,WAAW,OACX,UAAU,WACV,OAAO,MACP,MACA,cACA,WACA,QAAQ,SACR,cAAc,MACd,gBAAgB,OAChB,mBAAmB,OACnB,sBACmC;CAEnC,MAAM,CAAC,YAAY,iBAAiBC,QAAM,SAAS,EAAE;CACrD,MAAM,SAAS,gBAAgB;CAC/B,MAAM,UAAU,UAAU;CAC1B,MAAM,iBAAiB,QAAQ,MAAK,WAAU,OAAO,UAAU,KAAK;CACpE,MAAM,eAAe,mBAAmB,gBAAgB,SAAS,UAAU,IAAI,KAAA;CAC/E,MAAM,QAAQ,eAAe,CAAC,cAAc,GAAG,OAAO,IAAI;CAE1D,SAAS,uBAAuB,MAAc;EAC5C,cAAc,IAAI;EAClB,qBAAqB,IAAI;CAC3B;CAEA,SAAS,kBAAkB,MAA6B;EACtD,IAAI,CAAC,MAAM;EACX,gBAAgB,KAAK,KAAK;EAE1B,IAAI,CAAC,SAAS,uBAAuB,EAAE;CACzC;CAEA,OACE,qBAAC,cAAD;EACE,eAAA;EACO;EACC;EACR,mBAAmB;EAEnB,OAAO,kBAAkB;EAEzB,YAAY,UAAU,KAAA,IAAY;EAClC,oBAAoB;EACpB,eAAe;EACL;EACJ;EACQ;EAbhB,UAAA,CAeE,oBAAC,uBAAD;GACS;GACO;GACD;GACG;GAChB,MAAM;IAAE;IAAS;IAAM;IAAa;IAAe;GAAU;EAC9D,CAAA,GACD,oBAAC,wBAAD;GACE,YAAY,CAAC;GACM;GACR;GACJ;GACI;EACZ,CAAA,CACW;;AAElB;AAEA,SAAS,iBAAiB,EACxB,OACA,cACA,SACA,QAAQ,cACR,eACA,YACA,cAAc,qBACd,oBAAoB,aACpB,YAAY,oBACZ,WACA,WAAW,OACX,UAAU,WACV,OAAO,MACP,MACA,cACA,WACA,QAAQ,SACR,cAAc,MACd,gBAAgB,SACqB;CACrC,MAAM,SAAS,gBAAgB;CAC/B,MAAM,iBAAiB,IAAI,IAAI,KAAK;CACpC,MAAM,kBAAkB,QAAQ,QAAO,WAAU,eAAe,IAAI,OAAO,KAAK,CAAC;CACjF,MAAM,SACJ,cAAc,gBAAgB,SAAS,IACrC,oBAAC,qBAAD;EAAqB,OAAO;EAAY,eAAe,gBAAgB,CAAC,CAAC;CAAI,CAAA,IAC3E,KAAA;CAEN,OACE,qBAAC,cAAD;EACE,UAAA;EACA,eAAA;EACA,OAAO;EACC;EACR,OAAO;EACP,gBAAe,UAAS,gBAAgB,MAAM,KAAI,SAAQ,KAAK,KAAK,CAAC;EAC3D;EACJ;EACQ;EAThB,UAAA,CAWE,oBAAC,yBAAD;GACS;GACO;GACD;GACb,eAAe,gBAAgB;GAC/B,MAAM;IAAE;IAAS;IAAM;IAAa;IAAe;GAAU;EAC9D,CAAA,GACD,oBAAC,wBAAD;GACE,YAAY,UAAU;GACH;GACR;GACJ;GACI;GACH;EACT,CAAA,CACW;;AAElB;;;;;;;;;AAUA,SAAgBC,WAAS,OAAsB;CAC7C,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,gBAAgBD,QAAM,MAAM;CAClC,MAAM,WAAW,mBAAmB,KAAK;CACzC,MAAM,QAAQ,iBAAiB;EAC7B,gBAAgB,QAAQ,KAAK;EAC7B;EACA,SAAS,MAAM,WAAW;EAC1B,MAAM,MAAM,QAAQ;EACpB,eAAe,MAAM,iBAAiB;EACtC,aAAa,MAAM,eAAe;EAClC,aAAa,MAAM;CACrB,CAAC;CACD,MAAM,YAAY,MAAM,QAAQ;CAChC,MAAM,eAAe,gBAAgB;EACnC,IAAI,MAAM;EACV,WAAW,MAAM;EACjB,iBAAiB,MAAM;EACvB,UAAU,QAAQ,MAAM,MAAM,KAAK;EACnC;EACA,OAAO,MAAM;EACb;CACF,CAAC;CAED,MAAM,OAAO,mBAAmB,KAAK,IACnC,oBAAC,kBAAD;EAAkB,GAAI;EAAc;EAAqB;CAAe,CAAA,IAExE,oBAAC,gBAAD;EAAgB,GAAI;EAAc;EAAqB;CAAe,CAAA;CAGxE,IAAI,CAAC,MAAM,OAAO,OAAO;CAEzB,OACE,qBAAC,OAAD;EAAK,WAAW,eAAe;EAA/B,UAAA,CACG,MACD,oBAAC,WAAW,UAAZ;GAAqB,MAAM;GAAY,UAAA,MAAM;EAA2B,CAAA,CACrE;;AAET"}