@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 +1 @@
1
- {"version":3,"file":"Composer-CLTgWusX.js","names":[],"sources":["../src/ds/components/Composer/use-composer-pointer.ts","../src/ds/components/Composer/composer.tsx","../src/ds/components/Composer/composer-header.tsx","../src/ds/components/Composer/commands/composer-suggestions.tsx","../src/ds/components/Composer/commands/command-matches.ts","../src/ds/components/Composer/commands/use-composer-commands.ts"],"sourcesContent":["import { useState } from 'react';\nimport type { PointerEvent } from 'react';\n\nexport function useComposerPointer(enabled: boolean) {\n const [pointer, setPointer] = useState<{ x: number; y: number; angle: number }>();\n\n function trackPointer(event: PointerEvent<HTMLDivElement>) {\n if (!enabled || event.defaultPrevented) return;\n\n const bounds = event.currentTarget.getBoundingClientRect();\n const x = event.clientX - bounds.left;\n const y = event.clientY - bounds.top;\n const radians = Math.atan2(y - bounds.height / 2, x - bounds.width / 2);\n // conic-gradient starts at 12 o'clock, atan2 at 3 o'clock\n setPointer({ x, y, angle: (radians * 180) / Math.PI + 90 });\n }\n\n return {\n trackPointer,\n pointerStyle: {\n '--composer-spotlight-x': pointer && `${pointer.x}px`,\n '--composer-spotlight-y': pointer && `${pointer.y}px`,\n '--composer-ring-angle': pointer && `${pointer.angle}deg`,\n },\n };\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { ScrollArea } from '../ScrollArea';\nimport { useComposerPointer } from './use-composer-pointer';\nimport { textFieldAutofillProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\nimport './composer.css';\nimport './composer-ring.css';\nimport './composer-sending.css';\n\nexport type ComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport interface ComposerInputProps extends ComponentPropsWithoutRef<'textarea'> {\n variant?: 'inline' | 'textarea';\n maxHeight?: string;\n}\n\nexport const Composer = forwardRef<HTMLFormElement, ComposerProps>(({ children, ...props }, ref) => (\n <form ref={ref} data-slot=\"composer\" {...props}>\n {children}\n </form>\n));\nComposer.displayName = 'Composer';\n\nexport interface ComposerBoxProps extends ComponentPropsWithoutRef<'div'> {\n sendingPulseKey?: number;\n}\n\nexport const ComposerBox = forwardRef<HTMLDivElement, ComposerBoxProps>(\n ({ children, className, sendingPulseKey = 0, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-box\"\n className={cn(\n // The suggestions list and the input scroll flush with the top corners, so their scrollbars\n // take the inset for this radius.\n 'composer-box @container relative mx-auto mt-auto w-full max-w-3xl overflow-hidden rounded-[22px] border border-border transition-colors duration-normal scrollbar-inset-[22px] focus-within:border-border-strong',\n className,\n )}\n {...props}\n >\n <ComposerSendingPulse pulseKey={sendingPulseKey} />\n <div className=\"relative z-10\">{children}</div>\n </div>\n ),\n);\nComposerBox.displayName = 'ComposerBox';\n\nexport type ComposerTone = 'default' | 'green' | 'purple' | 'orange';\n\nexport interface ComposerRingProps extends ComponentPropsWithoutRef<'div'> {\n busy?: boolean;\n tone?: ComposerTone;\n}\n\nexport const ComposerRing = ({\n busy = false,\n tone = 'green',\n className,\n style,\n onPointerEnter,\n onPointerMove,\n ...props\n}: ComposerRingProps) => {\n const { trackPointer, pointerStyle } = useComposerPointer(!busy);\n\n return (\n <div\n data-slot=\"composer-ring\"\n data-composer-tone={tone}\n data-busy={busy ? 'true' : 'false'}\n className={cn('composer-ring relative mx-auto w-full max-w-3xl rounded-[23px] p-px', className)}\n style={{ ...pointerStyle, ...style }}\n onPointerEnter={event => {\n onPointerEnter?.(event);\n trackPointer(event);\n }}\n onPointerMove={event => {\n onPointerMove?.(event);\n trackPointer(event);\n }}\n {...props}\n />\n );\n};\nComposerRing.displayName = 'ComposerRing';\n\nexport const ComposerAttachments = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"region\"\n data-slot=\"composer-attachments\"\n className={cn('mx-auto w-full max-w-3xl pb-2', className)}\n {...props}\n />\n ),\n);\nComposerAttachments.displayName = 'ComposerAttachments';\n\nexport const ComposerInput = forwardRef<HTMLTextAreaElement, ComposerInputProps>(\n ({ className, variant = 'inline', maxHeight, autoComplete, ...props }, ref) => (\n <ScrollArea maxHeight={maxHeight ?? (variant === 'textarea' ? '16rem' : '13rem')}>\n <textarea\n ref={ref}\n data-slot=\"composer-input\"\n className={cn(\n 'field-sizing-content w-full resize-none overflow-hidden bg-transparent px-3 pt-2.5 pb-2 text-body text-muted-foreground outline-hidden placeholder:text-placeholder focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n variant === 'textarea' ? 'min-h-28' : 'min-h-10',\n className,\n )}\n {...props}\n {...textFieldAutofillProps(autoComplete)}\n />\n </ScrollArea>\n ),\n);\nComposerInput.displayName = 'ComposerInput';\n\nexport const ComposerActions = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"region\"\n data-slot=\"composer-actions\"\n className={cn('flex w-full flex-wrap items-end justify-between gap-2 px-3 pb-3', className)}\n {...props}\n />\n ),\n);\nComposerActions.displayName = 'ComposerActions';\n\nconst ComposerGradientColumn = ({ className }: { className?: string }) => (\n <div className={cn('flex size-full flex-col -space-y-3', className)}>\n <div className=\"w-full flex-1 bg-brand-green blur-xl\" />\n <div className=\"w-full flex-1 bg-product-observability blur-xl\" />\n <div className=\"w-full flex-1 bg-brand-green blur-xl\" />\n <div className=\"w-full flex-1 bg-product-observability blur-xl\" />\n </div>\n);\n\nconst ComposerSendingPulse = ({ pulseKey }: { pulseKey: number }) => {\n if (pulseKey === 0) return null;\n\n return (\n <div\n key={pulseKey}\n aria-hidden=\"true\"\n data-slot=\"composer-sending-pulse\"\n className=\"composer-sending pointer-events-none absolute top-0 left-[-10%] z-0 flex h-10 w-[120%] transform-gpu\"\n >\n <ComposerGradientColumn />\n <ComposerGradientColumn className=\"-translate-y-2\" />\n <ComposerGradientColumn />\n </div>\n );\n};\n\nexport interface ComposerToneLabelProps extends ComponentPropsWithoutRef<'span'> {\n tone: ComposerTone;\n}\n\nexport function ComposerToneLabel({ tone, className, ...props }: ComposerToneLabelProps) {\n return <span data-composer-tone={tone} className={cn('composer-tone-label', className)} {...props} />;\n}\n","import { Collapsible } from '@base-ui/react/collapsible';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport './composer-header.css';\n\nexport interface ComposerHeaderProps extends ComponentPropsWithoutRef<'div'> {\n /** Animate visibility while retaining content through the closing transition. */\n open?: boolean;\n}\n\n/** Optional context above ComposerRing or ComposerBox. Empty rendered content occupies no space. */\nexport const ComposerHeader = forwardRef<HTMLDivElement, ComposerHeaderProps>(\n ({ className, children, open = true, ...props }, ref) => (\n <Collapsible.Root\n ref={ref}\n open={open}\n data-slot=\"composer-header\"\n className={cn('composer-header relative isolate mx-auto w-full max-w-3xl', className)}\n {...props}\n >\n <Collapsible.Panel className=\"composer-header-panel\">\n <div\n data-slot=\"composer-header-surface\"\n className=\"flex flex-col gap-3 overflow-hidden rounded-t-[23px] border border-b-0 border-surface-rim bg-card px-3 pt-3 pb-8 text-body-sm text-muted-foreground empty:hidden\"\n >\n {children}\n </div>\n </Collapsible.Panel>\n </Collapsible.Root>\n ),\n);\nComposerHeader.displayName = 'ComposerHeader';\n\nexport interface ComposerHeaderRowProps extends ComponentPropsWithoutRef<'div'> {\n tone?: 'default' | 'destructive' | 'success';\n}\n\nexport const ComposerHeaderRow = forwardRef<HTMLDivElement, ComposerHeaderRowProps>(\n ({ className, tone = 'default', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-row\"\n className={cn(\n 'flex min-w-0 flex-wrap items-center gap-2 [&>svg]:size-icon-sm [&>svg]:shrink-0',\n tone === 'destructive' && 'text-destructive-foreground',\n tone === 'success' && 'text-success-indicator',\n className,\n )}\n {...props}\n />\n ),\n);\nComposerHeaderRow.displayName = 'ComposerHeaderRow';\n\nexport type ComposerHeaderContentProps = ComponentPropsWithoutRef<'div'>;\n\nexport const ComposerHeaderContent = forwardRef<HTMLDivElement, ComposerHeaderContentProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-content\"\n className={cn('min-w-0 flex-1 wrap-anywhere', className)}\n {...props}\n />\n ),\n);\nComposerHeaderContent.displayName = 'ComposerHeaderContent';\n\nexport type ComposerHeaderActionsProps = ComponentPropsWithoutRef<'div'>;\n\nexport const ComposerHeaderActions = forwardRef<HTMLDivElement, ComposerHeaderActionsProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-actions\"\n className={cn('ml-auto flex max-w-full shrink-0 flex-wrap items-center gap-2', className)}\n {...props}\n />\n ),\n);\nComposerHeaderActions.displayName = 'ComposerHeaderActions';\n","import { Collapsible } from '@base-ui/react/collapsible';\nimport { ArrowLeft, Check } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { ScrollArea, ScrollAreaViewport } from '../../ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport interface ComposerSuggestionItem {\n id: string;\n label: string;\n description?: string;\n active?: boolean;\n}\n\nexport interface ComposerSuggestionsProps {\n id: string;\n items: readonly ComposerSuggestionItem[];\n activeIndex: number;\n contextLabel?: string;\n onBack?: () => void;\n onSelect: (index: number) => void;\n}\n\nexport function ComposerSuggestions({\n id,\n items,\n activeIndex,\n contextLabel,\n onBack,\n onSelect,\n}: ComposerSuggestionsProps) {\n const activeOption = useRef<HTMLButtonElement>(null);\n const activeItemId = items[activeIndex]?.id;\n const label = contextLabel ? `${contextLabel} options` : 'Slash commands';\n\n useEffect(() => {\n activeOption.current?.scrollIntoView({ block: 'nearest' });\n }, [activeItemId]);\n\n return (\n <Collapsible.Root open={items.length > 0}>\n <Collapsible.Panel className=\"h-[var(--collapsible-panel-height)] overflow-hidden transition-[height] duration-normal ease-out-custom data-[ending-style]:h-0 data-[starting-style]:h-0 motion-reduce:transition-none\">\n <div className=\"border-b border-border\" role=\"region\" aria-label={label}>\n {contextLabel && onBack && (\n <div className=\"border-b border-border px-1.5 py-1\">\n <button\n type=\"button\"\n className=\"flex items-center gap-1.5 rounded-xl px-2 py-1.5 text-caption text-muted-foreground transition-colors duration-normal ease-out-custom hover:bg-fill-subtle hover:text-foreground motion-reduce:transition-none\"\n aria-label=\"Back to slash commands\"\n onMouseDown={event => event.preventDefault()}\n onClick={onBack}\n >\n <ArrowLeft size={14} aria-hidden />\n <span>{contextLabel}</span>\n </button>\n </div>\n )}\n <ScrollArea maxHeight=\"min(22rem, 50dvh)\">\n <ScrollAreaViewport className=\"overscroll-y-contain\">\n <div id={id} role=\"listbox\" aria-label={label} className=\"flex flex-col gap-px p-1.5\">\n {items.map((item, index) => (\n <button\n ref={index === activeIndex ? activeOption : undefined}\n id={item.id}\n key={item.id}\n type=\"button\"\n role=\"option\"\n tabIndex={-1}\n aria-selected={index === activeIndex}\n aria-current={item.active ? 'true' : undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between gap-4 rounded-2xl px-2 py-1.5 text-left text-caption transition-colors duration-normal ease-out-custom motion-reduce:transition-none',\n index === activeIndex\n ? 'bg-fill-subtle text-foreground'\n : 'text-muted-foreground hover:bg-fill-subtle hover:text-foreground',\n )}\n onMouseDown={event => event.preventDefault()}\n onClick={() => onSelect(index)}\n >\n <span className=\"max-w-[60%] min-w-0 shrink-0 truncate\" title={item.label}>\n {item.label}\n </span>\n {(item.description || item.active) && (\n <span className=\"flex min-w-0 items-center gap-1.5 text-right\">\n {item.description && (\n <span className=\"truncate\" title={item.description}>\n {item.description}\n </span>\n )}\n {item.active && (\n <span className=\"flex shrink-0 items-center gap-1\">\n <Check size={13} aria-hidden />\n Current\n </span>\n )}\n </span>\n )}\n </button>\n ))}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n </div>\n </Collapsible.Panel>\n </Collapsible.Root>\n );\n}\n","export interface ComposerCommandOption {\n value: string;\n label: string;\n description?: string;\n active?: boolean;\n}\n\nexport interface ComposerCommand {\n name: string;\n description: string;\n options?: readonly ComposerCommandOption[];\n}\n\nexport function matchCommands<T extends Pick<ComposerCommand, 'name'>>(commands: readonly T[], draft: string): T[] {\n if (!draft.startsWith('/')) return [];\n const query = draft.slice(1).toLowerCase();\n if (/\\s/.test(query)) return [];\n return commands.filter(command => command.name.toLowerCase().startsWith(query));\n}\n\nexport function matchCommandOptions<T extends ComposerCommand>(commands: readonly T[], draft: string) {\n if (!draft.startsWith('/')) return undefined;\n const firstWhitespace = draft.search(/\\s/);\n if (firstWhitespace === -1) return undefined;\n const command = commands.find(candidate => candidate.name === draft.slice(1, firstWhitespace));\n if (!command?.options) return undefined;\n const query = draft.slice(firstWhitespace).trim().toLowerCase();\n if (/\\s/.test(query)) return undefined;\n const options = command.options.filter(option => option.value.toLowerCase().startsWith(query));\n return options.length > 0 ? { command, options } : undefined;\n}\n","import type { ChangeEvent, ComponentPropsWithoutRef, RefObject } from 'react';\nimport { useId, useState } from 'react';\nimport type { ComposerCommand, ComposerCommandOption } from './command-matches';\nimport { matchCommandOptions, matchCommands } from './command-matches';\nimport type { ComposerSuggestionItem, ComposerSuggestionsProps } from './composer-suggestions';\nimport { useKeydown } from '@/lib/keyboard/use-keydown';\n\nfunction createSuggestionItems(\n listId: string,\n commands: readonly ComposerCommand[],\n options?: readonly ComposerCommandOption[],\n): ComposerSuggestionItem[] {\n if (options)\n return options.map(option => ({ ...option, id: `${listId}-option-${encodeURIComponent(option.value)}` }));\n return commands.map(command => ({\n id: `${listId}-command-${encodeURIComponent(command.name)}`,\n label: `/${command.name}`,\n description: command.description,\n }));\n}\n\nexport interface UseComposerCommandsProps {\n commands: readonly ComposerCommand[];\n value: string;\n onValueChange: (value: string) => void;\n onSubmit: (value: string) => void;\n inputRef: RefObject<HTMLTextAreaElement | null>;\n enabled?: boolean;\n}\n\nexport function useComposerCommands({\n commands,\n value,\n onValueChange,\n onSubmit,\n inputRef,\n enabled = true,\n}: UseComposerCommandsProps) {\n const listId = useId();\n const [navigation, setNavigation] = useState({ value: '', index: 0 });\n const optionMatch = enabled ? matchCommandOptions(commands, value) : undefined;\n const matchingCommands = enabled && !optionMatch ? matchCommands(commands, value) : [];\n const items = createSuggestionItems(listId, matchingCommands, optionMatch?.options);\n const boundedIndex = Math.min(navigation.index, Math.max(0, items.length - 1));\n const activeIndex = navigation.value === value ? boundedIndex : 0;\n\n function updateValue(nextValue: string) {\n setNavigation({ value: nextValue, index: 0 });\n onValueChange(nextValue);\n }\n\n function returnToCommands() {\n updateValue(optionMatch ? `/${optionMatch.command.name}` : '');\n inputRef.current?.focus();\n }\n\n function selectSuggestion(index: number) {\n inputRef.current?.focus();\n if (optionMatch) {\n const option = optionMatch.options[index];\n if (option) onSubmit(`/${optionMatch.command.name} ${option.value}`);\n return;\n }\n const command = matchingCommands[index];\n if (command) updateValue(`/${command.name} `);\n }\n\n function moveSelection(direction: number) {\n setNavigation({ value, index: (activeIndex + direction + items.length) % items.length });\n }\n\n function shouldHandleCommandKey(event: KeyboardEvent) {\n const command = matchingCommands[activeIndex];\n const submitExactCommand =\n matchingCommands.length === 1 && value.toLowerCase() === `/${command?.name}` && !command?.options?.length;\n return event.key !== 'Enter' || !submitExactCommand;\n }\n\n useKeydown(\n {\n ArrowDown: () => moveSelection(1),\n ArrowUp: () => moveSelection(-1),\n Escape: returnToCommands,\n Tab: () => selectSuggestion(activeIndex),\n Enter: () => selectSuggestion(activeIndex),\n },\n {\n target: inputRef,\n enabled: items.length > 0,\n shouldHandle: shouldHandleCommandKey,\n },\n );\n\n const inputProps = {\n value,\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => updateValue(event.target.value),\n 'aria-autocomplete': 'list',\n 'aria-controls': items.length > 0 ? listId : undefined,\n 'aria-activedescendant': items[activeIndex]?.id,\n } satisfies ComponentPropsWithoutRef<'textarea'>;\n\n const suggestionsProps: ComposerSuggestionsProps = {\n id: listId,\n items,\n activeIndex,\n contextLabel: optionMatch ? `/${optionMatch.command.name}` : undefined,\n onBack: optionMatch ? returnToCommands : undefined,\n onSelect: selectSuggestion,\n };\n\n return { inputProps, suggestionsProps };\n}\n"],"mappings":";;;;;;;;;AAGA,SAAgB,mBAAmB,SAAkB;CACnD,MAAM,CAAC,SAAS,cAAc,SAAkD;CAEhF,SAAS,aAAa,OAAqC;EACzD,IAAI,CAAC,WAAW,MAAM,kBAAkB;EAExC,MAAM,SAAS,MAAM,cAAc,sBAAsB;EACzD,MAAM,IAAI,MAAM,UAAU,OAAO;EACjC,MAAM,IAAI,MAAM,UAAU,OAAO;EACjC,MAAM,UAAU,KAAK,MAAM,IAAI,OAAO,SAAS,GAAG,IAAI,OAAO,QAAQ,CAAC;EAEtE,WAAW;GAAE;GAAG;GAAG,OAAQ,UAAU,MAAO,KAAK,KAAK;EAAG,CAAC;CAC5D;CAEA,OAAO;EACL;EACA,cAAc;GACZ,0BAA0B,WAAW,GAAG,QAAQ,EAAE;GAClD,0BAA0B,WAAW,GAAG,QAAQ,EAAE;GAClD,yBAAyB,WAAW,GAAG,QAAQ,MAAM;EACvD;CACF;AACF;;ACNA,IAAa,WAAW,YAA4C,EAAE,UAAU,GAAG,SAAS,QAC1F,oBAAC,QAAD;CAAW;CAAK,aAAU;CAAW,GAAI;CACtC;AACG,CAAA,CACP;AACD,SAAS,cAAc;AAMvB,IAAa,cAAc,YACxB,EAAE,UAAU,WAAW,kBAAkB,GAAG,GAAG,SAAS,QACvD,qBAAC,OAAD;CACO;CACL,aAAU;CACV,WAAW,GAGT,oNACA,SACF;CACA,GAAI;CATN,UAAA,CAWE,oBAAC,sBAAD,EAAsB,UAAU,gBAAkB,CAAA,GAClD,oBAAC,OAAD;EAAK,WAAU;EAAiB;CAAc,CAAA,CAC3C;AAET,CAAA,CAAA;AACA,YAAY,cAAc;AAS1B,IAAa,gBAAgB,EAC3B,OAAO,OACP,OAAO,SACP,WACA,OACA,gBACA,eACA,GAAG,YACoB;CACvB,MAAM,EAAE,cAAc,iBAAiB,mBAAmB,CAAC,IAAI;CAE/D,OACE,oBAAC,OAAD;EACE,aAAU;EACV,sBAAoB;EACpB,aAAW,OAAO,SAAS;EAC3B,WAAW,GAAG,uEAAuE,SAAS;EAC9F,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EACnC,iBAAgB,UAAS;GACvB,iBAAiB,KAAK;GACtB,aAAa,KAAK;EACpB;EACA,gBAAe,UAAS;GACtB,gBAAgB,KAAK;GACrB,aAAa,KAAK;EACpB;EACA,GAAI;CACL,CAAA;AAEL;AACA,aAAa,cAAc;AAE3B,IAAa,sBAAsB,YAChC,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,MAAK;CACL,aAAU;CACV,WAAW,GAAG,iCAAiC,SAAS;CACxD,GAAI;AACL,CAAA,CAEL;AACA,oBAAoB,cAAc;AAElC,IAAa,gBAAgB,YAC1B,EAAE,WAAW,UAAU,UAAU,WAAW,cAAc,GAAG,SAAS,QACrE,oBAAC,YAAD;CAAY,WAAW,cAAc,YAAY,aAAa,UAAU;CACtE,UAAA,oBAAC,YAAD;EACO;EACL,aAAU;EACV,WAAW,GACT,4OACA,YAAY,aAAa,aAAa,YACtC,SACF;EACA,GAAI;EACJ,GAAI,uBAAuB,YAAY;CACxC,CAAA;AACS,CAAA,CAEhB;AACA,cAAc,cAAc;AAE5B,IAAa,kBAAkB,YAC5B,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,MAAK;CACL,aAAU;CACV,WAAW,GAAG,mEAAmE,SAAS;CAC1F,GAAI;AACL,CAAA,CAEL;AACA,gBAAgB,cAAc;AAE9B,IAAM,0BAA0B,EAAE,gBAChC,qBAAC,OAAD;CAAK,WAAW,GAAG,sCAAsC,SAAS;CAAlE,UAAA;EACE,oBAAC,OAAD,EAAK,WAAU,uCAAwC,CAAA;EACvD,oBAAC,OAAD,EAAK,WAAU,iDAAkD,CAAA;EACjE,oBAAC,OAAD,EAAK,WAAU,uCAAwC,CAAA;EACvD,oBAAC,OAAD,EAAK,WAAU,iDAAkD,CAAA;CAC9D;;AAGP,IAAM,wBAAwB,EAAE,eAAqC;CACnE,IAAI,aAAa,GAAG,OAAO;CAE3B,OACE,qBAAC,OAAD;EAEE,eAAY;EACZ,aAAU;EACV,WAAU;EAJZ,UAAA;GAME,oBAAC,wBAAD,CAAyB,CAAA;GACzB,oBAAC,wBAAD,EAAwB,WAAU,iBAAkB,CAAA;GACpD,oBAAC,wBAAD,CAAyB,CAAA;EACtB;CARE,GAAA,QAQF;AAET;AAMA,SAAgB,kBAAkB,EAAE,MAAM,WAAW,GAAG,SAAiC;CACvF,OAAO,oBAAC,QAAD;EAAM,sBAAoB;EAAM,WAAW,GAAG,uBAAuB,SAAS;EAAG,GAAI;CAAQ,CAAA;AACtG;;;ACxJA,IAAa,iBAAiB,YAC3B,EAAE,WAAW,UAAU,OAAO,MAAM,GAAG,SAAS,QAC/C,oBAAC,YAAY,MAAb;CACO;CACC;CACN,aAAU;CACV,WAAW,GAAG,6DAA6D,SAAS;CACpF,GAAI;CAEJ,UAAA,oBAAC,YAAY,OAAb;EAAmB,WAAU;EAC3B,UAAA,oBAAC,OAAD;GACE,aAAU;GACV,WAAU;GAET;EACE,CAAA;CACY,CAAA;AACH,CAAA,CAEtB;AACA,eAAe,cAAc;AAM7B,IAAa,oBAAoB,YAC9B,EAAE,WAAW,OAAO,WAAW,GAAG,SAAS,QAC1C,oBAAC,OAAD;CACO;CACL,aAAU;CACV,WAAW,GACT,mFACA,SAAS,iBAAiB,+BAC1B,SAAS,aAAa,0BACtB,SACF;CACA,GAAI;AACL,CAAA,CAEL;AACA,kBAAkB,cAAc;AAIhC,IAAa,wBAAwB,YAClC,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,aAAU;CACV,WAAW,GAAG,gCAAgC,SAAS;CACvD,GAAI;AACL,CAAA,CAEL;AACA,sBAAsB,cAAc;AAIpC,IAAa,wBAAwB,YAClC,EAAE,WAAW,GAAG,SAAS,QACxB,oBAAC,OAAD;CACO;CACL,aAAU;CACV,WAAW,GAAG,iEAAiE,SAAS;CACxF,GAAI;AACL,CAAA,CAEL;AACA,sBAAsB,cAAc;;AC7DpC,SAAgB,oBAAoB,EAClC,IACA,OACA,aACA,cACA,QACA,YAC2B;CAC3B,MAAM,eAAe,OAA0B,IAAI;CACnD,MAAM,eAAe,MAAM,YAAY,EAAE;CACzC,MAAM,QAAQ,eAAe,GAAG,aAAa,YAAY;CAEzD,gBAAgB;EACd,aAAa,SAAS,eAAe,EAAE,OAAO,UAAU,CAAC;CAC3D,GAAG,CAAC,YAAY,CAAC;CAEjB,OACE,oBAAC,YAAY,MAAb;EAAkB,MAAM,MAAM,SAAS;EACrC,UAAA,oBAAC,YAAY,OAAb;GAAmB,WAAU;GAC3B,UAAA,qBAAC,OAAD;IAAK,WAAU;IAAyB,MAAK;IAAS,cAAY;IAAlE,UAAA,CACG,gBAAgB,UACf,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,qBAAC,UAAD;MACE,MAAK;MACL,WAAU;MACV,cAAW;MACX,cAAa,UAAS,MAAM,eAAe;MAC3C,SAAS;MALX,UAAA,CAOE,oBAAC,WAAD;OAAW,MAAM;OAAI,eAAA;MAAa,CAAA,GAClC,oBAAC,QAAD,EAAA,UAAO,aAAmB,CAAA,CACpB;;IACL,CAAA,GAEP,oBAAC,YAAD;KAAY,WAAU;KACpB,UAAA,oBAAC,oBAAD;MAAoB,WAAU;MAC5B,UAAA,oBAAC,OAAD;OAAS;OAAI,MAAK;OAAU,cAAY;OAAO,WAAU;OACtD,UAAA,MAAM,KAAK,MAAM,UAChB,qBAAC,UAAD;QACE,KAAK,UAAU,cAAc,eAAe,KAAA;QAC5C,IAAI,KAAK;QAET,MAAK;QACL,MAAK;QACL,UAAU;QACV,iBAAe,UAAU;QACzB,gBAAc,KAAK,SAAS,SAAS,KAAA;QACrC,WAAW,GACT,gMACA,UAAU,cACN,mCACA,kEACN;QACA,cAAa,UAAS,MAAM,eAAe;QAC3C,eAAe,SAAS,KAAK;QAhB/B,UAAA,CAkBE,oBAAC,QAAD;SAAM,WAAU;SAAwC,OAAO,KAAK;SACjE,UAAA,KAAK;QACF,CAAA,IACJ,KAAK,eAAe,KAAK,WACzB,qBAAC,QAAD;SAAM,WAAU;SAAhB,UAAA,CACG,KAAK,eACJ,oBAAC,QAAD;UAAM,WAAU;UAAW,OAAO,KAAK;UACpC,UAAA,KAAK;SACF,CAAA,GAEP,KAAK,UACJ,qBAAC,QAAD;UAAM,WAAU;UAAhB,UAAA,CACE,oBAAC,OAAD;WAAO,MAAM;WAAI,eAAA;UAAa,CAAA,GAAC,SAE3B;SAEJ,CAAA,CAAA;QAEF,CAAA,CAAA;OAjCD,GAAA,KAAK,EAiCJ,CACT;MACE,CAAA;KACa,CAAA;IACV,CAAA,CACT;;EACY,CAAA;CACH,CAAA;AAEtB;;AC5FA,SAAgB,cAAuD,UAAwB,OAAoB;CACjH,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC;CACpC,MAAM,QAAQ,MAAM,MAAM,CAAC,CAAC,CAAC,YAAY;CACzC,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO,CAAC;CAC9B,OAAO,SAAS,QAAO,YAAW,QAAQ,KAAK,YAAY,CAAC,CAAC,WAAW,KAAK,CAAC;AAChF;AAEA,SAAgB,oBAA+C,UAAwB,OAAe;CACpG,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO,KAAA;CACnC,MAAM,kBAAkB,MAAM,OAAO,IAAI;CACzC,IAAI,oBAAoB,IAAI,OAAO,KAAA;CACnC,MAAM,UAAU,SAAS,MAAK,cAAa,UAAU,SAAS,MAAM,MAAM,GAAG,eAAe,CAAC;CAC7F,IAAI,CAAC,SAAS,SAAS,OAAO,KAAA;CAC9B,MAAM,QAAQ,MAAM,MAAM,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY;CAC9D,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO,KAAA;CAC7B,MAAM,UAAU,QAAQ,QAAQ,QAAO,WAAU,OAAO,MAAM,YAAY,CAAC,CAAC,WAAW,KAAK,CAAC;CAC7F,OAAO,QAAQ,SAAS,IAAI;EAAE;EAAS;CAAQ,IAAI,KAAA;AACrD;;ACvBA,SAAS,sBACP,QACA,UACA,SAC0B;CAC1B,IAAI,SACF,OAAO,QAAQ,KAAI,YAAW;EAAE,GAAG;EAAQ,IAAI,GAAG,OAAO,UAAU,mBAAmB,OAAO,KAAK;CAAI,EAAE;CAC1G,OAAO,SAAS,KAAI,aAAY;EAC9B,IAAI,GAAG,OAAO,WAAW,mBAAmB,QAAQ,IAAI;EACxD,OAAO,IAAI,QAAQ;EACnB,aAAa,QAAQ;CACvB,EAAE;AACJ;AAWA,SAAgB,oBAAoB,EAClC,UACA,OACA,eACA,UACA,UACA,UAAU,QACiB;CAC3B,MAAM,SAAS,MAAM;CACrB,MAAM,CAAC,YAAY,iBAAiB,SAAS;EAAE,OAAO;EAAI,OAAO;CAAE,CAAC;CACpE,MAAM,cAAc,UAAU,oBAAoB,UAAU,KAAK,IAAI,KAAA;CACrE,MAAM,mBAAmB,WAAW,CAAC,cAAc,cAAc,UAAU,KAAK,IAAI,CAAC;CACrF,MAAM,QAAQ,sBAAsB,QAAQ,kBAAkB,aAAa,OAAO;CAClF,MAAM,eAAe,KAAK,IAAI,WAAW,OAAO,KAAK,IAAI,GAAG,MAAM,SAAS,CAAC,CAAC;CAC7E,MAAM,cAAc,WAAW,UAAU,QAAQ,eAAe;CAEhE,SAAS,YAAY,WAAmB;EACtC,cAAc;GAAE,OAAO;GAAW,OAAO;EAAE,CAAC;EAC5C,cAAc,SAAS;CACzB;CAEA,SAAS,mBAAmB;EAC1B,YAAY,cAAc,IAAI,YAAY,QAAQ,SAAS,EAAE;EAC7D,SAAS,SAAS,MAAM;CAC1B;CAEA,SAAS,iBAAiB,OAAe;EACvC,SAAS,SAAS,MAAM;EACxB,IAAI,aAAa;GACf,MAAM,SAAS,YAAY,QAAQ;GACnC,IAAI,QAAQ,SAAS,IAAI,YAAY,QAAQ,KAAK,GAAG,OAAO,OAAO;GACnE;EACF;EACA,MAAM,UAAU,iBAAiB;EACjC,IAAI,SAAS,YAAY,IAAI,QAAQ,KAAK,EAAE;CAC9C;CAEA,SAAS,cAAc,WAAmB;EACxC,cAAc;GAAE;GAAO,QAAQ,cAAc,YAAY,MAAM,UAAU,MAAM;EAAO,CAAC;CACzF;CAEA,SAAS,uBAAuB,OAAsB;EACpD,MAAM,UAAU,iBAAiB;EACjC,MAAM,qBACJ,iBAAiB,WAAW,KAAK,MAAM,YAAY,MAAM,IAAI,SAAS,UAAU,CAAC,SAAS,SAAS;EACrG,OAAO,MAAM,QAAQ,WAAW,CAAC;CACnC;CAEA,WACE;EACE,iBAAiB,cAAc,CAAC;EAChC,eAAe,cAAc,EAAE;EAC/B,QAAQ;EACR,WAAW,iBAAiB,WAAW;EACvC,aAAa,iBAAiB,WAAW;CAC3C,GACA;EACE,QAAQ;EACR,SAAS,MAAM,SAAS;EACxB,cAAc;CAChB,CACF;CAmBA,OAAO;EAAE,YAAA;GAhBP;GACA,WAAW,UAA4C,YAAY,MAAM,OAAO,KAAK;GACrF,qBAAqB;GACrB,iBAAiB,MAAM,SAAS,IAAI,SAAS,KAAA;GAC7C,yBAAyB,MAAM,YAAY,EAAE;EAYtC;EAAY,kBAAA;GARnB,IAAI;GACJ;GACA;GACA,cAAc,cAAc,IAAI,YAAY,QAAQ,SAAS,KAAA;GAC7D,QAAQ,cAAc,mBAAmB,KAAA;GACzC,UAAU;EAGS;CAAiB;AACxC"}
1
+ {"version":3,"file":"Composer-D1gF-0jZ.js","names":[],"sources":["../src/ds/components/Composer/use-composer-pointer.ts","../src/ds/components/Composer/composer.tsx","../src/ds/components/Composer/composer-header.tsx","../src/ds/components/Composer/commands/composer-suggestions.tsx","../src/ds/components/Composer/commands/command-matches.ts","../src/ds/components/Composer/commands/use-composer-commands.ts"],"sourcesContent":["import { useState } from 'react';\nimport type { PointerEvent } from 'react';\n\nexport function useComposerPointer(enabled: boolean) {\n const [pointer, setPointer] = useState<{ x: number; y: number; angle: number }>();\n\n function trackPointer(event: PointerEvent<HTMLDivElement>) {\n if (!enabled || event.defaultPrevented) return;\n\n const bounds = event.currentTarget.getBoundingClientRect();\n const x = event.clientX - bounds.left;\n const y = event.clientY - bounds.top;\n const radians = Math.atan2(y - bounds.height / 2, x - bounds.width / 2);\n // conic-gradient starts at 12 o'clock, atan2 at 3 o'clock\n setPointer({ x, y, angle: (radians * 180) / Math.PI + 90 });\n }\n\n return {\n trackPointer,\n pointerStyle: {\n '--composer-spotlight-x': pointer && `${pointer.x}px`,\n '--composer-spotlight-y': pointer && `${pointer.y}px`,\n '--composer-ring-angle': pointer && `${pointer.angle}deg`,\n },\n };\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { ScrollArea } from '../ScrollArea';\nimport { useComposerPointer } from './use-composer-pointer';\nimport { textFieldAutofillProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\nimport './composer.css';\nimport './composer-ring.css';\nimport './composer-sending.css';\n\nexport type ComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport interface ComposerInputProps extends ComponentPropsWithoutRef<'textarea'> {\n variant?: 'inline' | 'textarea';\n maxHeight?: string;\n}\n\nexport const Composer = forwardRef<HTMLFormElement, ComposerProps>(({ children, ...props }, ref) => (\n <form ref={ref} data-slot=\"composer\" {...props}>\n {children}\n </form>\n));\nComposer.displayName = 'Composer';\n\nexport interface ComposerBoxProps extends ComponentPropsWithoutRef<'div'> {\n sendingPulseKey?: number;\n}\n\nexport const ComposerBox = forwardRef<HTMLDivElement, ComposerBoxProps>(\n ({ children, className, sendingPulseKey = 0, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-box\"\n className={cn(\n // The suggestions list and the input scroll flush with the top corners, so their scrollbars\n // take the inset for this radius.\n 'composer-box @container relative mx-auto mt-auto w-full max-w-3xl overflow-hidden rounded-[22px] border border-border transition-colors duration-normal scrollbar-inset-[22px] focus-within:border-border-strong',\n className,\n )}\n {...props}\n >\n <ComposerSendingPulse pulseKey={sendingPulseKey} />\n <div className=\"relative z-10\">{children}</div>\n </div>\n ),\n);\nComposerBox.displayName = 'ComposerBox';\n\nexport type ComposerTone = 'default' | 'green' | 'purple' | 'orange';\n\nexport interface ComposerRingProps extends ComponentPropsWithoutRef<'div'> {\n busy?: boolean;\n tone?: ComposerTone;\n}\n\nexport const ComposerRing = ({\n busy = false,\n tone = 'green',\n className,\n style,\n onPointerEnter,\n onPointerMove,\n ...props\n}: ComposerRingProps) => {\n const { trackPointer, pointerStyle } = useComposerPointer(!busy);\n\n return (\n <div\n data-slot=\"composer-ring\"\n data-composer-tone={tone}\n data-busy={busy ? 'true' : 'false'}\n className={cn('composer-ring relative mx-auto w-full max-w-3xl rounded-[23px] p-px', className)}\n style={{ ...pointerStyle, ...style }}\n onPointerEnter={event => {\n onPointerEnter?.(event);\n trackPointer(event);\n }}\n onPointerMove={event => {\n onPointerMove?.(event);\n trackPointer(event);\n }}\n {...props}\n />\n );\n};\nComposerRing.displayName = 'ComposerRing';\n\nexport const ComposerAttachments = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"region\"\n data-slot=\"composer-attachments\"\n className={cn('mx-auto w-full max-w-3xl pb-2', className)}\n {...props}\n />\n ),\n);\nComposerAttachments.displayName = 'ComposerAttachments';\n\nexport const ComposerInput = forwardRef<HTMLTextAreaElement, ComposerInputProps>(\n ({ className, variant = 'inline', maxHeight, autoComplete, ...props }, ref) => (\n <ScrollArea maxHeight={maxHeight ?? (variant === 'textarea' ? '16rem' : '13rem')}>\n <textarea\n ref={ref}\n data-slot=\"composer-input\"\n className={cn(\n 'field-sizing-content w-full resize-none overflow-hidden bg-transparent px-3 pt-2.5 pb-2 text-body text-muted-foreground outline-hidden placeholder:text-placeholder focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n variant === 'textarea' ? 'min-h-28' : 'min-h-10',\n className,\n )}\n {...props}\n {...textFieldAutofillProps(autoComplete)}\n />\n </ScrollArea>\n ),\n);\nComposerInput.displayName = 'ComposerInput';\n\nexport const ComposerActions = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"region\"\n data-slot=\"composer-actions\"\n className={cn('flex w-full flex-wrap items-end justify-between gap-2 px-3 pb-3', className)}\n {...props}\n />\n ),\n);\nComposerActions.displayName = 'ComposerActions';\n\nconst ComposerGradientColumn = ({ className }: { className?: string }) => (\n <div className={cn('flex size-full flex-col -space-y-3', className)}>\n <div className=\"w-full flex-1 bg-brand-green blur-xl\" />\n <div className=\"w-full flex-1 bg-product-observability blur-xl\" />\n <div className=\"w-full flex-1 bg-brand-green blur-xl\" />\n <div className=\"w-full flex-1 bg-product-observability blur-xl\" />\n </div>\n);\n\nconst ComposerSendingPulse = ({ pulseKey }: { pulseKey: number }) => {\n if (pulseKey === 0) return null;\n\n return (\n <div\n key={pulseKey}\n aria-hidden=\"true\"\n data-slot=\"composer-sending-pulse\"\n className=\"composer-sending pointer-events-none absolute top-0 left-[-10%] z-0 flex h-10 w-[120%] transform-gpu\"\n >\n <ComposerGradientColumn />\n <ComposerGradientColumn className=\"-translate-y-2\" />\n <ComposerGradientColumn />\n </div>\n );\n};\n\nexport interface ComposerToneLabelProps extends ComponentPropsWithoutRef<'span'> {\n tone: ComposerTone;\n}\n\nexport function ComposerToneLabel({ tone, className, ...props }: ComposerToneLabelProps) {\n return <span data-composer-tone={tone} className={cn('composer-tone-label', className)} {...props} />;\n}\n","import { Collapsible } from '@base-ui/react/collapsible';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport './composer-header.css';\n\nexport interface ComposerHeaderProps extends ComponentPropsWithoutRef<'div'> {\n /** Animate visibility while retaining content through the closing transition. */\n open?: boolean;\n}\n\n/** Optional context above ComposerRing or ComposerBox. Empty rendered content occupies no space. */\nexport const ComposerHeader = forwardRef<HTMLDivElement, ComposerHeaderProps>(\n ({ className, children, open = true, ...props }, ref) => (\n <Collapsible.Root\n ref={ref}\n open={open}\n data-slot=\"composer-header\"\n className={cn('composer-header relative isolate mx-auto w-full max-w-3xl', className)}\n {...props}\n >\n <Collapsible.Panel className=\"composer-header-panel\">\n <div\n data-slot=\"composer-header-surface\"\n className=\"flex flex-col gap-3 overflow-hidden rounded-t-[23px] border border-b-0 border-surface-rim bg-card px-3 pt-3 pb-8 text-body-sm text-muted-foreground empty:hidden\"\n >\n {children}\n </div>\n </Collapsible.Panel>\n </Collapsible.Root>\n ),\n);\nComposerHeader.displayName = 'ComposerHeader';\n\nexport interface ComposerHeaderRowProps extends ComponentPropsWithoutRef<'div'> {\n tone?: 'default' | 'destructive' | 'success';\n}\n\nexport const ComposerHeaderRow = forwardRef<HTMLDivElement, ComposerHeaderRowProps>(\n ({ className, tone = 'default', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-row\"\n className={cn(\n 'flex min-w-0 flex-wrap items-center gap-2 [&>svg]:size-icon-sm [&>svg]:shrink-0',\n tone === 'destructive' && 'text-destructive-foreground',\n tone === 'success' && 'text-success-indicator',\n className,\n )}\n {...props}\n />\n ),\n);\nComposerHeaderRow.displayName = 'ComposerHeaderRow';\n\nexport type ComposerHeaderContentProps = ComponentPropsWithoutRef<'div'>;\n\nexport const ComposerHeaderContent = forwardRef<HTMLDivElement, ComposerHeaderContentProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-content\"\n className={cn('min-w-0 flex-1 wrap-anywhere', className)}\n {...props}\n />\n ),\n);\nComposerHeaderContent.displayName = 'ComposerHeaderContent';\n\nexport type ComposerHeaderActionsProps = ComponentPropsWithoutRef<'div'>;\n\nexport const ComposerHeaderActions = forwardRef<HTMLDivElement, ComposerHeaderActionsProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"composer-header-actions\"\n className={cn('ml-auto flex max-w-full shrink-0 flex-wrap items-center gap-2', className)}\n {...props}\n />\n ),\n);\nComposerHeaderActions.displayName = 'ComposerHeaderActions';\n","import { Collapsible } from '@base-ui/react/collapsible';\nimport { ArrowLeft, Check } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { ScrollArea, ScrollAreaViewport } from '../../ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport interface ComposerSuggestionItem {\n id: string;\n label: string;\n description?: string;\n active?: boolean;\n}\n\nexport interface ComposerSuggestionsProps {\n id: string;\n items: readonly ComposerSuggestionItem[];\n activeIndex: number;\n contextLabel?: string;\n onBack?: () => void;\n onSelect: (index: number) => void;\n}\n\nexport function ComposerSuggestions({\n id,\n items,\n activeIndex,\n contextLabel,\n onBack,\n onSelect,\n}: ComposerSuggestionsProps) {\n const activeOption = useRef<HTMLButtonElement>(null);\n const activeItemId = items[activeIndex]?.id;\n const label = contextLabel ? `${contextLabel} options` : 'Slash commands';\n\n useEffect(() => {\n activeOption.current?.scrollIntoView({ block: 'nearest' });\n }, [activeItemId]);\n\n return (\n <Collapsible.Root open={items.length > 0}>\n <Collapsible.Panel className=\"h-[var(--collapsible-panel-height)] overflow-hidden transition-[height] duration-normal ease-out-custom data-[ending-style]:h-0 data-[starting-style]:h-0 motion-reduce:transition-none\">\n <div className=\"border-b border-border\" role=\"region\" aria-label={label}>\n {contextLabel && onBack && (\n <div className=\"border-b border-border px-1.5 py-1\">\n <button\n type=\"button\"\n className=\"flex items-center gap-1.5 rounded-xl px-2 py-1.5 text-caption text-muted-foreground transition-colors duration-normal ease-out-custom hover:bg-fill-subtle hover:text-foreground motion-reduce:transition-none\"\n aria-label=\"Back to slash commands\"\n onMouseDown={event => event.preventDefault()}\n onClick={onBack}\n >\n <ArrowLeft size={14} aria-hidden />\n <span>{contextLabel}</span>\n </button>\n </div>\n )}\n <ScrollArea maxHeight=\"min(22rem, 50dvh)\">\n <ScrollAreaViewport className=\"overscroll-y-contain\">\n <div id={id} role=\"listbox\" aria-label={label} className=\"flex flex-col gap-px p-1.5\">\n {items.map((item, index) => (\n <button\n ref={index === activeIndex ? activeOption : undefined}\n id={item.id}\n key={item.id}\n type=\"button\"\n role=\"option\"\n tabIndex={-1}\n aria-selected={index === activeIndex}\n aria-current={item.active ? 'true' : undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between gap-4 rounded-2xl px-2 py-1.5 text-left text-caption transition-colors duration-normal ease-out-custom motion-reduce:transition-none',\n index === activeIndex\n ? 'bg-fill-subtle text-foreground'\n : 'text-muted-foreground hover:bg-fill-subtle hover:text-foreground',\n )}\n onMouseDown={event => event.preventDefault()}\n onClick={() => onSelect(index)}\n >\n <span className=\"max-w-[60%] min-w-0 shrink-0 truncate\" title={item.label}>\n {item.label}\n </span>\n {(item.description || item.active) && (\n <span className=\"flex min-w-0 items-center gap-1.5 text-right\">\n {item.description && (\n <span className=\"truncate\" title={item.description}>\n {item.description}\n </span>\n )}\n {item.active && (\n <span className=\"flex shrink-0 items-center gap-1\">\n <Check size={13} aria-hidden />\n Current\n </span>\n )}\n </span>\n )}\n </button>\n ))}\n </div>\n </ScrollAreaViewport>\n </ScrollArea>\n </div>\n </Collapsible.Panel>\n </Collapsible.Root>\n );\n}\n","export interface ComposerCommandOption {\n value: string;\n label: string;\n description?: string;\n active?: boolean;\n}\n\nexport interface ComposerCommand {\n name: string;\n description: string;\n options?: readonly ComposerCommandOption[];\n}\n\nexport function matchCommands<T extends Pick<ComposerCommand, 'name'>>(commands: readonly T[], draft: string): T[] {\n if (!draft.startsWith('/')) return [];\n const query = draft.slice(1).toLowerCase();\n if (/\\s/.test(query)) return [];\n return commands.filter(command => command.name.toLowerCase().startsWith(query));\n}\n\nexport function matchCommandOptions<T extends ComposerCommand>(commands: readonly T[], draft: string) {\n if (!draft.startsWith('/')) return undefined;\n const firstWhitespace = draft.search(/\\s/);\n if (firstWhitespace === -1) return undefined;\n const command = commands.find(candidate => candidate.name === draft.slice(1, firstWhitespace));\n if (!command?.options) return undefined;\n const query = draft.slice(firstWhitespace).trim().toLowerCase();\n if (/\\s/.test(query)) return undefined;\n const options = command.options.filter(option => option.value.toLowerCase().startsWith(query));\n return options.length > 0 ? { command, options } : undefined;\n}\n","import type { ChangeEvent, ComponentPropsWithoutRef, RefObject } from 'react';\nimport { useId, useState } from 'react';\nimport type { ComposerCommand, ComposerCommandOption } from './command-matches';\nimport { matchCommandOptions, matchCommands } from './command-matches';\nimport type { ComposerSuggestionItem, ComposerSuggestionsProps } from './composer-suggestions';\nimport { useKeydown } from '@/lib/keyboard/use-keydown';\n\nfunction createSuggestionItems(\n listId: string,\n commands: readonly ComposerCommand[],\n options?: readonly ComposerCommandOption[],\n): ComposerSuggestionItem[] {\n if (options)\n return options.map(option => ({ ...option, id: `${listId}-option-${encodeURIComponent(option.value)}` }));\n return commands.map(command => ({\n id: `${listId}-command-${encodeURIComponent(command.name)}`,\n label: `/${command.name}`,\n description: command.description,\n }));\n}\n\nexport interface UseComposerCommandsProps {\n commands: readonly ComposerCommand[];\n value: string;\n onValueChange: (value: string) => void;\n onSubmit: (value: string) => void;\n inputRef: RefObject<HTMLTextAreaElement | null>;\n enabled?: boolean;\n}\n\nexport function useComposerCommands({\n commands,\n value,\n onValueChange,\n onSubmit,\n inputRef,\n enabled = true,\n}: UseComposerCommandsProps) {\n const listId = useId();\n const [navigation, setNavigation] = useState({ value: '', index: 0 });\n const optionMatch = enabled ? matchCommandOptions(commands, value) : undefined;\n const matchingCommands = enabled && !optionMatch ? matchCommands(commands, value) : [];\n const items = createSuggestionItems(listId, matchingCommands, optionMatch?.options);\n const boundedIndex = Math.min(navigation.index, Math.max(0, items.length - 1));\n const activeIndex = navigation.value === value ? boundedIndex : 0;\n\n function updateValue(nextValue: string) {\n setNavigation({ value: nextValue, index: 0 });\n onValueChange(nextValue);\n }\n\n function returnToCommands() {\n updateValue(optionMatch ? `/${optionMatch.command.name}` : '');\n inputRef.current?.focus();\n }\n\n function selectSuggestion(index: number) {\n inputRef.current?.focus();\n if (optionMatch) {\n const option = optionMatch.options[index];\n if (option) onSubmit(`/${optionMatch.command.name} ${option.value}`);\n return;\n }\n const command = matchingCommands[index];\n if (command) updateValue(`/${command.name} `);\n }\n\n function moveSelection(direction: number) {\n setNavigation({ value, index: (activeIndex + direction + items.length) % items.length });\n }\n\n function shouldHandleCommandKey(event: KeyboardEvent) {\n const command = matchingCommands[activeIndex];\n const submitExactCommand =\n matchingCommands.length === 1 && value.toLowerCase() === `/${command?.name}` && !command?.options?.length;\n return event.key !== 'Enter' || !submitExactCommand;\n }\n\n useKeydown(\n {\n ArrowDown: () => moveSelection(1),\n ArrowUp: () => moveSelection(-1),\n Escape: returnToCommands,\n Tab: () => selectSuggestion(activeIndex),\n Enter: () => selectSuggestion(activeIndex),\n },\n {\n target: inputRef,\n enabled: items.length > 0,\n shouldHandle: shouldHandleCommandKey,\n },\n );\n\n const inputProps = {\n value,\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => updateValue(event.target.value),\n 'aria-autocomplete': 'list',\n 'aria-controls': items.length > 0 ? listId : undefined,\n 'aria-activedescendant': items[activeIndex]?.id,\n } satisfies ComponentPropsWithoutRef<'textarea'>;\n\n const suggestionsProps: ComposerSuggestionsProps = {\n id: listId,\n items,\n activeIndex,\n contextLabel: optionMatch ? `/${optionMatch.command.name}` : undefined,\n onBack: optionMatch ? returnToCommands : undefined,\n onSelect: selectSuggestion,\n };\n\n return { inputProps, suggestionsProps };\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  const require_utils = require("./utils-uDc1ofX1.cjs");
2
2
  const require_primitives_raised_surface = require("./primitives/raised-surface.cjs.js");
3
3
  const require_Button = require("./Button-YQRflC47.cjs");
4
- const require_Dialog = require("./Dialog-CcdHS0vM.cjs");
5
- const require_components_ButtonsGroup = require("./components/ButtonsGroup.cjs.js");
6
4
  const require_copy_button = require("./copy-button-BYEFKNpo.cjs");
7
- const require_CodeEditor = require("./CodeEditor-DaJm0o69.cjs");
5
+ const require_components_ButtonsGroup = require("./components/ButtonsGroup.cjs.js");
6
+ const require_Dialog = require("./Dialog-CjaiCrkv.cjs");
7
+ const require_CodeEditor = require("./CodeEditor-CJ9jC9lu.cjs");
8
8
  const require_data_panel_section_heading = require("./data-panel-section-heading-d9UnruDt.cjs");
9
9
  const require_components_SearchInput = require("./components/SearchInput.cjs.js");
10
10
  let react = require("react");
@@ -233,4 +233,4 @@ Object.defineProperty(exports, "DataCodeSection", {
233
233
  }
234
234
  });
235
235
 
236
- //# sourceMappingURL=DataCodeSection-DbmVZNM5.cjs.map
236
+ //# sourceMappingURL=DataCodeSection-CZRPsStI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataCodeSection-DbmVZNM5.cjs","names":["Text","Chunk","useRef","EditorView","useMemo","RangeSetBuilder","Decoration","CodeEditor","useState","cn","DataPanelSectionHeading","Button","SearchIcon","SearchInput","ButtonsGroup","CopyButton","AlignLeftIcon","AlignJustifyIcon","ExpandIcon","raisedSurfaceStyle","Dialog","DialogContent","DialogHeader","DialogTitle","_Fragment","DialogBody"],"sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { RangeSetBuilder, Text } from '@codemirror/state';\nimport { Decoration, EditorView } from '@codemirror/view';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, SearchIcon } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-destructive-subtle',\n added: 'code-diff-added bg-success-subtle',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-badge-amber-strong';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<ReactCodeMirrorRef>(null);\n const query = searchQuery.toLowerCase();\n\n // Matches are scrolled to through CodeMirror: it only renders the visible lines, so an off-screen match has no DOM node yet.\n useEffect(() => {\n const view = ref.current?.view;\n if (!query || !view) return;\n const doc = view.state.doc;\n for (let n = 1; n <= doc.lines; n++) {\n const line = doc.line(n);\n if (line.text.toLowerCase().includes(query)) {\n view.dispatch({ effects: EditorView.scrollIntoView(line.from, { y: 'nearest' }) });\n return;\n }\n }\n }, [query]);\n\n const extensions = useMemo(\n () => [\n EditorView.decorations.compute(['doc'], state => {\n const builder = new RangeSetBuilder<Decoration>();\n for (let n = 1; n <= state.doc.lines; n++) {\n const line = state.doc.line(n);\n const classes: string[] = [];\n if (diffSide && changed?.has(n - 1)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && line.text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n if (classes.length) builder.add(line.from, line.from, Decoration.line({ class: classes.join(' ') }));\n }\n return builder.finish();\n }),\n ],\n [changed, diffSide, query],\n );\n\n return (\n <CodeEditor\n ref={ref}\n value={code}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON content\"\n extensions={extensions}\n />\n );\n}\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView &&\n (searchMinimized ? (\n <Button\n size=\"icon-sm\"\n aria-label=\"Search code\"\n tooltip=\"Search code\"\n onClick={() => setSearchMinimized(false)}\n >\n <SearchIcon />\n </Button>\n ) : (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={searchQuery}\n onValueChange={setSearchQuery}\n onClose={() => setSearchMinimized(true)}\n autoFocus\n />\n ))}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button size=\"icon-md\" aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent size=\"full\">\n <DialogHeader>\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={expandedSearchQuery}\n onValueChange={setExpandedSearchQuery}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n </DialogHeader>\n <DialogBody layout=\"fill\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n {expandedMultiline ? (\n <div className={cn(raisedSurfaceStyle, 'rounded-lg p-3 text-caption break-all text-muted-foreground')}>\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataCodeSection-CZRPsStI.cjs","names":["Text","Chunk","useRef","EditorView","useMemo","RangeSetBuilder","Decoration","CodeEditor","useState","cn","DataPanelSectionHeading","Button","SearchIcon","SearchInput","ButtonsGroup","CopyButton","AlignLeftIcon","AlignJustifyIcon","ExpandIcon","raisedSurfaceStyle","Dialog","DialogContent","DialogHeader","DialogTitle","_Fragment","DialogBody"],"sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { RangeSetBuilder, Text } from '@codemirror/state';\nimport { Decoration, EditorView } from '@codemirror/view';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, SearchIcon } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-destructive-subtle',\n added: 'code-diff-added bg-success-subtle',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-badge-amber-strong';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<ReactCodeMirrorRef>(null);\n const query = searchQuery.toLowerCase();\n\n // Matches are scrolled to through CodeMirror: it only renders the visible lines, so an off-screen match has no DOM node yet.\n useEffect(() => {\n const view = ref.current?.view;\n if (!query || !view) return;\n const doc = view.state.doc;\n for (let n = 1; n <= doc.lines; n++) {\n const line = doc.line(n);\n if (line.text.toLowerCase().includes(query)) {\n view.dispatch({ effects: EditorView.scrollIntoView(line.from, { y: 'nearest' }) });\n return;\n }\n }\n }, [query]);\n\n const extensions = useMemo(\n () => [\n EditorView.decorations.compute(['doc'], state => {\n const builder = new RangeSetBuilder<Decoration>();\n for (let n = 1; n <= state.doc.lines; n++) {\n const line = state.doc.line(n);\n const classes: string[] = [];\n if (diffSide && changed?.has(n - 1)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && line.text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n if (classes.length) builder.add(line.from, line.from, Decoration.line({ class: classes.join(' ') }));\n }\n return builder.finish();\n }),\n ],\n [changed, diffSide, query],\n );\n\n return (\n <CodeEditor\n ref={ref}\n value={code}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON content\"\n extensions={extensions}\n />\n );\n}\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView &&\n (searchMinimized ? (\n <Button\n size=\"icon-sm\"\n aria-label=\"Search code\"\n tooltip=\"Search code\"\n onClick={() => setSearchMinimized(false)}\n >\n <SearchIcon />\n </Button>\n ) : (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={searchQuery}\n onValueChange={setSearchQuery}\n onClose={() => setSearchMinimized(true)}\n autoFocus\n />\n ))}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button size=\"icon-md\" aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent size=\"full\">\n <DialogHeader>\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={expandedSearchQuery}\n onValueChange={setExpandedSearchQuery}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n </DialogHeader>\n <DialogBody layout=\"fill\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n {expandedMultiline ? (\n <div className={cn(raisedSurfaceStyle, 'rounded-lg p-3 text-caption break-all text-muted-foreground')}>\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { t as cn } from "./utils-DQx8TpNT.js";
2
2
  import { raisedSurfaceStyle } from "./primitives/raised-surface.es.js";
3
3
  import { t as Button } from "./Button-Bw1e3ONi.js";
4
- import { a as DialogContent, c as DialogHeader, d as DialogTitle, n as DialogBody, t as Dialog } from "./Dialog-CsKvRy5F.js";
5
- import { ButtonsGroup } from "./components/ButtonsGroup.es.js";
6
4
  import { t as CopyButton } from "./copy-button-CF-X4iDj.js";
7
- import { t as CodeEditor } from "./CodeEditor-CZC9DMKA.js";
5
+ import { ButtonsGroup } from "./components/ButtonsGroup.es.js";
6
+ import { a as DialogContent, c as DialogHeader, d as DialogTitle, n as DialogBody, t as Dialog } from "./Dialog-CKtTR8h3.js";
7
+ import { t as CodeEditor } from "./CodeEditor-CPVxj7WS.js";
8
8
  import { t as DataPanelSectionHeading } from "./data-panel-section-heading-X3tHNMV1.js";
9
9
  import { SearchInput } from "./components/SearchInput.es.js";
10
10
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -228,4 +228,4 @@ function containsInnerNewline(obj) {
228
228
  }
229
229
  export { DataCodeSection as t };
230
230
 
231
- //# sourceMappingURL=DataCodeSection-Bztq-SaU.js.map
231
+ //# sourceMappingURL=DataCodeSection-Ckd47p_S.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataCodeSection-Bztq-SaU.js","names":["Text","_Fragment"],"sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { RangeSetBuilder, Text } from '@codemirror/state';\nimport { Decoration, EditorView } from '@codemirror/view';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, SearchIcon } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-destructive-subtle',\n added: 'code-diff-added bg-success-subtle',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-badge-amber-strong';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<ReactCodeMirrorRef>(null);\n const query = searchQuery.toLowerCase();\n\n // Matches are scrolled to through CodeMirror: it only renders the visible lines, so an off-screen match has no DOM node yet.\n useEffect(() => {\n const view = ref.current?.view;\n if (!query || !view) return;\n const doc = view.state.doc;\n for (let n = 1; n <= doc.lines; n++) {\n const line = doc.line(n);\n if (line.text.toLowerCase().includes(query)) {\n view.dispatch({ effects: EditorView.scrollIntoView(line.from, { y: 'nearest' }) });\n return;\n }\n }\n }, [query]);\n\n const extensions = useMemo(\n () => [\n EditorView.decorations.compute(['doc'], state => {\n const builder = new RangeSetBuilder<Decoration>();\n for (let n = 1; n <= state.doc.lines; n++) {\n const line = state.doc.line(n);\n const classes: string[] = [];\n if (diffSide && changed?.has(n - 1)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && line.text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n if (classes.length) builder.add(line.from, line.from, Decoration.line({ class: classes.join(' ') }));\n }\n return builder.finish();\n }),\n ],\n [changed, diffSide, query],\n );\n\n return (\n <CodeEditor\n ref={ref}\n value={code}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON content\"\n extensions={extensions}\n />\n );\n}\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView &&\n (searchMinimized ? (\n <Button\n size=\"icon-sm\"\n aria-label=\"Search code\"\n tooltip=\"Search code\"\n onClick={() => setSearchMinimized(false)}\n >\n <SearchIcon />\n </Button>\n ) : (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={searchQuery}\n onValueChange={setSearchQuery}\n onClose={() => setSearchMinimized(true)}\n autoFocus\n />\n ))}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button size=\"icon-md\" aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent size=\"full\">\n <DialogHeader>\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={expandedSearchQuery}\n onValueChange={setExpandedSearchQuery}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n </DialogHeader>\n <DialogBody layout=\"fill\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n {expandedMultiline ? (\n <div className={cn(raisedSurfaceStyle, 'rounded-lg p-3 text-caption break-all text-muted-foreground')}>\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataCodeSection-Ckd47p_S.js","names":["Text","_Fragment"],"sources":["../src/ds/components/DataCodeSection/data-code-section.tsx"],"sourcesContent":["import { Chunk } from '@codemirror/merge';\nimport { RangeSetBuilder, Text } from '@codemirror/state';\nimport { Decoration, EditorView } from '@codemirror/view';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { AlignJustifyIcon, AlignLeftIcon, ExpandIcon, SearchIcon } from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataPanelSectionHeading } from '@/ds/components/DataPanel/data-panel-section-heading';\nimport { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle } from '@/ds/components/Dialog';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataCodeSectionDiff {\n /** The other document to compare against. */\n against: string;\n /** `a` = this document is the \"before\" (changes in red), `b` = \"after\" (changes in green). */\n side: 'a' | 'b';\n}\n\n/** Zero-based indexes of the lines of `doc` that differ from `diff.against`. */\nfunction changedLines(doc: string, { against, side }: DataCodeSectionDiff): Set<number> {\n const [a, b] = side === 'a' ? [doc, against] : [against, doc];\n const text = Text.of(doc.split('\\n'));\n const lines = new Set<number>();\n for (const chunk of Chunk.build(Text.of(a.split('\\n')), Text.of(b.split('\\n')))) {\n const from = side === 'a' ? chunk.fromA : chunk.fromB;\n const to = side === 'a' ? chunk.endA : chunk.endB;\n if (from >= to) continue;\n for (let pos = from; pos <= Math.min(to, text.length);) {\n const line = text.lineAt(pos);\n lines.add(line.number - 1);\n if (line.to >= to) break;\n pos = line.to + 1;\n }\n }\n return lines;\n}\n\nconst diffLineStyles = {\n removed: 'code-diff-removed bg-destructive-subtle',\n added: 'code-diff-added bg-success-subtle',\n};\nconst searchMatchStyle = 'code-search-match rounded-sm bg-badge-amber-strong';\n\ninterface CodeViewProps {\n code: string;\n changed?: Set<number>;\n diffSide?: DataCodeSectionDiff['side'];\n searchQuery: string;\n}\n\nfunction CodeView({ code, changed, diffSide, searchQuery }: CodeViewProps) {\n const ref = useRef<ReactCodeMirrorRef>(null);\n const query = searchQuery.toLowerCase();\n\n // Matches are scrolled to through CodeMirror: it only renders the visible lines, so an off-screen match has no DOM node yet.\n useEffect(() => {\n const view = ref.current?.view;\n if (!query || !view) return;\n const doc = view.state.doc;\n for (let n = 1; n <= doc.lines; n++) {\n const line = doc.line(n);\n if (line.text.toLowerCase().includes(query)) {\n view.dispatch({ effects: EditorView.scrollIntoView(line.from, { y: 'nearest' }) });\n return;\n }\n }\n }, [query]);\n\n const extensions = useMemo(\n () => [\n EditorView.decorations.compute(['doc'], state => {\n const builder = new RangeSetBuilder<Decoration>();\n for (let n = 1; n <= state.doc.lines; n++) {\n const line = state.doc.line(n);\n const classes: string[] = [];\n if (diffSide && changed?.has(n - 1)) classes.push(diffLineStyles[diffSide === 'a' ? 'removed' : 'added']);\n if (query && line.text.toLowerCase().includes(query)) classes.push(searchMatchStyle);\n if (classes.length) builder.add(line.from, line.from, Decoration.line({ class: classes.join(' ') }));\n }\n return builder.finish();\n }),\n ],\n [changed, diffSide, query],\n );\n\n return (\n <CodeEditor\n ref={ref}\n value={code}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON content\"\n extensions={extensions}\n />\n );\n}\n\nexport interface DataCodeSectionProps {\n title: React.ReactNode;\n dialogTitle?: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Highlight lines that differ from another document. */\n diff?: DataCodeSectionDiff;\n /** Extra controls rendered in the header, before the built-in copy/expand buttons. */\n actions?: React.ReactNode;\n}\n\nexport function DataCodeSection({\n codeStr = '',\n title,\n dialogTitle,\n icon,\n simplified = false,\n className,\n diff,\n actions,\n}: DataCodeSectionProps) {\n const changed = useMemo(() => (diff ? changedLines(codeStr, diff) : undefined), [codeStr, diff]);\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const [searchMinimized, setSearchMinimized] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [expandedOpen, setExpandedOpen] = useState(false);\n const [expandedSearchQuery, setExpandedSearchQuery] = useState('');\n const [expandedMultiline, setExpandedMultiline] = useState(false);\n\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const expandedFinalCodeStr = expandedMultiline ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <DataPanelSectionHeading icon={icon}>{title}</DataPanelSectionHeading>\n <div className=\"flex items-center gap-2\">\n {actions}\n {!usePlainTextView &&\n (searchMinimized ? (\n <Button\n size=\"icon-sm\"\n aria-label=\"Search code\"\n tooltip=\"Search code\"\n onClick={() => setSearchMinimized(false)}\n >\n <SearchIcon />\n </Button>\n ) : (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={searchQuery}\n onValueChange={setSearchQuery}\n onClose={() => setSearchMinimized(true)}\n autoFocus\n />\n ))}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n <Button size=\"icon-md\" aria-label=\"Expand\" tooltip=\"Expand\" onClick={() => setExpandedOpen(true)}>\n <ExpandIcon />\n </Button>\n </ButtonsGroup>\n </div>\n </div>\n\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={searchQuery} />\n )}\n </div>\n\n <Dialog open={expandedOpen} onOpenChange={setExpandedOpen}>\n <DialogContent size=\"full\">\n <DialogHeader>\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <DialogTitle className=\"flex min-w-0 items-center gap-1.5 truncate [&>svg]:size-3.5\">\n {dialogTitle ?? (\n <>\n {icon}\n {title}\n </>\n )}\n </DialogTitle>\n <div className=\"flex shrink-0 items-center gap-2\">\n {!expandedMultiline && (\n <SearchInput\n label=\"Search code\"\n placeholder=\"Search...\"\n size=\"sm\"\n value={expandedSearchQuery}\n onValueChange={setExpandedSearchQuery}\n />\n )}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n tooltip={expandedMultiline ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setExpandedMultiline(v => !v)}\n >\n {expandedMultiline ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n </DialogHeader>\n <DialogBody layout=\"fill\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n {expandedMultiline ? (\n <div className={cn(raisedSurfaceStyle, 'rounded-lg p-3 text-caption break-all text-muted-foreground')}>\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{expandedFinalCodeStr}</pre>\n </div>\n </div>\n ) : (\n <CodeView code={codeStr} changed={changed} diffSide={diff?.side} searchQuery={expandedSearchQuery} />\n )}\n </div>\n </DialogBody>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n"],"mappings":"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"}
@@ -2,9 +2,9 @@ const require_utils = require("./utils-uDc1ofX1.cjs");
2
2
  const require_primitives_raised_surface = require("./primitives/raised-surface.cjs.js");
3
3
  const require_Button = require("./Button-YQRflC47.cjs");
4
4
  const require_Txt = require("./Txt-BnoSqxKE.cjs");
5
- const require_components_ButtonsGroup = require("./components/ButtonsGroup.cjs.js");
6
5
  const require_copy_button = require("./copy-button-BYEFKNpo.cjs");
7
- const require_CodeEditor = require("./CodeEditor-DaJm0o69.cjs");
6
+ const require_components_ButtonsGroup = require("./components/ButtonsGroup.cjs.js");
7
+ const require_CodeEditor = require("./CodeEditor-CJ9jC9lu.cjs");
8
8
  const require_spinner = require("./spinner-C8ZxiA5C.cjs");
9
9
  let react = require("react");
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -182,4 +182,4 @@ Object.defineProperty(exports, "DataDetailsPanel", {
182
182
  }
183
183
  });
184
184
 
185
- //# sourceMappingURL=DataDetailsPanel-Dg_iUJ6L.cjs.map
185
+ //# sourceMappingURL=DataDetailsPanel-DFhM9H5D.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataDetailsPanel-Dg_iUJ6L.cjs","names":["DataDetailsPanel","cn","Button","XIcon","useState","useMemo","cn","ButtonsGroup","CopyButton","Button","AlignLeftIcon","AlignJustifyIcon","raisedSurfaceStyle","CodeEditor","cn","Txt","cn","cn","Spinner","Txt","Root"],"sources":["../src/ds/components/DataDetailsPanel/data-details-panel.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-close-button.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-code-section.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-content.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-header.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-heading.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-key-value-list.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-loading-data.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-no-data.tsx","../src/ds/components/DataDetailsPanel/index.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelProps {\n collapsed?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanel({ collapsed, children }: DataDetailsPanelProps) {\n return (\n <section\n className={cn(\n 'flex flex-col overflow-hidden rounded-xl border border-border bg-background',\n collapsed ? 'h-auto' : 'h-full',\n )}\n >\n {children}\n </section>\n );\n}\n","import { XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport interface DataDetailsPanelCloseButtonProps {\n onClick: () => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function DataDetailsPanelCloseButton({\n onClick,\n tooltip = 'Close panel',\n className,\n}: DataDetailsPanelCloseButtonProps) {\n return (\n <Button size=\"icon-md\" onClick={onClick} aria-label=\"Close panel\" tooltip={tooltip} className={className}>\n <XIcon />\n </Button>\n );\n}\n","import { AlignJustifyIcon, AlignLeftIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelCodeSectionProps {\n title: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Extra controls rendered in the header, before the built-in copy button. */\n actions?: React.ReactNode;\n}\n\nexport function DataDetailsPanelCodeSection({\n codeStr = '',\n title,\n icon,\n simplified = false,\n className,\n actions,\n}: DataDetailsPanelCodeSectionProps) {\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <div\n className={cn(\n 'flex items-center gap-1.5 text-meta tracking-widest text-placeholder uppercase',\n '[&>svg]:size-3.5',\n )}\n >\n {icon}\n {title}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeEditor\n value={codeStr}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label={typeof title === 'string' ? title : 'JSON'}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n","import type { ReactNode } from 'react';\n\nexport interface DataDetailsPanelContentProps {\n children: ReactNode;\n}\n\nexport function DataDetailsPanelContent({ children }: DataDetailsPanelContentProps) {\n return <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeader({ className, children }: DataDetailsPanelHeaderProps) {\n return (\n <div className={cn('mx-4 flex items-center justify-between gap-2 border-b border-border py-3', className)}>\n {children}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeadingProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeading({ className, children }: DataDetailsPanelHeadingProps) {\n return (\n <Txt as=\"h3\" tone=\"muted\" className={cn('flex gap-2 [&>b]:text-caption [&>b]:text-placeholder', className)}>\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelKeyValueListProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Root({ className, children }: DataDetailsPanelKeyValueListProps) {\n return <dl className={cn('grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5', className)}>{children}</dl>;\n}\n\nexport interface DataDetailsPanelKeyValueListKeyProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Key({ className, children }: DataDetailsPanelKeyValueListKeyProps) {\n return <dt className={cn('shrink-0 py-0.5 text-body-sm text-placeholder', className)}>{children}</dt>;\n}\n\nexport interface DataDetailsPanelKeyValueListValueProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Value({ className, children }: DataDetailsPanelKeyValueListValueProps) {\n return <dd className={cn('min-w-0 truncate py-0.5 text-body-sm text-muted-foreground', className)}>{children}</dd>;\n}\n\nexport interface DataDetailsPanelKeyValueListHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Header({ className, children }: DataDetailsPanelKeyValueListHeaderProps) {\n return (\n <dt className={cn('col-span-2 py-3 text-caption tracking-widest text-placeholder uppercase', className)}>\n {children}\n </dt>\n );\n}\n\nexport const DataDetailsPanelKeyValueList = Object.assign(Root, {\n Key,\n Value,\n Header,\n});\n","import type { ReactNode } from 'react';\nimport { Spinner } from '@/ds/components/Spinner';\n\nexport interface DataDetailsPanelLoadingDataProps {\n children?: ReactNode;\n}\n\nexport function DataDetailsPanelLoadingData({ children }: DataDetailsPanelLoadingDataProps) {\n return (\n <div className=\"flex items-center justify-center gap-2 px-4 py-6 text-caption text-muted-foreground\">\n <Spinner size=\"sm\" variant=\"pulse\" className=\"text-muted-foreground\" /> {children ?? 'Loading...'}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport interface DataDetailsPanelNoDataProps {\n children?: React.ReactNode;\n}\n\nexport function DataDetailsPanelNoData({ children }: DataDetailsPanelNoDataProps) {\n return (\n <Txt variant=\"caption\" tone=\"faint\" className=\"px-4 py-6\">\n {children ?? 'No data found.'}\n </Txt>\n );\n}\n","import { DataDetailsPanel as Root } from './data-details-panel';\nimport { DataDetailsPanelCloseButton } from './data-details-panel-close-button';\nimport { DataDetailsPanelCodeSection } from './data-details-panel-code-section';\nimport { DataDetailsPanelContent } from './data-details-panel-content';\nimport { DataDetailsPanelHeader } from './data-details-panel-header';\nimport { DataDetailsPanelHeading } from './data-details-panel-heading';\nimport { DataDetailsPanelKeyValueList } from './data-details-panel-key-value-list';\nimport { DataDetailsPanelLoadingData } from './data-details-panel-loading-data';\nimport { DataDetailsPanelNoData } from './data-details-panel-no-data';\n\nconst DataDetailsPanel = Object.assign(Root, {\n Header: DataDetailsPanelHeader,\n Heading: DataDetailsPanelHeading,\n CloseButton: DataDetailsPanelCloseButton,\n LoadingData: DataDetailsPanelLoadingData,\n NoData: DataDetailsPanelNoData,\n Content: DataDetailsPanelContent,\n KeyValueList: DataDetailsPanelKeyValueList,\n CodeSection: DataDetailsPanelCodeSection,\n});\n\nexport { DataDetailsPanel };\nexport type { DataDetailsPanelProps } from './data-details-panel';\nexport type { DataDetailsPanelHeaderProps } from './data-details-panel-header';\nexport type { DataDetailsPanelHeadingProps } from './data-details-panel-heading';\nexport type { DataDetailsPanelCloseButtonProps } from './data-details-panel-close-button';\nexport type { DataDetailsPanelLoadingDataProps } from './data-details-panel-loading-data';\nexport type { DataDetailsPanelNoDataProps } from './data-details-panel-no-data';\nexport type { DataDetailsPanelContentProps } from './data-details-panel-content';\nexport type {\n DataDetailsPanelKeyValueListProps,\n DataDetailsPanelKeyValueListKeyProps,\n DataDetailsPanelKeyValueListValueProps,\n DataDetailsPanelKeyValueListHeaderProps,\n} from './data-details-panel-key-value-list';\nexport type { DataDetailsPanelCodeSectionProps } from './data-details-panel-code-section';\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataDetailsPanel-DFhM9H5D.cjs","names":["DataDetailsPanel","cn","Button","XIcon","useState","useMemo","cn","ButtonsGroup","CopyButton","Button","AlignLeftIcon","AlignJustifyIcon","raisedSurfaceStyle","CodeEditor","cn","Txt","cn","cn","Spinner","Txt","Root"],"sources":["../src/ds/components/DataDetailsPanel/data-details-panel.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-close-button.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-code-section.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-content.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-header.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-heading.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-key-value-list.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-loading-data.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-no-data.tsx","../src/ds/components/DataDetailsPanel/index.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelProps {\n collapsed?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanel({ collapsed, children }: DataDetailsPanelProps) {\n return (\n <section\n className={cn(\n 'flex flex-col overflow-hidden rounded-xl border border-border bg-background',\n collapsed ? 'h-auto' : 'h-full',\n )}\n >\n {children}\n </section>\n );\n}\n","import { XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport interface DataDetailsPanelCloseButtonProps {\n onClick: () => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function DataDetailsPanelCloseButton({\n onClick,\n tooltip = 'Close panel',\n className,\n}: DataDetailsPanelCloseButtonProps) {\n return (\n <Button size=\"icon-md\" onClick={onClick} aria-label=\"Close panel\" tooltip={tooltip} className={className}>\n <XIcon />\n </Button>\n );\n}\n","import { AlignJustifyIcon, AlignLeftIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelCodeSectionProps {\n title: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Extra controls rendered in the header, before the built-in copy button. */\n actions?: React.ReactNode;\n}\n\nexport function DataDetailsPanelCodeSection({\n codeStr = '',\n title,\n icon,\n simplified = false,\n className,\n actions,\n}: DataDetailsPanelCodeSectionProps) {\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <div\n className={cn(\n 'flex items-center gap-1.5 text-meta tracking-widest text-placeholder uppercase',\n '[&>svg]:size-3.5',\n )}\n >\n {icon}\n {title}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeEditor\n value={codeStr}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label={typeof title === 'string' ? title : 'JSON'}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n","import type { ReactNode } from 'react';\n\nexport interface DataDetailsPanelContentProps {\n children: ReactNode;\n}\n\nexport function DataDetailsPanelContent({ children }: DataDetailsPanelContentProps) {\n return <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeader({ className, children }: DataDetailsPanelHeaderProps) {\n return (\n <div className={cn('mx-4 flex items-center justify-between gap-2 border-b border-border py-3', className)}>\n {children}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeadingProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeading({ className, children }: DataDetailsPanelHeadingProps) {\n return (\n <Txt as=\"h3\" tone=\"muted\" className={cn('flex gap-2 [&>b]:text-caption [&>b]:text-placeholder', className)}>\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelKeyValueListProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Root({ className, children }: DataDetailsPanelKeyValueListProps) {\n return <dl className={cn('grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5', className)}>{children}</dl>;\n}\n\nexport interface DataDetailsPanelKeyValueListKeyProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Key({ className, children }: DataDetailsPanelKeyValueListKeyProps) {\n return <dt className={cn('shrink-0 py-0.5 text-body-sm text-placeholder', className)}>{children}</dt>;\n}\n\nexport interface DataDetailsPanelKeyValueListValueProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Value({ className, children }: DataDetailsPanelKeyValueListValueProps) {\n return <dd className={cn('min-w-0 truncate py-0.5 text-body-sm text-muted-foreground', className)}>{children}</dd>;\n}\n\nexport interface DataDetailsPanelKeyValueListHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Header({ className, children }: DataDetailsPanelKeyValueListHeaderProps) {\n return (\n <dt className={cn('col-span-2 py-3 text-caption tracking-widest text-placeholder uppercase', className)}>\n {children}\n </dt>\n );\n}\n\nexport const DataDetailsPanelKeyValueList = Object.assign(Root, {\n Key,\n Value,\n Header,\n});\n","import type { ReactNode } from 'react';\nimport { Spinner } from '@/ds/components/Spinner';\n\nexport interface DataDetailsPanelLoadingDataProps {\n children?: ReactNode;\n}\n\nexport function DataDetailsPanelLoadingData({ children }: DataDetailsPanelLoadingDataProps) {\n return (\n <div className=\"flex items-center justify-center gap-2 px-4 py-6 text-caption text-muted-foreground\">\n <Spinner size=\"sm\" variant=\"pulse\" className=\"text-muted-foreground\" /> {children ?? 'Loading...'}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport interface DataDetailsPanelNoDataProps {\n children?: React.ReactNode;\n}\n\nexport function DataDetailsPanelNoData({ children }: DataDetailsPanelNoDataProps) {\n return (\n <Txt variant=\"caption\" tone=\"faint\" className=\"px-4 py-6\">\n {children ?? 'No data found.'}\n </Txt>\n );\n}\n","import { DataDetailsPanel as Root } from './data-details-panel';\nimport { DataDetailsPanelCloseButton } from './data-details-panel-close-button';\nimport { DataDetailsPanelCodeSection } from './data-details-panel-code-section';\nimport { DataDetailsPanelContent } from './data-details-panel-content';\nimport { DataDetailsPanelHeader } from './data-details-panel-header';\nimport { DataDetailsPanelHeading } from './data-details-panel-heading';\nimport { DataDetailsPanelKeyValueList } from './data-details-panel-key-value-list';\nimport { DataDetailsPanelLoadingData } from './data-details-panel-loading-data';\nimport { DataDetailsPanelNoData } from './data-details-panel-no-data';\n\nconst DataDetailsPanel = Object.assign(Root, {\n Header: DataDetailsPanelHeader,\n Heading: DataDetailsPanelHeading,\n CloseButton: DataDetailsPanelCloseButton,\n LoadingData: DataDetailsPanelLoadingData,\n NoData: DataDetailsPanelNoData,\n Content: DataDetailsPanelContent,\n KeyValueList: DataDetailsPanelKeyValueList,\n CodeSection: DataDetailsPanelCodeSection,\n});\n\nexport { DataDetailsPanel };\nexport type { DataDetailsPanelProps } from './data-details-panel';\nexport type { DataDetailsPanelHeaderProps } from './data-details-panel-header';\nexport type { DataDetailsPanelHeadingProps } from './data-details-panel-heading';\nexport type { DataDetailsPanelCloseButtonProps } from './data-details-panel-close-button';\nexport type { DataDetailsPanelLoadingDataProps } from './data-details-panel-loading-data';\nexport type { DataDetailsPanelNoDataProps } from './data-details-panel-no-data';\nexport type { DataDetailsPanelContentProps } from './data-details-panel-content';\nexport type {\n DataDetailsPanelKeyValueListProps,\n DataDetailsPanelKeyValueListKeyProps,\n DataDetailsPanelKeyValueListValueProps,\n DataDetailsPanelKeyValueListHeaderProps,\n} from './data-details-panel-key-value-list';\nexport type { DataDetailsPanelCodeSectionProps } from './data-details-panel-code-section';\n"],"mappings":"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"}
@@ -2,9 +2,9 @@ import { t as cn } from "./utils-DQx8TpNT.js";
2
2
  import { raisedSurfaceStyle } from "./primitives/raised-surface.es.js";
3
3
  import { t as Button } from "./Button-Bw1e3ONi.js";
4
4
  import { t as Txt } from "./Txt-BM6TVV_c.js";
5
- import { ButtonsGroup } from "./components/ButtonsGroup.es.js";
6
5
  import { t as CopyButton } from "./copy-button-CF-X4iDj.js";
7
- import { t as CodeEditor } from "./CodeEditor-CZC9DMKA.js";
6
+ import { ButtonsGroup } from "./components/ButtonsGroup.es.js";
7
+ import { t as CodeEditor } from "./CodeEditor-CPVxj7WS.js";
8
8
  import { t as Spinner } from "./spinner-CnLgLj9R.js";
9
9
  import { useMemo, useState } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -177,4 +177,4 @@ var DataDetailsPanel = Object.assign(DataDetailsPanel$1, {
177
177
  });
178
178
  export { DataDetailsPanel as t };
179
179
 
180
- //# sourceMappingURL=DataDetailsPanel-CvAIsV60.js.map
180
+ //# sourceMappingURL=DataDetailsPanel-_CK0Huk6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataDetailsPanel-CvAIsV60.js","names":["DataDetailsPanel","Root"],"sources":["../src/ds/components/DataDetailsPanel/data-details-panel.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-close-button.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-code-section.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-content.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-header.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-heading.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-key-value-list.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-loading-data.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-no-data.tsx","../src/ds/components/DataDetailsPanel/index.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelProps {\n collapsed?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanel({ collapsed, children }: DataDetailsPanelProps) {\n return (\n <section\n className={cn(\n 'flex flex-col overflow-hidden rounded-xl border border-border bg-background',\n collapsed ? 'h-auto' : 'h-full',\n )}\n >\n {children}\n </section>\n );\n}\n","import { XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport interface DataDetailsPanelCloseButtonProps {\n onClick: () => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function DataDetailsPanelCloseButton({\n onClick,\n tooltip = 'Close panel',\n className,\n}: DataDetailsPanelCloseButtonProps) {\n return (\n <Button size=\"icon-md\" onClick={onClick} aria-label=\"Close panel\" tooltip={tooltip} className={className}>\n <XIcon />\n </Button>\n );\n}\n","import { AlignJustifyIcon, AlignLeftIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelCodeSectionProps {\n title: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Extra controls rendered in the header, before the built-in copy button. */\n actions?: React.ReactNode;\n}\n\nexport function DataDetailsPanelCodeSection({\n codeStr = '',\n title,\n icon,\n simplified = false,\n className,\n actions,\n}: DataDetailsPanelCodeSectionProps) {\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <div\n className={cn(\n 'flex items-center gap-1.5 text-meta tracking-widest text-placeholder uppercase',\n '[&>svg]:size-3.5',\n )}\n >\n {icon}\n {title}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeEditor\n value={codeStr}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label={typeof title === 'string' ? title : 'JSON'}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n","import type { ReactNode } from 'react';\n\nexport interface DataDetailsPanelContentProps {\n children: ReactNode;\n}\n\nexport function DataDetailsPanelContent({ children }: DataDetailsPanelContentProps) {\n return <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeader({ className, children }: DataDetailsPanelHeaderProps) {\n return (\n <div className={cn('mx-4 flex items-center justify-between gap-2 border-b border-border py-3', className)}>\n {children}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeadingProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeading({ className, children }: DataDetailsPanelHeadingProps) {\n return (\n <Txt as=\"h3\" tone=\"muted\" className={cn('flex gap-2 [&>b]:text-caption [&>b]:text-placeholder', className)}>\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelKeyValueListProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Root({ className, children }: DataDetailsPanelKeyValueListProps) {\n return <dl className={cn('grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5', className)}>{children}</dl>;\n}\n\nexport interface DataDetailsPanelKeyValueListKeyProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Key({ className, children }: DataDetailsPanelKeyValueListKeyProps) {\n return <dt className={cn('shrink-0 py-0.5 text-body-sm text-placeholder', className)}>{children}</dt>;\n}\n\nexport interface DataDetailsPanelKeyValueListValueProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Value({ className, children }: DataDetailsPanelKeyValueListValueProps) {\n return <dd className={cn('min-w-0 truncate py-0.5 text-body-sm text-muted-foreground', className)}>{children}</dd>;\n}\n\nexport interface DataDetailsPanelKeyValueListHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Header({ className, children }: DataDetailsPanelKeyValueListHeaderProps) {\n return (\n <dt className={cn('col-span-2 py-3 text-caption tracking-widest text-placeholder uppercase', className)}>\n {children}\n </dt>\n );\n}\n\nexport const DataDetailsPanelKeyValueList = Object.assign(Root, {\n Key,\n Value,\n Header,\n});\n","import type { ReactNode } from 'react';\nimport { Spinner } from '@/ds/components/Spinner';\n\nexport interface DataDetailsPanelLoadingDataProps {\n children?: ReactNode;\n}\n\nexport function DataDetailsPanelLoadingData({ children }: DataDetailsPanelLoadingDataProps) {\n return (\n <div className=\"flex items-center justify-center gap-2 px-4 py-6 text-caption text-muted-foreground\">\n <Spinner size=\"sm\" variant=\"pulse\" className=\"text-muted-foreground\" /> {children ?? 'Loading...'}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport interface DataDetailsPanelNoDataProps {\n children?: React.ReactNode;\n}\n\nexport function DataDetailsPanelNoData({ children }: DataDetailsPanelNoDataProps) {\n return (\n <Txt variant=\"caption\" tone=\"faint\" className=\"px-4 py-6\">\n {children ?? 'No data found.'}\n </Txt>\n );\n}\n","import { DataDetailsPanel as Root } from './data-details-panel';\nimport { DataDetailsPanelCloseButton } from './data-details-panel-close-button';\nimport { DataDetailsPanelCodeSection } from './data-details-panel-code-section';\nimport { DataDetailsPanelContent } from './data-details-panel-content';\nimport { DataDetailsPanelHeader } from './data-details-panel-header';\nimport { DataDetailsPanelHeading } from './data-details-panel-heading';\nimport { DataDetailsPanelKeyValueList } from './data-details-panel-key-value-list';\nimport { DataDetailsPanelLoadingData } from './data-details-panel-loading-data';\nimport { DataDetailsPanelNoData } from './data-details-panel-no-data';\n\nconst DataDetailsPanel = Object.assign(Root, {\n Header: DataDetailsPanelHeader,\n Heading: DataDetailsPanelHeading,\n CloseButton: DataDetailsPanelCloseButton,\n LoadingData: DataDetailsPanelLoadingData,\n NoData: DataDetailsPanelNoData,\n Content: DataDetailsPanelContent,\n KeyValueList: DataDetailsPanelKeyValueList,\n CodeSection: DataDetailsPanelCodeSection,\n});\n\nexport { DataDetailsPanel };\nexport type { DataDetailsPanelProps } from './data-details-panel';\nexport type { DataDetailsPanelHeaderProps } from './data-details-panel-header';\nexport type { DataDetailsPanelHeadingProps } from './data-details-panel-heading';\nexport type { DataDetailsPanelCloseButtonProps } from './data-details-panel-close-button';\nexport type { DataDetailsPanelLoadingDataProps } from './data-details-panel-loading-data';\nexport type { DataDetailsPanelNoDataProps } from './data-details-panel-no-data';\nexport type { DataDetailsPanelContentProps } from './data-details-panel-content';\nexport type {\n DataDetailsPanelKeyValueListProps,\n DataDetailsPanelKeyValueListKeyProps,\n DataDetailsPanelKeyValueListValueProps,\n DataDetailsPanelKeyValueListHeaderProps,\n} from './data-details-panel-key-value-list';\nexport type { DataDetailsPanelCodeSectionProps } from './data-details-panel-code-section';\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataDetailsPanel-_CK0Huk6.js","names":["DataDetailsPanel","Root"],"sources":["../src/ds/components/DataDetailsPanel/data-details-panel.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-close-button.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-code-section.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-content.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-header.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-heading.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-key-value-list.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-loading-data.tsx","../src/ds/components/DataDetailsPanel/data-details-panel-no-data.tsx","../src/ds/components/DataDetailsPanel/index.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelProps {\n collapsed?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanel({ collapsed, children }: DataDetailsPanelProps) {\n return (\n <section\n className={cn(\n 'flex flex-col overflow-hidden rounded-xl border border-border bg-background',\n collapsed ? 'h-auto' : 'h-full',\n )}\n >\n {children}\n </section>\n );\n}\n","import { XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport interface DataDetailsPanelCloseButtonProps {\n onClick: () => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function DataDetailsPanelCloseButton({\n onClick,\n tooltip = 'Close panel',\n className,\n}: DataDetailsPanelCloseButtonProps) {\n return (\n <Button size=\"icon-md\" onClick={onClick} aria-label=\"Close panel\" tooltip={tooltip} className={className}>\n <XIcon />\n </Button>\n );\n}\n","import { AlignJustifyIcon, AlignLeftIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelCodeSectionProps {\n title: React.ReactNode;\n icon?: React.ReactNode;\n codeStr?: string;\n simplified?: boolean;\n className?: string;\n /** Extra controls rendered in the header, before the built-in copy button. */\n actions?: React.ReactNode;\n}\n\nexport function DataDetailsPanelCodeSection({\n codeStr = '',\n title,\n icon,\n simplified = false,\n className,\n actions,\n}: DataDetailsPanelCodeSectionProps) {\n const [showAsMultilineText, setShowAsMultilineText] = useState(false);\n const hasMultilineText = useMemo(() => {\n try {\n const parsed = JSON.parse(codeStr);\n return containsInnerNewline(parsed || '');\n } catch {\n return false;\n }\n }, [codeStr]);\n\n const finalCodeStr = showAsMultilineText ? codeStr?.replace(/\\\\n/g, '\\n') : codeStr;\n const usePlainTextView = simplified || showAsMultilineText;\n\n if (!codeStr || codeStr === 'null') return null;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center justify-between\">\n <div\n className={cn(\n 'flex items-center gap-1.5 text-meta tracking-widest text-placeholder uppercase',\n '[&>svg]:size-3.5',\n )}\n >\n {icon}\n {title}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <ButtonsGroup size=\"sm\">\n <CopyButton content={codeStr || 'No content'} />\n {hasMultilineText && (\n <Button\n size=\"icon-md\"\n aria-label={showAsMultilineText ? 'Show escaped newlines' : 'Show multiline text'}\n onClick={() => setShowAsMultilineText(v => !v)}\n >\n {showAsMultilineText ? <AlignLeftIcon /> : <AlignJustifyIcon />}\n </Button>\n )}\n </ButtonsGroup>\n </div>\n </div>\n <div\n className={cn(\n raisedSurfaceStyle,\n 'max-h-[30vh] overflow-hidden overflow-y-auto rounded-lg p-3 text-caption break-all text-muted-foreground',\n )}\n >\n {usePlainTextView ? (\n <div className=\"font-mono break-all text-muted-foreground\">\n <pre className=\"text-wrap\">{finalCodeStr}</pre>\n </div>\n ) : (\n <CodeEditor\n value={codeStr}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label={typeof title === 'string' ? title : 'JSON'}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction containsInnerNewline(obj: unknown): boolean {\n if (typeof obj === 'string') {\n const idx = obj.indexOf('\\n');\n return idx !== -1 && idx !== obj.length - 1;\n } else if (Array.isArray(obj)) {\n return obj.some(item => containsInnerNewline(item));\n } else if (obj && typeof obj === 'object') {\n return Object.values(obj).some(value => containsInnerNewline(value));\n }\n return false;\n}\n","import type { ReactNode } from 'react';\n\nexport interface DataDetailsPanelContentProps {\n children: ReactNode;\n}\n\nexport function DataDetailsPanelContent({ children }: DataDetailsPanelContentProps) {\n return <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeader({ className, children }: DataDetailsPanelHeaderProps) {\n return (\n <div className={cn('mx-4 flex items-center justify-between gap-2 border-b border-border py-3', className)}>\n {children}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelHeadingProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function DataDetailsPanelHeading({ className, children }: DataDetailsPanelHeadingProps) {\n return (\n <Txt as=\"h3\" tone=\"muted\" className={cn('flex gap-2 [&>b]:text-caption [&>b]:text-placeholder', className)}>\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface DataDetailsPanelKeyValueListProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Root({ className, children }: DataDetailsPanelKeyValueListProps) {\n return <dl className={cn('grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5', className)}>{children}</dl>;\n}\n\nexport interface DataDetailsPanelKeyValueListKeyProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Key({ className, children }: DataDetailsPanelKeyValueListKeyProps) {\n return <dt className={cn('shrink-0 py-0.5 text-body-sm text-placeholder', className)}>{children}</dt>;\n}\n\nexport interface DataDetailsPanelKeyValueListValueProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Value({ className, children }: DataDetailsPanelKeyValueListValueProps) {\n return <dd className={cn('min-w-0 truncate py-0.5 text-body-sm text-muted-foreground', className)}>{children}</dd>;\n}\n\nexport interface DataDetailsPanelKeyValueListHeaderProps {\n className?: string;\n children: React.ReactNode;\n}\n\nfunction Header({ className, children }: DataDetailsPanelKeyValueListHeaderProps) {\n return (\n <dt className={cn('col-span-2 py-3 text-caption tracking-widest text-placeholder uppercase', className)}>\n {children}\n </dt>\n );\n}\n\nexport const DataDetailsPanelKeyValueList = Object.assign(Root, {\n Key,\n Value,\n Header,\n});\n","import type { ReactNode } from 'react';\nimport { Spinner } from '@/ds/components/Spinner';\n\nexport interface DataDetailsPanelLoadingDataProps {\n children?: ReactNode;\n}\n\nexport function DataDetailsPanelLoadingData({ children }: DataDetailsPanelLoadingDataProps) {\n return (\n <div className=\"flex items-center justify-center gap-2 px-4 py-6 text-caption text-muted-foreground\">\n <Spinner size=\"sm\" variant=\"pulse\" className=\"text-muted-foreground\" /> {children ?? 'Loading...'}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport interface DataDetailsPanelNoDataProps {\n children?: React.ReactNode;\n}\n\nexport function DataDetailsPanelNoData({ children }: DataDetailsPanelNoDataProps) {\n return (\n <Txt variant=\"caption\" tone=\"faint\" className=\"px-4 py-6\">\n {children ?? 'No data found.'}\n </Txt>\n );\n}\n","import { DataDetailsPanel as Root } from './data-details-panel';\nimport { DataDetailsPanelCloseButton } from './data-details-panel-close-button';\nimport { DataDetailsPanelCodeSection } from './data-details-panel-code-section';\nimport { DataDetailsPanelContent } from './data-details-panel-content';\nimport { DataDetailsPanelHeader } from './data-details-panel-header';\nimport { DataDetailsPanelHeading } from './data-details-panel-heading';\nimport { DataDetailsPanelKeyValueList } from './data-details-panel-key-value-list';\nimport { DataDetailsPanelLoadingData } from './data-details-panel-loading-data';\nimport { DataDetailsPanelNoData } from './data-details-panel-no-data';\n\nconst DataDetailsPanel = Object.assign(Root, {\n Header: DataDetailsPanelHeader,\n Heading: DataDetailsPanelHeading,\n CloseButton: DataDetailsPanelCloseButton,\n LoadingData: DataDetailsPanelLoadingData,\n NoData: DataDetailsPanelNoData,\n Content: DataDetailsPanelContent,\n KeyValueList: DataDetailsPanelKeyValueList,\n CodeSection: DataDetailsPanelCodeSection,\n});\n\nexport { DataDetailsPanel };\nexport type { DataDetailsPanelProps } from './data-details-panel';\nexport type { DataDetailsPanelHeaderProps } from './data-details-panel-header';\nexport type { DataDetailsPanelHeadingProps } from './data-details-panel-heading';\nexport type { DataDetailsPanelCloseButtonProps } from './data-details-panel-close-button';\nexport type { DataDetailsPanelLoadingDataProps } from './data-details-panel-loading-data';\nexport type { DataDetailsPanelNoDataProps } from './data-details-panel-no-data';\nexport type { DataDetailsPanelContentProps } from './data-details-panel-content';\nexport type {\n DataDetailsPanelKeyValueListProps,\n DataDetailsPanelKeyValueListKeyProps,\n DataDetailsPanelKeyValueListValueProps,\n DataDetailsPanelKeyValueListHeaderProps,\n} from './data-details-panel-key-value-list';\nexport type { DataDetailsPanelCodeSectionProps } from './data-details-panel-code-section';\n"],"mappings":"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"}
@@ -84,9 +84,12 @@ function DataKeysAndValuesValueWithCopyBtn({ className, children, copyValue, cop
84
84
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
85
85
  onClick: handleCopy,
86
86
  type: "button",
87
- className: require_utils.cn("flex items-center gap-2 text-left whitespace-nowrap", "[&:hover>svg]:opacity-100 [&>svg]:size-3 [&>svg]:shrink-0 [&>svg]:opacity-70", { "[&>svg]:size-4 [&>svg]:text-success-indicator": isCopied }),
87
+ className: require_utils.cn("flex max-w-full items-center gap-2 text-left whitespace-nowrap", "[&:hover>svg]:opacity-100 [&>svg]:size-3 [&>svg]:shrink-0 [&>svg]:opacity-70", { "[&>svg]:size-4 [&>svg]:text-success-indicator": isCopied }),
88
88
  "aria-label": isCopied ? "Copied!" : copyTooltip,
89
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children }), isCopied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CopyIcon, {})]
89
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
90
+ className: "min-w-0 truncate",
91
+ children
92
+ }), isCopied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CopyIcon, {})]
90
93
  })
91
94
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_tooltip.TooltipContent, { children: isCopied ? "Copied!" : copyTooltip })]
92
95
  })
@@ -122,4 +125,4 @@ Object.defineProperty(exports, "DataKeysAndValues", {
122
125
  }
123
126
  });
124
127
 
125
- //# sourceMappingURL=DataKeysAndValues-CHQcnHzv.cjs.map
128
+ //# sourceMappingURL=DataKeysAndValues-DsH6AbAo.cjs.map