@flanksource/clicky-ui 0.3.46 → 0.3.47

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 (379) hide show
  1. package/NOTICE.md +11 -0
  2. package/dist/ai.cjs +13 -8
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +7 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/components/ErrorWrapper.cjs +2 -3
  7. package/dist/components/ErrorWrapper.cjs.map +1 -1
  8. package/dist/components/ErrorWrapper.d.ts.map +1 -1
  9. package/dist/components/ErrorWrapper.js +3 -4
  10. package/dist/components/ErrorWrapper.js.map +1 -1
  11. package/dist/data/Clicky.cjs +3 -0
  12. package/dist/data/Clicky.cjs.map +1 -1
  13. package/dist/data/Clicky.js +3 -0
  14. package/dist/data/Clicky.js.map +1 -1
  15. package/dist/data/FilterPill.cjs +15 -2
  16. package/dist/data/FilterPill.cjs.map +1 -1
  17. package/dist/data/FilterPill.d.ts +1 -1
  18. package/dist/data/FilterPill.d.ts.map +1 -1
  19. package/dist/data/FilterPill.js +15 -2
  20. package/dist/data/FilterPill.js.map +1 -1
  21. package/dist/data/LogViewer.cjs +27 -8
  22. package/dist/data/LogViewer.cjs.map +1 -1
  23. package/dist/data/LogViewer.d.ts +11 -3
  24. package/dist/data/LogViewer.d.ts.map +1 -1
  25. package/dist/data/LogViewer.js +27 -8
  26. package/dist/data/LogViewer.js.map +1 -1
  27. package/dist/data/Properties.cjs +2 -15
  28. package/dist/data/Properties.cjs.map +1 -1
  29. package/dist/data/Properties.d.ts +4 -0
  30. package/dist/data/Properties.d.ts.map +1 -1
  31. package/dist/data/Properties.js +2 -15
  32. package/dist/data/Properties.js.map +1 -1
  33. package/dist/data/PropertyValue.cjs +37 -0
  34. package/dist/data/PropertyValue.cjs.map +1 -0
  35. package/dist/data/PropertyValue.d.ts +6 -0
  36. package/dist/data/PropertyValue.d.ts.map +1 -0
  37. package/dist/data/PropertyValue.js +37 -0
  38. package/dist/data/PropertyValue.js.map +1 -0
  39. package/dist/data/Tree.cjs +4 -3
  40. package/dist/data/Tree.cjs.map +1 -1
  41. package/dist/data/Tree.d.ts +3 -1
  42. package/dist/data/Tree.d.ts.map +1 -1
  43. package/dist/data/Tree.js +4 -3
  44. package/dist/data/Tree.js.map +1 -1
  45. package/dist/data/ai/ChatFab.cjs +1 -1
  46. package/dist/data/ai/ChatFab.cjs.map +1 -1
  47. package/dist/data/ai/ChatFab.js +1 -1
  48. package/dist/data/ai/ChatFab.js.map +1 -1
  49. package/dist/data/ai/ChatWindow.cjs +106 -171
  50. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  51. package/dist/data/ai/ChatWindow.d.ts +6 -2
  52. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  53. package/dist/data/ai/ChatWindow.header.cjs +104 -0
  54. package/dist/data/ai/ChatWindow.header.cjs.map +1 -0
  55. package/dist/data/ai/ChatWindow.header.d.ts +29 -0
  56. package/dist/data/ai/ChatWindow.header.d.ts.map +1 -0
  57. package/dist/data/ai/ChatWindow.header.js +104 -0
  58. package/dist/data/ai/ChatWindow.header.js.map +1 -0
  59. package/dist/data/ai/ChatWindow.js +107 -172
  60. package/dist/data/ai/ChatWindow.js.map +1 -1
  61. package/dist/data/ai/ChatWindow.placement.cjs +95 -0
  62. package/dist/data/ai/ChatWindow.placement.cjs.map +1 -0
  63. package/dist/data/ai/ChatWindow.placement.d.ts +32 -0
  64. package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -0
  65. package/dist/data/ai/ChatWindow.placement.js +95 -0
  66. package/dist/data/ai/ChatWindow.placement.js.map +1 -0
  67. package/dist/data/ai/SessionChatComposer.cjs +3 -1
  68. package/dist/data/ai/SessionChatComposer.cjs.map +1 -1
  69. package/dist/data/ai/SessionChatComposer.d.ts +4 -1
  70. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -1
  71. package/dist/data/ai/SessionChatComposer.js +3 -1
  72. package/dist/data/ai/SessionChatComposer.js.map +1 -1
  73. package/dist/data/ai/SessionInspector.cjs +68 -72
  74. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  75. package/dist/data/ai/SessionInspector.composer-slot.cjs +8 -0
  76. package/dist/data/ai/SessionInspector.composer-slot.cjs.map +1 -0
  77. package/dist/data/ai/SessionInspector.composer-slot.d.ts +9 -0
  78. package/dist/data/ai/SessionInspector.composer-slot.d.ts.map +1 -0
  79. package/dist/data/ai/SessionInspector.composer-slot.js +8 -0
  80. package/dist/data/ai/SessionInspector.composer-slot.js.map +1 -0
  81. package/dist/data/ai/SessionInspector.d.ts +6 -1
  82. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  83. package/dist/data/ai/SessionInspector.js +69 -73
  84. package/dist/data/ai/SessionInspector.js.map +1 -1
  85. package/dist/data/ai/SessionInspector.legacy.cjs +41 -42
  86. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -1
  87. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -1
  88. package/dist/data/ai/SessionInspector.legacy.js +41 -42
  89. package/dist/data/ai/SessionInspector.legacy.js.map +1 -1
  90. package/dist/data/ai/SessionInspector.remote-view.cjs +14 -9
  91. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -1
  92. package/dist/data/ai/SessionInspector.remote-view.d.ts +6 -2
  93. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -1
  94. package/dist/data/ai/SessionInspector.remote-view.js +14 -9
  95. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -1
  96. package/dist/data/ai/SessionInspector.remote.cjs +84 -16
  97. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -1
  98. package/dist/data/ai/SessionInspector.remote.d.ts +42 -7
  99. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -1
  100. package/dist/data/ai/SessionInspector.remote.js +86 -18
  101. package/dist/data/ai/SessionInspector.remote.js.map +1 -1
  102. package/dist/data/ai/SessionInspector.transcript.cjs +5 -0
  103. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  104. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  105. package/dist/data/ai/SessionInspector.transcript.js +5 -0
  106. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  107. package/dist/data/ai/SessionTail.cjs +63 -0
  108. package/dist/data/ai/SessionTail.cjs.map +1 -0
  109. package/dist/data/ai/SessionTail.d.ts +14 -0
  110. package/dist/data/ai/SessionTail.d.ts.map +1 -0
  111. package/dist/data/ai/SessionTail.js +63 -0
  112. package/dist/data/ai/SessionTail.js.map +1 -0
  113. package/dist/data/ai/SessionViewer.cjs +10 -3
  114. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  115. package/dist/data/ai/SessionViewer.d.ts +7 -1
  116. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  117. package/dist/data/ai/SessionViewer.js +10 -3
  118. package/dist/data/ai/SessionViewer.js.map +1 -1
  119. package/dist/data/ai/SessionViewer.unified.d.ts +14 -0
  120. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  121. package/dist/data/ai/index.d.ts +4 -3
  122. package/dist/data/ai/index.d.ts.map +1 -1
  123. package/dist/data/ai/use-session-scroll.cjs +30 -6
  124. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  125. package/dist/data/ai/use-session-scroll.d.ts +7 -0
  126. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  127. package/dist/data/ai/use-session-scroll.js +30 -6
  128. package/dist/data/ai/use-session-scroll.js.map +1 -1
  129. package/dist/data/chat/Chat.cjs +1 -1
  130. package/dist/data/chat/Chat.cjs.map +1 -1
  131. package/dist/data/chat/Chat.js +1 -1
  132. package/dist/data/chat/Chat.js.map +1 -1
  133. package/dist/data/chat/ChatRuntimeToolbar.cjs +4 -4
  134. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  135. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  136. package/dist/data/chat/ChatRuntimeToolbar.js +4 -4
  137. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  138. package/dist/data/chat/PromptInput.cjs +4 -2
  139. package/dist/data/chat/PromptInput.cjs.map +1 -1
  140. package/dist/data/chat/PromptInput.d.ts +5 -1
  141. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  142. package/dist/data/chat/PromptInput.js +4 -2
  143. package/dist/data/chat/PromptInput.js.map +1 -1
  144. package/dist/data/diagnostics/ErrorDetails.cjs +13 -2
  145. package/dist/data/diagnostics/ErrorDetails.cjs.map +1 -1
  146. package/dist/data/diagnostics/ErrorDetails.d.ts +3 -1
  147. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -1
  148. package/dist/data/diagnostics/ErrorDetails.js +14 -3
  149. package/dist/data/diagnostics/ErrorDetails.js.map +1 -1
  150. package/dist/data/diagnostics/FrameSourceWindow.cjs +3 -2
  151. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  152. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  153. package/dist/data/diagnostics/FrameSourceWindow.js +3 -2
  154. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  155. package/dist/data/diagnostics/error-diagnostics.cjs +5 -0
  156. package/dist/data/diagnostics/error-diagnostics.cjs.map +1 -1
  157. package/dist/data/diagnostics/error-diagnostics.d.ts +1 -0
  158. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -1
  159. package/dist/data/diagnostics/error-diagnostics.js +6 -1
  160. package/dist/data/diagnostics/error-diagnostics.js.map +1 -1
  161. package/dist/data/har/HarPanel.cjs +3 -1
  162. package/dist/data/har/HarPanel.cjs.map +1 -1
  163. package/dist/data/har/HarPanel.d.ts +4 -1
  164. package/dist/data/har/HarPanel.d.ts.map +1 -1
  165. package/dist/data/har/HarPanel.js +3 -1
  166. package/dist/data/har/HarPanel.js.map +1 -1
  167. package/dist/data/test-runner/Expectation.cjs +57 -0
  168. package/dist/data/test-runner/Expectation.cjs.map +1 -0
  169. package/dist/data/test-runner/Expectation.d.ts +19 -0
  170. package/dist/data/test-runner/Expectation.d.ts.map +1 -0
  171. package/dist/data/test-runner/Expectation.js +57 -0
  172. package/dist/data/test-runner/Expectation.js.map +1 -0
  173. package/dist/data/test-runner/MarkIcons.cjs +38 -0
  174. package/dist/data/test-runner/MarkIcons.cjs.map +1 -0
  175. package/dist/data/test-runner/MarkIcons.d.ts +15 -0
  176. package/dist/data/test-runner/MarkIcons.d.ts.map +1 -0
  177. package/dist/data/test-runner/MarkIcons.js +38 -0
  178. package/dist/data/test-runner/MarkIcons.js.map +1 -0
  179. package/dist/data/test-runner/TestDetailPanel.cjs +74 -42
  180. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  181. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  182. package/dist/data/test-runner/TestDetailPanel.js +76 -44
  183. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  184. package/dist/data/test-runner/TestFailureDetail.cjs +23 -27
  185. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  186. package/dist/data/test-runner/TestFailureDetail.d.ts +2 -2
  187. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  188. package/dist/data/test-runner/TestFailureDetail.js +23 -27
  189. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  190. package/dist/data/test-runner/TestFilterBar.cjs +87 -93
  191. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  192. package/dist/data/test-runner/TestFilterBar.d.ts +3 -2
  193. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  194. package/dist/data/test-runner/TestFilterBar.js +89 -95
  195. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  196. package/dist/data/test-runner/TestRunSummary.cjs +35 -21
  197. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  198. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  199. package/dist/data/test-runner/TestRunSummary.js +35 -21
  200. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  201. package/dist/data/test-runner/TestRunner.cjs +52 -30
  202. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  203. package/dist/data/test-runner/TestRunner.d.ts +3 -2
  204. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  205. package/dist/data/test-runner/TestRunner.js +52 -30
  206. package/dist/data/test-runner/TestRunner.js.map +1 -1
  207. package/dist/data/test-runner/TestTree.cjs +5 -2
  208. package/dist/data/test-runner/TestTree.cjs.map +1 -1
  209. package/dist/data/test-runner/TestTree.d.ts +5 -2
  210. package/dist/data/test-runner/TestTree.d.ts.map +1 -1
  211. package/dist/data/test-runner/TestTree.js +5 -2
  212. package/dist/data/test-runner/TestTree.js.map +1 -1
  213. package/dist/data/test-runner/TestTreeNode.cjs +27 -19
  214. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  215. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  216. package/dist/data/test-runner/TestTreeNode.js +28 -20
  217. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  218. package/dist/data/test-runner/adapter.cjs +11 -0
  219. package/dist/data/test-runner/adapter.cjs.map +1 -1
  220. package/dist/data/test-runner/adapter.d.ts +18 -7
  221. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  222. package/dist/data/test-runner/adapter.js +11 -0
  223. package/dist/data/test-runner/adapter.js.map +1 -1
  224. package/dist/data/test-runner/copy.cjs +114 -0
  225. package/dist/data/test-runner/copy.cjs.map +1 -0
  226. package/dist/data/test-runner/copy.d.ts +47 -0
  227. package/dist/data/test-runner/copy.d.ts.map +1 -0
  228. package/dist/data/test-runner/copy.js +114 -0
  229. package/dist/data/test-runner/copy.js.map +1 -0
  230. package/dist/data/test-runner/index.d.ts +5 -2
  231. package/dist/data/test-runner/index.d.ts.map +1 -1
  232. package/dist/data/test-runner/marks.cjs +143 -0
  233. package/dist/data/test-runner/marks.cjs.map +1 -0
  234. package/dist/data/test-runner/marks.d.ts +30 -0
  235. package/dist/data/test-runner/marks.d.ts.map +1 -0
  236. package/dist/data/test-runner/marks.js +143 -0
  237. package/dist/data/test-runner/marks.js.map +1 -0
  238. package/dist/data/test-runner/status.cjs +27 -44
  239. package/dist/data/test-runner/status.cjs.map +1 -1
  240. package/dist/data/test-runner/status.d.ts +12 -3
  241. package/dist/data/test-runner/status.d.ts.map +1 -1
  242. package/dist/data/test-runner/status.js +27 -44
  243. package/dist/data/test-runner/status.js.map +1 -1
  244. package/dist/data/verification/adapterViews.cjs +16 -41
  245. package/dist/data/verification/adapterViews.cjs.map +1 -1
  246. package/dist/data/verification/adapterViews.d.ts.map +1 -1
  247. package/dist/data/verification/adapterViews.js +16 -41
  248. package/dist/data/verification/adapterViews.js.map +1 -1
  249. package/dist/data/verification/adapters.cjs +115 -3
  250. package/dist/data/verification/adapters.cjs.map +1 -1
  251. package/dist/data/verification/adapters.d.ts.map +1 -1
  252. package/dist/data/verification/adapters.js +115 -3
  253. package/dist/data/verification/adapters.js.map +1 -1
  254. package/dist/data/verification/verifyReportTests.cjs.map +1 -1
  255. package/dist/data/verification/verifyReportTests.js.map +1 -1
  256. package/dist/data/version-info.cjs +3 -3
  257. package/dist/data/version-info.js +3 -3
  258. package/dist/data.cjs +44 -3
  259. package/dist/data.cjs.map +1 -1
  260. package/dist/data.d.ts +2 -0
  261. package/dist/data.d.ts.map +1 -1
  262. package/dist/data.js +45 -4
  263. package/dist/data.js.map +1 -1
  264. package/dist/icons/components/UiLogoEslint.cjs +10 -0
  265. package/dist/icons/components/UiLogoEslint.cjs.map +1 -0
  266. package/dist/icons/components/UiLogoEslint.d.ts +9 -0
  267. package/dist/icons/components/UiLogoEslint.d.ts.map +1 -0
  268. package/dist/icons/components/UiLogoEslint.js +10 -0
  269. package/dist/icons/components/UiLogoEslint.js.map +1 -0
  270. package/dist/icons/components/UiLogoGo.cjs +10 -0
  271. package/dist/icons/components/UiLogoGo.cjs.map +1 -0
  272. package/dist/icons/components/UiLogoGo.d.ts +9 -0
  273. package/dist/icons/components/UiLogoGo.d.ts.map +1 -0
  274. package/dist/icons/components/UiLogoGo.js +10 -0
  275. package/dist/icons/components/UiLogoGo.js.map +1 -0
  276. package/dist/icons/components/UiLogoJest.cjs +10 -0
  277. package/dist/icons/components/UiLogoJest.cjs.map +1 -0
  278. package/dist/icons/components/UiLogoJest.d.ts +9 -0
  279. package/dist/icons/components/UiLogoJest.d.ts.map +1 -0
  280. package/dist/icons/components/UiLogoJest.js +10 -0
  281. package/dist/icons/components/UiLogoJest.js.map +1 -0
  282. package/dist/icons/components/UiLogoMarkdown.cjs +10 -0
  283. package/dist/icons/components/UiLogoMarkdown.cjs.map +1 -0
  284. package/dist/icons/components/UiLogoMarkdown.d.ts +9 -0
  285. package/dist/icons/components/UiLogoMarkdown.d.ts.map +1 -0
  286. package/dist/icons/components/UiLogoMarkdown.js +10 -0
  287. package/dist/icons/components/UiLogoMarkdown.js.map +1 -0
  288. package/dist/icons/components/UiLogoOxc.cjs +10 -0
  289. package/dist/icons/components/UiLogoOxc.cjs.map +1 -0
  290. package/dist/icons/components/UiLogoOxc.d.ts +9 -0
  291. package/dist/icons/components/UiLogoOxc.d.ts.map +1 -0
  292. package/dist/icons/components/UiLogoOxc.js +10 -0
  293. package/dist/icons/components/UiLogoOxc.js.map +1 -0
  294. package/dist/icons/components/UiLogoPlaywright.cjs +10 -0
  295. package/dist/icons/components/UiLogoPlaywright.cjs.map +1 -0
  296. package/dist/icons/components/UiLogoPlaywright.d.ts +9 -0
  297. package/dist/icons/components/UiLogoPlaywright.d.ts.map +1 -0
  298. package/dist/icons/components/UiLogoPlaywright.js +10 -0
  299. package/dist/icons/components/UiLogoPlaywright.js.map +1 -0
  300. package/dist/icons/components/UiLogoPython.cjs +10 -0
  301. package/dist/icons/components/UiLogoPython.cjs.map +1 -0
  302. package/dist/icons/components/UiLogoPython.d.ts +9 -0
  303. package/dist/icons/components/UiLogoPython.d.ts.map +1 -0
  304. package/dist/icons/components/UiLogoPython.js +10 -0
  305. package/dist/icons/components/UiLogoPython.js.map +1 -0
  306. package/dist/icons/components/UiLogoReact.cjs +10 -0
  307. package/dist/icons/components/UiLogoReact.cjs.map +1 -0
  308. package/dist/icons/components/UiLogoReact.d.ts +9 -0
  309. package/dist/icons/components/UiLogoReact.d.ts.map +1 -0
  310. package/dist/icons/components/UiLogoReact.js +10 -0
  311. package/dist/icons/components/UiLogoReact.js.map +1 -0
  312. package/dist/icons/components/UiLogoRuff.cjs +10 -0
  313. package/dist/icons/components/UiLogoRuff.cjs.map +1 -0
  314. package/dist/icons/components/UiLogoRuff.d.ts +9 -0
  315. package/dist/icons/components/UiLogoRuff.d.ts.map +1 -0
  316. package/dist/icons/components/UiLogoRuff.js +10 -0
  317. package/dist/icons/components/UiLogoRuff.js.map +1 -0
  318. package/dist/icons/components/UiLogoTypescript.cjs +10 -0
  319. package/dist/icons/components/UiLogoTypescript.cjs.map +1 -0
  320. package/dist/icons/components/UiLogoTypescript.d.ts +9 -0
  321. package/dist/icons/components/UiLogoTypescript.d.ts.map +1 -0
  322. package/dist/icons/components/UiLogoTypescript.js +10 -0
  323. package/dist/icons/components/UiLogoTypescript.js.map +1 -0
  324. package/dist/icons/components/UiLogoVitest.cjs +10 -0
  325. package/dist/icons/components/UiLogoVitest.cjs.map +1 -0
  326. package/dist/icons/components/UiLogoVitest.d.ts +9 -0
  327. package/dist/icons/components/UiLogoVitest.d.ts.map +1 -0
  328. package/dist/icons/components/UiLogoVitest.js +10 -0
  329. package/dist/icons/components/UiLogoVitest.js.map +1 -0
  330. package/dist/icons/index.d.ts +11 -0
  331. package/dist/icons/index.d.ts.map +1 -1
  332. package/dist/icons/registry.cjs +22 -0
  333. package/dist/icons/registry.cjs.map +1 -1
  334. package/dist/icons/registry.d.ts.map +1 -1
  335. package/dist/icons/registry.js +22 -0
  336. package/dist/icons/registry.js.map +1 -1
  337. package/dist/icons.cjs +22 -0
  338. package/dist/icons.cjs.map +1 -1
  339. package/dist/icons.js +22 -0
  340. package/dist/icons.js.map +1 -1
  341. package/dist/index.cjs +44 -3
  342. package/dist/index.cjs.map +1 -1
  343. package/dist/index.js +45 -4
  344. package/dist/index.js.map +1 -1
  345. package/dist/overlay/DropdownMenuSubmenu.cjs +4 -4
  346. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  347. package/dist/overlay/DropdownMenuSubmenu.js +4 -4
  348. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  349. package/dist/rpc/InlineError.cjs +12 -43
  350. package/dist/rpc/InlineError.cjs.map +1 -1
  351. package/dist/rpc/InlineError.d.ts.map +1 -1
  352. package/dist/rpc/InlineError.js +13 -44
  353. package/dist/rpc/InlineError.js.map +1 -1
  354. package/dist/rpc/OperationScheduleDialog.cjs +63 -10
  355. package/dist/rpc/OperationScheduleDialog.cjs.map +1 -1
  356. package/dist/rpc/OperationScheduleDialog.d.ts +4 -0
  357. package/dist/rpc/OperationScheduleDialog.d.ts.map +1 -1
  358. package/dist/rpc/OperationScheduleDialog.js +63 -10
  359. package/dist/rpc/OperationScheduleDialog.js.map +1 -1
  360. package/dist/rpc/OperationSchedules.cjs +12 -2
  361. package/dist/rpc/OperationSchedules.cjs.map +1 -1
  362. package/dist/rpc/OperationSchedules.d.ts.map +1 -1
  363. package/dist/rpc/OperationSchedules.js +12 -2
  364. package/dist/rpc/OperationSchedules.js.map +1 -1
  365. package/dist/rpc/operation-schedule-model.cjs +2 -0
  366. package/dist/rpc/operation-schedule-model.cjs.map +1 -1
  367. package/dist/rpc/operation-schedule-model.d.ts.map +1 -1
  368. package/dist/rpc/operation-schedule-model.js +2 -0
  369. package/dist/rpc/operation-schedule-model.js.map +1 -1
  370. package/dist/rpc/operation-schedule-types.d.ts +7 -1
  371. package/dist/rpc/operation-schedule-types.d.ts.map +1 -1
  372. package/dist/styles.css +1 -1
  373. package/package.json +1 -1
  374. package/dist/data/test-runner/frameworkIcon.cjs +0 -27
  375. package/dist/data/test-runner/frameworkIcon.cjs.map +0 -1
  376. package/dist/data/test-runner/frameworkIcon.d.ts +0 -3
  377. package/dist/data/test-runner/frameworkIcon.d.ts.map +0 -1
  378. package/dist/data/test-runner/frameworkIcon.js +0 -27
  379. package/dist/data/test-runner/frameworkIcon.js.map +0 -1
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../../lib/utils.cjs");
5
+ const button = require("../../components/button.cjs");
6
+ const Icon = require("../Icon.cjs");
7
+ const ThreadPicker = require("./ThreadPicker.cjs");
8
+ const ToolPreferences = require("./ToolPreferences.cjs");
9
+ const UiArrowLeft = require("../../icons/components/UiArrowLeft.cjs");
10
+ const UiGitBranch = require("../../icons/components/UiGitBranch.cjs");
11
+ const UiAdd = require("../../icons/components/UiAdd.cjs");
12
+ const UiFullscreen = require("../../icons/components/UiFullscreen.cjs");
13
+ const UiClose = require("../../icons/components/UiClose.cjs");
14
+ function ChatWindowHeader({
15
+ mobile,
16
+ title,
17
+ threadId,
18
+ maximized,
19
+ threadsSource,
20
+ sessionsApi,
21
+ titleRefresh,
22
+ headerExtras,
23
+ toolPreferences,
24
+ hasMessages,
25
+ forkDisabled,
26
+ onSelectThread,
27
+ onNewThread,
28
+ onFork,
29
+ onNewWindow,
30
+ onMaximize,
31
+ onClose
32
+ }) {
33
+ return /* @__PURE__ */ jsxRuntime.jsxs(
34
+ "div",
35
+ {
36
+ className: utils.cn(
37
+ "flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5",
38
+ !mobile && "chat-drag-handle cursor-move"
39
+ ),
40
+ children: [
41
+ mobile && /* @__PURE__ */ jsxRuntime.jsx(
42
+ button.Button,
43
+ {
44
+ variant: "ghost",
45
+ size: "icon",
46
+ title: "Back",
47
+ "aria-label": "Back",
48
+ onClick: onClose,
49
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiArrowLeft.UiArrowLeft, className: "size-4" })
50
+ }
51
+ ),
52
+ threadsSource != null || sessionsApi !== null ? /* @__PURE__ */ jsxRuntime.jsx(
53
+ ThreadPicker.ThreadPicker,
54
+ {
55
+ threadId,
56
+ onSelect: onSelectThread,
57
+ onNew: onNewThread,
58
+ refreshToken: titleRefresh,
59
+ ...threadsSource ? { source: threadsSource } : sessionsApi !== null ? { api: sessionsApi } : {}
60
+ }
61
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-1 text-sm font-medium", children: title }),
62
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
63
+ headerExtras,
64
+ /* @__PURE__ */ jsxRuntime.jsx(ToolPreferences.ToolPreferences, { ...toolPreferences }),
65
+ sessionsApi && /* @__PURE__ */ jsxRuntime.jsx(
66
+ button.Button,
67
+ {
68
+ variant: "ghost",
69
+ size: "icon",
70
+ title: hasMessages ? "Fork conversation into a new window" : "Send a message before forking this conversation",
71
+ disabled: forkDisabled,
72
+ onClick: onFork,
73
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiGitBranch.UiGitBranch, className: "size-4" })
74
+ }
75
+ ),
76
+ /* @__PURE__ */ jsxRuntime.jsx(
77
+ button.Button,
78
+ {
79
+ variant: "ghost",
80
+ size: "icon",
81
+ title: "New window",
82
+ onClick: onNewWindow,
83
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiAdd.UiAdd, className: "size-4" })
84
+ }
85
+ ),
86
+ !mobile && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
87
+ /* @__PURE__ */ jsxRuntime.jsx(
88
+ button.Button,
89
+ {
90
+ variant: "ghost",
91
+ size: "icon",
92
+ title: maximized ? "Restore" : "Maximize",
93
+ onClick: onMaximize,
94
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiFullscreen.UiFullscreen, className: "size-4" })
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsxRuntime.jsx(button.Button, { variant: "ghost", size: "icon", title: "Close", onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClose.UiClose, className: "size-4" }) })
98
+ ] })
99
+ ]
100
+ }
101
+ );
102
+ }
103
+ exports.ChatWindowHeader = ChatWindowHeader;
104
+ //# sourceMappingURL=ChatWindow.header.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatWindow.header.cjs","sources":["../../../src/data/ai/ChatWindow.header.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport {\n UiAdd,\n UiArrowLeft,\n UiClose,\n UiFullscreen,\n UiGitBranch,\n} from \"../../icons\";\nimport { ThreadPicker, type ThreadSource } from \"./ThreadPicker\";\nimport { ToolPreferences } from \"./ToolPreferences\";\n\nexport type ChatWindowHeaderProps = {\n /** Below the mobile breakpoint: a back button replaces drag, maximize and close. */\n mobile: boolean;\n title: ReactNode;\n threadId: string | null;\n maximized: boolean;\n threadsSource: ThreadSource | undefined;\n sessionsApi: string | null;\n /** Bumped when a turn settles so the picker re-reads the conversation name. */\n titleRefresh: number;\n headerExtras: ReactNode;\n toolPreferences: ComponentProps<typeof ToolPreferences>;\n hasMessages: boolean;\n forkDisabled: boolean;\n onSelectThread: (threadId: string) => void;\n onNewThread: () => void;\n onFork: () => void;\n onNewWindow: () => void;\n onMaximize: () => void;\n onClose: () => void;\n};\n\n/** The chat window's drag-handle header: thread switcher (or title), host\n * extras, tool/runtime preferences, fork, new window, and — off mobile —\n * maximize and close. */\nexport function ChatWindowHeader({\n mobile,\n title,\n threadId,\n maximized,\n threadsSource,\n sessionsApi,\n titleRefresh,\n headerExtras,\n toolPreferences,\n hasMessages,\n forkDisabled,\n onSelectThread,\n onNewThread,\n onFork,\n onNewWindow,\n onMaximize,\n onClose,\n}: ChatWindowHeaderProps) {\n return (\n <div\n className={cn(\n \"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\",\n !mobile && \"chat-drag-handle cursor-move\",\n )}\n >\n {mobile && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Back\"\n aria-label=\"Back\"\n onClick={onClose}\n >\n <Icon icon={UiArrowLeft} className=\"size-4\" />\n </Button>\n )}\n {threadsSource != null || sessionsApi !== null ? (\n <ThreadPicker\n threadId={threadId}\n onSelect={onSelectThread}\n onNew={onNewThread}\n refreshToken={titleRefresh}\n {...(threadsSource\n ? { source: threadsSource }\n : sessionsApi !== null\n ? { api: sessionsApi }\n : {})}\n />\n ) : (\n <span className=\"px-1 text-sm font-medium\">{title}</span>\n )}\n <div className=\"flex-1\" />\n {headerExtras}\n <ToolPreferences {...toolPreferences} />\n {sessionsApi && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={\n hasMessages\n ? \"Fork conversation into a new window\"\n : \"Send a message before forking this conversation\"\n }\n disabled={forkDisabled}\n onClick={onFork}\n >\n <Icon icon={UiGitBranch} className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"New window\"\n onClick={onNewWindow}\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n </Button>\n {!mobile && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={maximized ? \"Restore\" : \"Maximize\"}\n onClick={onMaximize}\n >\n <Icon icon={UiFullscreen} className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" title=\"Close\" onClick={onClose}>\n <Icon icon={UiClose} className=\"size-4\" />\n </Button>\n </>\n )}\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","Button","Icon","UiArrowLeft","ThreadPicker","ToolPreferences","UiGitBranch","UiAdd","Fragment","UiFullscreen","UiClose"],"mappings":";;;;;;;;;;;;;AAuCO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,CAAC,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA,UACCC,2BAAAA;AAAAA,UAACC,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,cAAW;AAAA,YACX,SAAS;AAAA,YAET,UAAAD,2BAAAA,IAACE,WAAA,EAAK,MAAMC,YAAAA,aAAa,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/C,iBAAiB,QAAQ,gBAAgB,OACxCH,2BAAAA;AAAAA,UAACI,aAAAA;AAAAA,UAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,OAAO;AAAA,YACP,cAAc;AAAA,YACb,GAAI,gBACD,EAAE,QAAQ,cAAA,IACV,gBAAgB,OACd,EAAE,KAAK,gBACP,CAAA;AAAA,UAAC;AAAA,QAAA,IAGTJ,2BAAAA,IAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA,OAAM;AAAA,QAEpDA,2BAAAA,IAAC,OAAA,EAAI,WAAU,SAAA,CAAS;AAAA,QACvB;AAAA,QACDA,2BAAAA,IAACK,gBAAAA,iBAAA,EAAiB,GAAG,iBAAiB;AAAA,QACrC,eACCL,2BAAAA;AAAAA,UAACC,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OACE,cACI,wCACA;AAAA,YAEN,UAAU;AAAA,YACV,SAAS;AAAA,YAET,UAAAD,2BAAAA,IAACE,WAAA,EAAK,MAAMI,YAAAA,aAAa,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAGhDN,2BAAAA;AAAAA,UAACC,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,SAAS;AAAA,YAET,UAAAD,2BAAAA,IAACE,WAAA,EAAK,MAAMK,MAAAA,OAAO,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAEvC,CAAC,UACAT,2BAAAA,KAAAU,WAAAA,UAAA,EACE,UAAA;AAAA,UAAAR,2BAAAA;AAAAA,YAACC,OAAAA;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAO,YAAY,YAAY;AAAA,cAC/B,SAAS;AAAA,cAET,UAAAD,2BAAAA,IAACE,WAAA,EAAK,MAAMO,aAAAA,cAAc,WAAU,SAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,yCAE9CR,OAAAA,QAAA,EAAO,SAAQ,SAAQ,MAAK,QAAO,OAAM,SAAQ,SAAS,SACzD,yCAACC,WAAA,EAAK,MAAMQ,iBAAS,WAAU,UAAS,EAAA,CAC1C;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;;"}
@@ -0,0 +1,29 @@
1
+ import { ComponentProps, ReactNode } from 'react';
2
+ import { ThreadSource } from './ThreadPicker.js';
3
+ import { ToolPreferences } from './ToolPreferences.js';
4
+ export type ChatWindowHeaderProps = {
5
+ /** Below the mobile breakpoint: a back button replaces drag, maximize and close. */
6
+ mobile: boolean;
7
+ title: ReactNode;
8
+ threadId: string | null;
9
+ maximized: boolean;
10
+ threadsSource: ThreadSource | undefined;
11
+ sessionsApi: string | null;
12
+ /** Bumped when a turn settles so the picker re-reads the conversation name. */
13
+ titleRefresh: number;
14
+ headerExtras: ReactNode;
15
+ toolPreferences: ComponentProps<typeof ToolPreferences>;
16
+ hasMessages: boolean;
17
+ forkDisabled: boolean;
18
+ onSelectThread: (threadId: string) => void;
19
+ onNewThread: () => void;
20
+ onFork: () => void;
21
+ onNewWindow: () => void;
22
+ onMaximize: () => void;
23
+ onClose: () => void;
24
+ };
25
+ /** The chat window's drag-handle header: thread switcher (or title), host
26
+ * extras, tool/runtime preferences, fork, new window, and — off mobile —
27
+ * maximize and close. */
28
+ export declare function ChatWindowHeader({ mobile, title, threadId, maximized, threadsSource, sessionsApi, titleRefresh, headerExtras, toolPreferences, hasMessages, forkDisabled, onSelectThread, onNewThread, onFork, onNewWindow, onMaximize, onClose, }: ChatWindowHeaderProps): import("react").JSX.Element;
29
+ //# sourceMappingURL=ChatWindow.header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatWindow.header.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,oFAAoF;IACpF,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,CAAC;IACxB,eAAe,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;0BAE0B;AAC1B,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,MAAM,EACN,WAAW,EACX,UAAU,EACV,OAAO,GACR,EAAE,qBAAqB,+BA6EvB"}
@@ -0,0 +1,104 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { Button } from "../../components/button.js";
4
+ import { Icon } from "../Icon.js";
5
+ import { ThreadPicker } from "./ThreadPicker.js";
6
+ import { ToolPreferences } from "./ToolPreferences.js";
7
+ import { UiArrowLeft } from "../../icons/components/UiArrowLeft.js";
8
+ import { UiGitBranch } from "../../icons/components/UiGitBranch.js";
9
+ import { UiAdd } from "../../icons/components/UiAdd.js";
10
+ import { UiFullscreen } from "../../icons/components/UiFullscreen.js";
11
+ import { UiClose } from "../../icons/components/UiClose.js";
12
+ function ChatWindowHeader({
13
+ mobile,
14
+ title,
15
+ threadId,
16
+ maximized,
17
+ threadsSource,
18
+ sessionsApi,
19
+ titleRefresh,
20
+ headerExtras,
21
+ toolPreferences,
22
+ hasMessages,
23
+ forkDisabled,
24
+ onSelectThread,
25
+ onNewThread,
26
+ onFork,
27
+ onNewWindow,
28
+ onMaximize,
29
+ onClose
30
+ }) {
31
+ return /* @__PURE__ */ jsxs(
32
+ "div",
33
+ {
34
+ className: cn(
35
+ "flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5",
36
+ !mobile && "chat-drag-handle cursor-move"
37
+ ),
38
+ children: [
39
+ mobile && /* @__PURE__ */ jsx(
40
+ Button,
41
+ {
42
+ variant: "ghost",
43
+ size: "icon",
44
+ title: "Back",
45
+ "aria-label": "Back",
46
+ onClick: onClose,
47
+ children: /* @__PURE__ */ jsx(Icon, { icon: UiArrowLeft, className: "size-4" })
48
+ }
49
+ ),
50
+ threadsSource != null || sessionsApi !== null ? /* @__PURE__ */ jsx(
51
+ ThreadPicker,
52
+ {
53
+ threadId,
54
+ onSelect: onSelectThread,
55
+ onNew: onNewThread,
56
+ refreshToken: titleRefresh,
57
+ ...threadsSource ? { source: threadsSource } : sessionsApi !== null ? { api: sessionsApi } : {}
58
+ }
59
+ ) : /* @__PURE__ */ jsx("span", { className: "px-1 text-sm font-medium", children: title }),
60
+ /* @__PURE__ */ jsx("div", { className: "flex-1" }),
61
+ headerExtras,
62
+ /* @__PURE__ */ jsx(ToolPreferences, { ...toolPreferences }),
63
+ sessionsApi && /* @__PURE__ */ jsx(
64
+ Button,
65
+ {
66
+ variant: "ghost",
67
+ size: "icon",
68
+ title: hasMessages ? "Fork conversation into a new window" : "Send a message before forking this conversation",
69
+ disabled: forkDisabled,
70
+ onClick: onFork,
71
+ children: /* @__PURE__ */ jsx(Icon, { icon: UiGitBranch, className: "size-4" })
72
+ }
73
+ ),
74
+ /* @__PURE__ */ jsx(
75
+ Button,
76
+ {
77
+ variant: "ghost",
78
+ size: "icon",
79
+ title: "New window",
80
+ onClick: onNewWindow,
81
+ children: /* @__PURE__ */ jsx(Icon, { icon: UiAdd, className: "size-4" })
82
+ }
83
+ ),
84
+ !mobile && /* @__PURE__ */ jsxs(Fragment, { children: [
85
+ /* @__PURE__ */ jsx(
86
+ Button,
87
+ {
88
+ variant: "ghost",
89
+ size: "icon",
90
+ title: maximized ? "Restore" : "Maximize",
91
+ onClick: onMaximize,
92
+ children: /* @__PURE__ */ jsx(Icon, { icon: UiFullscreen, className: "size-4" })
93
+ }
94
+ ),
95
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", title: "Close", onClick: onClose, children: /* @__PURE__ */ jsx(Icon, { icon: UiClose, className: "size-4" }) })
96
+ ] })
97
+ ]
98
+ }
99
+ );
100
+ }
101
+ export {
102
+ ChatWindowHeader
103
+ };
104
+ //# sourceMappingURL=ChatWindow.header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatWindow.header.js","sources":["../../../src/data/ai/ChatWindow.header.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport {\n UiAdd,\n UiArrowLeft,\n UiClose,\n UiFullscreen,\n UiGitBranch,\n} from \"../../icons\";\nimport { ThreadPicker, type ThreadSource } from \"./ThreadPicker\";\nimport { ToolPreferences } from \"./ToolPreferences\";\n\nexport type ChatWindowHeaderProps = {\n /** Below the mobile breakpoint: a back button replaces drag, maximize and close. */\n mobile: boolean;\n title: ReactNode;\n threadId: string | null;\n maximized: boolean;\n threadsSource: ThreadSource | undefined;\n sessionsApi: string | null;\n /** Bumped when a turn settles so the picker re-reads the conversation name. */\n titleRefresh: number;\n headerExtras: ReactNode;\n toolPreferences: ComponentProps<typeof ToolPreferences>;\n hasMessages: boolean;\n forkDisabled: boolean;\n onSelectThread: (threadId: string) => void;\n onNewThread: () => void;\n onFork: () => void;\n onNewWindow: () => void;\n onMaximize: () => void;\n onClose: () => void;\n};\n\n/** The chat window's drag-handle header: thread switcher (or title), host\n * extras, tool/runtime preferences, fork, new window, and — off mobile —\n * maximize and close. */\nexport function ChatWindowHeader({\n mobile,\n title,\n threadId,\n maximized,\n threadsSource,\n sessionsApi,\n titleRefresh,\n headerExtras,\n toolPreferences,\n hasMessages,\n forkDisabled,\n onSelectThread,\n onNewThread,\n onFork,\n onNewWindow,\n onMaximize,\n onClose,\n}: ChatWindowHeaderProps) {\n return (\n <div\n className={cn(\n \"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\",\n !mobile && \"chat-drag-handle cursor-move\",\n )}\n >\n {mobile && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Back\"\n aria-label=\"Back\"\n onClick={onClose}\n >\n <Icon icon={UiArrowLeft} className=\"size-4\" />\n </Button>\n )}\n {threadsSource != null || sessionsApi !== null ? (\n <ThreadPicker\n threadId={threadId}\n onSelect={onSelectThread}\n onNew={onNewThread}\n refreshToken={titleRefresh}\n {...(threadsSource\n ? { source: threadsSource }\n : sessionsApi !== null\n ? { api: sessionsApi }\n : {})}\n />\n ) : (\n <span className=\"px-1 text-sm font-medium\">{title}</span>\n )}\n <div className=\"flex-1\" />\n {headerExtras}\n <ToolPreferences {...toolPreferences} />\n {sessionsApi && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={\n hasMessages\n ? \"Fork conversation into a new window\"\n : \"Send a message before forking this conversation\"\n }\n disabled={forkDisabled}\n onClick={onFork}\n >\n <Icon icon={UiGitBranch} className=\"size-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"New window\"\n onClick={onNewWindow}\n >\n <Icon icon={UiAdd} className=\"size-4\" />\n </Button>\n {!mobile && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={maximized ? \"Restore\" : \"Maximize\"}\n onClick={onMaximize}\n >\n <Icon icon={UiFullscreen} className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" title=\"Close\" onClick={onClose}>\n <Icon icon={UiClose} className=\"size-4\" />\n </Button>\n </>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAuCO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,CAAC,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA,UACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,cAAW;AAAA,YACX,SAAS;AAAA,YAET,UAAA,oBAAC,MAAA,EAAK,MAAM,aAAa,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/C,iBAAiB,QAAQ,gBAAgB,OACxC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,OAAO;AAAA,YACP,cAAc;AAAA,YACb,GAAI,gBACD,EAAE,QAAQ,cAAA,IACV,gBAAgB,OACd,EAAE,KAAK,gBACP,CAAA;AAAA,UAAC;AAAA,QAAA,IAGT,oBAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA,OAAM;AAAA,QAEpD,oBAAC,OAAA,EAAI,WAAU,SAAA,CAAS;AAAA,QACvB;AAAA,QACD,oBAAC,iBAAA,EAAiB,GAAG,iBAAiB;AAAA,QACrC,eACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OACE,cACI,wCACA;AAAA,YAEN,UAAU;AAAA,YACV,SAAS;AAAA,YAET,UAAA,oBAAC,MAAA,EAAK,MAAM,aAAa,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAGhD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YACN,SAAS;AAAA,YAET,UAAA,oBAAC,MAAA,EAAK,MAAM,OAAO,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAEvC,CAAC,UACA,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAO,YAAY,YAAY;AAAA,cAC/B,SAAS;AAAA,cAET,UAAA,oBAAC,MAAA,EAAK,MAAM,cAAc,WAAU,SAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,8BAE9C,QAAA,EAAO,SAAQ,SAAQ,MAAK,QAAO,OAAM,SAAQ,SAAS,SACzD,8BAAC,MAAA,EAAK,MAAM,SAAS,WAAU,UAAS,EAAA,CAC1C;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,14 +1,12 @@
1
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect, useMemo, useCallback } from "react";
3
3
  import { cn } from "../../lib/utils.js";
4
- import { Button } from "../../components/button.js";
5
- import { Icon } from "../Icon.js";
4
+ import { useMediaQuery } from "../../hooks/use-media-query.js";
6
5
  import { Chat } from "../chat/Chat.js";
7
6
  import { forkChatSession } from "../chat/approval.js";
8
7
  import { useChatWindowManager } from "./chat-window-context.js";
9
- import { ThreadPicker } from "./ThreadPicker.js";
8
+ import { ChatWindowHeader } from "./ChatWindow.header.js";
10
9
  import { ContextBadges } from "./ContextBadges.js";
11
- import { ToolPreferences } from "./ToolPreferences.js";
12
10
  import { chatWindowRequestBody } from "./ChatWindowRequestBody.js";
13
11
  import { loadChatPreferences, saveChatPreferences } from "./ChatWindow.preferences.js";
14
12
  import { useChatWindowRuntime } from "./ChatWindow.runtime.js";
@@ -17,19 +15,8 @@ import { normalizeToolCatalog } from "./ChatWindow.tool-catalog.js";
17
15
  import { effectiveToolPolicies, withUserRule } from "./ToolPreferences.model.js";
18
16
  import { useChatThreadSetup } from "./ChatWindow.thread.js";
19
17
  import { ChatThreadSetupStatus } from "./ChatWindow.thread-status.js";
20
- import { UiGitBranch } from "../../icons/components/UiGitBranch.js";
21
- import { UiAdd } from "../../icons/components/UiAdd.js";
22
- import { UiFullscreen } from "../../icons/components/UiFullscreen.js";
23
- import { UiClose } from "../../icons/components/UiClose.js";
18
+ import { CHAT_WINDOW_MOBILE_QUERY, ChatWindowSheet, ChatWindowFloating } from "./ChatWindow.placement.js";
24
19
  const EMPTY_TOOLS = [];
25
- const MAXIMIZE_CSS = `
26
- .chat-maximized .react-draggable {
27
- transform: none !important;
28
- width: auto !important;
29
- height: auto !important;
30
- inset: 0 !important;
31
- position: absolute !important;
32
- }`;
33
20
  function ChatWindow({
34
21
  panel,
35
22
  chat,
@@ -46,7 +33,15 @@ function ChatWindow({
46
33
  renderContextPicker
47
34
  }) {
48
35
  var _a;
49
- const { updatePanel, closePanel, bringToFront, maximizePanel, openPanel } = useChatWindowManager();
36
+ const {
37
+ panels,
38
+ updatePanel,
39
+ closePanel,
40
+ bringToFront,
41
+ maximizePanel,
42
+ openPanel
43
+ } = useChatWindowManager();
44
+ const mobile = useMediaQuery(CHAT_WINDOW_MOBILE_QUERY);
50
45
  const threadSetup = useChatThreadSetup({
51
46
  threadId: panel.threadId,
52
47
  api: sessionsApi,
@@ -163,6 +158,7 @@ function ChatWindow({
163
158
  setUserToolRules((prev) => withUserRule(prev, rule));
164
159
  }, []);
165
160
  useEffect(() => {
161
+ if (mobile) return;
166
162
  let active = true;
167
163
  import("react-rnd").then((m) => {
168
164
  if (active) setRnd(() => m.Rnd);
@@ -170,7 +166,7 @@ function ChatWindow({
170
166
  return () => {
171
167
  active = false;
172
168
  };
173
- }, []);
169
+ }, [mobile]);
174
170
  const removeContext = useCallback(
175
171
  (id) => updatePanel(panel.id, {
176
172
  contextItems: panel.contextItems.filter((c) => c.id !== id)
@@ -263,22 +259,18 @@ function ChatWindow({
263
259
  setForking(false);
264
260
  }
265
261
  }, [forking, messageCount, openPanel, panel.threadId, sessionsApi]);
266
- const header = /* @__PURE__ */ jsxs("div", { className: "chat-drag-handle flex cursor-move items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5", children: [
267
- threadsSource != null || sessionsApi !== null ? /* @__PURE__ */ jsx(
268
- ThreadPicker,
269
- {
270
- threadId: panel.threadId,
271
- onSelect: (tid) => updatePanel(panel.id, { threadId: tid }),
272
- onNew: () => updatePanel(panel.id, { threadId: null }),
273
- refreshToken: titleRefresh,
274
- ...threadsSource ? { source: threadsSource } : sessionsApi !== null ? { api: sessionsApi } : {}
275
- }
276
- ) : /* @__PURE__ */ jsx("span", { className: "px-1 text-sm font-medium", children: title }),
277
- /* @__PURE__ */ jsx("div", { className: "flex-1" }),
278
- headerExtras,
279
- /* @__PURE__ */ jsx(
280
- ToolPreferences,
281
- {
262
+ const header = /* @__PURE__ */ jsx(
263
+ ChatWindowHeader,
264
+ {
265
+ mobile,
266
+ title,
267
+ threadId: panel.threadId,
268
+ maximized: panel.maximized,
269
+ threadsSource,
270
+ sessionsApi,
271
+ titleRefresh,
272
+ headerExtras,
273
+ toolPreferences: {
282
274
  tools: resolvedTools,
283
275
  value: toolPrefs,
284
276
  onRule: handleToolRule,
@@ -301,153 +293,96 @@ function ChatWindow({
301
293
  catalogLoading,
302
294
  catalogError,
303
295
  onCatalogRetry: retryCatalogs
304
- }
305
- ),
306
- sessionsApi && /* @__PURE__ */ jsx(
307
- Button,
308
- {
309
- variant: "ghost",
310
- size: "icon",
311
- title: messageCount === 0 ? "Send a message before forking this conversation" : "Fork conversation into a new window",
312
- disabled: !panel.threadId || messageCount === 0 || forking,
313
- onClick: () => void handleFork(),
314
- children: /* @__PURE__ */ jsx(Icon, { icon: UiGitBranch, className: "size-4" })
315
- }
316
- ),
317
- /* @__PURE__ */ jsx(
318
- Button,
319
- {
320
- variant: "ghost",
321
- size: "icon",
322
- title: "New window",
323
- onClick: () => openPanel(),
324
- children: /* @__PURE__ */ jsx(Icon, { icon: UiAdd, className: "size-4" })
325
- }
326
- ),
327
- /* @__PURE__ */ jsx(
328
- Button,
329
- {
330
- variant: "ghost",
331
- size: "icon",
332
- title: panel.maximized ? "Restore" : "Maximize",
333
- onClick: () => maximizePanel(panel.id),
334
- children: /* @__PURE__ */ jsx(Icon, { icon: UiFullscreen, className: "size-4" })
335
- }
336
- ),
337
- /* @__PURE__ */ jsx(
338
- Button,
339
- {
340
- variant: "ghost",
341
- size: "icon",
342
- title: "Close",
343
- onClick: () => closePanel(panel.id),
344
- children: /* @__PURE__ */ jsx(Icon, { icon: UiClose, className: "size-4" })
345
- }
346
- )
347
- ] });
348
- const frame = /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl", children: [
349
- header,
350
- (renderContextPicker || panel.contextItems.length > 0) && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5", children: [
351
- renderContextPicker == null ? void 0 : renderContextPicker({
352
- items: panel.contextItems,
353
- onAdd: addContext,
354
- onAddMany: addContextItems
355
- }),
356
- /* @__PURE__ */ jsx(
357
- ContextBadges,
358
- {
359
- items: panel.contextItems,
360
- onRemove: removeContext,
361
- className: "px-0 py-0",
362
- ...contextTypeConfig ? { typeConfig: contextTypeConfig } : {}
363
- }
364
- )
365
- ] }),
366
- /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1", children: threadSetup.blocked ? /* @__PURE__ */ jsx(ChatThreadSetupStatus, { setup: threadSetup }) : /* @__PURE__ */ jsx(
367
- Chat,
368
- {
369
- ...chat,
370
- ...resolvedModels.length ? { models: resolvedModels, modelsApi: null } : {},
371
- runtime,
372
- ...runtimeFamilies ? { runtimeFamilies } : {},
373
- permissionMode,
374
- onRuntimeChange: handleRuntimeChange,
375
- onModelChange: handleModelChange,
376
- onReasoningEffortChange: handleReasoningEffortChange,
377
- budget,
378
- onUsage: handleUsage,
379
- runtimeLocked,
380
- onMessageCountChange: handleMessageCountChange,
381
- onSessionHydrated: handleSessionHydrated,
382
- ...panel.threadId ? { threadId: panel.threadId } : {},
383
- sessionsApi,
384
- tools: resolvedTools,
385
- ...toolRenderers ? { toolRenderers } : {},
386
- body: mergedBody,
387
- initialPrompt,
388
- onInitialPromptConsumed: handleInitialPromptConsumed,
389
- proposedPrompts,
390
- onProposedPromptsConsumed: handleProposedPromptsConsumed
391
296
  },
392
- panel.threadId ?? `new-${panel.id}`
393
- ) })
394
- ] });
395
- const outerClass = cn(
396
- "fixed pointer-events-none",
397
- panel.maximized ? "inset-4 chat-maximized" : "inset-0"
297
+ hasMessages: messageCount > 0,
298
+ forkDisabled: !panel.threadId || messageCount === 0 || forking,
299
+ onSelectThread: (threadId) => updatePanel(panel.id, { threadId }),
300
+ onNewThread: () => updatePanel(panel.id, { threadId: null }),
301
+ onFork: () => void handleFork(),
302
+ onNewWindow: () => openPanel(),
303
+ onMaximize: () => maximizePanel(panel.id),
304
+ onClose: () => closePanel(panel.id)
305
+ }
398
306
  );
399
- if (!Rnd) {
400
- return /* @__PURE__ */ jsx("div", { className: outerClass, style: { zIndex: panel.zIndex }, children: /* @__PURE__ */ jsx(
401
- "div",
402
- {
403
- className: "pointer-events-auto h-full",
404
- style: panel.maximized ? { position: "relative", width: "100%", height: "100%" } : {
405
- position: "absolute",
406
- left: panel.x,
407
- top: panel.y,
408
- width: panel.width,
409
- height: panel.height
410
- },
411
- children: frame
412
- }
413
- ) });
307
+ const frame = /* @__PURE__ */ jsxs(
308
+ "div",
309
+ {
310
+ className: cn(
311
+ "flex h-full flex-col overflow-hidden bg-background",
312
+ !mobile && "rounded-lg border border-border shadow-xl"
313
+ ),
314
+ children: [
315
+ header,
316
+ (renderContextPicker || panel.contextItems.length > 0) && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5", children: [
317
+ renderContextPicker == null ? void 0 : renderContextPicker({
318
+ items: panel.contextItems,
319
+ onAdd: addContext,
320
+ onAddMany: addContextItems
321
+ }),
322
+ /* @__PURE__ */ jsx(
323
+ ContextBadges,
324
+ {
325
+ items: panel.contextItems,
326
+ onRemove: removeContext,
327
+ className: "px-0 py-0",
328
+ ...contextTypeConfig ? { typeConfig: contextTypeConfig } : {}
329
+ }
330
+ )
331
+ ] }),
332
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1", children: threadSetup.blocked ? /* @__PURE__ */ jsx(ChatThreadSetupStatus, { setup: threadSetup }) : /* @__PURE__ */ jsx(
333
+ Chat,
334
+ {
335
+ ...chat,
336
+ ...resolvedModels.length ? { models: resolvedModels, modelsApi: null } : {},
337
+ runtime,
338
+ ...runtimeFamilies ? { runtimeFamilies } : {},
339
+ permissionMode,
340
+ onRuntimeChange: handleRuntimeChange,
341
+ onModelChange: handleModelChange,
342
+ onReasoningEffortChange: handleReasoningEffortChange,
343
+ budget,
344
+ onUsage: handleUsage,
345
+ runtimeLocked,
346
+ onMessageCountChange: handleMessageCountChange,
347
+ onSessionHydrated: handleSessionHydrated,
348
+ ...panel.threadId ? { threadId: panel.threadId } : {},
349
+ sessionsApi,
350
+ tools: resolvedTools,
351
+ ...toolRenderers ? { toolRenderers } : {},
352
+ body: mergedBody,
353
+ initialPrompt,
354
+ onInitialPromptConsumed: handleInitialPromptConsumed,
355
+ proposedPrompts,
356
+ onProposedPromptsConsumed: handleProposedPromptsConsumed
357
+ },
358
+ panel.threadId ?? `new-${panel.id}`
359
+ ) })
360
+ ]
361
+ }
362
+ );
363
+ const layerStyle = { zIndex: panel.zIndex };
364
+ if (mobile) {
365
+ const front = panels.reduce((top, p) => p.zIndex >= top.zIndex ? p : top);
366
+ return /* @__PURE__ */ jsx(ChatWindowSheet, { layerStyle, hidden: front.id !== panel.id, children: frame });
414
367
  }
415
- return /* @__PURE__ */ jsxs("div", { className: outerClass, style: { zIndex: panel.zIndex }, children: [
416
- /* @__PURE__ */ jsx("style", { children: MAXIMIZE_CSS }),
417
- /* @__PURE__ */ jsx(
368
+ return /* @__PURE__ */ jsx(
369
+ ChatWindowFloating,
370
+ {
371
+ panel,
372
+ layerStyle,
418
373
  Rnd,
419
- {
420
- default: {
421
- x: panel.x,
422
- y: panel.y,
423
- width: panel.width,
424
- height: panel.height
425
- },
426
- style: { pointerEvents: "auto" },
427
- minWidth: Math.min(360, Math.max(1, window.innerWidth - 32)),
428
- minHeight: Math.min(400, Math.max(1, window.innerHeight - 32)),
429
- bounds: "parent",
430
- dragHandleClassName: "chat-drag-handle",
431
- disableDragging: panel.maximized,
432
- enableResizing: !panel.maximized,
433
- onDragStart: () => bringToFront(panel.id),
434
- onDragStop: (_e, d) => updatePanel(panel.id, { x: d.x, y: d.y }),
435
- onResizeStop: (_e, _dir, ref, _delta, pos) => updatePanel(panel.id, {
436
- width: ref.offsetWidth,
437
- height: ref.offsetHeight,
438
- x: pos.x,
439
- y: pos.y
440
- }),
441
- children: frame
442
- }
443
- )
444
- ] });
374
+ onDragStart: () => bringToFront(panel.id),
375
+ onGeometryChange: (partial) => updatePanel(panel.id, partial),
376
+ children: frame
377
+ }
378
+ );
445
379
  }
446
380
  function ChatWindowLayer(props) {
447
381
  const { panels } = useChatWindowManager();
448
382
  return /* @__PURE__ */ jsx(Fragment, { children: panels.map((panel) => /* @__PURE__ */ jsx(ChatWindow, { panel, ...props }, panel.id)) });
449
383
  }
450
384
  export {
385
+ CHAT_WINDOW_MOBILE_QUERY,
451
386
  ChatWindow,
452
387
  ChatWindowLayer
453
388
  };