@mastra/playground-ui 57.0.0-alpha.2 → 57.0.0-alpha.3

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 (482) hide show
  1. package/dist/{Button-C9cvaVFG.js → Button-KUj0U-5I.js} +3 -2
  2. package/dist/Button-KUj0U-5I.js.map +1 -0
  3. package/dist/{Button-C0DBEBcJ.cjs → Button-MMZPEb_q.cjs} +5 -4
  4. package/dist/Button-MMZPEb_q.cjs.map +1 -0
  5. package/dist/{Notice-CoFjo8O6.cjs → Notice-CPyYcX5J.cjs} +2 -2
  6. package/dist/{Notice-CoFjo8O6.cjs.map → Notice-CPyYcX5J.cjs.map} +1 -1
  7. package/dist/{Notice-DUdQkUqH.js → Notice-KC18b8Nd.js} +2 -2
  8. package/dist/{Notice-DUdQkUqH.js.map → Notice-KC18b8Nd.js.map} +1 -1
  9. package/dist/{SessionExpired-COK6flhT.js → SessionExpired-B9e1Kx4I.js} +2 -2
  10. package/dist/{SessionExpired-COK6flhT.js.map → SessionExpired-B9e1Kx4I.js.map} +1 -1
  11. package/dist/{SessionExpired-CFGTqnU5.cjs → SessionExpired-GSQkcV9f.cjs} +2 -2
  12. package/dist/{SessionExpired-CFGTqnU5.cjs.map → SessionExpired-GSQkcV9f.cjs.map} +1 -1
  13. package/dist/{ask-user-CvCMHkhI.js → ask-user-C4DTzEQF.js} +2 -2
  14. package/dist/{ask-user-CvCMHkhI.js.map → ask-user-C4DTzEQF.js.map} +1 -1
  15. package/dist/{ask-user-3fufbFt8.cjs → ask-user-DaRRR4qQ.cjs} +2 -2
  16. package/dist/{ask-user-3fufbFt8.cjs.map → ask-user-DaRRR4qQ.cjs.map} +1 -1
  17. package/dist/{chat-notification-CQlc3Z3y.cjs → chat-notification-C5Ox5tuS.cjs} +2 -2
  18. package/dist/{chat-notification-CQlc3Z3y.cjs.map → chat-notification-C5Ox5tuS.cjs.map} +1 -1
  19. package/dist/{chat-notification-BM24QnK9.js → chat-notification-DeKD1Ifx.js} +2 -2
  20. package/dist/{chat-notification-BM24QnK9.js.map → chat-notification-DeKD1Ifx.js.map} +1 -1
  21. package/dist/{chat-signal-CUkeTh1i.cjs → chat-signal-ClyJeml8.cjs} +2 -2
  22. package/dist/{chat-signal-CUkeTh1i.cjs.map → chat-signal-ClyJeml8.cjs.map} +1 -1
  23. package/dist/{chat-signal-5gAZo10e.js → chat-signal-DiAHks6_.js} +2 -2
  24. package/dist/{chat-signal-5gAZo10e.js.map → chat-signal-DiAHks6_.js.map} +1 -1
  25. package/dist/{code-block-D2q4w1t-.cjs → code-block-BoTq0TMr.cjs} +5 -5
  26. package/dist/{code-block-D2q4w1t-.cjs.map → code-block-BoTq0TMr.cjs.map} +1 -1
  27. package/dist/{code-block-D3BWud_S.js → code-block-D37olB3O.js} +5 -5
  28. package/dist/{code-block-D3BWud_S.js.map → code-block-D37olB3O.js.map} +1 -1
  29. package/dist/{code-editor-7wJJDE9d.js → code-editor-BQTDma1I.js} +2 -2
  30. package/dist/{code-editor-7wJJDE9d.js.map → code-editor-BQTDma1I.js.map} +1 -1
  31. package/dist/{code-editor-Ce1FXyFV.cjs → code-editor-BfoJXq9l.cjs} +2 -2
  32. package/dist/{code-editor-Ce1FXyFV.cjs.map → code-editor-BfoJXq9l.cjs.map} +1 -1
  33. package/dist/{combobox-Dw3W6EHS.cjs → combobox-Bn_uyUSB.cjs} +3 -3
  34. package/dist/{combobox-Dw3W6EHS.cjs.map → combobox-Bn_uyUSB.cjs.map} +1 -1
  35. package/dist/{combobox-CV-Ue388.js → combobox-Cykfy5wc.js} +3 -3
  36. package/dist/{combobox-CV-Ue388.js.map → combobox-Cykfy5wc.js.map} +1 -1
  37. package/dist/{combobox-styles-ExU7SMb7.cjs → combobox-styles-CSsS2LEx.cjs} +2 -2
  38. package/dist/{combobox-styles-ExU7SMb7.cjs.map → combobox-styles-CSsS2LEx.cjs.map} +1 -1
  39. package/dist/{combobox-styles-Dgc_Jp-E.js → combobox-styles-iuJUkJEQ.js} +2 -2
  40. package/dist/{combobox-styles-Dgc_Jp-E.js.map → combobox-styles-iuJUkJEQ.js.map} +1 -1
  41. package/dist/{command-BJrGchxZ.cjs → command-B7H-emho.cjs} +2 -2
  42. package/dist/{command-BJrGchxZ.cjs.map → command-B7H-emho.cjs.map} +1 -1
  43. package/dist/{command-kHnYspgO.js → command-Bmy4PznC.js} +2 -2
  44. package/dist/{command-kHnYspgO.js.map → command-Bmy4PznC.js.map} +1 -1
  45. package/dist/components/AlertDialog.cjs.js +1 -1
  46. package/dist/components/AlertDialog.es.js +1 -1
  47. package/dist/components/Button.cjs.js +1 -1
  48. package/dist/components/Button.es.js +2 -2
  49. package/dist/components/ClampedText.cjs.js +1 -1
  50. package/dist/components/ClampedText.es.js +1 -1
  51. package/dist/components/CodeBlock.cjs.js +1 -1
  52. package/dist/components/CodeBlock.es.js +1 -1
  53. package/dist/components/CodeEditor.cjs.js +1 -1
  54. package/dist/components/CodeEditor.es.js +1 -1
  55. package/dist/components/Columns.cjs.js +1 -1
  56. package/dist/components/Columns.es.js +1 -1
  57. package/dist/components/Combobox.cjs.js +2 -2
  58. package/dist/components/Combobox.es.js +2 -2
  59. package/dist/components/Command.cjs.js +1 -1
  60. package/dist/components/Command.es.js +1 -1
  61. package/dist/components/CommandPalette.cjs.js +1 -1
  62. package/dist/components/CommandPalette.es.js +1 -1
  63. package/dist/components/Comment.cjs.js +2 -2
  64. package/dist/components/Comment.es.js +2 -2
  65. package/dist/components/CopyButton.cjs.js +1 -1
  66. package/dist/components/CopyButton.es.js +1 -1
  67. package/dist/components/DataCodeSection.cjs.js +1 -1
  68. package/dist/components/DataCodeSection.es.js +1 -1
  69. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  70. package/dist/components/DataDetailsPanel.es.js +2 -2
  71. package/dist/components/DataFilter.cjs.js +1 -1
  72. package/dist/components/DataFilter.es.js +1 -1
  73. package/dist/components/DataList.cjs.js +5 -5
  74. package/dist/components/DataList.es.js +5 -5
  75. package/dist/components/DataPanel.cjs.js +1 -1
  76. package/dist/components/DataPanel.es.js +1 -1
  77. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  78. package/dist/components/DateRangeTimeline.es.js +1 -1
  79. package/dist/components/DateTimePicker.cjs.js +2 -2
  80. package/dist/components/DateTimePicker.es.js +2 -2
  81. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  82. package/dist/components/DateTimeRangePicker.es.js +1 -1
  83. package/dist/components/Dialog.cjs.js +2 -2
  84. package/dist/components/Dialog.es.js +3 -3
  85. package/dist/components/Drawer.cjs.js +4 -4
  86. package/dist/components/Drawer.cjs.js.map +1 -1
  87. package/dist/components/Drawer.es.js +6 -1
  88. package/dist/components/Drawer.es.js.map +1 -1
  89. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  90. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  91. package/dist/components/ErrorBoundary.cjs.js +1 -1
  92. package/dist/components/ErrorBoundary.es.js +1 -1
  93. package/dist/components/FilterBar.cjs.js +3 -3
  94. package/dist/components/FilterBar.es.js +4 -4
  95. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  96. package/dist/components/FormFieldBlocks.es.js +2 -2
  97. package/dist/components/InputGroup.cjs.js +1 -1
  98. package/dist/components/InputGroup.es.js +1 -1
  99. package/dist/components/IntegrationDialog.cjs.js +2 -2
  100. package/dist/components/IntegrationDialog.es.js +2 -2
  101. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  102. package/dist/components/JSONSchemaForm.es.js +2 -2
  103. package/dist/components/ListSearch.cjs.js +1 -1
  104. package/dist/components/ListSearch.es.js +1 -1
  105. package/dist/components/LogsDataList.cjs.js +2 -4
  106. package/dist/components/LogsDataList.cjs.js.map +1 -1
  107. package/dist/components/LogsDataList.es.js +2 -4
  108. package/dist/components/LogsDataList.es.js.map +1 -1
  109. package/dist/components/MainSidebar.cjs.js +11 -125
  110. package/dist/components/MainSidebar.cjs.js.map +1 -1
  111. package/dist/components/MainSidebar.es.js +1 -120
  112. package/dist/components/MainSidebar.es.js.map +1 -1
  113. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  114. package/dist/components/MarkdownRenderer.es.js +1 -1
  115. package/dist/components/Message.cjs.js +1 -1
  116. package/dist/components/Message.es.js +1 -1
  117. package/dist/components/MetricsCard.cjs.js +1 -1
  118. package/dist/components/MetricsCard.es.js +1 -1
  119. package/dist/components/MetricsCardGroup.cjs.js +40 -0
  120. package/dist/components/MetricsCardGroup.cjs.js.map +1 -0
  121. package/dist/components/MetricsCardGroup.d.ts +2 -0
  122. package/dist/components/MetricsCardGroup.es.js +36 -0
  123. package/dist/components/MetricsCardGroup.es.js.map +1 -0
  124. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  125. package/dist/components/MetricsKpiCard.es.js +1 -1
  126. package/dist/components/Notice.cjs.js +1 -1
  127. package/dist/components/Notice.es.js +1 -1
  128. package/dist/components/PrevNextNav.cjs.js +1 -1
  129. package/dist/components/PrevNextNav.es.js +1 -1
  130. package/dist/components/PropertyFilter.cjs.js +3 -3
  131. package/dist/components/PropertyFilter.es.js +4 -4
  132. package/dist/components/RuleBuilder.cjs.js +2 -2
  133. package/dist/components/RuleBuilder.es.js +2 -2
  134. package/dist/components/Select.cjs.js +1 -1
  135. package/dist/components/Select.es.js +1 -1
  136. package/dist/components/SessionExpired.cjs.js +1 -1
  137. package/dist/components/SessionExpired.es.js +1 -1
  138. package/dist/components/SideDialog.cjs.js +3 -3
  139. package/dist/components/SideDialog.es.js +3 -3
  140. package/dist/components/Tabs.cjs.js +3 -3
  141. package/dist/components/Tabs.es.js +3 -3
  142. package/dist/components/ThreadList.cjs.js +1 -1
  143. package/dist/components/ThreadList.es.js +1 -1
  144. package/dist/components/Truncate.cjs.js +1 -1
  145. package/dist/components/Truncate.es.js +1 -1
  146. package/dist/components/Workflow.cjs.js +6 -6
  147. package/dist/components/Workflow.cjs.js.map +1 -1
  148. package/dist/components/Workflow.es.js +6 -6
  149. package/dist/components/Workflow.es.js.map +1 -1
  150. package/dist/components/ai/ask-user.cjs.js +1 -1
  151. package/dist/components/ai/ask-user.es.js +1 -1
  152. package/dist/components/ai/chat-event.cjs.js +3 -3
  153. package/dist/components/ai/chat-event.es.js +4 -4
  154. package/dist/components/ai/plan.cjs.js +2 -2
  155. package/dist/components/ai/plan.es.js +2 -2
  156. package/dist/components/ai/tool-approval.cjs.js +1 -1
  157. package/dist/components/ai/tool-approval.es.js +1 -1
  158. package/dist/components/ai/tool-call.cjs.js +2 -2
  159. package/dist/components/ai/tool-call.es.js +3 -3
  160. package/dist/{copy-button-C5dMlWsW.cjs → copy-button-B5ZCtnTb.cjs} +2 -2
  161. package/dist/{copy-button-C5dMlWsW.cjs.map → copy-button-B5ZCtnTb.cjs.map} +1 -1
  162. package/dist/{copy-button-C6RswD_D.js → copy-button-DZqxEuiE.js} +2 -2
  163. package/dist/{copy-button-C6RswD_D.js.map → copy-button-DZqxEuiE.js.map} +1 -1
  164. package/dist/{data-code-section-DcocgDAN.js → data-code-section-DJRr65hS.js} +5 -5
  165. package/dist/{data-code-section-DcocgDAN.js.map → data-code-section-DJRr65hS.js.map} +1 -1
  166. package/dist/{data-code-section-B-y2WPBl.cjs → data-code-section-iXzoOYMX.cjs} +5 -5
  167. package/dist/{data-code-section-B-y2WPBl.cjs.map → data-code-section-iXzoOYMX.cjs.map} +1 -1
  168. package/dist/{data-list-gN4SP7a8.js → data-list-Cn0Ls4l2.js} +4 -4
  169. package/dist/{data-list-gN4SP7a8.js.map → data-list-Cn0Ls4l2.js.map} +1 -1
  170. package/dist/{data-list-yJm-3f2w.cjs → data-list-DSbuTWLI.cjs} +4 -4
  171. package/dist/{data-list-yJm-3f2w.cjs.map → data-list-DSbuTWLI.cjs.map} +1 -1
  172. package/dist/{data-list-skeleton-DYG2LLri.cjs → data-list-skeleton-K_WmrVke.cjs} +2 -2
  173. package/dist/{data-list-skeleton-DYG2LLri.cjs.map → data-list-skeleton-K_WmrVke.cjs.map} +1 -1
  174. package/dist/{data-list-skeleton-PXHovGLv.js → data-list-skeleton-h4pILqCC.js} +2 -2
  175. package/dist/{data-list-skeleton-PXHovGLv.js.map → data-list-skeleton-h4pILqCC.js.map} +1 -1
  176. package/dist/{data-list-spacer-D-AQzTYw.js → data-list-spacer-C0YimRXC.js} +3 -3
  177. package/dist/{data-list-spacer-D-AQzTYw.js.map → data-list-spacer-C0YimRXC.js.map} +1 -1
  178. package/dist/{data-list-spacer-MpuBsXjL.cjs → data-list-spacer-DUBpzv_H.cjs} +3 -3
  179. package/dist/{data-list-spacer-MpuBsXjL.cjs.map → data-list-spacer-DUBpzv_H.cjs.map} +1 -1
  180. package/dist/{data-list-top-DDux1Eu4.cjs → data-list-top-B-gb-FY6.cjs} +3 -3
  181. package/dist/data-list-top-B-gb-FY6.cjs.map +1 -0
  182. package/dist/{data-list-top-BTeM7hI4.js → data-list-top-LiaWUw5P.js} +3 -3
  183. package/dist/data-list-top-LiaWUw5P.js.map +1 -0
  184. package/dist/{data-panel-CM3N_4M7.cjs → data-panel-Bd_Xsz-W.cjs} +3 -3
  185. package/dist/{data-panel-CM3N_4M7.cjs.map → data-panel-Bd_Xsz-W.cjs.map} +1 -1
  186. package/dist/{data-panel-D3UfzCoE.js → data-panel-Y7wD0xlR.js} +3 -3
  187. package/dist/{data-panel-D3UfzCoE.js.map → data-panel-Y7wD0xlR.js.map} +1 -1
  188. package/dist/{date-time-range-picker-DHg-fuV3.js → date-time-range-picker-Cb86jLFc.js} +3 -3
  189. package/dist/{date-time-range-picker-DHg-fuV3.js.map → date-time-range-picker-Cb86jLFc.js.map} +1 -1
  190. package/dist/{date-time-range-picker-2Pkg-FoU.cjs → date-time-range-picker-D2g3RU5B.cjs} +3 -3
  191. package/dist/{date-time-range-picker-2Pkg-FoU.cjs.map → date-time-range-picker-D2g3RU5B.cjs.map} +1 -1
  192. package/dist/{dialog-Cyj59QsZ.cjs → dialog-Bilo4jEU.cjs} +2 -2
  193. package/dist/{dialog-Cyj59QsZ.cjs.map → dialog-Bilo4jEU.cjs.map} +1 -1
  194. package/dist/{dialog-D8fuBETk.js → dialog-DMOXPT0N.js} +2 -2
  195. package/dist/{dialog-D8fuBETk.js.map → dialog-DMOXPT0N.js.map} +1 -1
  196. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  197. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  198. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  199. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  200. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  201. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  202. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  203. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  204. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  205. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  206. package/dist/domains/chat/messages/reasoning.cjs.js +1 -1
  207. package/dist/domains/chat/messages/reasoning.es.js +1 -1
  208. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  209. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  210. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  211. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  212. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  213. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  214. package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
  215. package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
  216. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  217. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  218. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  219. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  220. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  221. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  222. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  223. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  224. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
  225. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
  226. package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
  227. package/dist/domains/logs/components/log-details-view.es.js +2 -2
  228. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  229. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  230. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  231. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  232. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  233. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  234. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  235. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  236. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  237. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  238. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  239. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  240. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  241. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  242. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  243. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  244. package/dist/domains/metrics/components/kpi-card-view.cjs.js +14 -4
  245. package/dist/domains/metrics/components/kpi-card-view.cjs.js.map +1 -1
  246. package/dist/domains/metrics/components/kpi-card-view.es.js +14 -4
  247. package/dist/domains/metrics/components/kpi-card-view.es.js.map +1 -1
  248. package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -4
  249. package/dist/domains/metrics/components/latency-card-view.es.js +4 -4
  250. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
  251. package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
  252. package/dist/domains/metrics/components/metrics-utils.cjs.js +5 -3
  253. package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
  254. package/dist/domains/metrics/components/metrics-utils.es.js +5 -3
  255. package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
  256. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  257. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  258. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
  259. package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
  260. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -4
  261. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -4
  262. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -4
  263. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +4 -4
  264. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
  265. package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
  266. package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -6
  267. package/dist/domains/traces/components/span-data-panel-view.es.js +6 -6
  268. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  269. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  270. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  271. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  272. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  273. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  274. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  275. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  276. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  277. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  278. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  279. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  280. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
  281. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
  282. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  283. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  284. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  285. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  286. package/dist/domains/traces/components/span-token-usage.cjs.js +19 -12
  287. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  288. package/dist/domains/traces/components/span-token-usage.es.js +19 -12
  289. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  290. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  291. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  292. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
  293. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
  294. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  295. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  296. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
  297. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
  298. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +6 -6
  299. package/dist/domains/traces/components/trace-data-panel-view.es.js +6 -6
  300. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  301. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  302. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  303. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  304. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  305. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  306. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  307. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  308. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  309. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  310. package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
  311. package/dist/domains/traces/components/traces-list-view.es.js +3 -3
  312. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -3
  313. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  314. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -3
  315. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  316. package/dist/{drawer-9eoZbmRK.cjs → drawer-B6Ftum77.cjs} +2 -6
  317. package/dist/drawer-B6Ftum77.cjs.map +1 -0
  318. package/dist/{drawer-DnfOugYZ.js → drawer-CnCsgToD.js} +3 -5
  319. package/dist/drawer-CnCsgToD.js.map +1 -0
  320. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  321. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  322. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  323. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  324. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  325. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  326. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +5 -6
  327. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  328. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -6
  329. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  330. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  331. package/dist/ee/signals/examples-pager.es.js +1 -1
  332. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  333. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  334. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  335. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  336. package/dist/ee/signals/sankey-signals.es.js +1 -1
  337. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  338. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +3 -3
  339. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +3 -3
  340. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +2 -2
  341. package/dist/ee/signals/settings/trace-signal-settings.es.js +2 -2
  342. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  343. package/dist/ee/signals/signals-error-state.es.js +1 -1
  344. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  345. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  346. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  347. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  348. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  349. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  350. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  351. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  352. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  353. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  354. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  355. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  356. package/dist/{filter-bar-chip-D8O9jpCW.cjs → filter-bar-chip-B_k_vbip.cjs} +3 -3
  357. package/dist/{filter-bar-chip-D8O9jpCW.cjs.map → filter-bar-chip-B_k_vbip.cjs.map} +1 -1
  358. package/dist/{filter-bar-chip-DMhUPTt8.js → filter-bar-chip-BlvuAPve.js} +3 -3
  359. package/dist/{filter-bar-chip-DMhUPTt8.js.map → filter-bar-chip-BlvuAPve.js.map} +1 -1
  360. package/dist/icons/Icon.cjs.js +2 -8
  361. package/dist/icons/Icon.cjs.js.map +1 -1
  362. package/dist/icons/Icon.es.js +2 -7
  363. package/dist/icons/Icon.es.js.map +1 -1
  364. package/dist/icons/icon-size-classes.cjs.js +13 -0
  365. package/dist/icons/icon-size-classes.cjs.js.map +1 -0
  366. package/dist/icons/icon-size-classes.d.ts +2 -0
  367. package/dist/icons/icon-size-classes.es.js +9 -0
  368. package/dist/icons/icon-size-classes.es.js.map +1 -0
  369. package/dist/{input-group-Czviwtvr.js → input-group-B-pskRGt.js} +2 -2
  370. package/dist/{input-group-Czviwtvr.js.map → input-group-B-pskRGt.js.map} +1 -1
  371. package/dist/{input-group-2yWKRuq9.cjs → input-group-DaIV9Orp.cjs} +2 -2
  372. package/dist/{input-group-2yWKRuq9.cjs.map → input-group-DaIV9Orp.cjs.map} +1 -1
  373. package/dist/layout/tabbed-container.cjs.js +6 -6
  374. package/dist/layout/tabbed-container.es.js +6 -6
  375. package/dist/{list-search-Jm6SLN0g.js → list-search-DK2yMiME.js} +2 -2
  376. package/dist/{list-search-Jm6SLN0g.js.map → list-search-DK2yMiME.js.map} +1 -1
  377. package/dist/{list-search-s3DRIfz6.cjs → list-search-DhReauU5.cjs} +2 -2
  378. package/dist/{list-search-s3DRIfz6.cjs.map → list-search-DhReauU5.cjs.map} +1 -1
  379. package/dist/{logs-data-list-Cl3abARp.js → logs-data-list-B24gfDle.js} +3 -3
  380. package/dist/{logs-data-list-Cl3abARp.js.map → logs-data-list-B24gfDle.js.map} +1 -1
  381. package/dist/{logs-data-list-C5tjRtkQ.cjs → logs-data-list-DgoCLb6k.cjs} +3 -3
  382. package/dist/{logs-data-list-C5tjRtkQ.cjs.map → logs-data-list-DgoCLb6k.cjs.map} +1 -1
  383. package/dist/{main-sidebar-link-active-CCOxOqzR.js → main-sidebar-Cf5G9iaC.js} +119 -7
  384. package/dist/main-sidebar-Cf5G9iaC.js.map +1 -0
  385. package/dist/{main-sidebar-link-active-qQkuwjqp.cjs → main-sidebar-DYfRxFn4.cjs} +118 -5
  386. package/dist/main-sidebar-DYfRxFn4.cjs.map +1 -0
  387. package/dist/{markdown-renderer-DZAcPOxC.js → markdown-renderer-BUqHHH4y.js} +3 -3
  388. package/dist/{markdown-renderer-DZAcPOxC.js.map → markdown-renderer-BUqHHH4y.js.map} +1 -1
  389. package/dist/{markdown-renderer-C74wABzc.cjs → markdown-renderer-CZLwgva-.cjs} +3 -3
  390. package/dist/{markdown-renderer-C74wABzc.cjs.map → markdown-renderer-CZLwgva-.cjs.map} +1 -1
  391. package/dist/{metrics-card-C5znWn69.js → metrics-card-CN4VRQQJ.js} +2 -2
  392. package/dist/{metrics-card-C5znWn69.js.map → metrics-card-CN4VRQQJ.js.map} +1 -1
  393. package/dist/{metrics-card-BdWGPlnt.cjs → metrics-card-DStXI6yn.cjs} +2 -2
  394. package/dist/{metrics-card-BdWGPlnt.cjs.map → metrics-card-DStXI6yn.cjs.map} +1 -1
  395. package/dist/{metrics-kpi-card-CinKYTBn.js → metrics-kpi-card-C-XLN_Us.js} +27 -21
  396. package/dist/metrics-kpi-card-C-XLN_Us.js.map +1 -0
  397. package/dist/{metrics-kpi-card-HU17WRTT.cjs → metrics-kpi-card-CvOXyEGn.cjs} +26 -20
  398. package/dist/metrics-kpi-card-CvOXyEGn.cjs.map +1 -0
  399. package/dist/new/sidebar.cjs.js +32 -32
  400. package/dist/new/sidebar.cjs.js.map +1 -1
  401. package/dist/new/sidebar.es.js +2 -2
  402. package/dist/primitives/menu-item.cjs.js +1 -1
  403. package/dist/primitives/menu-item.es.js +1 -1
  404. package/dist/primitives/trigger-button.cjs.js +1 -1
  405. package/dist/primitives/trigger-button.es.js +1 -1
  406. package/dist/{property-filter-applied-DtSjGypB.cjs → property-filter-applied-DxSZN3Om.cjs} +4 -4
  407. package/dist/property-filter-applied-DxSZN3Om.cjs.map +1 -0
  408. package/dist/{property-filter-applied-C15IJHLs.js → property-filter-applied-uYr-sCdm.js} +4 -4
  409. package/dist/property-filter-applied-uYr-sCdm.js.map +1 -0
  410. package/dist/resize/panel-drawer.cjs.js +1 -1
  411. package/dist/resize/panel-drawer.es.js +1 -1
  412. package/dist/{search-field-block-nVeIkFXN.js → search-field-block-B0twxGWI.js} +2 -2
  413. package/dist/{search-field-block-nVeIkFXN.js.map → search-field-block-B0twxGWI.js.map} +1 -1
  414. package/dist/{search-field-block-ChXCuPrB.cjs → search-field-block-Bg9GPPaA.cjs} +2 -2
  415. package/dist/{search-field-block-ChXCuPrB.cjs.map → search-field-block-Bg9GPPaA.cjs.map} +1 -1
  416. package/dist/{select-CH5XO18L.cjs → select-65j5NjtJ.cjs} +2 -2
  417. package/dist/{select-CH5XO18L.cjs.map → select-65j5NjtJ.cjs.map} +1 -1
  418. package/dist/{select-CDIt5aab.js → select-BiY-SoMJ.js} +2 -2
  419. package/dist/{select-CDIt5aab.js.map → select-BiY-SoMJ.js.map} +1 -1
  420. package/dist/{select-field-block-CpzMTsP6.cjs → select-field-block-CZbN1w__.cjs} +2 -2
  421. package/dist/{select-field-block-CpzMTsP6.cjs.map → select-field-block-CZbN1w__.cjs.map} +1 -1
  422. package/dist/{select-field-block-BtjE0P5d.js → select-field-block-D_b9N7od.js} +2 -2
  423. package/dist/{select-field-block-BtjE0P5d.js.map → select-field-block-D_b9N7od.js.map} +1 -1
  424. package/dist/{span-payload-primitives-70wznWZl.cjs → span-payload-primitives-BjBTICfq.cjs} +3 -3
  425. package/dist/{span-payload-primitives-70wznWZl.cjs.map → span-payload-primitives-BjBTICfq.cjs.map} +1 -1
  426. package/dist/{span-payload-primitives-BvoMauDb.js → span-payload-primitives-DlIOpCII.js} +3 -3
  427. package/dist/{span-payload-primitives-BvoMauDb.js.map → span-payload-primitives-DlIOpCII.js.map} +1 -1
  428. package/dist/src/domains/metrics/components/kpi-card-view.d.ts +3 -1
  429. package/dist/src/ds/components/Drawer/create-drawer-handle.d.ts +2 -0
  430. package/dist/src/ds/components/Drawer/drawer.d.ts +1 -3
  431. package/dist/src/ds/components/Drawer/index.d.ts +1 -0
  432. package/dist/src/ds/components/MetricsCard/metrics-card.d.ts +1 -0
  433. package/dist/src/ds/components/MetricsCardGroup/index.d.ts +2 -0
  434. package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.d.ts +23 -0
  435. package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.stories.d.ts +7 -0
  436. package/dist/src/ds/components/MetricsKpiCard/metrics-kpi-card-value-row.d.ts +5 -0
  437. package/dist/src/ds/components/MetricsKpiCard/metrics-kpi-card.d.ts +2 -0
  438. package/dist/src/ds/icons/Icon.d.ts +2 -2
  439. package/dist/src/ds/icons/icon-size-classes.d.ts +2 -0
  440. package/dist/src/ds/icons/index.d.ts +1 -0
  441. package/dist/style.css +32 -12
  442. package/dist/{tabs-content-Cdu6HP8U.cjs → tabs-content-CuUlcS67.cjs} +2 -2
  443. package/dist/{tabs-content-Cdu6HP8U.cjs.map → tabs-content-CuUlcS67.cjs.map} +1 -1
  444. package/dist/{tabs-content-BeFlc4E_.js → tabs-content-DMrffE9p.js} +2 -2
  445. package/dist/{tabs-content-BeFlc4E_.js.map → tabs-content-DMrffE9p.js.map} +1 -1
  446. package/dist/{tabs-root-CJ3GkDzi.js → tabs-root-B2sdkQ3A.js} +2 -2
  447. package/dist/{tabs-root-CJ3GkDzi.js.map → tabs-root-B2sdkQ3A.js.map} +1 -1
  448. package/dist/{tabs-root-BiV8irc3.cjs → tabs-root-DrK1hxeV.cjs} +2 -2
  449. package/dist/{tabs-root-BiV8irc3.cjs.map → tabs-root-DrK1hxeV.cjs.map} +1 -1
  450. package/dist/{tabs-tab-J91Szy3Q.cjs → tabs-tab-ClmulJmM.cjs} +2 -2
  451. package/dist/{tabs-tab-J91Szy3Q.cjs.map → tabs-tab-ClmulJmM.cjs.map} +1 -1
  452. package/dist/{tabs-tab-CoSCf5Ku.js → tabs-tab-u6LS5twu.js} +2 -2
  453. package/dist/{tabs-tab-CoSCf5Ku.js.map → tabs-tab-u6LS5twu.js.map} +1 -1
  454. package/dist/{time-picker-vFozGRyK.js → time-picker-DMroqHbw.js} +2 -2
  455. package/dist/{time-picker-vFozGRyK.js.map → time-picker-DMroqHbw.js.map} +1 -1
  456. package/dist/{time-picker-DXuXFGa-.cjs → time-picker-PXFCgAuR.cjs} +2 -2
  457. package/dist/{time-picker-DXuXFGa-.cjs.map → time-picker-PXFCgAuR.cjs.map} +1 -1
  458. package/dist/{tool-approval-DODxfqk7.cjs → tool-approval-DYX_ZNWc.cjs} +2 -2
  459. package/dist/{tool-approval-DODxfqk7.cjs.map → tool-approval-DYX_ZNWc.cjs.map} +1 -1
  460. package/dist/{tool-approval-C11ECt4s.js → tool-approval-DzOGIKRh.js} +2 -2
  461. package/dist/{tool-approval-C11ECt4s.js.map → tool-approval-DzOGIKRh.js.map} +1 -1
  462. package/dist/{tool-call-BjAGFbH-.js → tool-call-HNNRcirD.js} +2 -2
  463. package/dist/{tool-call-BjAGFbH-.js.map → tool-call-HNNRcirD.js.map} +1 -1
  464. package/dist/{tool-call-CNBGnCmO.cjs → tool-call-vZeZ5XT5.cjs} +2 -2
  465. package/dist/{tool-call-CNBGnCmO.cjs.map → tool-call-vZeZ5XT5.cjs.map} +1 -1
  466. package/dist/{traces-data-list-BhKK8-wa.js → traces-data-list-DHrC158-.js} +4 -4
  467. package/dist/{traces-data-list-BhKK8-wa.js.map → traces-data-list-DHrC158-.js.map} +1 -1
  468. package/dist/{traces-data-list-D58cw23x.cjs → traces-data-list-DNOtQze4.cjs} +4 -4
  469. package/dist/{traces-data-list-D58cw23x.cjs.map → traces-data-list-DNOtQze4.cjs.map} +1 -1
  470. package/package.json +7 -7
  471. package/dist/Button-C0DBEBcJ.cjs.map +0 -1
  472. package/dist/Button-C9cvaVFG.js.map +0 -1
  473. package/dist/data-list-top-BTeM7hI4.js.map +0 -1
  474. package/dist/data-list-top-DDux1Eu4.cjs.map +0 -1
  475. package/dist/drawer-9eoZbmRK.cjs.map +0 -1
  476. package/dist/drawer-DnfOugYZ.js.map +0 -1
  477. package/dist/main-sidebar-link-active-CCOxOqzR.js.map +0 -1
  478. package/dist/main-sidebar-link-active-qQkuwjqp.cjs.map +0 -1
  479. package/dist/metrics-kpi-card-CinKYTBn.js.map +0 -1
  480. package/dist/metrics-kpi-card-HU17WRTT.cjs.map +0 -1
  481. package/dist/property-filter-applied-C15IJHLs.js.map +0 -1
  482. package/dist/property-filter-applied-DtSjGypB.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-notification-CQlc3Z3y.cjs","sources":["../src/ds/components/ai/chat-event/chat-event.tsx","../src/ds/components/ai/chat-event/chat-event-preview.ts","../src/ds/components/ai/chat-event/chat-notification.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ninterface ChatEventProps {\n label: string;\n detail?: string;\n icon: ReactNode;\n children?: ReactNode;\n defaultOpen?: boolean;\n 'aria-label': string;\n 'data-signal-kind'?: string;\n 'data-notification-state'?: string;\n 'data-skill-name'?: string;\n}\n\nfunction ChatEventDetail({ children }: { children: string }) {\n const arriving = useArriving();\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" font=\"mono\" className={cn('min-w-0 truncate', arriving)}>\n {children}\n </Txt>\n );\n}\n\nexport function ChatEvent({ label, detail, icon, children, defaultOpen, ...props }: ChatEventProps) {\n const header = (\n <span className=\"flex w-full min-w-0 items-center gap-2 px-1.5 py-1\">\n <span className=\"flex size-4 shrink-0 items-center justify-center\">{icon}</span>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"max-w-[55%] shrink-0 truncate\">\n {label}\n </Txt>\n {detail && <ChatEventDetail>{detail}</ChatEventDetail>}\n <span aria-hidden className=\"min-w-2 flex-1\" />\n <span aria-hidden className=\"flex size-4 shrink-0 items-center justify-center\">\n {children && (\n <span className=\"flex text-muted-foreground opacity-0 group-hover/event:opacity-100 group-focus-visible/event:opacity-100 group-data-[panel-open]/event:rotate-90 group-data-[panel-open]/event:opacity-100 motion-safe:transition motion-safe:duration-150\">\n <ChevronRight size={13} />\n </span>\n )}\n </span>\n </span>\n );\n\n if (!children) {\n return (\n <div className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n {header}\n </div>\n );\n }\n\n return (\n <Collapsible defaultOpen={defaultOpen} className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n <CollapsibleTrigger className=\"group/event w-full cursor-pointer rounded-md text-left hover:bg-fill motion-safe:transition-colors\">\n {header}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"max-w-full min-w-0\">\n <div className=\"relative ml-[14px] max-w-full min-w-0 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\">\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function chatEventPreview(message: string): string {\n return truncateString(message, 72);\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { getNotificationNoticeVariant } from './notification-variant';\nimport { Badge } from '@/ds/components/Badge';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatNotificationProps {\n label: string;\n message: string;\n variant?: 'row' | 'notice';\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n}\n\nexport function ChatNotification({\n label,\n message,\n variant = 'row',\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n}: ChatNotificationProps) {\n if (variant === 'notice') {\n const hasContent = Boolean(priority || status || pending || message || link);\n return (\n <Notice\n variant={getNotificationNoticeVariant(priority)}\n title={label}\n icon={icon ?? <Bell />}\n className=\"my-2 max-w-[80%]\"\n >\n {hasContent && (\n <div className=\"flex flex-col gap-2\">\n {(priority || status || pending) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {priority && <Badge size=\"xs\">{priority}</Badge>}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n </div>\n )}\n {message && <Notice.Message className=\"break-words whitespace-pre-wrap\">{message}</Notice.Message>}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </Notice>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={icon ?? <Bell size={13} className=\"text-warning1\" aria-hidden />}\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n <div className=\"flex flex-col gap-2\">\n <Txt variant=\"caption\">{message}</Txt>\n {link && <NotificationLink link={link} message={message} />}\n </div>\n </ChatEvent>\n );\n}\n\nfunction NotificationLink({ link, message }: { link: NonNullable<ChatNotificationProps['link']>; message: string }) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`Open notification target: ${message}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n"],"names":["useArriving","jsx","Txt","cn","jsxs","ChevronRight","Collapsible","CollapsibleTrigger","CollapsibleContent","truncateString","Notice","getNotificationNoticeVariant","Bell","Badge","ExternalLink"],"mappings":"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"}
1
+ {"version":3,"file":"chat-notification-C5Ox5tuS.cjs","sources":["../src/ds/components/ai/chat-event/chat-event.tsx","../src/ds/components/ai/chat-event/chat-event-preview.ts","../src/ds/components/ai/chat-event/chat-notification.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ninterface ChatEventProps {\n label: string;\n detail?: string;\n icon: ReactNode;\n children?: ReactNode;\n defaultOpen?: boolean;\n 'aria-label': string;\n 'data-signal-kind'?: string;\n 'data-notification-state'?: string;\n 'data-skill-name'?: string;\n}\n\nfunction ChatEventDetail({ children }: { children: string }) {\n const arriving = useArriving();\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" font=\"mono\" className={cn('min-w-0 truncate', arriving)}>\n {children}\n </Txt>\n );\n}\n\nexport function ChatEvent({ label, detail, icon, children, defaultOpen, ...props }: ChatEventProps) {\n const header = (\n <span className=\"flex w-full min-w-0 items-center gap-2 px-1.5 py-1\">\n <span className=\"flex size-4 shrink-0 items-center justify-center\">{icon}</span>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"max-w-[55%] shrink-0 truncate\">\n {label}\n </Txt>\n {detail && <ChatEventDetail>{detail}</ChatEventDetail>}\n <span aria-hidden className=\"min-w-2 flex-1\" />\n <span aria-hidden className=\"flex size-4 shrink-0 items-center justify-center\">\n {children && (\n <span className=\"flex text-muted-foreground opacity-0 group-hover/event:opacity-100 group-focus-visible/event:opacity-100 group-data-[panel-open]/event:rotate-90 group-data-[panel-open]/event:opacity-100 motion-safe:transition motion-safe:duration-150\">\n <ChevronRight size={13} />\n </span>\n )}\n </span>\n </span>\n );\n\n if (!children) {\n return (\n <div className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n {header}\n </div>\n );\n }\n\n return (\n <Collapsible defaultOpen={defaultOpen} className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n <CollapsibleTrigger className=\"group/event w-full cursor-pointer rounded-md text-left hover:bg-fill motion-safe:transition-colors\">\n {header}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"max-w-full min-w-0\">\n <div className=\"relative ml-[14px] max-w-full min-w-0 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\">\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function chatEventPreview(message: string): string {\n return truncateString(message, 72);\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { getNotificationNoticeVariant } from './notification-variant';\nimport { Badge } from '@/ds/components/Badge';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatNotificationProps {\n label: string;\n message: string;\n variant?: 'row' | 'notice';\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n}\n\nexport function ChatNotification({\n label,\n message,\n variant = 'row',\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n}: ChatNotificationProps) {\n if (variant === 'notice') {\n const hasContent = Boolean(priority || status || pending || message || link);\n return (\n <Notice\n variant={getNotificationNoticeVariant(priority)}\n title={label}\n icon={icon ?? <Bell />}\n className=\"my-2 max-w-[80%]\"\n >\n {hasContent && (\n <div className=\"flex flex-col gap-2\">\n {(priority || status || pending) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {priority && <Badge size=\"xs\">{priority}</Badge>}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n </div>\n )}\n {message && <Notice.Message className=\"break-words whitespace-pre-wrap\">{message}</Notice.Message>}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </Notice>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={icon ?? <Bell size={13} className=\"text-warning1\" aria-hidden />}\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n <div className=\"flex flex-col gap-2\">\n <Txt variant=\"caption\">{message}</Txt>\n {link && <NotificationLink link={link} message={message} />}\n </div>\n </ChatEvent>\n );\n}\n\nfunction NotificationLink({ link, message }: { link: NonNullable<ChatNotificationProps['link']>; message: string }) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`Open notification target: ${message}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n"],"names":["useArriving","jsx","Txt","cn","jsxs","ChevronRight","Collapsible","CollapsibleTrigger","CollapsibleContent","truncateString","Notice","getNotificationNoticeVariant","Bell","Badge","ExternalLink"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { c as cn } from './cn-65Adrsfj.js';
7
7
  import { truncateString } from './utils/truncate-string.es.js';
8
8
  import { getNotificationNoticeVariant } from './domains/chat/messages/notification-signal-notice-variant.es.js';
9
9
  import { B as Badge } from './Badge-TD55_qZJ.js';
10
- import { N as Notice } from './Notice-DUdQkUqH.js';
10
+ import { N as Notice } from './Notice-KC18b8Nd.js';
11
11
 
12
12
  function ChatEventDetail({ children }) {
13
13
  const arriving = useArriving();
@@ -104,4 +104,4 @@ function NotificationLink({ link, message }) {
104
104
  }
105
105
 
106
106
  export { ChatNotification as C, ChatEvent as a, chatEventPreview as c };
107
- //# sourceMappingURL=chat-notification-BM24QnK9.js.map
107
+ //# sourceMappingURL=chat-notification-DeKD1Ifx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-notification-BM24QnK9.js","sources":["../src/ds/components/ai/chat-event/chat-event.tsx","../src/ds/components/ai/chat-event/chat-event-preview.ts","../src/ds/components/ai/chat-event/chat-notification.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ninterface ChatEventProps {\n label: string;\n detail?: string;\n icon: ReactNode;\n children?: ReactNode;\n defaultOpen?: boolean;\n 'aria-label': string;\n 'data-signal-kind'?: string;\n 'data-notification-state'?: string;\n 'data-skill-name'?: string;\n}\n\nfunction ChatEventDetail({ children }: { children: string }) {\n const arriving = useArriving();\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" font=\"mono\" className={cn('min-w-0 truncate', arriving)}>\n {children}\n </Txt>\n );\n}\n\nexport function ChatEvent({ label, detail, icon, children, defaultOpen, ...props }: ChatEventProps) {\n const header = (\n <span className=\"flex w-full min-w-0 items-center gap-2 px-1.5 py-1\">\n <span className=\"flex size-4 shrink-0 items-center justify-center\">{icon}</span>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"max-w-[55%] shrink-0 truncate\">\n {label}\n </Txt>\n {detail && <ChatEventDetail>{detail}</ChatEventDetail>}\n <span aria-hidden className=\"min-w-2 flex-1\" />\n <span aria-hidden className=\"flex size-4 shrink-0 items-center justify-center\">\n {children && (\n <span className=\"flex text-muted-foreground opacity-0 group-hover/event:opacity-100 group-focus-visible/event:opacity-100 group-data-[panel-open]/event:rotate-90 group-data-[panel-open]/event:opacity-100 motion-safe:transition motion-safe:duration-150\">\n <ChevronRight size={13} />\n </span>\n )}\n </span>\n </span>\n );\n\n if (!children) {\n return (\n <div className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n {header}\n </div>\n );\n }\n\n return (\n <Collapsible defaultOpen={defaultOpen} className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n <CollapsibleTrigger className=\"group/event w-full cursor-pointer rounded-md text-left hover:bg-fill motion-safe:transition-colors\">\n {header}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"max-w-full min-w-0\">\n <div className=\"relative ml-[14px] max-w-full min-w-0 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\">\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function chatEventPreview(message: string): string {\n return truncateString(message, 72);\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { getNotificationNoticeVariant } from './notification-variant';\nimport { Badge } from '@/ds/components/Badge';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatNotificationProps {\n label: string;\n message: string;\n variant?: 'row' | 'notice';\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n}\n\nexport function ChatNotification({\n label,\n message,\n variant = 'row',\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n}: ChatNotificationProps) {\n if (variant === 'notice') {\n const hasContent = Boolean(priority || status || pending || message || link);\n return (\n <Notice\n variant={getNotificationNoticeVariant(priority)}\n title={label}\n icon={icon ?? <Bell />}\n className=\"my-2 max-w-[80%]\"\n >\n {hasContent && (\n <div className=\"flex flex-col gap-2\">\n {(priority || status || pending) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {priority && <Badge size=\"xs\">{priority}</Badge>}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n </div>\n )}\n {message && <Notice.Message className=\"break-words whitespace-pre-wrap\">{message}</Notice.Message>}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </Notice>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={icon ?? <Bell size={13} className=\"text-warning1\" aria-hidden />}\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n <div className=\"flex flex-col gap-2\">\n <Txt variant=\"caption\">{message}</Txt>\n {link && <NotificationLink link={link} message={message} />}\n </div>\n </ChatEvent>\n );\n}\n\nfunction NotificationLink({ link, message }: { link: NonNullable<ChatNotificationProps['link']>; message: string }) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`Open notification target: ${message}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-notification-DeKD1Ifx.js","sources":["../src/ds/components/ai/chat-event/chat-event.tsx","../src/ds/components/ai/chat-event/chat-event-preview.ts","../src/ds/components/ai/chat-event/chat-notification.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ninterface ChatEventProps {\n label: string;\n detail?: string;\n icon: ReactNode;\n children?: ReactNode;\n defaultOpen?: boolean;\n 'aria-label': string;\n 'data-signal-kind'?: string;\n 'data-notification-state'?: string;\n 'data-skill-name'?: string;\n}\n\nfunction ChatEventDetail({ children }: { children: string }) {\n const arriving = useArriving();\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" font=\"mono\" className={cn('min-w-0 truncate', arriving)}>\n {children}\n </Txt>\n );\n}\n\nexport function ChatEvent({ label, detail, icon, children, defaultOpen, ...props }: ChatEventProps) {\n const header = (\n <span className=\"flex w-full min-w-0 items-center gap-2 px-1.5 py-1\">\n <span className=\"flex size-4 shrink-0 items-center justify-center\">{icon}</span>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\" className=\"max-w-[55%] shrink-0 truncate\">\n {label}\n </Txt>\n {detail && <ChatEventDetail>{detail}</ChatEventDetail>}\n <span aria-hidden className=\"min-w-2 flex-1\" />\n <span aria-hidden className=\"flex size-4 shrink-0 items-center justify-center\">\n {children && (\n <span className=\"flex text-muted-foreground opacity-0 group-hover/event:opacity-100 group-focus-visible/event:opacity-100 group-data-[panel-open]/event:rotate-90 group-data-[panel-open]/event:opacity-100 motion-safe:transition motion-safe:duration-150\">\n <ChevronRight size={13} />\n </span>\n )}\n </span>\n </span>\n );\n\n if (!children) {\n return (\n <div className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n {header}\n </div>\n );\n }\n\n return (\n <Collapsible defaultOpen={defaultOpen} className=\"max-w-full min-w-0\" role=\"group\" {...props}>\n <CollapsibleTrigger className=\"group/event w-full cursor-pointer rounded-md text-left hover:bg-fill motion-safe:transition-colors\">\n {header}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"max-w-full min-w-0\">\n <div className=\"relative ml-[14px] max-w-full min-w-0 py-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\">\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function chatEventPreview(message: string): string {\n return truncateString(message, 72);\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { getNotificationNoticeVariant } from './notification-variant';\nimport { Badge } from '@/ds/components/Badge';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatNotificationProps {\n label: string;\n message: string;\n variant?: 'row' | 'notice';\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n}\n\nexport function ChatNotification({\n label,\n message,\n variant = 'row',\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n}: ChatNotificationProps) {\n if (variant === 'notice') {\n const hasContent = Boolean(priority || status || pending || message || link);\n return (\n <Notice\n variant={getNotificationNoticeVariant(priority)}\n title={label}\n icon={icon ?? <Bell />}\n className=\"my-2 max-w-[80%]\"\n >\n {hasContent && (\n <div className=\"flex flex-col gap-2\">\n {(priority || status || pending) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {priority && <Badge size=\"xs\">{priority}</Badge>}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n </div>\n )}\n {message && <Notice.Message className=\"break-words whitespace-pre-wrap\">{message}</Notice.Message>}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </Notice>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={icon ?? <Bell size={13} className=\"text-warning1\" aria-hidden />}\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n <div className=\"flex flex-col gap-2\">\n <Txt variant=\"caption\">{message}</Txt>\n {link && <NotificationLink link={link} message={message} />}\n </div>\n </ChatEvent>\n );\n}\n\nfunction NotificationLink({ link, message }: { link: NonNullable<ChatNotificationProps['link']>; message: string }) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`Open notification target: ${message}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const lucideReact = require('lucide-react');
5
- const chatNotification = require('./chat-notification-CQlc3Z3y.cjs');
5
+ const chatNotification = require('./chat-notification-C5Ox5tuS.cjs');
6
6
  const Txt = require('./Txt-B4-2nLaI.cjs');
7
7
 
8
8
  const rowIcons = {
@@ -39,4 +39,4 @@ function ChatSignal({ kind, label, message, mode, variant = "row", defaultOpen }
39
39
  }
40
40
 
41
41
  exports.ChatSignal = ChatSignal;
42
- //# sourceMappingURL=chat-signal-CUkeTh1i.cjs.map
42
+ //# sourceMappingURL=chat-signal-ClyJeml8.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-signal-CUkeTh1i.cjs","sources":["../src/ds/components/ai/chat-event/chat-signal.tsx"],"sourcesContent":["import { Database, Info, Layers, Radio } from 'lucide-react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatSignalProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n mode?: string;\n variant?: 'row' | 'card';\n defaultOpen?: boolean;\n}\n\nconst rowIcons = {\n state: <Layers size={13} className=\"text-purple-400\" aria-hidden />,\n reminder: <Info size={13} className=\"text-accent3\" aria-hidden />,\n reactive: <Info size={13} className=\"text-muted-foreground\" aria-hidden />,\n};\n\nexport function ChatSignal({ kind, label, message, mode, variant = 'row', defaultOpen }: ChatSignalProps) {\n if (variant === 'card') {\n const Icon = kind === 'state' ? Database : Radio;\n return (\n <div className=\"my-2 max-w-[80%] rounded-lg border border-border bg-background px-4 py-3 text-foreground\">\n <div className=\"flex items-start gap-3\">\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-column text-foreground\">{label}</p>\n {mode && (\n <span className=\"inline-flex items-center rounded-full border border-border px-1.5 py-0.5 text-caption leading-none text-muted-foreground\">\n {mode}\n </span>\n )}\n </div>\n {message && <p className=\"mt-2 text-caption break-words whitespace-pre-wrap\">{message}</p>}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={rowIcons[kind]}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n </ChatEvent>\n );\n}\n"],"names":["Layers","Info","Database","Radio","jsxs","jsx","ChatEvent","chatEventPreview","Txt"],"mappings":";;;;;;;AAcA,MAAM,QAAA,GAAW;AAAA,EACf,KAAA,iCAAQA,kBAAA,EAAA,EAAO,IAAA,EAAM,IAAI,SAAA,EAAU,iBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,EACjE,QAAA,iCAAWC,gBAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAW,IAAA,EAAC,CAAA;AAAA,EAC/D,QAAA,iCAAWA,gBAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,uBAAA,EAAwB,eAAW,IAAA,EAAC;AAC1E,CAAA;AAEO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,WAAA,EAAY,EAAoB;AACxG,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,OAAA,GAAUC,oBAAA,GAAWC,iBAAA;AAC3C,IAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,4FACb,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,sBAC3ED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACjD,IAAA,oBACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4HACb,QAAA,EAAA,IAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,OAAA,oBAAWA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAqD,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACxF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA,EAAQC,kCAAiB,OAAO,CAAA;AAAA,MAChC,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,MACnB,WAAA;AAAA,MACA,kBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAY,WAAW,KAAK,CAAA,CAAA;AAAA,MAE3B,qCACCF,cAAA,CAACG,OAAA,EAAA,EAAI,SAAQ,SAAA,EAAU,SAAA,EAAU,mCAC9B,QAAA,EAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"chat-signal-ClyJeml8.cjs","sources":["../src/ds/components/ai/chat-event/chat-signal.tsx"],"sourcesContent":["import { Database, Info, Layers, Radio } from 'lucide-react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatSignalProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n mode?: string;\n variant?: 'row' | 'card';\n defaultOpen?: boolean;\n}\n\nconst rowIcons = {\n state: <Layers size={13} className=\"text-purple-400\" aria-hidden />,\n reminder: <Info size={13} className=\"text-accent3\" aria-hidden />,\n reactive: <Info size={13} className=\"text-muted-foreground\" aria-hidden />,\n};\n\nexport function ChatSignal({ kind, label, message, mode, variant = 'row', defaultOpen }: ChatSignalProps) {\n if (variant === 'card') {\n const Icon = kind === 'state' ? Database : Radio;\n return (\n <div className=\"my-2 max-w-[80%] rounded-lg border border-border bg-background px-4 py-3 text-foreground\">\n <div className=\"flex items-start gap-3\">\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-column text-foreground\">{label}</p>\n {mode && (\n <span className=\"inline-flex items-center rounded-full border border-border px-1.5 py-0.5 text-caption leading-none text-muted-foreground\">\n {mode}\n </span>\n )}\n </div>\n {message && <p className=\"mt-2 text-caption break-words whitespace-pre-wrap\">{message}</p>}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={rowIcons[kind]}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n </ChatEvent>\n );\n}\n"],"names":["Layers","Info","Database","Radio","jsxs","jsx","ChatEvent","chatEventPreview","Txt"],"mappings":";;;;;;;AAcA,MAAM,QAAA,GAAW;AAAA,EACf,KAAA,iCAAQA,kBAAA,EAAA,EAAO,IAAA,EAAM,IAAI,SAAA,EAAU,iBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,EACjE,QAAA,iCAAWC,gBAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAW,IAAA,EAAC,CAAA;AAAA,EAC/D,QAAA,iCAAWA,gBAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,uBAAA,EAAwB,eAAW,IAAA,EAAC;AAC1E,CAAA;AAEO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,WAAA,EAAY,EAAoB;AACxG,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,OAAA,GAAUC,oBAAA,GAAWC,iBAAA;AAC3C,IAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,4FACb,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,sBAC3ED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACjD,IAAA,oBACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4HACb,QAAA,EAAA,IAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,OAAA,oBAAWA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAqD,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACxF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA,EAAQC,kCAAiB,OAAO,CAAA;AAAA,MAChC,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,MACnB,WAAA;AAAA,MACA,kBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAY,WAAW,KAAK,CAAA,CAAA;AAAA,MAE3B,qCACCF,cAAA,CAACG,OAAA,EAAA,EAAI,SAAQ,SAAA,EAAU,SAAA,EAAU,mCAC9B,QAAA,EAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Database, Radio, Info, Layers } from 'lucide-react';
3
- import { a as ChatEvent, c as chatEventPreview } from './chat-notification-BM24QnK9.js';
3
+ import { a as ChatEvent, c as chatEventPreview } from './chat-notification-DeKD1Ifx.js';
4
4
  import { T as Txt } from './Txt-DTh3Pa_a.js';
5
5
 
6
6
  const rowIcons = {
@@ -37,4 +37,4 @@ function ChatSignal({ kind, label, message, mode, variant = "row", defaultOpen }
37
37
  }
38
38
 
39
39
  export { ChatSignal as C };
40
- //# sourceMappingURL=chat-signal-5gAZo10e.js.map
40
+ //# sourceMappingURL=chat-signal-DiAHks6_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-signal-5gAZo10e.js","sources":["../src/ds/components/ai/chat-event/chat-signal.tsx"],"sourcesContent":["import { Database, Info, Layers, Radio } from 'lucide-react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatSignalProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n mode?: string;\n variant?: 'row' | 'card';\n defaultOpen?: boolean;\n}\n\nconst rowIcons = {\n state: <Layers size={13} className=\"text-purple-400\" aria-hidden />,\n reminder: <Info size={13} className=\"text-accent3\" aria-hidden />,\n reactive: <Info size={13} className=\"text-muted-foreground\" aria-hidden />,\n};\n\nexport function ChatSignal({ kind, label, message, mode, variant = 'row', defaultOpen }: ChatSignalProps) {\n if (variant === 'card') {\n const Icon = kind === 'state' ? Database : Radio;\n return (\n <div className=\"my-2 max-w-[80%] rounded-lg border border-border bg-background px-4 py-3 text-foreground\">\n <div className=\"flex items-start gap-3\">\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-column text-foreground\">{label}</p>\n {mode && (\n <span className=\"inline-flex items-center rounded-full border border-border px-1.5 py-0.5 text-caption leading-none text-muted-foreground\">\n {mode}\n </span>\n )}\n </div>\n {message && <p className=\"mt-2 text-caption break-words whitespace-pre-wrap\">{message}</p>}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={rowIcons[kind]}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n </ChatEvent>\n );\n}\n"],"names":[],"mappings":";;;;;AAcA,MAAM,QAAA,GAAW;AAAA,EACf,KAAA,sBAAQ,MAAA,EAAA,EAAO,IAAA,EAAM,IAAI,SAAA,EAAU,iBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,EACjE,QAAA,sBAAW,IAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAW,IAAA,EAAC,CAAA;AAAA,EAC/D,QAAA,sBAAW,IAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,uBAAA,EAAwB,eAAW,IAAA,EAAC;AAC1E,CAAA;AAEO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,WAAA,EAAY,EAAoB;AACxG,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,OAAA,GAAU,QAAA,GAAW,KAAA;AAC3C,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,4FACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,sBAC3E,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACjD,IAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4HACb,QAAA,EAAA,IAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAqD,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACxF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA,EAAQ,iBAAiB,OAAO,CAAA;AAAA,MAChC,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,MACnB,WAAA;AAAA,MACA,kBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAY,WAAW,KAAK,CAAA,CAAA;AAAA,MAE3B,qCACC,GAAA,CAAC,GAAA,EAAA,EAAI,SAAQ,SAAA,EAAU,SAAA,EAAU,mCAC9B,QAAA,EAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"chat-signal-DiAHks6_.js","sources":["../src/ds/components/ai/chat-event/chat-signal.tsx"],"sourcesContent":["import { Database, Info, Layers, Radio } from 'lucide-react';\nimport { ChatEvent } from './chat-event';\nimport { chatEventPreview } from './chat-event-preview';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface ChatSignalProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n mode?: string;\n variant?: 'row' | 'card';\n defaultOpen?: boolean;\n}\n\nconst rowIcons = {\n state: <Layers size={13} className=\"text-purple-400\" aria-hidden />,\n reminder: <Info size={13} className=\"text-accent3\" aria-hidden />,\n reactive: <Info size={13} className=\"text-muted-foreground\" aria-hidden />,\n};\n\nexport function ChatSignal({ kind, label, message, mode, variant = 'row', defaultOpen }: ChatSignalProps) {\n if (variant === 'card') {\n const Icon = kind === 'state' ? Database : Radio;\n return (\n <div className=\"my-2 max-w-[80%] rounded-lg border border-border bg-background px-4 py-3 text-foreground\">\n <div className=\"flex items-start gap-3\">\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-column text-foreground\">{label}</p>\n {mode && (\n <span className=\"inline-flex items-center rounded-full border border-border px-1.5 py-0.5 text-caption leading-none text-muted-foreground\">\n {mode}\n </span>\n )}\n </div>\n {message && <p className=\"mt-2 text-caption break-words whitespace-pre-wrap\">{message}</p>}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <ChatEvent\n label={label}\n detail={chatEventPreview(message)}\n icon={rowIcons[kind]}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n </ChatEvent>\n );\n}\n"],"names":[],"mappings":";;;;;AAcA,MAAM,QAAA,GAAW;AAAA,EACf,KAAA,sBAAQ,MAAA,EAAA,EAAO,IAAA,EAAM,IAAI,SAAA,EAAU,iBAAA,EAAkB,eAAW,IAAA,EAAC,CAAA;AAAA,EACjE,QAAA,sBAAW,IAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAW,IAAA,EAAC,CAAA;AAAA,EAC/D,QAAA,sBAAW,IAAA,EAAA,EAAK,IAAA,EAAM,IAAI,SAAA,EAAU,uBAAA,EAAwB,eAAW,IAAA,EAAC;AAC1E,CAAA;AAEO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,WAAA,EAAY,EAAoB;AACxG,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,OAAA,GAAU,QAAA,GAAW,KAAA;AAC3C,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,4FACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,sBAC3E,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACjD,IAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4HACb,QAAA,EAAA,IAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,OAAA,oBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAqD,QAAA,EAAA,OAAA,EAAQ;AAAA,OAAA,EACxF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA,EAAQ,iBAAiB,OAAO,CAAA;AAAA,MAChC,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,MACnB,WAAA;AAAA,MACA,kBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAY,WAAW,KAAK,CAAA,CAAA;AAAA,MAE3B,qCACC,GAAA,CAAC,GAAA,EAAA,EAAI,SAAQ,SAAA,EAAU,SAAA,EAAU,mCAC9B,QAAA,EAAA,OAAA,EACH;AAAA;AAAA,GAEJ;AAEJ;;;;"}
@@ -2,10 +2,10 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const code = require('./code-DhrdtZce.cjs');
5
- const copyButton = require('./copy-button-C5dMlWsW.cjs');
6
- const select = require('./select-CH5XO18L.cjs');
7
- const tabsRoot = require('./tabs-root-BiV8irc3.cjs');
8
- const tabsTab = require('./tabs-tab-J91Szy3Q.cjs');
5
+ const copyButton = require('./copy-button-B5ZCtnTb.cjs');
6
+ const select = require('./select-65j5NjtJ.cjs');
7
+ const tabsRoot = require('./tabs-root-DrK1hxeV.cjs');
8
+ const tabsTab = require('./tabs-tab-ClmulJmM.cjs');
9
9
  const primitives_transitions = require('./primitives/transitions.cjs.js');
10
10
  const utils_cn = require('./cn-DG0X1KEP.cjs');
11
11
 
@@ -85,4 +85,4 @@ function CodeBlock({
85
85
  }
86
86
 
87
87
  exports.CodeBlock = CodeBlock;
88
- //# sourceMappingURL=code-block-D2q4w1t-.cjs.map
88
+ //# sourceMappingURL=code-block-BoTq0TMr.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-block-D2q4w1t-.cjs","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border-strong/40 bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border-strong/40 px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border-strong/40 px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border-strong/40 px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":["code","jsxs","cn","jsx","Tabs","TabList","Tab","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Code","CopyButton","transitions"],"mappings":"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"}
1
+ {"version":3,"file":"code-block-BoTq0TMr.cjs","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border-strong/40 bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border-strong/40 px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border-strong/40 px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border-strong/40 px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":["code","jsxs","cn","jsx","Tabs","TabList","Tab","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Code","CopyButton","transitions"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { C as Code } from './code-D4Vw_fYq.js';
3
- import { C as CopyButton } from './copy-button-C6RswD_D.js';
4
- import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from './select-CDIt5aab.js';
5
- import { a as Tabs, T as TabList } from './tabs-root-CJ3GkDzi.js';
6
- import { T as Tab } from './tabs-tab-CoSCf5Ku.js';
3
+ import { C as CopyButton } from './copy-button-DZqxEuiE.js';
4
+ import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from './select-BiY-SoMJ.js';
5
+ import { a as Tabs, T as TabList } from './tabs-root-B2sdkQ3A.js';
6
+ import { T as Tab } from './tabs-tab-u6LS5twu.js';
7
7
  import { transitions } from './primitives/transitions.es.js';
8
8
  import { c as cn } from './cn-65Adrsfj.js';
9
9
 
@@ -83,4 +83,4 @@ function CodeBlock({
83
83
  }
84
84
 
85
85
  export { CodeBlock as C };
86
- //# sourceMappingURL=code-block-D3BWud_S.js.map
86
+ //# sourceMappingURL=code-block-D37olB3O.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-block-D3BWud_S.js","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border-strong/40 bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border-strong/40 px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border-strong/40 px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border-strong/40 px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-block-D37olB3O.js","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border-strong/40 bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border-strong/40 px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border-strong/40 px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border-strong/40 px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import ReactCodeMirror from '@uiw/react-codemirror';
10
10
  import { c as cva } from './index-Dubp6Qv4.js';
11
11
  import { forwardRef, useMemo } from 'react';
12
12
  import { autocompletion } from '@codemirror/autocomplete';
13
- import { C as CopyButton } from './copy-button-C6RswD_D.js';
13
+ import { C as CopyButton } from './copy-button-DZqxEuiE.js';
14
14
  import { u as useTheme } from './theme-provider-C9ih9jSS.js';
15
15
  import { c as cn } from './cn-65Adrsfj.js';
16
16
 
@@ -483,4 +483,4 @@ const CodeEditor = forwardRef(
483
483
  );
484
484
 
485
485
  export { CodeEditor as C, VARIABLE_PATTERN as V, createVariableAutocomplete as a, codeLanguages as c, flattenSchemaToVariables as f, useCodemirrorTheme as u, variableHighlight as v };
486
- //# sourceMappingURL=code-editor-7wJJDE9d.js.map
486
+ //# sourceMappingURL=code-editor-BQTDma1I.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor-7wJJDE9d.js","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nfunction createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Check if }} already follows the cursor\n const afterCursor = view.state.sliceDoc(to, to + 2);\n const hasClosingBraces = afterCursor === '}}';\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--accent3)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--accent3)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--accent3)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--accent3)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'color-mix(in srgb, var(--accent3) 22%, transparent)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--accent6) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'color-mix(in srgb, var(--accent3) 22%, transparent) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--accent6) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--accent1)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--accent6)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--accent2)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--accent5)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--accent3)',\n },\n { tag: [t.variableName, t.number], color: 'var(--accent5)' },\n { tag: [t.name, t.quote], color: 'var(--accent1)' },\n { tag: t.heading, color: 'var(--accent3)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--accent3)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--accent3)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--accent3)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--accent2)' },\n { tag: t.invalid, color: 'var(--error)' },\n { tag: [t.standard(t.tagName)], color: 'var(--accent1)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme() : buildLightTheme()), [isDark]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: 'rounded-md border border-border bg-card p-1 focus-within:border-border-focus',\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabel = 'Code editor',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n ...props\n },\n ref,\n ) => {\n const theme = useCodemirrorTheme();\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (id) contentAttributes.id = id;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [language, highlightVariables, schema, editable, lineWrapping, id, ariaLabel, ariaDescribedBy, ariaInvalid]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["t","CodeMirror"],"mappings":"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"}
1
+ {"version":3,"file":"code-editor-BQTDma1I.js","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nfunction createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Check if }} already follows the cursor\n const afterCursor = view.state.sliceDoc(to, to + 2);\n const hasClosingBraces = afterCursor === '}}';\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: 'var(--font-mono)',\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--accent3)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--accent3)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--accent3)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--accent3)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'color-mix(in srgb, var(--accent3) 22%, transparent)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--accent6) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'color-mix(in srgb, var(--accent3) 22%, transparent) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--accent6) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--accent1)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--accent6)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--accent2)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--accent5)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--accent3)',\n },\n { tag: [t.variableName, t.number], color: 'var(--accent5)' },\n { tag: [t.name, t.quote], color: 'var(--accent1)' },\n { tag: t.heading, color: 'var(--accent3)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--accent3)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--accent3)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--accent3)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--accent2)' },\n { tag: t.invalid, color: 'var(--error)' },\n { tag: [t.standard(t.tagName)], color: 'var(--accent1)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme() : buildLightTheme()), [isDark]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: 'rounded-md border border-border bg-card p-1 focus-within:border-border-focus',\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabel = 'Code editor',\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n ...props\n },\n ref,\n ) => {\n const theme = useCodemirrorTheme();\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (id) contentAttributes.id = id;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [language, highlightVariables, schema, editable, lineWrapping, id, ariaLabel, ariaDescribedBy, ariaInvalid]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["t","CodeMirror"],"mappings":"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"}
@@ -12,7 +12,7 @@ const ReactCodeMirror = require('@uiw/react-codemirror');
12
12
  const index = require('./index-C-fBJhpb.cjs');
13
13
  const React = require('react');
14
14
  const autocomplete = require('@codemirror/autocomplete');
15
- const copyButton = require('./copy-button-C5dMlWsW.cjs');
15
+ const copyButton = require('./copy-button-B5ZCtnTb.cjs');
16
16
  const themeProvider = require('./theme-provider-aO5-jZVp.cjs');
17
17
  const utils_cn = require('./cn-DG0X1KEP.cjs');
18
18
 
@@ -491,4 +491,4 @@ exports.createVariableAutocomplete = createVariableAutocomplete;
491
491
  exports.flattenSchemaToVariables = flattenSchemaToVariables;
492
492
  exports.useCodemirrorTheme = useCodemirrorTheme;
493
493
  exports.variableHighlight = variableHighlight;
494
- //# sourceMappingURL=code-editor-Ce1FXyFV.cjs.map
494
+ //# sourceMappingURL=code-editor-BfoJXq9l.cjs.map