@flanksource/clicky-ui 0.3.24 → 0.3.26

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 (491) hide show
  1. package/NOTICE.md +1 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +6 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +8 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +9 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/comments/CommentCard.cjs +89 -14
  11. package/dist/comments/CommentCard.cjs.map +1 -1
  12. package/dist/comments/CommentCard.d.ts.map +1 -1
  13. package/dist/comments/CommentCard.js +90 -15
  14. package/dist/comments/CommentCard.js.map +1 -1
  15. package/dist/comments/CommentComposer.cjs +25 -2
  16. package/dist/comments/CommentComposer.cjs.map +1 -1
  17. package/dist/comments/CommentComposer.d.ts.map +1 -1
  18. package/dist/comments/CommentComposer.js +25 -2
  19. package/dist/comments/CommentComposer.js.map +1 -1
  20. package/dist/comments/CommentProvider.cjs +21 -14
  21. package/dist/comments/CommentProvider.cjs.map +1 -1
  22. package/dist/comments/CommentProvider.d.ts +1 -1
  23. package/dist/comments/CommentProvider.d.ts.map +1 -1
  24. package/dist/comments/CommentProvider.js +21 -14
  25. package/dist/comments/CommentProvider.js.map +1 -1
  26. package/dist/comments/CommentSidePanel.cjs +1 -1
  27. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  28. package/dist/comments/CommentSidePanel.js +1 -1
  29. package/dist/comments/CommentSidePanel.js.map +1 -1
  30. package/dist/comments/comment-types.cjs.map +1 -1
  31. package/dist/comments/comment-types.d.ts +6 -0
  32. package/dist/comments/comment-types.d.ts.map +1 -1
  33. package/dist/comments/comment-types.js.map +1 -1
  34. package/dist/components/DimensionField.cjs +56 -0
  35. package/dist/components/DimensionField.cjs.map +1 -0
  36. package/dist/components/DimensionField.d.ts +17 -0
  37. package/dist/components/DimensionField.d.ts.map +1 -0
  38. package/dist/components/DimensionField.js +56 -0
  39. package/dist/components/DimensionField.js.map +1 -0
  40. package/dist/components.cjs +4 -0
  41. package/dist/components.cjs.map +1 -1
  42. package/dist/components.d.ts +2 -0
  43. package/dist/components.d.ts.map +1 -1
  44. package/dist/components.js +4 -0
  45. package/dist/components.js.map +1 -1
  46. package/dist/data/Clicky.cjs +4 -5
  47. package/dist/data/Clicky.cjs.map +1 -1
  48. package/dist/data/Clicky.d.ts.map +1 -1
  49. package/dist/data/Clicky.js +4 -5
  50. package/dist/data/Clicky.js.map +1 -1
  51. package/dist/data/TaskExecDetails.cjs +8 -3
  52. package/dist/data/TaskExecDetails.cjs.map +1 -1
  53. package/dist/data/TaskExecDetails.d.ts +4 -0
  54. package/dist/data/TaskExecDetails.d.ts.map +1 -1
  55. package/dist/data/TaskExecDetails.js +9 -4
  56. package/dist/data/TaskExecDetails.js.map +1 -1
  57. package/dist/data/TaskManagerButton.cjs +101 -7
  58. package/dist/data/TaskManagerButton.cjs.map +1 -1
  59. package/dist/data/TaskManagerButton.d.ts +6 -1
  60. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  61. package/dist/data/TaskManagerButton.js +103 -9
  62. package/dist/data/TaskManagerButton.js.map +1 -1
  63. package/dist/data/TaskProcessDetails.cjs +2 -0
  64. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  65. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  66. package/dist/data/TaskProcessDetails.js +2 -0
  67. package/dist/data/TaskProcessDetails.js.map +1 -1
  68. package/dist/data/TaskProgress.cjs +14 -4
  69. package/dist/data/TaskProgress.cjs.map +1 -1
  70. package/dist/data/TaskProgress.js +14 -4
  71. package/dist/data/TaskProgress.js.map +1 -1
  72. package/dist/data/TaskSnapshot.cjs.map +1 -1
  73. package/dist/data/TaskSnapshot.d.ts +1 -0
  74. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  75. package/dist/data/TaskSnapshot.js.map +1 -1
  76. package/dist/data/ai/ChatWindow.cjs +18 -23
  77. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  78. package/dist/data/ai/ChatWindow.d.ts +1 -1
  79. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  80. package/dist/data/ai/ChatWindow.js +19 -24
  81. package/dist/data/ai/ChatWindow.js.map +1 -1
  82. package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
  83. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  84. package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
  85. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  86. package/dist/data/ai/ChatWindow.preferences.js +12 -21
  87. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  88. package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
  89. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  90. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
  91. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  92. package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
  93. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  94. package/dist/data/ai/ChatWindow.types.d.ts +2 -2
  95. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  96. package/dist/data/ai/ChatWindowManager.cjs +2 -2
  97. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  98. package/dist/data/ai/ChatWindowManager.js +2 -2
  99. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  100. package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
  101. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
  102. package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
  103. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
  104. package/dist/data/ai/ChatWindowRequestBody.js +4 -2
  105. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
  106. package/dist/data/ai/ToolPreferences.cjs +5 -5
  107. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  108. package/dist/data/ai/ToolPreferences.d.ts +6 -5
  109. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  110. package/dist/data/ai/ToolPreferences.js +5 -5
  111. package/dist/data/ai/ToolPreferences.js.map +1 -1
  112. package/dist/data/ai/ToolPreferences.model.cjs +61 -37
  113. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  114. package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
  115. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  116. package/dist/data/ai/ToolPreferences.model.js +62 -38
  117. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  118. package/dist/data/ai/ToolPreferencesList.cjs +17 -20
  119. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  120. package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
  121. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  122. package/dist/data/ai/ToolPreferencesList.js +18 -21
  123. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  124. package/dist/data/ai/chat-window-context.cjs +1 -1
  125. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  126. package/dist/data/ai/chat-window-context.d.ts +7 -7
  127. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  128. package/dist/data/ai/chat-window-context.js +1 -1
  129. package/dist/data/ai/chat-window-context.js.map +1 -1
  130. package/dist/data/ai/index.d.ts +3 -1
  131. package/dist/data/ai/index.d.ts.map +1 -1
  132. package/dist/data/chat/Chat.cjs +8 -4
  133. package/dist/data/chat/Chat.cjs.map +1 -1
  134. package/dist/data/chat/Chat.d.ts.map +1 -1
  135. package/dist/data/chat/Chat.js +8 -4
  136. package/dist/data/chat/Chat.js.map +1 -1
  137. package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
  138. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  139. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  140. package/dist/data/chat/ChatRuntimeToolbar.js +11 -7
  141. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  142. package/dist/data/chat/ContextMeter.cjs +64 -27
  143. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  144. package/dist/data/chat/ContextMeter.d.ts +11 -4
  145. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  146. package/dist/data/chat/ContextMeter.js +64 -27
  147. package/dist/data/chat/ContextMeter.js.map +1 -1
  148. package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
  149. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  150. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  151. package/dist/data/chat/clickyOperationsToTools.js +2 -1
  152. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  153. package/dist/data/chat/index.d.ts +2 -1
  154. package/dist/data/chat/index.d.ts.map +1 -1
  155. package/dist/data/chat/tool-policy.cjs +132 -0
  156. package/dist/data/chat/tool-policy.cjs.map +1 -0
  157. package/dist/data/chat/tool-policy.d.ts +81 -0
  158. package/dist/data/chat/tool-policy.d.ts.map +1 -0
  159. package/dist/data/chat/tool-policy.js +132 -0
  160. package/dist/data/chat/tool-policy.js.map +1 -0
  161. package/dist/data/chat/types.cjs +20 -0
  162. package/dist/data/chat/types.cjs.map +1 -1
  163. package/dist/data/chat/types.d.ts +41 -2
  164. package/dist/data/chat/types.d.ts.map +1 -1
  165. package/dist/data/chat/types.js +20 -0
  166. package/dist/data/chat/types.js.map +1 -1
  167. package/dist/data/chat/usage-snapshot.cjs +10 -1
  168. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  169. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  170. package/dist/data/chat/usage-snapshot.js +10 -1
  171. package/dist/data/chat/usage-snapshot.js.map +1 -1
  172. package/dist/data/debugConsoleSignal.cjs +64 -0
  173. package/dist/data/debugConsoleSignal.cjs.map +1 -0
  174. package/dist/data/debugConsoleSignal.d.ts +83 -0
  175. package/dist/data/debugConsoleSignal.d.ts.map +1 -0
  176. package/dist/data/debugConsoleSignal.js +64 -0
  177. package/dist/data/debugConsoleSignal.js.map +1 -0
  178. package/dist/data/har/HarPanel.cjs +20 -14
  179. package/dist/data/har/HarPanel.cjs.map +1 -1
  180. package/dist/data/har/HarPanel.d.ts.map +1 -1
  181. package/dist/data/har/HarPanel.js +20 -14
  182. package/dist/data/har/HarPanel.js.map +1 -1
  183. package/dist/data/har/types.d.ts +18 -0
  184. package/dist/data/har/types.d.ts.map +1 -1
  185. package/dist/data/query-browser/QueryBrowser.cjs +4 -42
  186. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  187. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  188. package/dist/data/query-browser/QueryBrowser.js +5 -43
  189. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  190. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  191. package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
  192. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  193. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  194. package/dist/data/useDebugAction.cjs +29 -0
  195. package/dist/data/useDebugAction.cjs.map +1 -0
  196. package/dist/data/useDebugAction.d.ts +16 -0
  197. package/dist/data/useDebugAction.d.ts.map +1 -0
  198. package/dist/data/useDebugAction.js +29 -0
  199. package/dist/data/useDebugAction.js.map +1 -0
  200. package/dist/data/version-info.cjs +3 -3
  201. package/dist/data/version-info.js +3 -3
  202. package/dist/data.cjs +16 -8
  203. package/dist/data.cjs.map +1 -1
  204. package/dist/data.d.ts +3 -2
  205. package/dist/data.d.ts.map +1 -1
  206. package/dist/data.js +16 -8
  207. package/dist/devtools/DebugConsole.cjs +138 -0
  208. package/dist/devtools/DebugConsole.cjs.map +1 -0
  209. package/dist/devtools/DebugConsole.d.ts +23 -0
  210. package/dist/devtools/DebugConsole.d.ts.map +1 -0
  211. package/dist/devtools/DebugConsole.js +138 -0
  212. package/dist/devtools/DebugConsole.js.map +1 -0
  213. package/dist/devtools/DebugConsoleButton.cjs +59 -0
  214. package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
  215. package/dist/devtools/DebugConsoleButton.d.ts +20 -0
  216. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
  217. package/dist/devtools/DebugConsoleButton.js +59 -0
  218. package/dist/devtools/DebugConsoleButton.js.map +1 -0
  219. package/dist/devtools/DebugConsoleDock.cjs +112 -0
  220. package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
  221. package/dist/devtools/DebugConsoleDock.d.ts +26 -0
  222. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
  223. package/dist/devtools/DebugConsoleDock.js +112 -0
  224. package/dist/devtools/DebugConsoleDock.js.map +1 -0
  225. package/dist/devtools/ExecutionDetail.cjs +135 -0
  226. package/dist/devtools/ExecutionDetail.cjs.map +1 -0
  227. package/dist/devtools/ExecutionDetail.d.ts +19 -0
  228. package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
  229. package/dist/devtools/ExecutionDetail.js +135 -0
  230. package/dist/devtools/ExecutionDetail.js.map +1 -0
  231. package/dist/devtools/debugClient.cjs +172 -0
  232. package/dist/devtools/debugClient.cjs.map +1 -0
  233. package/dist/devtools/debugClient.d.ts +98 -0
  234. package/dist/devtools/debugClient.d.ts.map +1 -0
  235. package/dist/devtools/debugClient.js +172 -0
  236. package/dist/devtools/debugClient.js.map +1 -0
  237. package/dist/devtools/debugStore.cjs +115 -0
  238. package/dist/devtools/debugStore.cjs.map +1 -0
  239. package/dist/devtools/debugStore.d.ts +83 -0
  240. package/dist/devtools/debugStore.d.ts.map +1 -0
  241. package/dist/devtools/debugStore.js +115 -0
  242. package/dist/devtools/debugStore.js.map +1 -0
  243. package/dist/devtools/dockState.cjs +51 -0
  244. package/dist/devtools/dockState.cjs.map +1 -0
  245. package/dist/devtools/dockState.d.ts +31 -0
  246. package/dist/devtools/dockState.d.ts.map +1 -0
  247. package/dist/devtools/dockState.js +51 -0
  248. package/dist/devtools/dockState.js.map +1 -0
  249. package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
  250. package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
  251. package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
  252. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
  253. package/dist/devtools/tabs/ConsoleTab.js +36 -0
  254. package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
  255. package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
  256. package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
  257. package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
  258. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
  259. package/dist/devtools/tabs/InspectionCaches.js +150 -0
  260. package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
  261. package/dist/devtools/tabs/InspectionTab.cjs +316 -0
  262. package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
  263. package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
  264. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
  265. package/dist/devtools/tabs/InspectionTab.js +316 -0
  266. package/dist/devtools/tabs/InspectionTab.js.map +1 -0
  267. package/dist/devtools/tabs/NetworkTab.cjs +91 -0
  268. package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
  269. package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
  270. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
  271. package/dist/devtools/tabs/NetworkTab.js +91 -0
  272. package/dist/devtools/tabs/NetworkTab.js.map +1 -0
  273. package/dist/devtools/tabs/QueriesTab.cjs +85 -0
  274. package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
  275. package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
  276. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
  277. package/dist/devtools/tabs/QueriesTab.js +85 -0
  278. package/dist/devtools/tabs/QueriesTab.js.map +1 -0
  279. package/dist/devtools/types.cjs +26 -0
  280. package/dist/devtools/types.cjs.map +1 -0
  281. package/dist/devtools/types.d.ts +235 -0
  282. package/dist/devtools/types.d.ts.map +1 -0
  283. package/dist/devtools/types.js +26 -0
  284. package/dist/devtools/types.js.map +1 -0
  285. package/dist/devtools/useDebugStream.cjs +46 -0
  286. package/dist/devtools/useDebugStream.cjs.map +1 -0
  287. package/dist/devtools/useDebugStream.d.ts +23 -0
  288. package/dist/devtools/useDebugStream.d.ts.map +1 -0
  289. package/dist/devtools/useDebugStream.js +46 -0
  290. package/dist/devtools/useDebugStream.js.map +1 -0
  291. package/dist/devtools.cjs +51 -0
  292. package/dist/devtools.cjs.map +1 -0
  293. package/dist/devtools.d.ts +37 -0
  294. package/dist/devtools.d.ts.map +1 -0
  295. package/dist/devtools.js +51 -0
  296. package/dist/devtools.js.map +1 -0
  297. package/dist/icons/components/UiOpenScad.cjs +10 -0
  298. package/dist/icons/components/UiOpenScad.cjs.map +1 -0
  299. package/dist/icons/components/UiOpenScad.d.ts +9 -0
  300. package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
  301. package/dist/icons/components/UiOpenScad.js +10 -0
  302. package/dist/icons/components/UiOpenScad.js.map +1 -0
  303. package/dist/icons/index.d.ts +1 -0
  304. package/dist/icons/index.d.ts.map +1 -1
  305. package/dist/icons/registry.cjs +2 -0
  306. package/dist/icons/registry.cjs.map +1 -1
  307. package/dist/icons/registry.d.ts.map +1 -1
  308. package/dist/icons/registry.js +2 -0
  309. package/dist/icons/registry.js.map +1 -1
  310. package/dist/icons.cjs +2 -0
  311. package/dist/icons.cjs.map +1 -1
  312. package/dist/icons.js +2 -0
  313. package/dist/icons.js.map +1 -1
  314. package/dist/index.cjs +20 -8
  315. package/dist/index.cjs.map +1 -1
  316. package/dist/index.js +20 -8
  317. package/dist/index.js.map +1 -1
  318. package/dist/layout/AppShell.cjs +15 -10
  319. package/dist/layout/AppShell.cjs.map +1 -1
  320. package/dist/layout/AppShell.d.ts +11 -0
  321. package/dist/layout/AppShell.d.ts.map +1 -1
  322. package/dist/layout/AppShell.js +15 -10
  323. package/dist/layout/AppShell.js.map +1 -1
  324. package/dist/layout/AppShell.nav.cjs +170 -49
  325. package/dist/layout/AppShell.nav.cjs.map +1 -1
  326. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  327. package/dist/layout/AppShell.nav.js +170 -49
  328. package/dist/layout/AppShell.nav.js.map +1 -1
  329. package/dist/overlay/CellActions.cjs +18 -124
  330. package/dist/overlay/CellActions.cjs.map +1 -1
  331. package/dist/overlay/CellActions.d.ts +1 -1
  332. package/dist/overlay/CellActions.d.ts.map +1 -1
  333. package/dist/overlay/CellActions.js +18 -124
  334. package/dist/overlay/CellActions.js.map +1 -1
  335. package/dist/overlay/ContextMenu.cjs +144 -0
  336. package/dist/overlay/ContextMenu.cjs.map +1 -0
  337. package/dist/overlay/ContextMenu.d.ts +8 -0
  338. package/dist/overlay/ContextMenu.d.ts.map +1 -0
  339. package/dist/overlay/ContextMenu.js +144 -0
  340. package/dist/overlay/ContextMenu.js.map +1 -0
  341. package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
  342. package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
  343. package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
  344. package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
  345. package/dist/profiles/connections/connectionBrowserModel.js +14 -65
  346. package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
  347. package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
  348. package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
  349. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
  350. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  351. package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
  352. package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
  353. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
  354. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
  355. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
  356. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
  357. package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
  358. package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
  359. package/dist/profiles/connections/index.d.ts +1 -0
  360. package/dist/profiles/connections/index.d.ts.map +1 -1
  361. package/dist/profiles/connections/inspectionStatus.cjs +44 -0
  362. package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
  363. package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
  364. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
  365. package/dist/profiles/connections/inspectionStatus.js +44 -0
  366. package/dist/profiles/connections/inspectionStatus.js.map +1 -0
  367. package/dist/profiles/connections/useInspection.cjs +123 -0
  368. package/dist/profiles/connections/useInspection.cjs.map +1 -0
  369. package/dist/profiles/connections/useInspection.d.ts +35 -0
  370. package/dist/profiles/connections/useInspection.d.ts.map +1 -0
  371. package/dist/profiles/connections/useInspection.js +123 -0
  372. package/dist/profiles/connections/useInspection.js.map +1 -0
  373. package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
  374. package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
  375. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  376. package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
  377. package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
  378. package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
  379. package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
  380. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  381. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  382. package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
  383. package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
  384. package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
  385. package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
  386. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  387. package/dist/profiles/fields/profileFieldEditor.js +137 -22
  388. package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
  389. package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
  390. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  391. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
  392. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  393. package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
  394. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  395. package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
  396. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  397. package/dist/profiles/fields/profileFieldIcons.js +6 -3
  398. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  399. package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
  400. package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
  401. package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
  402. package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
  403. package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
  404. package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
  405. package/dist/profiles/query/profileSamplePayload.cjs +6 -4
  406. package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
  407. package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
  408. package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
  409. package/dist/profiles/query/profileSamplePayload.js +6 -4
  410. package/dist/profiles/query/profileSamplePayload.js.map +1 -1
  411. package/dist/profiles/query/profileSampleResult.cjs +26 -0
  412. package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
  413. package/dist/profiles/query/profileSampleResult.d.ts +11 -0
  414. package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
  415. package/dist/profiles/query/profileSampleResult.js +26 -0
  416. package/dist/profiles/query/profileSampleResult.js.map +1 -0
  417. package/dist/profiles/query/queryTargetPicker.cjs +5 -3
  418. package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
  419. package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
  420. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  421. package/dist/profiles/query/queryTargetPicker.js +5 -3
  422. package/dist/profiles/query/queryTargetPicker.js.map +1 -1
  423. package/dist/profiles/wizard/profileWizard.cjs +14 -5
  424. package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
  425. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  426. package/dist/profiles/wizard/profileWizard.js +15 -6
  427. package/dist/profiles/wizard/profileWizard.js.map +1 -1
  428. package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
  429. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  430. package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
  431. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  432. package/dist/profiles/wizard/profileWizardModel.js +35 -6
  433. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  434. package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
  435. package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
  436. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  437. package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
  438. package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
  439. package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
  440. package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
  441. package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
  442. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  443. package/dist/profiles/wizard/profileWizardSteps.js +33 -2
  444. package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
  445. package/dist/profiles.cjs +8 -2
  446. package/dist/profiles.cjs.map +1 -1
  447. package/dist/profiles.js +10 -4
  448. package/dist/profiles.js.map +1 -1
  449. package/dist/rpc/FilterForm.cjs +21 -237
  450. package/dist/rpc/FilterForm.cjs.map +1 -1
  451. package/dist/rpc/FilterForm.d.ts +3 -1
  452. package/dist/rpc/FilterForm.d.ts.map +1 -1
  453. package/dist/rpc/FilterForm.js +21 -237
  454. package/dist/rpc/FilterForm.js.map +1 -1
  455. package/dist/rpc/FilterFormFields.cjs +240 -0
  456. package/dist/rpc/FilterFormFields.cjs.map +1 -0
  457. package/dist/rpc/FilterFormFields.d.ts +12 -0
  458. package/dist/rpc/FilterFormFields.d.ts.map +1 -0
  459. package/dist/rpc/FilterFormFields.js +240 -0
  460. package/dist/rpc/FilterFormFields.js.map +1 -0
  461. package/dist/rpc/router.cjs +3 -2
  462. package/dist/rpc/router.cjs.map +1 -1
  463. package/dist/rpc/router.d.ts.map +1 -1
  464. package/dist/rpc/router.js +3 -2
  465. package/dist/rpc/router.js.map +1 -1
  466. package/dist/rpc/types.cjs.map +1 -1
  467. package/dist/rpc/types.d.ts +3 -1
  468. package/dist/rpc/types.d.ts.map +1 -1
  469. package/dist/rpc/types.js.map +1 -1
  470. package/dist/styles.css +1 -1
  471. package/package.json +6 -1
  472. package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
  473. package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
  474. package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
  475. package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
  476. package/dist/data/query-info/QueryInfoDialog.js +0 -106
  477. package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
  478. package/dist/data/query-info/index.d.ts +0 -4
  479. package/dist/data/query-info/index.d.ts.map +0 -1
  480. package/dist/data/query-info/queryInfo.cjs +0 -42
  481. package/dist/data/query-info/queryInfo.cjs.map +0 -1
  482. package/dist/data/query-info/queryInfo.d.ts +0 -45
  483. package/dist/data/query-info/queryInfo.d.ts.map +0 -1
  484. package/dist/data/query-info/queryInfo.js +0 -42
  485. package/dist/data/query-info/queryInfo.js.map +0 -1
  486. package/dist/data/query-info/useQueryInfo.cjs +0 -48
  487. package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
  488. package/dist/data/query-info/useQueryInfo.d.ts +0 -26
  489. package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
  490. package/dist/data/query-info/useQueryInfo.js +0 -48
  491. package/dist/data/query-info/useQueryInfo.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const debugConsoleSignal = require("../data/debugConsoleSignal.cjs");
6
+ const DebugConsole = require("./DebugConsole.cjs");
7
+ const debugStore = require("./debugStore.cjs");
8
+ const useDebugStream = require("./useDebugStream.cjs");
9
+ const dockState = require("./dockState.cjs");
10
+ const MIN_DOCK_HEIGHT = 160;
11
+ const DEFAULT_DOCK_HEIGHT = 320;
12
+ const HEIGHT_STORAGE_KEY = "clicky-ui.devtools.height";
13
+ function DebugConsoleDock({
14
+ client,
15
+ store = debugStore.debugStore,
16
+ defaultOpen,
17
+ createEventSource
18
+ }) {
19
+ const initial = dockState.readDockState();
20
+ const [open, setOpen] = react.useState(defaultOpen ?? initial.open);
21
+ const [tab, setTab] = react.useState(initial.tab);
22
+ const [height, setHeight] = react.useState(() => readHeight());
23
+ const state = useDebugStream.useDebugStream({ enabled: open, client, store, createEventSource });
24
+ react.useEffect(() => {
25
+ store.setLevel(initial.level);
26
+ }, []);
27
+ react.useEffect(() => {
28
+ dockState.writeDockState({ open, tab, level: state.level });
29
+ debugConsoleSignal.setDebugCaptureLevel(open ? state.level : "off");
30
+ debugConsoleSignal.setDebugRefreshInspection(open && state.refreshInspection);
31
+ debugConsoleSignal.setDebugConsoleOpen(open);
32
+ }, [open, tab, state.level, state.refreshInspection]);
33
+ react.useEffect(
34
+ () => debugConsoleSignal.registerDebugConsole((request) => {
35
+ setOpen((current) => request.toggle ? !current : true);
36
+ if (request.tab) setTab(request.tab);
37
+ }),
38
+ []
39
+ );
40
+ react.useEffect(() => () => debugConsoleSignal.setDebugConsoleOpen(false), []);
41
+ const startResize = useResizeHandle(height, (next) => {
42
+ setHeight(next);
43
+ writeHeight(next);
44
+ });
45
+ if (!open) return null;
46
+ return /* @__PURE__ */ jsxRuntime.jsxs(
47
+ "div",
48
+ {
49
+ className: "flex shrink-0 flex-col border-border border-t bg-background",
50
+ style: { height },
51
+ "data-testid": "devtools-dock",
52
+ children: [
53
+ /* @__PURE__ */ jsxRuntime.jsx(
54
+ "button",
55
+ {
56
+ type: "button",
57
+ "aria-label": "Resize console",
58
+ className: "h-1 w-full cursor-row-resize bg-transparent hover:bg-border",
59
+ onMouseDown: startResize
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: /* @__PURE__ */ jsxRuntime.jsx(
63
+ DebugConsole.DebugConsole,
64
+ {
65
+ state,
66
+ store,
67
+ client,
68
+ tab,
69
+ onTabChange: setTab,
70
+ onClose: () => setOpen(false)
71
+ }
72
+ ) })
73
+ ]
74
+ }
75
+ );
76
+ }
77
+ function useResizeHandle(height, onHeight) {
78
+ const heightRef = react.useRef(height);
79
+ heightRef.current = height;
80
+ return react.useCallback(
81
+ (event) => {
82
+ event.preventDefault();
83
+ const startY = event.clientY;
84
+ const startHeight = heightRef.current;
85
+ const onMove = (move) => {
86
+ onHeight(Math.max(MIN_DOCK_HEIGHT, startHeight + (startY - move.clientY)));
87
+ };
88
+ const onUp = () => {
89
+ window.removeEventListener("mousemove", onMove);
90
+ window.removeEventListener("mouseup", onUp);
91
+ };
92
+ window.addEventListener("mousemove", onMove);
93
+ window.addEventListener("mouseup", onUp);
94
+ },
95
+ [onHeight]
96
+ );
97
+ }
98
+ function readHeight() {
99
+ var _a;
100
+ if (typeof window === "undefined") return DEFAULT_DOCK_HEIGHT;
101
+ const stored = Number((_a = window.localStorage) == null ? void 0 : _a.getItem(HEIGHT_STORAGE_KEY));
102
+ return Number.isFinite(stored) && stored >= MIN_DOCK_HEIGHT ? stored : DEFAULT_DOCK_HEIGHT;
103
+ }
104
+ function writeHeight(height) {
105
+ var _a;
106
+ if (typeof window === "undefined") return;
107
+ (_a = window.localStorage) == null ? void 0 : _a.setItem(HEIGHT_STORAGE_KEY, String(height));
108
+ }
109
+ exports.DEFAULT_DOCK_HEIGHT = DEFAULT_DOCK_HEIGHT;
110
+ exports.DebugConsoleDock = DebugConsoleDock;
111
+ exports.MIN_DOCK_HEIGHT = MIN_DOCK_HEIGHT;
112
+ //# sourceMappingURL=DebugConsoleDock.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugConsoleDock.cjs","sources":["../../src/devtools/DebugConsoleDock.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n registerDebugConsole,\n setDebugCaptureLevel,\n setDebugConsoleOpen,\n setDebugRefreshInspection,\n} from \"../data/debugConsoleSignal\";\nimport { DebugClient } from \"./debugClient\";\nimport { DebugConsole, type DebugTab } from \"./DebugConsole\";\nimport { debugStore, type DebugStore } from \"./debugStore\";\nimport { useDebugStream } from \"./useDebugStream\";\nimport { readDockState, writeDockState } from \"./dockState\";\n\n/**\n * Where the console lives: a flex sibling that shrinks the page, not an overlay\n * on top of it.\n *\n * Chrome devtools docks for a reason — an overlay hides the rows you opened the\n * console to explain. A sibling costs the host one wrapper it already has, and\n * covers the takeover pages that bypass the app shell entirely, which a shell\n * slot would not.\n */\n\nexport const MIN_DOCK_HEIGHT = 160;\nexport const DEFAULT_DOCK_HEIGHT = 320;\nconst HEIGHT_STORAGE_KEY = \"clicky-ui.devtools.height\";\n\nexport type DebugConsoleDockProps = {\n client?: DebugClient | undefined;\n store?: DebugStore | undefined;\n /** Starts open. Otherwise the dock renders nothing until its trigger is used. */\n defaultOpen?: boolean | undefined;\n /**\n * Builds the stream connection. A host whose API needs an auth-wrapped\n * EventSource supplies one; a test supplies one that never connects.\n */\n createEventSource?: ((url: string) => EventSource) | undefined;\n};\n\nexport function DebugConsoleDock({\n client,\n store = debugStore,\n defaultOpen,\n createEventSource,\n}: DebugConsoleDockProps) {\n const initial = readDockState();\n const [open, setOpen] = useState(defaultOpen ?? initial.open);\n const [tab, setTab] = useState<DebugTab>(initial.tab);\n const [height, setHeight] = useState(() => readHeight());\n\n // Only an open console holds the stream. A closed one that kept streaming\n // would make \"the console is off\" untrue for the server.\n const state = useDebugStream({ enabled: open, client, store, createEventSource });\n\n // A link that names a level arms at it, once. After that the picker owns the\n // level, so re-applying it on every render would make the control unusable.\n useEffect(() => {\n store.setLevel(initial.level);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- seeded from the URL at mount only\n }, []);\n\n useEffect(() => {\n writeDockState({ open, tab, level: state.level });\n // Published for the call sites that fetch without going through the wrapped\n // client — they arm from this rather than from a flag of their own.\n setDebugCaptureLevel(open ? state.level : \"off\");\n // Dropped with the console, like the level: a rebuild-everything setting\n // left on behind a closed console would make every page slow with nothing\n // on screen to explain why.\n setDebugRefreshInspection(open && state.refreshInspection);\n // And for the trigger, which lives in the app's navbar rather than in this\n // tree and cannot otherwise tell whether it is showing an open console.\n setDebugConsoleOpen(open);\n }, [open, tab, state.level, state.refreshInspection]);\n\n // Registering is also what makes the trigger and a table's \"Debug\" menu item\n // appear: both are offered only where a console exists to reveal.\n useEffect(\n () =>\n registerDebugConsole((request) => {\n setOpen((current) => (request.toggle ? !current : true));\n if (request.tab) setTab(request.tab as DebugTab);\n }),\n [],\n );\n\n // Unmounting has to retract the claim as well as the registration, or the\n // trigger keeps rendering pressed against a console that is gone.\n useEffect(() => () => setDebugConsoleOpen(false), []);\n\n const startResize = useResizeHandle(height, (next) => {\n setHeight(next);\n writeHeight(next);\n });\n\n // Closed, the dock occupies nothing at all. Its trigger — and the counts that\n // used to justify a permanent strip here — live in the navbar instead; see\n // DebugConsoleButton.\n if (!open) return null;\n\n return (\n <div\n className=\"flex shrink-0 flex-col border-border border-t bg-background\"\n style={{ height }}\n data-testid=\"devtools-dock\"\n >\n <button\n type=\"button\"\n aria-label=\"Resize console\"\n className=\"h-1 w-full cursor-row-resize bg-transparent hover:bg-border\"\n onMouseDown={startResize}\n />\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <DebugConsole\n state={state}\n store={store}\n client={client}\n tab={tab}\n onTabChange={setTab}\n onClose={() => setOpen(false)}\n />\n </div>\n </div>\n );\n}\n\nfunction useResizeHandle(height: number, onHeight: (next: number) => void) {\n const heightRef = useRef(height);\n heightRef.current = height;\n\n return useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n const startY = event.clientY;\n const startHeight = heightRef.current;\n const onMove = (move: MouseEvent) => {\n // Dragging up grows the dock, so the delta is inverted: the handle is on\n // its top edge.\n onHeight(Math.max(MIN_DOCK_HEIGHT, startHeight + (startY - move.clientY)));\n };\n const onUp = () => {\n window.removeEventListener(\"mousemove\", onMove);\n window.removeEventListener(\"mouseup\", onUp);\n };\n window.addEventListener(\"mousemove\", onMove);\n window.addEventListener(\"mouseup\", onUp);\n },\n [onHeight],\n );\n}\n\nfunction readHeight(): number {\n if (typeof window === \"undefined\") return DEFAULT_DOCK_HEIGHT;\n const stored = Number(window.localStorage?.getItem(HEIGHT_STORAGE_KEY));\n return Number.isFinite(stored) && stored >= MIN_DOCK_HEIGHT ? stored : DEFAULT_DOCK_HEIGHT;\n}\n\nfunction writeHeight(height: number): void {\n if (typeof window === \"undefined\") return;\n window.localStorage?.setItem(HEIGHT_STORAGE_KEY, String(height));\n}\n"],"names":["debugStore","readDockState","useState","useDebugStream","useEffect","writeDockState","setDebugCaptureLevel","setDebugRefreshInspection","setDebugConsoleOpen","registerDebugConsole","jsxs","jsx","DebugConsole","useRef","useCallback"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { DebugClient } from './debugClient';
2
+ import { DebugStore } from './debugStore';
3
+ /**
4
+ * Where the console lives: a flex sibling that shrinks the page, not an overlay
5
+ * on top of it.
6
+ *
7
+ * Chrome devtools docks for a reason — an overlay hides the rows you opened the
8
+ * console to explain. A sibling costs the host one wrapper it already has, and
9
+ * covers the takeover pages that bypass the app shell entirely, which a shell
10
+ * slot would not.
11
+ */
12
+ export declare const MIN_DOCK_HEIGHT = 160;
13
+ export declare const DEFAULT_DOCK_HEIGHT = 320;
14
+ export type DebugConsoleDockProps = {
15
+ client?: DebugClient | undefined;
16
+ store?: DebugStore | undefined;
17
+ /** Starts open. Otherwise the dock renders nothing until its trigger is used. */
18
+ defaultOpen?: boolean | undefined;
19
+ /**
20
+ * Builds the stream connection. A host whose API needs an auth-wrapped
21
+ * EventSource supplies one; a test supplies one that never connects.
22
+ */
23
+ createEventSource?: ((url: string) => EventSource) | undefined;
24
+ };
25
+ export declare function DebugConsoleDock({ client, store, defaultOpen, createEventSource, }: DebugConsoleDockProps): import("react/jsx-runtime").JSX.Element | null;
26
+ //# sourceMappingURL=DebugConsoleDock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugConsoleDock.d.ts","sourceRoot":"","sources":["../../src/devtools/DebugConsoleDock.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAI3D;;;;;;;;GAQG;AAEH,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAGvC,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,iFAAiF;IACjF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAC,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,EAAE,qBAAqB,kDAgFvB"}
@@ -0,0 +1,112 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useRef, useCallback } from "react";
3
+ import { setDebugCaptureLevel, setDebugRefreshInspection, setDebugConsoleOpen, registerDebugConsole } from "../data/debugConsoleSignal.js";
4
+ import { DebugConsole } from "./DebugConsole.js";
5
+ import { debugStore } from "./debugStore.js";
6
+ import { useDebugStream } from "./useDebugStream.js";
7
+ import { readDockState, writeDockState } from "./dockState.js";
8
+ const MIN_DOCK_HEIGHT = 160;
9
+ const DEFAULT_DOCK_HEIGHT = 320;
10
+ const HEIGHT_STORAGE_KEY = "clicky-ui.devtools.height";
11
+ function DebugConsoleDock({
12
+ client,
13
+ store = debugStore,
14
+ defaultOpen,
15
+ createEventSource
16
+ }) {
17
+ const initial = readDockState();
18
+ const [open, setOpen] = useState(defaultOpen ?? initial.open);
19
+ const [tab, setTab] = useState(initial.tab);
20
+ const [height, setHeight] = useState(() => readHeight());
21
+ const state = useDebugStream({ enabled: open, client, store, createEventSource });
22
+ useEffect(() => {
23
+ store.setLevel(initial.level);
24
+ }, []);
25
+ useEffect(() => {
26
+ writeDockState({ open, tab, level: state.level });
27
+ setDebugCaptureLevel(open ? state.level : "off");
28
+ setDebugRefreshInspection(open && state.refreshInspection);
29
+ setDebugConsoleOpen(open);
30
+ }, [open, tab, state.level, state.refreshInspection]);
31
+ useEffect(
32
+ () => registerDebugConsole((request) => {
33
+ setOpen((current) => request.toggle ? !current : true);
34
+ if (request.tab) setTab(request.tab);
35
+ }),
36
+ []
37
+ );
38
+ useEffect(() => () => setDebugConsoleOpen(false), []);
39
+ const startResize = useResizeHandle(height, (next) => {
40
+ setHeight(next);
41
+ writeHeight(next);
42
+ });
43
+ if (!open) return null;
44
+ return /* @__PURE__ */ jsxs(
45
+ "div",
46
+ {
47
+ className: "flex shrink-0 flex-col border-border border-t bg-background",
48
+ style: { height },
49
+ "data-testid": "devtools-dock",
50
+ children: [
51
+ /* @__PURE__ */ jsx(
52
+ "button",
53
+ {
54
+ type: "button",
55
+ "aria-label": "Resize console",
56
+ className: "h-1 w-full cursor-row-resize bg-transparent hover:bg-border",
57
+ onMouseDown: startResize
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: /* @__PURE__ */ jsx(
61
+ DebugConsole,
62
+ {
63
+ state,
64
+ store,
65
+ client,
66
+ tab,
67
+ onTabChange: setTab,
68
+ onClose: () => setOpen(false)
69
+ }
70
+ ) })
71
+ ]
72
+ }
73
+ );
74
+ }
75
+ function useResizeHandle(height, onHeight) {
76
+ const heightRef = useRef(height);
77
+ heightRef.current = height;
78
+ return useCallback(
79
+ (event) => {
80
+ event.preventDefault();
81
+ const startY = event.clientY;
82
+ const startHeight = heightRef.current;
83
+ const onMove = (move) => {
84
+ onHeight(Math.max(MIN_DOCK_HEIGHT, startHeight + (startY - move.clientY)));
85
+ };
86
+ const onUp = () => {
87
+ window.removeEventListener("mousemove", onMove);
88
+ window.removeEventListener("mouseup", onUp);
89
+ };
90
+ window.addEventListener("mousemove", onMove);
91
+ window.addEventListener("mouseup", onUp);
92
+ },
93
+ [onHeight]
94
+ );
95
+ }
96
+ function readHeight() {
97
+ var _a;
98
+ if (typeof window === "undefined") return DEFAULT_DOCK_HEIGHT;
99
+ const stored = Number((_a = window.localStorage) == null ? void 0 : _a.getItem(HEIGHT_STORAGE_KEY));
100
+ return Number.isFinite(stored) && stored >= MIN_DOCK_HEIGHT ? stored : DEFAULT_DOCK_HEIGHT;
101
+ }
102
+ function writeHeight(height) {
103
+ var _a;
104
+ if (typeof window === "undefined") return;
105
+ (_a = window.localStorage) == null ? void 0 : _a.setItem(HEIGHT_STORAGE_KEY, String(height));
106
+ }
107
+ export {
108
+ DEFAULT_DOCK_HEIGHT,
109
+ DebugConsoleDock,
110
+ MIN_DOCK_HEIGHT
111
+ };
112
+ //# sourceMappingURL=DebugConsoleDock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugConsoleDock.js","sources":["../../src/devtools/DebugConsoleDock.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n registerDebugConsole,\n setDebugCaptureLevel,\n setDebugConsoleOpen,\n setDebugRefreshInspection,\n} from \"../data/debugConsoleSignal\";\nimport { DebugClient } from \"./debugClient\";\nimport { DebugConsole, type DebugTab } from \"./DebugConsole\";\nimport { debugStore, type DebugStore } from \"./debugStore\";\nimport { useDebugStream } from \"./useDebugStream\";\nimport { readDockState, writeDockState } from \"./dockState\";\n\n/**\n * Where the console lives: a flex sibling that shrinks the page, not an overlay\n * on top of it.\n *\n * Chrome devtools docks for a reason — an overlay hides the rows you opened the\n * console to explain. A sibling costs the host one wrapper it already has, and\n * covers the takeover pages that bypass the app shell entirely, which a shell\n * slot would not.\n */\n\nexport const MIN_DOCK_HEIGHT = 160;\nexport const DEFAULT_DOCK_HEIGHT = 320;\nconst HEIGHT_STORAGE_KEY = \"clicky-ui.devtools.height\";\n\nexport type DebugConsoleDockProps = {\n client?: DebugClient | undefined;\n store?: DebugStore | undefined;\n /** Starts open. Otherwise the dock renders nothing until its trigger is used. */\n defaultOpen?: boolean | undefined;\n /**\n * Builds the stream connection. A host whose API needs an auth-wrapped\n * EventSource supplies one; a test supplies one that never connects.\n */\n createEventSource?: ((url: string) => EventSource) | undefined;\n};\n\nexport function DebugConsoleDock({\n client,\n store = debugStore,\n defaultOpen,\n createEventSource,\n}: DebugConsoleDockProps) {\n const initial = readDockState();\n const [open, setOpen] = useState(defaultOpen ?? initial.open);\n const [tab, setTab] = useState<DebugTab>(initial.tab);\n const [height, setHeight] = useState(() => readHeight());\n\n // Only an open console holds the stream. A closed one that kept streaming\n // would make \"the console is off\" untrue for the server.\n const state = useDebugStream({ enabled: open, client, store, createEventSource });\n\n // A link that names a level arms at it, once. After that the picker owns the\n // level, so re-applying it on every render would make the control unusable.\n useEffect(() => {\n store.setLevel(initial.level);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- seeded from the URL at mount only\n }, []);\n\n useEffect(() => {\n writeDockState({ open, tab, level: state.level });\n // Published for the call sites that fetch without going through the wrapped\n // client — they arm from this rather than from a flag of their own.\n setDebugCaptureLevel(open ? state.level : \"off\");\n // Dropped with the console, like the level: a rebuild-everything setting\n // left on behind a closed console would make every page slow with nothing\n // on screen to explain why.\n setDebugRefreshInspection(open && state.refreshInspection);\n // And for the trigger, which lives in the app's navbar rather than in this\n // tree and cannot otherwise tell whether it is showing an open console.\n setDebugConsoleOpen(open);\n }, [open, tab, state.level, state.refreshInspection]);\n\n // Registering is also what makes the trigger and a table's \"Debug\" menu item\n // appear: both are offered only where a console exists to reveal.\n useEffect(\n () =>\n registerDebugConsole((request) => {\n setOpen((current) => (request.toggle ? !current : true));\n if (request.tab) setTab(request.tab as DebugTab);\n }),\n [],\n );\n\n // Unmounting has to retract the claim as well as the registration, or the\n // trigger keeps rendering pressed against a console that is gone.\n useEffect(() => () => setDebugConsoleOpen(false), []);\n\n const startResize = useResizeHandle(height, (next) => {\n setHeight(next);\n writeHeight(next);\n });\n\n // Closed, the dock occupies nothing at all. Its trigger — and the counts that\n // used to justify a permanent strip here — live in the navbar instead; see\n // DebugConsoleButton.\n if (!open) return null;\n\n return (\n <div\n className=\"flex shrink-0 flex-col border-border border-t bg-background\"\n style={{ height }}\n data-testid=\"devtools-dock\"\n >\n <button\n type=\"button\"\n aria-label=\"Resize console\"\n className=\"h-1 w-full cursor-row-resize bg-transparent hover:bg-border\"\n onMouseDown={startResize}\n />\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <DebugConsole\n state={state}\n store={store}\n client={client}\n tab={tab}\n onTabChange={setTab}\n onClose={() => setOpen(false)}\n />\n </div>\n </div>\n );\n}\n\nfunction useResizeHandle(height: number, onHeight: (next: number) => void) {\n const heightRef = useRef(height);\n heightRef.current = height;\n\n return useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n const startY = event.clientY;\n const startHeight = heightRef.current;\n const onMove = (move: MouseEvent) => {\n // Dragging up grows the dock, so the delta is inverted: the handle is on\n // its top edge.\n onHeight(Math.max(MIN_DOCK_HEIGHT, startHeight + (startY - move.clientY)));\n };\n const onUp = () => {\n window.removeEventListener(\"mousemove\", onMove);\n window.removeEventListener(\"mouseup\", onUp);\n };\n window.addEventListener(\"mousemove\", onMove);\n window.addEventListener(\"mouseup\", onUp);\n },\n [onHeight],\n );\n}\n\nfunction readHeight(): number {\n if (typeof window === \"undefined\") return DEFAULT_DOCK_HEIGHT;\n const stored = Number(window.localStorage?.getItem(HEIGHT_STORAGE_KEY));\n return Number.isFinite(stored) && stored >= MIN_DOCK_HEIGHT ? stored : DEFAULT_DOCK_HEIGHT;\n}\n\nfunction writeHeight(height: number): void {\n if (typeof window === \"undefined\") return;\n window.localStorage?.setItem(HEIGHT_STORAGE_KEY, String(height));\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const CodeBlock = require("../data/CodeBlock.cjs");
6
+ const JsonView = require("../data/JsonView.cjs");
7
+ const debugClient = require("./debugClient.cjs");
8
+ function ExecutionDetail({ record, client, detail: provided }) {
9
+ const { detail, error, loading } = useExecutionDetail(record.id, client, provided);
10
+ if (provided === void 0 && loading) {
11
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-density-4 text-muted-foreground text-sm", children: "Loading capture…" });
12
+ }
13
+ if (error) {
14
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-density-4 text-sm", children: [
15
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-destructive", children: error }),
16
+ /* @__PURE__ */ jsxRuntime.jsx(RerunHint, { record })
17
+ ] });
18
+ }
19
+ if (!detail) return null;
20
+ const operations = detail.operations ?? [];
21
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-density-4 p-density-4", children: [
22
+ record.error ? /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
23
+ /* @__PURE__ */ jsxRuntime.jsx(SectionLabel, { children: "Error" }),
24
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "whitespace-pre-wrap font-mono text-destructive text-xs", children: record.error })
25
+ ] }) : null,
26
+ operations.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-sm", children: "This request reached no provider — nothing ran that could be explained." }) : operations.map((diagnostics, index) => /* @__PURE__ */ jsxRuntime.jsx(
27
+ OperationDetail,
28
+ {
29
+ index: index + 1,
30
+ total: operations.length,
31
+ diagnostics
32
+ },
33
+ `${diagnostics.provider}-${index}`
34
+ )),
35
+ detail.logs && detail.logs.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
36
+ /* @__PURE__ */ jsxRuntime.jsxs(SectionLabel, { children: [
37
+ "Log lines (",
38
+ detail.logs.length,
39
+ ")"
40
+ ] }),
41
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-auto rounded border border-border bg-muted/30 p-density-2 font-mono text-xs", children: detail.logs.map((line) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "whitespace-pre-wrap", children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: line.level }),
43
+ " ",
44
+ line.message
45
+ ] }, `${line.source}-${line.sequence}`)) })
46
+ ] }) : null,
47
+ /* @__PURE__ */ jsxRuntime.jsx(RerunHint, { record })
48
+ ] });
49
+ }
50
+ function OperationDetail({
51
+ index,
52
+ total,
53
+ diagnostics
54
+ }) {
55
+ const request = diagnostics.request ?? {};
56
+ const response = diagnostics.response ?? {};
57
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "flex flex-col gap-density-3", children: [
58
+ /* @__PURE__ */ jsxRuntime.jsxs(SectionLabel, { children: [
59
+ total > 1 ? `Operation ${index} of ${total} — ` : "",
60
+ diagnostics.provider,
61
+ request.connection ? ` · ${request.connection}` : ""
62
+ ] }),
63
+ request.query ? /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { source: request.query, language: "sql" }) : null,
64
+ request.rendered && request.rendered !== request.query ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
65
+ /* @__PURE__ */ jsxRuntime.jsx(SectionLabel, { children: "Rendered from the profile" }),
66
+ /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { source: request.rendered, language: "sql" })
67
+ ] }) : null,
68
+ request.arguments && request.arguments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
69
+ /* @__PURE__ */ jsxRuntime.jsx(SectionLabel, { children: "Bound arguments" }),
70
+ /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: request.arguments })
71
+ ] }) : null,
72
+ request.method || request.url ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "font-mono text-xs", children: [
73
+ request.method,
74
+ " ",
75
+ request.url,
76
+ typeof response.status === "number" ? ` → ${response.status}` : ""
77
+ ] }) : null,
78
+ request.options && Object.keys(request.options).length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
79
+ /* @__PURE__ */ jsxRuntime.jsx(SectionLabel, { children: "Options" }),
80
+ /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: request.options })
81
+ ] }) : null,
82
+ response.preview ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
83
+ /* @__PURE__ */ jsxRuntime.jsxs(SectionLabel, { children: [
84
+ "Response preview",
85
+ response.truncated ? " (truncated)" : ""
86
+ ] }),
87
+ /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { source: response.preview, language: "json" })
88
+ ] }) : null,
89
+ diagnostics.error ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "whitespace-pre-wrap font-mono text-destructive text-xs", children: diagnostics.error }) : null
90
+ ] });
91
+ }
92
+ function RerunHint({ record }) {
93
+ if (record.level === "trace2" || record.level === "trace3" || record.level === "trace4") return null;
94
+ return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-muted-foreground text-xs", children: [
95
+ "Captured at ",
96
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: record.level }),
97
+ ". Response bodies are only buffered at ",
98
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: "trace2" }),
99
+ " — raise the level and run it again to see them."
100
+ ] });
101
+ }
102
+ function SectionLabel({ children }) {
103
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-density-1 font-medium text-muted-foreground text-xs uppercase tracking-wide", children });
104
+ }
105
+ function useExecutionDetail(id, client, provided) {
106
+ const [detail, setDetail] = react.useState(provided);
107
+ const [error, setError] = react.useState();
108
+ const [loading, setLoading] = react.useState(provided === void 0);
109
+ react.useEffect(() => {
110
+ if (provided !== void 0) {
111
+ setDetail(provided);
112
+ setLoading(false);
113
+ return;
114
+ }
115
+ let cancelled = false;
116
+ setLoading(true);
117
+ setError(void 0);
118
+ (client ?? new debugClient.DebugClient()).detail(id).then((payload) => {
119
+ if (!cancelled) setDetail(payload);
120
+ }).catch((failure) => {
121
+ if (cancelled) return;
122
+ setError(
123
+ failure instanceof debugClient.DetailEvictedError ? `${failure.message}. The summary above is all that survives.` : failure instanceof Error ? failure.message : String(failure)
124
+ );
125
+ }).finally(() => {
126
+ if (!cancelled) setLoading(false);
127
+ });
128
+ return () => {
129
+ cancelled = true;
130
+ };
131
+ }, [id, client, provided]);
132
+ return { detail, error, loading };
133
+ }
134
+ exports.ExecutionDetail = ExecutionDetail;
135
+ //# sourceMappingURL=ExecutionDetail.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionDetail.cjs","sources":["../../src/devtools/ExecutionDetail.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { CodeBlock } from \"../data/CodeBlock\";\nimport { JsonView } from \"../data/JsonView\";\nimport type { QueryBrowserDiagnostics } from \"../data/query-browser/QueryBrowser.types\";\nimport { DebugClient, DetailEvictedError } from \"./debugClient\";\nimport type { ExecutionDetail as ExecutionDetailPayload, ExecutionSummary } from \"./types\";\n\n/**\n * The pane behind one row: what the execution actually sent, what came back,\n * and the lines it wrote on the way.\n *\n * Everything here is fetched by record id — it is the run that already\n * happened, not a re-run of it. That is the whole point of the console: the old\n * \"Debug\" dialog answered \"what does this URL run\" by running it a second time,\n * so what you inspected was never the execution that misbehaved.\n */\n\nexport type ExecutionDetailProps = {\n record: ExecutionSummary;\n client?: DebugClient | undefined;\n /** Pre-loaded detail, for a story or a test that has no server. */\n detail?: ExecutionDetailPayload | undefined;\n};\n\nexport function ExecutionDetail({ record, client, detail: provided }: ExecutionDetailProps) {\n const { detail, error, loading } = useExecutionDetail(record.id, client, provided);\n\n if (provided === undefined && loading) {\n return <div className=\"p-density-4 text-muted-foreground text-sm\">Loading capture…</div>;\n }\n if (error) {\n return (\n <div className=\"p-density-4 text-sm\">\n <p className=\"text-destructive\">{error}</p>\n <RerunHint record={record} />\n </div>\n );\n }\n if (!detail) return null;\n\n const operations = detail.operations ?? [];\n return (\n <div className=\"flex flex-col gap-density-4 p-density-4\">\n {record.error ? (\n <section>\n <SectionLabel>Error</SectionLabel>\n <p className=\"whitespace-pre-wrap font-mono text-destructive text-xs\">{record.error}</p>\n </section>\n ) : null}\n\n {operations.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">\n This request reached no provider — nothing ran that could be explained.\n </p>\n ) : (\n operations.map((diagnostics, index) => (\n <OperationDetail\n key={`${diagnostics.provider}-${index}`}\n index={index + 1}\n total={operations.length}\n diagnostics={diagnostics}\n />\n ))\n )}\n\n {detail.logs && detail.logs.length > 0 ? (\n <section>\n <SectionLabel>Log lines ({detail.logs.length})</SectionLabel>\n <div className=\"max-h-64 overflow-auto rounded border border-border bg-muted/30 p-density-2 font-mono text-xs\">\n {detail.logs.map((line) => (\n <div key={`${line.source}-${line.sequence}`} className=\"whitespace-pre-wrap\">\n <span className=\"text-muted-foreground\">{line.level}</span> {line.message}\n </div>\n ))}\n </div>\n </section>\n ) : null}\n\n <RerunHint record={record} />\n </div>\n );\n}\n\nfunction OperationDetail({\n index,\n total,\n diagnostics,\n}: {\n index: number;\n total: number;\n diagnostics: QueryBrowserDiagnostics;\n}) {\n const request = diagnostics.request ?? {};\n const response = diagnostics.response ?? {};\n return (\n <section className=\"flex flex-col gap-density-3\">\n <SectionLabel>\n {total > 1 ? `Operation ${index} of ${total} — ` : \"\"}\n {diagnostics.provider}\n {request.connection ? ` · ${request.connection}` : \"\"}\n </SectionLabel>\n\n {request.query ? <CodeBlock source={request.query} language=\"sql\" /> : null}\n {/* Shown only when it differs: for most providers the two are equal, and a\n second identical block reads as a second query. */}\n {request.rendered && request.rendered !== request.query ? (\n <div>\n <SectionLabel>Rendered from the profile</SectionLabel>\n <CodeBlock source={request.rendered} language=\"sql\" />\n </div>\n ) : null}\n\n {request.arguments && request.arguments.length > 0 ? (\n <div>\n <SectionLabel>Bound arguments</SectionLabel>\n <JsonView data={request.arguments} />\n </div>\n ) : null}\n\n {request.method || request.url ? (\n <p className=\"font-mono text-xs\">\n {request.method} {request.url}\n {typeof response.status === \"number\" ? ` → ${response.status}` : \"\"}\n </p>\n ) : null}\n\n {request.options && Object.keys(request.options).length > 0 ? (\n <div>\n <SectionLabel>Options</SectionLabel>\n <JsonView data={request.options} />\n </div>\n ) : null}\n\n {response.preview ? (\n <div>\n <SectionLabel>\n Response preview\n {response.truncated ? \" (truncated)\" : \"\"}\n </SectionLabel>\n <CodeBlock source={response.preview} language=\"json\" />\n </div>\n ) : null}\n\n {diagnostics.error ? (\n <p className=\"whitespace-pre-wrap font-mono text-destructive text-xs\">{diagnostics.error}</p>\n ) : null}\n </section>\n );\n}\n\n/**\n * A run captured below the level needed for what you are looking for cannot be\n * enriched retroactively — the bodies were never buffered. Saying so, and\n * naming the level that would have them, is the honest answer.\n */\nfunction RerunHint({ record }: { record: ExecutionSummary }) {\n if (record.level === \"trace2\" || record.level === \"trace3\" || record.level === \"trace4\") return null;\n return (\n <p className=\"text-muted-foreground text-xs\">\n Captured at <span className=\"font-mono\">{record.level}</span>. Response bodies are only\n buffered at <span className=\"font-mono\">trace2</span> — raise the level and run it again to\n see them.\n </p>\n );\n}\n\nfunction SectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <p className=\"mb-density-1 font-medium text-muted-foreground text-xs uppercase tracking-wide\">\n {children}\n </p>\n );\n}\n\nfunction useExecutionDetail(\n id: string,\n client: DebugClient | undefined,\n provided: ExecutionDetailPayload | undefined,\n) {\n const [detail, setDetail] = useState<ExecutionDetailPayload | undefined>(provided);\n const [error, setError] = useState<string | undefined>();\n const [loading, setLoading] = useState(provided === undefined);\n\n useEffect(() => {\n if (provided !== undefined) {\n setDetail(provided);\n setLoading(false);\n return;\n }\n let cancelled = false;\n setLoading(true);\n setError(undefined);\n (client ?? new DebugClient())\n .detail(id)\n .then((payload) => {\n if (!cancelled) setDetail(payload);\n })\n .catch((failure: unknown) => {\n if (cancelled) return;\n setError(\n failure instanceof DetailEvictedError\n ? `${failure.message}. The summary above is all that survives.`\n : failure instanceof Error\n ? failure.message\n : String(failure),\n );\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [id, client, provided]);\n\n return { detail, error, loading };\n}\n"],"names":["jsx","jsxs","CodeBlock","JsonView","useState","useEffect","DebugClient","DetailEvictedError"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { DebugClient } from './debugClient';
2
+ import { ExecutionDetail as ExecutionDetailPayload, ExecutionSummary } from './types';
3
+ /**
4
+ * The pane behind one row: what the execution actually sent, what came back,
5
+ * and the lines it wrote on the way.
6
+ *
7
+ * Everything here is fetched by record id — it is the run that already
8
+ * happened, not a re-run of it. That is the whole point of the console: the old
9
+ * "Debug" dialog answered "what does this URL run" by running it a second time,
10
+ * so what you inspected was never the execution that misbehaved.
11
+ */
12
+ export type ExecutionDetailProps = {
13
+ record: ExecutionSummary;
14
+ client?: DebugClient | undefined;
15
+ /** Pre-loaded detail, for a story or a test that has no server. */
16
+ detail?: ExecutionDetailPayload | undefined;
17
+ };
18
+ export declare function ExecutionDetail({ record, client, detail: provided }: ExecutionDetailProps): import("react/jsx-runtime").JSX.Element | null;
19
+ //# sourceMappingURL=ExecutionDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionDetail.d.ts","sourceRoot":"","sources":["../../src/devtools/ExecutionDetail.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,IAAI,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3F;;;;;;;;GAQG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,oBAAoB,kDAyDzF"}
@@ -0,0 +1,135 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { CodeBlock } from "../data/CodeBlock.js";
4
+ import { JsonView } from "../data/JsonView.js";
5
+ import { DebugClient, DetailEvictedError } from "./debugClient.js";
6
+ function ExecutionDetail({ record, client, detail: provided }) {
7
+ const { detail, error, loading } = useExecutionDetail(record.id, client, provided);
8
+ if (provided === void 0 && loading) {
9
+ return /* @__PURE__ */ jsx("div", { className: "p-density-4 text-muted-foreground text-sm", children: "Loading capture…" });
10
+ }
11
+ if (error) {
12
+ return /* @__PURE__ */ jsxs("div", { className: "p-density-4 text-sm", children: [
13
+ /* @__PURE__ */ jsx("p", { className: "text-destructive", children: error }),
14
+ /* @__PURE__ */ jsx(RerunHint, { record })
15
+ ] });
16
+ }
17
+ if (!detail) return null;
18
+ const operations = detail.operations ?? [];
19
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-density-4 p-density-4", children: [
20
+ record.error ? /* @__PURE__ */ jsxs("section", { children: [
21
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Error" }),
22
+ /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap font-mono text-destructive text-xs", children: record.error })
23
+ ] }) : null,
24
+ operations.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: "This request reached no provider — nothing ran that could be explained." }) : operations.map((diagnostics, index) => /* @__PURE__ */ jsx(
25
+ OperationDetail,
26
+ {
27
+ index: index + 1,
28
+ total: operations.length,
29
+ diagnostics
30
+ },
31
+ `${diagnostics.provider}-${index}`
32
+ )),
33
+ detail.logs && detail.logs.length > 0 ? /* @__PURE__ */ jsxs("section", { children: [
34
+ /* @__PURE__ */ jsxs(SectionLabel, { children: [
35
+ "Log lines (",
36
+ detail.logs.length,
37
+ ")"
38
+ ] }),
39
+ /* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-auto rounded border border-border bg-muted/30 p-density-2 font-mono text-xs", children: detail.logs.map((line) => /* @__PURE__ */ jsxs("div", { className: "whitespace-pre-wrap", children: [
40
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: line.level }),
41
+ " ",
42
+ line.message
43
+ ] }, `${line.source}-${line.sequence}`)) })
44
+ ] }) : null,
45
+ /* @__PURE__ */ jsx(RerunHint, { record })
46
+ ] });
47
+ }
48
+ function OperationDetail({
49
+ index,
50
+ total,
51
+ diagnostics
52
+ }) {
53
+ const request = diagnostics.request ?? {};
54
+ const response = diagnostics.response ?? {};
55
+ return /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-density-3", children: [
56
+ /* @__PURE__ */ jsxs(SectionLabel, { children: [
57
+ total > 1 ? `Operation ${index} of ${total} — ` : "",
58
+ diagnostics.provider,
59
+ request.connection ? ` · ${request.connection}` : ""
60
+ ] }),
61
+ request.query ? /* @__PURE__ */ jsx(CodeBlock, { source: request.query, language: "sql" }) : null,
62
+ request.rendered && request.rendered !== request.query ? /* @__PURE__ */ jsxs("div", { children: [
63
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Rendered from the profile" }),
64
+ /* @__PURE__ */ jsx(CodeBlock, { source: request.rendered, language: "sql" })
65
+ ] }) : null,
66
+ request.arguments && request.arguments.length > 0 ? /* @__PURE__ */ jsxs("div", { children: [
67
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Bound arguments" }),
68
+ /* @__PURE__ */ jsx(JsonView, { data: request.arguments })
69
+ ] }) : null,
70
+ request.method || request.url ? /* @__PURE__ */ jsxs("p", { className: "font-mono text-xs", children: [
71
+ request.method,
72
+ " ",
73
+ request.url,
74
+ typeof response.status === "number" ? ` → ${response.status}` : ""
75
+ ] }) : null,
76
+ request.options && Object.keys(request.options).length > 0 ? /* @__PURE__ */ jsxs("div", { children: [
77
+ /* @__PURE__ */ jsx(SectionLabel, { children: "Options" }),
78
+ /* @__PURE__ */ jsx(JsonView, { data: request.options })
79
+ ] }) : null,
80
+ response.preview ? /* @__PURE__ */ jsxs("div", { children: [
81
+ /* @__PURE__ */ jsxs(SectionLabel, { children: [
82
+ "Response preview",
83
+ response.truncated ? " (truncated)" : ""
84
+ ] }),
85
+ /* @__PURE__ */ jsx(CodeBlock, { source: response.preview, language: "json" })
86
+ ] }) : null,
87
+ diagnostics.error ? /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap font-mono text-destructive text-xs", children: diagnostics.error }) : null
88
+ ] });
89
+ }
90
+ function RerunHint({ record }) {
91
+ if (record.level === "trace2" || record.level === "trace3" || record.level === "trace4") return null;
92
+ return /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground text-xs", children: [
93
+ "Captured at ",
94
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: record.level }),
95
+ ". Response bodies are only buffered at ",
96
+ /* @__PURE__ */ jsx("span", { className: "font-mono", children: "trace2" }),
97
+ " — raise the level and run it again to see them."
98
+ ] });
99
+ }
100
+ function SectionLabel({ children }) {
101
+ return /* @__PURE__ */ jsx("p", { className: "mb-density-1 font-medium text-muted-foreground text-xs uppercase tracking-wide", children });
102
+ }
103
+ function useExecutionDetail(id, client, provided) {
104
+ const [detail, setDetail] = useState(provided);
105
+ const [error, setError] = useState();
106
+ const [loading, setLoading] = useState(provided === void 0);
107
+ useEffect(() => {
108
+ if (provided !== void 0) {
109
+ setDetail(provided);
110
+ setLoading(false);
111
+ return;
112
+ }
113
+ let cancelled = false;
114
+ setLoading(true);
115
+ setError(void 0);
116
+ (client ?? new DebugClient()).detail(id).then((payload) => {
117
+ if (!cancelled) setDetail(payload);
118
+ }).catch((failure) => {
119
+ if (cancelled) return;
120
+ setError(
121
+ failure instanceof DetailEvictedError ? `${failure.message}. The summary above is all that survives.` : failure instanceof Error ? failure.message : String(failure)
122
+ );
123
+ }).finally(() => {
124
+ if (!cancelled) setLoading(false);
125
+ });
126
+ return () => {
127
+ cancelled = true;
128
+ };
129
+ }, [id, client, provided]);
130
+ return { detail, error, loading };
131
+ }
132
+ export {
133
+ ExecutionDetail
134
+ };
135
+ //# sourceMappingURL=ExecutionDetail.js.map