@flanksource/clicky-ui 0.3.25 → 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 (470) 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/clickyOperationsToTools.cjs +2 -1
  133. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  134. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  135. package/dist/data/chat/clickyOperationsToTools.js +2 -1
  136. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  137. package/dist/data/chat/index.d.ts +2 -1
  138. package/dist/data/chat/index.d.ts.map +1 -1
  139. package/dist/data/chat/tool-policy.cjs +132 -0
  140. package/dist/data/chat/tool-policy.cjs.map +1 -0
  141. package/dist/data/chat/tool-policy.d.ts +81 -0
  142. package/dist/data/chat/tool-policy.d.ts.map +1 -0
  143. package/dist/data/chat/tool-policy.js +132 -0
  144. package/dist/data/chat/tool-policy.js.map +1 -0
  145. package/dist/data/chat/types.cjs +20 -0
  146. package/dist/data/chat/types.cjs.map +1 -1
  147. package/dist/data/chat/types.d.ts +22 -2
  148. package/dist/data/chat/types.d.ts.map +1 -1
  149. package/dist/data/chat/types.js +20 -0
  150. package/dist/data/chat/types.js.map +1 -1
  151. package/dist/data/debugConsoleSignal.cjs +64 -0
  152. package/dist/data/debugConsoleSignal.cjs.map +1 -0
  153. package/dist/data/debugConsoleSignal.d.ts +83 -0
  154. package/dist/data/debugConsoleSignal.d.ts.map +1 -0
  155. package/dist/data/debugConsoleSignal.js +64 -0
  156. package/dist/data/debugConsoleSignal.js.map +1 -0
  157. package/dist/data/har/HarPanel.cjs +20 -14
  158. package/dist/data/har/HarPanel.cjs.map +1 -1
  159. package/dist/data/har/HarPanel.d.ts.map +1 -1
  160. package/dist/data/har/HarPanel.js +20 -14
  161. package/dist/data/har/HarPanel.js.map +1 -1
  162. package/dist/data/har/types.d.ts +18 -0
  163. package/dist/data/har/types.d.ts.map +1 -1
  164. package/dist/data/query-browser/QueryBrowser.cjs +4 -42
  165. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  166. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  167. package/dist/data/query-browser/QueryBrowser.js +5 -43
  168. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  169. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  170. package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
  171. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  172. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  173. package/dist/data/useDebugAction.cjs +29 -0
  174. package/dist/data/useDebugAction.cjs.map +1 -0
  175. package/dist/data/useDebugAction.d.ts +16 -0
  176. package/dist/data/useDebugAction.d.ts.map +1 -0
  177. package/dist/data/useDebugAction.js +29 -0
  178. package/dist/data/useDebugAction.js.map +1 -0
  179. package/dist/data/version-info.cjs +3 -3
  180. package/dist/data/version-info.js +3 -3
  181. package/dist/data.cjs +16 -8
  182. package/dist/data.cjs.map +1 -1
  183. package/dist/data.d.ts +3 -2
  184. package/dist/data.d.ts.map +1 -1
  185. package/dist/data.js +16 -8
  186. package/dist/devtools/DebugConsole.cjs +138 -0
  187. package/dist/devtools/DebugConsole.cjs.map +1 -0
  188. package/dist/devtools/DebugConsole.d.ts +23 -0
  189. package/dist/devtools/DebugConsole.d.ts.map +1 -0
  190. package/dist/devtools/DebugConsole.js +138 -0
  191. package/dist/devtools/DebugConsole.js.map +1 -0
  192. package/dist/devtools/DebugConsoleButton.cjs +59 -0
  193. package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
  194. package/dist/devtools/DebugConsoleButton.d.ts +20 -0
  195. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
  196. package/dist/devtools/DebugConsoleButton.js +59 -0
  197. package/dist/devtools/DebugConsoleButton.js.map +1 -0
  198. package/dist/devtools/DebugConsoleDock.cjs +112 -0
  199. package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
  200. package/dist/devtools/DebugConsoleDock.d.ts +26 -0
  201. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
  202. package/dist/devtools/DebugConsoleDock.js +112 -0
  203. package/dist/devtools/DebugConsoleDock.js.map +1 -0
  204. package/dist/devtools/ExecutionDetail.cjs +135 -0
  205. package/dist/devtools/ExecutionDetail.cjs.map +1 -0
  206. package/dist/devtools/ExecutionDetail.d.ts +19 -0
  207. package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
  208. package/dist/devtools/ExecutionDetail.js +135 -0
  209. package/dist/devtools/ExecutionDetail.js.map +1 -0
  210. package/dist/devtools/debugClient.cjs +172 -0
  211. package/dist/devtools/debugClient.cjs.map +1 -0
  212. package/dist/devtools/debugClient.d.ts +98 -0
  213. package/dist/devtools/debugClient.d.ts.map +1 -0
  214. package/dist/devtools/debugClient.js +172 -0
  215. package/dist/devtools/debugClient.js.map +1 -0
  216. package/dist/devtools/debugStore.cjs +115 -0
  217. package/dist/devtools/debugStore.cjs.map +1 -0
  218. package/dist/devtools/debugStore.d.ts +83 -0
  219. package/dist/devtools/debugStore.d.ts.map +1 -0
  220. package/dist/devtools/debugStore.js +115 -0
  221. package/dist/devtools/debugStore.js.map +1 -0
  222. package/dist/devtools/dockState.cjs +51 -0
  223. package/dist/devtools/dockState.cjs.map +1 -0
  224. package/dist/devtools/dockState.d.ts +31 -0
  225. package/dist/devtools/dockState.d.ts.map +1 -0
  226. package/dist/devtools/dockState.js +51 -0
  227. package/dist/devtools/dockState.js.map +1 -0
  228. package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
  229. package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
  230. package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
  231. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
  232. package/dist/devtools/tabs/ConsoleTab.js +36 -0
  233. package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
  234. package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
  235. package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
  236. package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
  237. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
  238. package/dist/devtools/tabs/InspectionCaches.js +150 -0
  239. package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
  240. package/dist/devtools/tabs/InspectionTab.cjs +316 -0
  241. package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
  242. package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
  243. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
  244. package/dist/devtools/tabs/InspectionTab.js +316 -0
  245. package/dist/devtools/tabs/InspectionTab.js.map +1 -0
  246. package/dist/devtools/tabs/NetworkTab.cjs +91 -0
  247. package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
  248. package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
  249. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
  250. package/dist/devtools/tabs/NetworkTab.js +91 -0
  251. package/dist/devtools/tabs/NetworkTab.js.map +1 -0
  252. package/dist/devtools/tabs/QueriesTab.cjs +85 -0
  253. package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
  254. package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
  255. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
  256. package/dist/devtools/tabs/QueriesTab.js +85 -0
  257. package/dist/devtools/tabs/QueriesTab.js.map +1 -0
  258. package/dist/devtools/types.cjs +26 -0
  259. package/dist/devtools/types.cjs.map +1 -0
  260. package/dist/devtools/types.d.ts +235 -0
  261. package/dist/devtools/types.d.ts.map +1 -0
  262. package/dist/devtools/types.js +26 -0
  263. package/dist/devtools/types.js.map +1 -0
  264. package/dist/devtools/useDebugStream.cjs +46 -0
  265. package/dist/devtools/useDebugStream.cjs.map +1 -0
  266. package/dist/devtools/useDebugStream.d.ts +23 -0
  267. package/dist/devtools/useDebugStream.d.ts.map +1 -0
  268. package/dist/devtools/useDebugStream.js +46 -0
  269. package/dist/devtools/useDebugStream.js.map +1 -0
  270. package/dist/devtools.cjs +51 -0
  271. package/dist/devtools.cjs.map +1 -0
  272. package/dist/devtools.d.ts +37 -0
  273. package/dist/devtools.d.ts.map +1 -0
  274. package/dist/devtools.js +51 -0
  275. package/dist/devtools.js.map +1 -0
  276. package/dist/icons/components/UiOpenScad.cjs +10 -0
  277. package/dist/icons/components/UiOpenScad.cjs.map +1 -0
  278. package/dist/icons/components/UiOpenScad.d.ts +9 -0
  279. package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
  280. package/dist/icons/components/UiOpenScad.js +10 -0
  281. package/dist/icons/components/UiOpenScad.js.map +1 -0
  282. package/dist/icons/index.d.ts +1 -0
  283. package/dist/icons/index.d.ts.map +1 -1
  284. package/dist/icons/registry.cjs +2 -0
  285. package/dist/icons/registry.cjs.map +1 -1
  286. package/dist/icons/registry.d.ts.map +1 -1
  287. package/dist/icons/registry.js +2 -0
  288. package/dist/icons/registry.js.map +1 -1
  289. package/dist/icons.cjs +2 -0
  290. package/dist/icons.cjs.map +1 -1
  291. package/dist/icons.js +2 -0
  292. package/dist/icons.js.map +1 -1
  293. package/dist/index.cjs +20 -8
  294. package/dist/index.cjs.map +1 -1
  295. package/dist/index.js +20 -8
  296. package/dist/index.js.map +1 -1
  297. package/dist/layout/AppShell.cjs +15 -10
  298. package/dist/layout/AppShell.cjs.map +1 -1
  299. package/dist/layout/AppShell.d.ts +11 -0
  300. package/dist/layout/AppShell.d.ts.map +1 -1
  301. package/dist/layout/AppShell.js +15 -10
  302. package/dist/layout/AppShell.js.map +1 -1
  303. package/dist/layout/AppShell.nav.cjs +170 -49
  304. package/dist/layout/AppShell.nav.cjs.map +1 -1
  305. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  306. package/dist/layout/AppShell.nav.js +170 -49
  307. package/dist/layout/AppShell.nav.js.map +1 -1
  308. package/dist/overlay/CellActions.cjs +18 -124
  309. package/dist/overlay/CellActions.cjs.map +1 -1
  310. package/dist/overlay/CellActions.d.ts +1 -1
  311. package/dist/overlay/CellActions.d.ts.map +1 -1
  312. package/dist/overlay/CellActions.js +18 -124
  313. package/dist/overlay/CellActions.js.map +1 -1
  314. package/dist/overlay/ContextMenu.cjs +144 -0
  315. package/dist/overlay/ContextMenu.cjs.map +1 -0
  316. package/dist/overlay/ContextMenu.d.ts +8 -0
  317. package/dist/overlay/ContextMenu.d.ts.map +1 -0
  318. package/dist/overlay/ContextMenu.js +144 -0
  319. package/dist/overlay/ContextMenu.js.map +1 -0
  320. package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
  321. package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
  322. package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
  323. package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
  324. package/dist/profiles/connections/connectionBrowserModel.js +14 -65
  325. package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
  326. package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
  327. package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
  328. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
  329. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  330. package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
  331. package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
  332. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
  333. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
  334. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
  335. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
  336. package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
  337. package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
  338. package/dist/profiles/connections/index.d.ts +1 -0
  339. package/dist/profiles/connections/index.d.ts.map +1 -1
  340. package/dist/profiles/connections/inspectionStatus.cjs +44 -0
  341. package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
  342. package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
  343. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
  344. package/dist/profiles/connections/inspectionStatus.js +44 -0
  345. package/dist/profiles/connections/inspectionStatus.js.map +1 -0
  346. package/dist/profiles/connections/useInspection.cjs +123 -0
  347. package/dist/profiles/connections/useInspection.cjs.map +1 -0
  348. package/dist/profiles/connections/useInspection.d.ts +35 -0
  349. package/dist/profiles/connections/useInspection.d.ts.map +1 -0
  350. package/dist/profiles/connections/useInspection.js +123 -0
  351. package/dist/profiles/connections/useInspection.js.map +1 -0
  352. package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
  353. package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
  354. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  355. package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
  356. package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
  357. package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
  358. package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
  359. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  360. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  361. package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
  362. package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
  363. package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
  364. package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
  365. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  366. package/dist/profiles/fields/profileFieldEditor.js +137 -22
  367. package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
  368. package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
  369. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  370. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
  371. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  372. package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
  373. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  374. package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
  375. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  376. package/dist/profiles/fields/profileFieldIcons.js +6 -3
  377. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  378. package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
  379. package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
  380. package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
  381. package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
  382. package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
  383. package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
  384. package/dist/profiles/query/profileSamplePayload.cjs +6 -4
  385. package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
  386. package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
  387. package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
  388. package/dist/profiles/query/profileSamplePayload.js +6 -4
  389. package/dist/profiles/query/profileSamplePayload.js.map +1 -1
  390. package/dist/profiles/query/profileSampleResult.cjs +26 -0
  391. package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
  392. package/dist/profiles/query/profileSampleResult.d.ts +11 -0
  393. package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
  394. package/dist/profiles/query/profileSampleResult.js +26 -0
  395. package/dist/profiles/query/profileSampleResult.js.map +1 -0
  396. package/dist/profiles/query/queryTargetPicker.cjs +5 -3
  397. package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
  398. package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
  399. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  400. package/dist/profiles/query/queryTargetPicker.js +5 -3
  401. package/dist/profiles/query/queryTargetPicker.js.map +1 -1
  402. package/dist/profiles/wizard/profileWizard.cjs +14 -5
  403. package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
  404. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  405. package/dist/profiles/wizard/profileWizard.js +15 -6
  406. package/dist/profiles/wizard/profileWizard.js.map +1 -1
  407. package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
  408. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  409. package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
  410. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  411. package/dist/profiles/wizard/profileWizardModel.js +35 -6
  412. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  413. package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
  414. package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
  415. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  416. package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
  417. package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
  418. package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
  419. package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
  420. package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
  421. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  422. package/dist/profiles/wizard/profileWizardSteps.js +33 -2
  423. package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
  424. package/dist/profiles.cjs +8 -2
  425. package/dist/profiles.cjs.map +1 -1
  426. package/dist/profiles.js +10 -4
  427. package/dist/profiles.js.map +1 -1
  428. package/dist/rpc/FilterForm.cjs +21 -237
  429. package/dist/rpc/FilterForm.cjs.map +1 -1
  430. package/dist/rpc/FilterForm.d.ts +3 -1
  431. package/dist/rpc/FilterForm.d.ts.map +1 -1
  432. package/dist/rpc/FilterForm.js +21 -237
  433. package/dist/rpc/FilterForm.js.map +1 -1
  434. package/dist/rpc/FilterFormFields.cjs +240 -0
  435. package/dist/rpc/FilterFormFields.cjs.map +1 -0
  436. package/dist/rpc/FilterFormFields.d.ts +12 -0
  437. package/dist/rpc/FilterFormFields.d.ts.map +1 -0
  438. package/dist/rpc/FilterFormFields.js +240 -0
  439. package/dist/rpc/FilterFormFields.js.map +1 -0
  440. package/dist/rpc/router.cjs +3 -2
  441. package/dist/rpc/router.cjs.map +1 -1
  442. package/dist/rpc/router.d.ts.map +1 -1
  443. package/dist/rpc/router.js +3 -2
  444. package/dist/rpc/router.js.map +1 -1
  445. package/dist/rpc/types.cjs.map +1 -1
  446. package/dist/rpc/types.d.ts +3 -1
  447. package/dist/rpc/types.d.ts.map +1 -1
  448. package/dist/rpc/types.js.map +1 -1
  449. package/dist/styles.css +1 -1
  450. package/package.json +6 -1
  451. package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
  452. package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
  453. package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
  454. package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
  455. package/dist/data/query-info/QueryInfoDialog.js +0 -106
  456. package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
  457. package/dist/data/query-info/index.d.ts +0 -4
  458. package/dist/data/query-info/index.d.ts.map +0 -1
  459. package/dist/data/query-info/queryInfo.cjs +0 -42
  460. package/dist/data/query-info/queryInfo.cjs.map +0 -1
  461. package/dist/data/query-info/queryInfo.d.ts +0 -45
  462. package/dist/data/query-info/queryInfo.d.ts.map +0 -1
  463. package/dist/data/query-info/queryInfo.js +0 -42
  464. package/dist/data/query-info/queryInfo.js.map +0 -1
  465. package/dist/data/query-info/useQueryInfo.cjs +0 -48
  466. package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
  467. package/dist/data/query-info/useQueryInfo.d.ts +0 -26
  468. package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
  469. package/dist/data/query-info/useQueryInfo.js +0 -48
  470. package/dist/data/query-info/useQueryInfo.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockState.d.ts","sourceRoot":"","sources":["../../src/devtools/dockState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1F;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,SAAS,gBAAgB,CAAC;AACvC,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAIhC,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,SAAkB,GAAG,SAAS,CASjE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAWrD"}
@@ -0,0 +1,51 @@
1
+ import { DEFAULT_DEBUG_LEVEL, DEBUG_TABS } from "./types.js";
2
+ const DOCK_PARAM = "__debug_open";
3
+ const TAB_PARAM = "__debug_tab";
4
+ const LEVEL_PARAM = "__debug_level";
5
+ const DEFAULT_DOCK_STATE = {
6
+ open: false,
7
+ tab: "queries",
8
+ level: DEFAULT_DEBUG_LEVEL
9
+ };
10
+ function readDockState(search = currentSearch()) {
11
+ const params = new URLSearchParams(search);
12
+ const tab = params.get(TAB_PARAM);
13
+ const level = params.get(LEVEL_PARAM);
14
+ return {
15
+ open: params.get(DOCK_PARAM) === "1",
16
+ tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,
17
+ level: level ?? DEFAULT_DOCK_STATE.level
18
+ };
19
+ }
20
+ function writeDockState(state) {
21
+ var _a;
22
+ if (typeof window === "undefined" || !((_a = window.history) == null ? void 0 : _a.replaceState)) return;
23
+ const url = new URL(window.location.href);
24
+ setOrDelete(url.searchParams, DOCK_PARAM, state.open ? "1" : null);
25
+ setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== "queries" ? state.tab : null);
26
+ setOrDelete(
27
+ url.searchParams,
28
+ LEVEL_PARAM,
29
+ state.open && state.level !== DEFAULT_DEBUG_LEVEL ? state.level : null
30
+ );
31
+ window.history.replaceState(window.history.state, "", url.toString());
32
+ }
33
+ function setOrDelete(params, key, value) {
34
+ if (value === null) params.delete(key);
35
+ else params.set(key, value);
36
+ }
37
+ function isTab(value) {
38
+ return value !== null && DEBUG_TABS.includes(value);
39
+ }
40
+ function currentSearch() {
41
+ return typeof window === "undefined" ? "" : window.location.search;
42
+ }
43
+ export {
44
+ DEFAULT_DOCK_STATE,
45
+ DOCK_PARAM,
46
+ LEVEL_PARAM,
47
+ TAB_PARAM,
48
+ readDockState,
49
+ writeDockState
50
+ };
51
+ //# sourceMappingURL=dockState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockState.js","sources":["../../src/devtools/dockState.ts"],"sourcesContent":["import { DEBUG_TABS, DEFAULT_DEBUG_LEVEL, type DebugLevel, type DebugTab } from \"./types\";\n\n/**\n * Open/closed, the active tab and the capture level live in the URL.\n *\n * A broken state is worth sharing: \"open this profile with the console on\n * Network at trace2\" is the whole message, and a link is how it gets sent.\n * Height stays in localStorage — it is a preference about this screen, not a\n * fact about what is being debugged.\n *\n * The `__` prefix follows the app's own reserved-parameter convention, so these\n * are never mistaken for filter params, and they are written with\n * `history.replaceState` so opening a tab does not fill the back button.\n */\n\nexport const DOCK_PARAM = \"__debug_open\";\nexport const TAB_PARAM = \"__debug_tab\";\nexport const LEVEL_PARAM = \"__debug_level\";\n\nexport type DockState = {\n open: boolean;\n tab: DebugTab;\n level: DebugLevel;\n};\n\nexport const DEFAULT_DOCK_STATE: DockState = {\n open: false,\n tab: \"queries\",\n level: DEFAULT_DEBUG_LEVEL,\n};\n\nexport function readDockState(search = currentSearch()): DockState {\n const params = new URLSearchParams(search);\n const tab = params.get(TAB_PARAM);\n const level = params.get(LEVEL_PARAM);\n return {\n open: params.get(DOCK_PARAM) === \"1\",\n tab: isTab(tab) ? tab : DEFAULT_DOCK_STATE.tab,\n level: (level as DebugLevel | null) ?? DEFAULT_DOCK_STATE.level,\n };\n}\n\n/**\n * Writes the dock's state back to the URL, dropping the defaults.\n *\n * A closed console leaves no trace in the address bar — the ordinary case must\n * not make every link the user copies carry debug parameters.\n */\nexport function writeDockState(state: DockState): void {\n if (typeof window === \"undefined\" || !window.history?.replaceState) return;\n const url = new URL(window.location.href);\n setOrDelete(url.searchParams, DOCK_PARAM, state.open ? \"1\" : null);\n setOrDelete(url.searchParams, TAB_PARAM, state.open && state.tab !== \"queries\" ? state.tab : null);\n setOrDelete(\n url.searchParams,\n LEVEL_PARAM,\n state.open && state.level !== DEFAULT_DEBUG_LEVEL ? state.level : null,\n );\n window.history.replaceState(window.history.state, \"\", url.toString());\n}\n\nfunction setOrDelete(params: URLSearchParams, key: string, value: string | null): void {\n if (value === null) params.delete(key);\n else params.set(key, value);\n}\n\nfunction isTab(value: string | null): value is DebugTab {\n return value !== null && (DEBUG_TABS as readonly string[]).includes(value);\n}\n\nfunction currentSearch(): string {\n return typeof window === \"undefined\" ? \"\" : window.location.search;\n}\n"],"names":[],"mappings":";AAeO,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,cAAc;AAQpB,MAAM,qBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AACT;AAEO,SAAS,cAAc,SAAS,iBAA4B;AACjE,QAAM,SAAS,IAAI,gBAAgB,MAAM;AACzC,QAAM,MAAM,OAAO,IAAI,SAAS;AAChC,QAAM,QAAQ,OAAO,IAAI,WAAW;AACpC,SAAO;AAAA,IACL,MAAM,OAAO,IAAI,UAAU,MAAM;AAAA,IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,mBAAmB;AAAA,IAC3C,OAAQ,SAA+B,mBAAmB;AAAA,EAAA;AAE9D;AAQO,SAAS,eAAe,OAAwB;;AACrD,MAAI,OAAO,WAAW,eAAe,GAAC,YAAO,YAAP,mBAAgB,cAAc;AACpE,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,cAAY,IAAI,cAAc,YAAY,MAAM,OAAO,MAAM,IAAI;AACjE,cAAY,IAAI,cAAc,WAAW,MAAM,QAAQ,MAAM,QAAQ,YAAY,MAAM,MAAM,IAAI;AACjG;AAAA,IACE,IAAI;AAAA,IACJ;AAAA,IACA,MAAM,QAAQ,MAAM,UAAU,sBAAsB,MAAM,QAAQ;AAAA,EAAA;AAEpE,SAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,IAAI,UAAU;AACtE;AAEA,SAAS,YAAY,QAAyB,KAAa,OAA4B;AACrF,MAAI,UAAU,KAAM,QAAO,OAAO,GAAG;AAAA,MAChC,QAAO,IAAI,KAAK,KAAK;AAC5B;AAEA,SAAS,MAAM,OAAyC;AACtD,SAAO,UAAU,QAAS,WAAiC,SAAS,KAAK;AAC3E;AAEA,SAAS,gBAAwB;AAC/B,SAAO,OAAO,WAAW,cAAc,KAAK,OAAO,SAAS;AAC9D;"}
@@ -0,0 +1,36 @@
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 LogsTable = require("../../data/LogsTable.cjs");
6
+ function ConsoleTab({ lines, recordId, search }) {
7
+ const rows = react.useMemo(() => {
8
+ const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;
9
+ return scoped.map(toLogRecord);
10
+ }, [lines, recordId]);
11
+ if (rows.length === 0) {
12
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: recordId ? "This capture logged nothing." : "No server log lines yet. The tail starts when the console connects." });
13
+ }
14
+ return /* @__PURE__ */ jsxRuntime.jsx(
15
+ LogsTable.LogsTable,
16
+ {
17
+ logs: rows,
18
+ ...search === void 0 ? { showGlobalFilter: true } : { globalFilter: search },
19
+ showRawDetails: true
20
+ }
21
+ );
22
+ }
23
+ function toLogRecord(line) {
24
+ return {
25
+ timestamp: line.time,
26
+ level: line.level,
27
+ logger: line.logger ?? "",
28
+ message: line.message,
29
+ tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : ""].filter(
30
+ Boolean
31
+ ),
32
+ ...line.values
33
+ };
34
+ }
35
+ exports.ConsoleTab = ConsoleTab;
36
+ //# sourceMappingURL=ConsoleTab.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleTab.cjs","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { LogsTable } from \"../../data/LogsTable\";\nimport type { DebugLogLine } from \"../types\";\n\n/**\n * The server's own log, live in the browser.\n *\n * Two sources are merged here, and the seam is labelled rather than hidden.\n * A `request` line was captured structurally, with its values intact, at the\n * level the console armed; a `process` line was scraped from the writer the\n * logger was already using and has been rendered to text by the time it\n * arrives. Presenting them as one undifferentiated stream would imply the\n * second is as trustworthy as the first.\n */\n\nexport type ConsoleTabProps = {\n lines: DebugLogLine[];\n /** Show only lines belonging to this record. */\n recordId?: string | undefined;\n search?: string | undefined;\n};\n\nexport function ConsoleTab({ lines, recordId, search }: ConsoleTabProps) {\n const rows = useMemo(() => {\n const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;\n return scoped.map(toLogRecord);\n }, [lines, recordId]);\n\n if (rows.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">\n {recordId\n ? \"This capture logged nothing.\"\n : \"No server log lines yet. The tail starts when the console connects.\"}\n </div>\n );\n }\n\n return (\n <LogsTable\n logs={rows}\n {...(search === undefined ? { showGlobalFilter: true } : { globalFilter: search })}\n showRawDetails\n />\n );\n}\n\n/**\n * Maps a line onto the canonical log row LogsTable normalizes.\n *\n * `seam` rather than an extra column: the tag list is where a row's provenance\n * already lives, and a column that reads \"request\" on most rows and \"process\"\n * on the rest would cost width to say very little.\n */\nfunction toLogRecord(line: DebugLogLine): Record<string, unknown> {\n return {\n timestamp: line.time,\n level: line.level,\n logger: line.logger ?? \"\",\n message: line.message,\n tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : \"\"].filter(\n Boolean,\n ),\n ...line.values,\n };\n}\n"],"names":["useMemo","jsx","LogsTable"],"mappings":";;;;;AAsBO,SAAS,WAAW,EAAE,OAAO,UAAU,UAA2B;AACvE,QAAM,OAAOA,MAAAA,QAAQ,MAAM;AACzB,UAAM,SAAS,WAAW,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ,IAAI;AAC/E,WAAO,OAAO,IAAI,WAAW;AAAA,EAC/B,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,KAAK,WAAW,GAAG;AACrB,0CACG,OAAA,EAAI,WAAU,yDACZ,UAAA,WACG,iCACA,uEACN;AAAA,EAEJ;AAEA,SACEC,2BAAAA;AAAAA,IAACC,UAAAA;AAAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACL,GAAI,WAAW,SAAY,EAAE,kBAAkB,SAAS,EAAE,cAAc,OAAA;AAAA,MACzE,gBAAc;AAAA,IAAA;AAAA,EAAA;AAGpB;AASA,SAAS,YAAY,MAA6C;AAChE,SAAO;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,UAAU;AAAA,IACvB,SAAS,KAAK;AAAA,IACd,MAAM,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,WAAW,UAAU,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AAAA,MAC1F;AAAA,IAAA;AAAA,IAEF,GAAG,KAAK;AAAA,EAAA;AAEZ;;"}
@@ -0,0 +1,19 @@
1
+ import { DebugLogLine } from '../types';
2
+ /**
3
+ * The server's own log, live in the browser.
4
+ *
5
+ * Two sources are merged here, and the seam is labelled rather than hidden.
6
+ * A `request` line was captured structurally, with its values intact, at the
7
+ * level the console armed; a `process` line was scraped from the writer the
8
+ * logger was already using and has been rendered to text by the time it
9
+ * arrives. Presenting them as one undifferentiated stream would imply the
10
+ * second is as trustworthy as the first.
11
+ */
12
+ export type ConsoleTabProps = {
13
+ lines: DebugLogLine[];
14
+ /** Show only lines belonging to this record. */
15
+ recordId?: string | undefined;
16
+ search?: string | undefined;
17
+ };
18
+ export declare function ConsoleTab({ lines, recordId, search }: ConsoleTabProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=ConsoleTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleTab.d.ts","sourceRoot":"","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;GASG;AAEH,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,2CAuBtE"}
@@ -0,0 +1,36 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { LogsTable } from "../../data/LogsTable.js";
4
+ function ConsoleTab({ lines, recordId, search }) {
5
+ const rows = useMemo(() => {
6
+ const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;
7
+ return scoped.map(toLogRecord);
8
+ }, [lines, recordId]);
9
+ if (rows.length === 0) {
10
+ return /* @__PURE__ */ jsx("div", { className: "p-density-6 text-center text-muted-foreground text-sm", children: recordId ? "This capture logged nothing." : "No server log lines yet. The tail starts when the console connects." });
11
+ }
12
+ return /* @__PURE__ */ jsx(
13
+ LogsTable,
14
+ {
15
+ logs: rows,
16
+ ...search === void 0 ? { showGlobalFilter: true } : { globalFilter: search },
17
+ showRawDetails: true
18
+ }
19
+ );
20
+ }
21
+ function toLogRecord(line) {
22
+ return {
23
+ timestamp: line.time,
24
+ level: line.level,
25
+ logger: line.logger ?? "",
26
+ message: line.message,
27
+ tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : ""].filter(
28
+ Boolean
29
+ ),
30
+ ...line.values
31
+ };
32
+ }
33
+ export {
34
+ ConsoleTab
35
+ };
36
+ //# sourceMappingURL=ConsoleTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleTab.js","sources":["../../../src/devtools/tabs/ConsoleTab.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { LogsTable } from \"../../data/LogsTable\";\nimport type { DebugLogLine } from \"../types\";\n\n/**\n * The server's own log, live in the browser.\n *\n * Two sources are merged here, and the seam is labelled rather than hidden.\n * A `request` line was captured structurally, with its values intact, at the\n * level the console armed; a `process` line was scraped from the writer the\n * logger was already using and has been rendered to text by the time it\n * arrives. Presenting them as one undifferentiated stream would imply the\n * second is as trustworthy as the first.\n */\n\nexport type ConsoleTabProps = {\n lines: DebugLogLine[];\n /** Show only lines belonging to this record. */\n recordId?: string | undefined;\n search?: string | undefined;\n};\n\nexport function ConsoleTab({ lines, recordId, search }: ConsoleTabProps) {\n const rows = useMemo(() => {\n const scoped = recordId ? lines.filter((line) => line.recordId === recordId) : lines;\n return scoped.map(toLogRecord);\n }, [lines, recordId]);\n\n if (rows.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">\n {recordId\n ? \"This capture logged nothing.\"\n : \"No server log lines yet. The tail starts when the console connects.\"}\n </div>\n );\n }\n\n return (\n <LogsTable\n logs={rows}\n {...(search === undefined ? { showGlobalFilter: true } : { globalFilter: search })}\n showRawDetails\n />\n );\n}\n\n/**\n * Maps a line onto the canonical log row LogsTable normalizes.\n *\n * `seam` rather than an extra column: the tag list is where a row's provenance\n * already lives, and a column that reads \"request\" on most rows and \"process\"\n * on the rest would cost width to say very little.\n */\nfunction toLogRecord(line: DebugLogLine): Record<string, unknown> {\n return {\n timestamp: line.time,\n level: line.level,\n logger: line.logger ?? \"\",\n message: line.message,\n tags: [line.source, line.event, line.recordId ? `record:${line.recordId.slice(0, 8)}` : \"\"].filter(\n Boolean,\n ),\n ...line.values,\n };\n}\n"],"names":[],"mappings":";;;AAsBO,SAAS,WAAW,EAAE,OAAO,UAAU,UAA2B;AACvE,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,SAAS,WAAW,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,QAAQ,IAAI;AAC/E,WAAO,OAAO,IAAI,WAAW;AAAA,EAC/B,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,MAAI,KAAK,WAAW,GAAG;AACrB,+BACG,OAAA,EAAI,WAAU,yDACZ,UAAA,WACG,iCACA,uEACN;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACL,GAAI,WAAW,SAAY,EAAE,kBAAkB,SAAS,EAAE,cAAc,OAAA;AAAA,MACzE,gBAAc;AAAA,IAAA;AAAA,EAAA;AAGpB;AASA,SAAS,YAAY,MAA6C;AAChE,SAAO;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,UAAU;AAAA,IACvB,SAAS,KAAK;AAAA,IACd,MAAM,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,WAAW,UAAU,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AAAA,MAC1F;AAAA,IAAA;AAAA,IAEF,GAAG,KAAK;AAAA,EAAA;AAEZ;"}
@@ -0,0 +1,150 @@
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 button = require("../../components/button.cjs");
6
+ const DataTable = require("../../data/DataTable.cjs");
7
+ const debugClient = require("../debugClient.cjs");
8
+ function InspectionCaches({
9
+ client,
10
+ refreshInspection,
11
+ onRefreshInspectionChange,
12
+ caches: provided
13
+ }) {
14
+ const { caches, error, reload } = useCaches(client, provided);
15
+ const [flushing, setFlushing] = react.useState(null);
16
+ const [outcome, setOutcome] = react.useState();
17
+ const flush = react.useCallback(
18
+ async (policy) => {
19
+ setFlushing(policy ?? "*");
20
+ setOutcome(void 0);
21
+ try {
22
+ const result = await (client ?? new debugClient.DebugClient()).flushInspection(
23
+ policy ? { policy } : {}
24
+ );
25
+ setOutcome(
26
+ result.entries === 0 ? "Nothing was cached to drop." : `Dropped ${result.entries} ${result.entries === 1 ? "entry" : "entries"} from ${result.caches.length} ${result.caches.length === 1 ? "cache" : "caches"}.`
27
+ );
28
+ await reload();
29
+ } catch (failure) {
30
+ setOutcome(failure instanceof Error ? failure.message : String(failure));
31
+ } finally {
32
+ setFlushing(null);
33
+ }
34
+ },
35
+ [client, reload]
36
+ );
37
+ const columns = [
38
+ { key: "policy", label: "Cache", grow: true, minWidth: 200 },
39
+ {
40
+ key: "entries",
41
+ label: "Entries",
42
+ align: "right",
43
+ shrink: true,
44
+ render: (value, row) => `${Number(value ?? 0)} / ${row.maxEntries}`,
45
+ sortValue: (value) => Number(value ?? 0)
46
+ },
47
+ {
48
+ key: "filling",
49
+ label: "Filling",
50
+ align: "right",
51
+ shrink: true,
52
+ // Blank rather than "0": a column of zeros with one occasional 1 buries
53
+ // the only value that means anything here.
54
+ render: (value) => Number(value ?? 0) > 0 ? String(value) : ""
55
+ },
56
+ {
57
+ key: "freshForSeconds",
58
+ label: "Fresh for",
59
+ align: "right",
60
+ shrink: true,
61
+ render: (value) => formatDuration(Number(value ?? 0)),
62
+ sortValue: (value) => Number(value ?? 0)
63
+ },
64
+ {
65
+ key: "id",
66
+ label: "",
67
+ shrink: true,
68
+ render: (_value, row) => /* @__PURE__ */ jsxRuntime.jsx(
69
+ button.Button,
70
+ {
71
+ size: "sm",
72
+ variant: "ghost",
73
+ disabled: flushing !== null || row.entries === 0,
74
+ onClick: () => void flush(row.policy),
75
+ children: flushing === row.policy ? "Flushing…" : "Flush"
76
+ }
77
+ )
78
+ }
79
+ ];
80
+ const held = caches.reduce((total, cache) => total + cache.entries, 0);
81
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "flex flex-col gap-density-2", children: [
82
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-density-2", children: [
83
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium text-muted-foreground text-xs uppercase tracking-wide", children: "Metadata caches" }),
84
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-density-3", children: [
85
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-density-1 text-xs", children: [
86
+ /* @__PURE__ */ jsxRuntime.jsx(
87
+ "input",
88
+ {
89
+ type: "checkbox",
90
+ checked: refreshInspection,
91
+ onChange: (event) => onRefreshInspectionChange(event.target.checked)
92
+ }
93
+ ),
94
+ /* @__PURE__ */ jsxRuntime.jsx("span", { title: "Every request this console arms rebuilds the metadata it reads, instead of using the cache. Costs only your requests.", children: "Rebuild on every request" })
95
+ ] }),
96
+ /* @__PURE__ */ jsxRuntime.jsx(
97
+ button.Button,
98
+ {
99
+ size: "sm",
100
+ variant: "outline",
101
+ disabled: flushing !== null || held === 0,
102
+ onClick: () => void flush(),
103
+ title: "Drops cached metadata for every request that follows, not just yours.",
104
+ children: flushing === "*" ? "Flushing…" : "Flush all"
105
+ }
106
+ )
107
+ ] })
108
+ ] }),
109
+ refreshInspection ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-xs", children: "Rebuilding on every request. Pages will be slower until this is switched off — it is dropped automatically when the console closes." }) : null,
110
+ outcome ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-xs", children: outcome }) : null,
111
+ error ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-destructive text-xs", children: error }) : null,
112
+ /* @__PURE__ */ jsxRuntime.jsx(
113
+ DataTable.DataTable,
114
+ {
115
+ data: caches.map((cache) => ({ ...cache, id: cache.policy })),
116
+ columns,
117
+ emptyMessage: "This server registered no metadata caches."
118
+ }
119
+ )
120
+ ] });
121
+ }
122
+ function useCaches(client, provided) {
123
+ const [caches, setCaches] = react.useState(provided ?? []);
124
+ const [error, setError] = react.useState();
125
+ const reload = react.useCallback(async () => {
126
+ if (provided !== void 0) return;
127
+ try {
128
+ setCaches((await (client ?? new debugClient.DebugClient()).inspection()).caches);
129
+ setError(void 0);
130
+ } catch (failure) {
131
+ setError(failure instanceof Error ? failure.message : String(failure));
132
+ }
133
+ }, [client, provided]);
134
+ react.useEffect(() => {
135
+ if (provided !== void 0) {
136
+ setCaches(provided);
137
+ return;
138
+ }
139
+ void reload();
140
+ }, [provided, reload]);
141
+ return { caches, error, reload };
142
+ }
143
+ function formatDuration(seconds) {
144
+ if (seconds < 60) return `${seconds}s`;
145
+ if (seconds < 3600) return `${Math.round(seconds / 60)}m`;
146
+ if (seconds < 86400) return `${Math.round(seconds / 3600)}h`;
147
+ return `${Math.round(seconds / 86400)}d`;
148
+ }
149
+ exports.InspectionCaches = InspectionCaches;
150
+ //# sourceMappingURL=InspectionCaches.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectionCaches.cjs","sources":["../../../src/devtools/tabs/InspectionCaches.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { DataTable, type DataTableColumn } from \"../../data/DataTable\";\nimport { DebugClient } from \"../debugClient\";\nimport type { InspectionCacheStats } from \"../types\";\n\n/**\n * The controls for the metadata caches: what the server is holding, and the two\n * ways to make it stop.\n *\n * The two are not interchangeable and the wording says so. **Rebuild on every\n * request** costs the caller who asked and leaves everyone else reading the\n * cache; **flush** drops the entry for every request that follows. One is a way\n * to check your own page, the other is an intervention on a running server, and\n * a console that presented them as the same button would invite the second when\n * the first was meant.\n */\n\nexport type InspectionCachesProps = {\n client?: DebugClient | undefined;\n /** Rebuild every metadata lookup on subsequent requests. */\n refreshInspection: boolean;\n onRefreshInspectionChange: (refresh: boolean) => void;\n /** Pre-loaded rows, for a story or a test that has no server. */\n caches?: InspectionCacheStats[] | undefined;\n};\n\ntype CacheRow = Record<string, unknown> & InspectionCacheStats & { id: string };\n\nexport function InspectionCaches({\n client,\n refreshInspection,\n onRefreshInspectionChange,\n caches: provided,\n}: InspectionCachesProps) {\n const { caches, error, reload } = useCaches(client, provided);\n const [flushing, setFlushing] = useState<string | null>(null);\n const [outcome, setOutcome] = useState<string | undefined>();\n\n const flush = useCallback(\n async (policy?: string) => {\n setFlushing(policy ?? \"*\");\n setOutcome(undefined);\n try {\n const result = await (client ?? new DebugClient()).flushInspection(\n policy ? { policy } : {},\n );\n // Stated either way. An empty flush and a broken one look identical\n // without the count, and the operator would conclude the second.\n setOutcome(\n result.entries === 0\n ? \"Nothing was cached to drop.\"\n : `Dropped ${result.entries} ${result.entries === 1 ? \"entry\" : \"entries\"} from ${result.caches.length} ${result.caches.length === 1 ? \"cache\" : \"caches\"}.`,\n );\n await reload();\n } catch (failure: unknown) {\n setOutcome(failure instanceof Error ? failure.message : String(failure));\n } finally {\n setFlushing(null);\n }\n },\n [client, reload],\n );\n\n const columns: DataTableColumn<CacheRow>[] = [\n { key: \"policy\", label: \"Cache\", grow: true, minWidth: 200 },\n {\n key: \"entries\",\n label: \"Entries\",\n align: \"right\",\n shrink: true,\n render: (value, row) => `${Number(value ?? 0)} / ${row.maxEntries}`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"filling\",\n label: \"Filling\",\n align: \"right\",\n shrink: true,\n // Blank rather than \"0\": a column of zeros with one occasional 1 buries\n // the only value that means anything here.\n render: (value) => (Number(value ?? 0) > 0 ? String(value) : \"\"),\n },\n {\n key: \"freshForSeconds\",\n label: \"Fresh for\",\n align: \"right\",\n shrink: true,\n render: (value) => formatDuration(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"id\",\n label: \"\",\n shrink: true,\n render: (_value, row) => (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={flushing !== null || row.entries === 0}\n onClick={() => void flush(row.policy)}\n >\n {flushing === row.policy ? \"Flushing…\" : \"Flush\"}\n </Button>\n ),\n },\n ];\n\n const held = caches.reduce((total, cache) => total + cache.entries, 0);\n\n return (\n <section className=\"flex flex-col gap-density-2\">\n <div className=\"flex flex-wrap items-center justify-between gap-density-2\">\n <h3 className=\"font-medium text-muted-foreground text-xs uppercase tracking-wide\">\n Metadata caches\n </h3>\n <div className=\"flex items-center gap-density-3\">\n <label className=\"flex items-center gap-density-1 text-xs\">\n <input\n type=\"checkbox\"\n checked={refreshInspection}\n onChange={(event) => onRefreshInspectionChange(event.target.checked)}\n />\n <span title=\"Every request this console arms rebuilds the metadata it reads, instead of using the cache. Costs only your requests.\">\n Rebuild on every request\n </span>\n </label>\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={flushing !== null || held === 0}\n onClick={() => void flush()}\n title=\"Drops cached metadata for every request that follows, not just yours.\"\n >\n {flushing === \"*\" ? \"Flushing…\" : \"Flush all\"}\n </Button>\n </div>\n </div>\n\n {refreshInspection ? (\n <p className=\"text-muted-foreground text-xs\">\n Rebuilding on every request. Pages will be slower until this is switched off — it is\n dropped automatically when the console closes.\n </p>\n ) : null}\n {outcome ? <p className=\"text-muted-foreground text-xs\">{outcome}</p> : null}\n {error ? <p className=\"text-destructive text-xs\">{error}</p> : null}\n\n <DataTable<CacheRow>\n data={caches.map((cache) => ({ ...cache, id: cache.policy }))}\n columns={columns}\n emptyMessage=\"This server registered no metadata caches.\"\n />\n </section>\n );\n}\n\nfunction useCaches(client: DebugClient | undefined, provided: InspectionCacheStats[] | undefined) {\n const [caches, setCaches] = useState<InspectionCacheStats[]>(provided ?? []);\n const [error, setError] = useState<string | undefined>();\n\n const reload = useCallback(async () => {\n if (provided !== undefined) return;\n try {\n setCaches((await (client ?? new DebugClient()).inspection()).caches);\n setError(undefined);\n } catch (failure: unknown) {\n setError(failure instanceof Error ? failure.message : String(failure));\n }\n }, [client, provided]);\n\n useEffect(() => {\n if (provided !== undefined) {\n setCaches(provided);\n return;\n }\n void reload();\n }, [provided, reload]);\n\n return { caches, error, reload };\n}\n\nfunction formatDuration(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`;\n if (seconds < 86_400) return `${Math.round(seconds / 3600)}h`;\n return `${Math.round(seconds / 86_400)}d`;\n}\n"],"names":["useState","useCallback","DebugClient","jsx","Button","jsxs","DataTable","useEffect"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { DebugClient } from '../debugClient';
2
+ import { InspectionCacheStats } from '../types';
3
+ /**
4
+ * The controls for the metadata caches: what the server is holding, and the two
5
+ * ways to make it stop.
6
+ *
7
+ * The two are not interchangeable and the wording says so. **Rebuild on every
8
+ * request** costs the caller who asked and leaves everyone else reading the
9
+ * cache; **flush** drops the entry for every request that follows. One is a way
10
+ * to check your own page, the other is an intervention on a running server, and
11
+ * a console that presented them as the same button would invite the second when
12
+ * the first was meant.
13
+ */
14
+ export type InspectionCachesProps = {
15
+ client?: DebugClient | undefined;
16
+ /** Rebuild every metadata lookup on subsequent requests. */
17
+ refreshInspection: boolean;
18
+ onRefreshInspectionChange: (refresh: boolean) => void;
19
+ /** Pre-loaded rows, for a story or a test that has no server. */
20
+ caches?: InspectionCacheStats[] | undefined;
21
+ };
22
+ export declare function InspectionCaches({ client, refreshInspection, onRefreshInspectionChange, caches: provided, }: InspectionCachesProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=InspectionCaches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectionCaches.d.ts","sourceRoot":"","sources":["../../../src/devtools/tabs/InspectionCaches.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,4DAA4D;IAC5D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,iEAAiE;IACjE,MAAM,CAAC,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;CAC7C,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,iBAAiB,EACjB,yBAAyB,EACzB,MAAM,EAAE,QAAQ,GACjB,EAAE,qBAAqB,2CAyHvB"}
@@ -0,0 +1,150 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useCallback, useEffect } from "react";
3
+ import { Button } from "../../components/button.js";
4
+ import { DataTable } from "../../data/DataTable.js";
5
+ import { DebugClient } from "../debugClient.js";
6
+ function InspectionCaches({
7
+ client,
8
+ refreshInspection,
9
+ onRefreshInspectionChange,
10
+ caches: provided
11
+ }) {
12
+ const { caches, error, reload } = useCaches(client, provided);
13
+ const [flushing, setFlushing] = useState(null);
14
+ const [outcome, setOutcome] = useState();
15
+ const flush = useCallback(
16
+ async (policy) => {
17
+ setFlushing(policy ?? "*");
18
+ setOutcome(void 0);
19
+ try {
20
+ const result = await (client ?? new DebugClient()).flushInspection(
21
+ policy ? { policy } : {}
22
+ );
23
+ setOutcome(
24
+ result.entries === 0 ? "Nothing was cached to drop." : `Dropped ${result.entries} ${result.entries === 1 ? "entry" : "entries"} from ${result.caches.length} ${result.caches.length === 1 ? "cache" : "caches"}.`
25
+ );
26
+ await reload();
27
+ } catch (failure) {
28
+ setOutcome(failure instanceof Error ? failure.message : String(failure));
29
+ } finally {
30
+ setFlushing(null);
31
+ }
32
+ },
33
+ [client, reload]
34
+ );
35
+ const columns = [
36
+ { key: "policy", label: "Cache", grow: true, minWidth: 200 },
37
+ {
38
+ key: "entries",
39
+ label: "Entries",
40
+ align: "right",
41
+ shrink: true,
42
+ render: (value, row) => `${Number(value ?? 0)} / ${row.maxEntries}`,
43
+ sortValue: (value) => Number(value ?? 0)
44
+ },
45
+ {
46
+ key: "filling",
47
+ label: "Filling",
48
+ align: "right",
49
+ shrink: true,
50
+ // Blank rather than "0": a column of zeros with one occasional 1 buries
51
+ // the only value that means anything here.
52
+ render: (value) => Number(value ?? 0) > 0 ? String(value) : ""
53
+ },
54
+ {
55
+ key: "freshForSeconds",
56
+ label: "Fresh for",
57
+ align: "right",
58
+ shrink: true,
59
+ render: (value) => formatDuration(Number(value ?? 0)),
60
+ sortValue: (value) => Number(value ?? 0)
61
+ },
62
+ {
63
+ key: "id",
64
+ label: "",
65
+ shrink: true,
66
+ render: (_value, row) => /* @__PURE__ */ jsx(
67
+ Button,
68
+ {
69
+ size: "sm",
70
+ variant: "ghost",
71
+ disabled: flushing !== null || row.entries === 0,
72
+ onClick: () => void flush(row.policy),
73
+ children: flushing === row.policy ? "Flushing…" : "Flush"
74
+ }
75
+ )
76
+ }
77
+ ];
78
+ const held = caches.reduce((total, cache) => total + cache.entries, 0);
79
+ return /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-density-2", children: [
80
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-density-2", children: [
81
+ /* @__PURE__ */ jsx("h3", { className: "font-medium text-muted-foreground text-xs uppercase tracking-wide", children: "Metadata caches" }),
82
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-density-3", children: [
83
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-density-1 text-xs", children: [
84
+ /* @__PURE__ */ jsx(
85
+ "input",
86
+ {
87
+ type: "checkbox",
88
+ checked: refreshInspection,
89
+ onChange: (event) => onRefreshInspectionChange(event.target.checked)
90
+ }
91
+ ),
92
+ /* @__PURE__ */ jsx("span", { title: "Every request this console arms rebuilds the metadata it reads, instead of using the cache. Costs only your requests.", children: "Rebuild on every request" })
93
+ ] }),
94
+ /* @__PURE__ */ jsx(
95
+ Button,
96
+ {
97
+ size: "sm",
98
+ variant: "outline",
99
+ disabled: flushing !== null || held === 0,
100
+ onClick: () => void flush(),
101
+ title: "Drops cached metadata for every request that follows, not just yours.",
102
+ children: flushing === "*" ? "Flushing…" : "Flush all"
103
+ }
104
+ )
105
+ ] })
106
+ ] }),
107
+ refreshInspection ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs", children: "Rebuilding on every request. Pages will be slower until this is switched off — it is dropped automatically when the console closes." }) : null,
108
+ outcome ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs", children: outcome }) : null,
109
+ error ? /* @__PURE__ */ jsx("p", { className: "text-destructive text-xs", children: error }) : null,
110
+ /* @__PURE__ */ jsx(
111
+ DataTable,
112
+ {
113
+ data: caches.map((cache) => ({ ...cache, id: cache.policy })),
114
+ columns,
115
+ emptyMessage: "This server registered no metadata caches."
116
+ }
117
+ )
118
+ ] });
119
+ }
120
+ function useCaches(client, provided) {
121
+ const [caches, setCaches] = useState(provided ?? []);
122
+ const [error, setError] = useState();
123
+ const reload = useCallback(async () => {
124
+ if (provided !== void 0) return;
125
+ try {
126
+ setCaches((await (client ?? new DebugClient()).inspection()).caches);
127
+ setError(void 0);
128
+ } catch (failure) {
129
+ setError(failure instanceof Error ? failure.message : String(failure));
130
+ }
131
+ }, [client, provided]);
132
+ useEffect(() => {
133
+ if (provided !== void 0) {
134
+ setCaches(provided);
135
+ return;
136
+ }
137
+ void reload();
138
+ }, [provided, reload]);
139
+ return { caches, error, reload };
140
+ }
141
+ function formatDuration(seconds) {
142
+ if (seconds < 60) return `${seconds}s`;
143
+ if (seconds < 3600) return `${Math.round(seconds / 60)}m`;
144
+ if (seconds < 86400) return `${Math.round(seconds / 3600)}h`;
145
+ return `${Math.round(seconds / 86400)}d`;
146
+ }
147
+ export {
148
+ InspectionCaches
149
+ };
150
+ //# sourceMappingURL=InspectionCaches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectionCaches.js","sources":["../../../src/devtools/tabs/InspectionCaches.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { DataTable, type DataTableColumn } from \"../../data/DataTable\";\nimport { DebugClient } from \"../debugClient\";\nimport type { InspectionCacheStats } from \"../types\";\n\n/**\n * The controls for the metadata caches: what the server is holding, and the two\n * ways to make it stop.\n *\n * The two are not interchangeable and the wording says so. **Rebuild on every\n * request** costs the caller who asked and leaves everyone else reading the\n * cache; **flush** drops the entry for every request that follows. One is a way\n * to check your own page, the other is an intervention on a running server, and\n * a console that presented them as the same button would invite the second when\n * the first was meant.\n */\n\nexport type InspectionCachesProps = {\n client?: DebugClient | undefined;\n /** Rebuild every metadata lookup on subsequent requests. */\n refreshInspection: boolean;\n onRefreshInspectionChange: (refresh: boolean) => void;\n /** Pre-loaded rows, for a story or a test that has no server. */\n caches?: InspectionCacheStats[] | undefined;\n};\n\ntype CacheRow = Record<string, unknown> & InspectionCacheStats & { id: string };\n\nexport function InspectionCaches({\n client,\n refreshInspection,\n onRefreshInspectionChange,\n caches: provided,\n}: InspectionCachesProps) {\n const { caches, error, reload } = useCaches(client, provided);\n const [flushing, setFlushing] = useState<string | null>(null);\n const [outcome, setOutcome] = useState<string | undefined>();\n\n const flush = useCallback(\n async (policy?: string) => {\n setFlushing(policy ?? \"*\");\n setOutcome(undefined);\n try {\n const result = await (client ?? new DebugClient()).flushInspection(\n policy ? { policy } : {},\n );\n // Stated either way. An empty flush and a broken one look identical\n // without the count, and the operator would conclude the second.\n setOutcome(\n result.entries === 0\n ? \"Nothing was cached to drop.\"\n : `Dropped ${result.entries} ${result.entries === 1 ? \"entry\" : \"entries\"} from ${result.caches.length} ${result.caches.length === 1 ? \"cache\" : \"caches\"}.`,\n );\n await reload();\n } catch (failure: unknown) {\n setOutcome(failure instanceof Error ? failure.message : String(failure));\n } finally {\n setFlushing(null);\n }\n },\n [client, reload],\n );\n\n const columns: DataTableColumn<CacheRow>[] = [\n { key: \"policy\", label: \"Cache\", grow: true, minWidth: 200 },\n {\n key: \"entries\",\n label: \"Entries\",\n align: \"right\",\n shrink: true,\n render: (value, row) => `${Number(value ?? 0)} / ${row.maxEntries}`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"filling\",\n label: \"Filling\",\n align: \"right\",\n shrink: true,\n // Blank rather than \"0\": a column of zeros with one occasional 1 buries\n // the only value that means anything here.\n render: (value) => (Number(value ?? 0) > 0 ? String(value) : \"\"),\n },\n {\n key: \"freshForSeconds\",\n label: \"Fresh for\",\n align: \"right\",\n shrink: true,\n render: (value) => formatDuration(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"id\",\n label: \"\",\n shrink: true,\n render: (_value, row) => (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={flushing !== null || row.entries === 0}\n onClick={() => void flush(row.policy)}\n >\n {flushing === row.policy ? \"Flushing…\" : \"Flush\"}\n </Button>\n ),\n },\n ];\n\n const held = caches.reduce((total, cache) => total + cache.entries, 0);\n\n return (\n <section className=\"flex flex-col gap-density-2\">\n <div className=\"flex flex-wrap items-center justify-between gap-density-2\">\n <h3 className=\"font-medium text-muted-foreground text-xs uppercase tracking-wide\">\n Metadata caches\n </h3>\n <div className=\"flex items-center gap-density-3\">\n <label className=\"flex items-center gap-density-1 text-xs\">\n <input\n type=\"checkbox\"\n checked={refreshInspection}\n onChange={(event) => onRefreshInspectionChange(event.target.checked)}\n />\n <span title=\"Every request this console arms rebuilds the metadata it reads, instead of using the cache. Costs only your requests.\">\n Rebuild on every request\n </span>\n </label>\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={flushing !== null || held === 0}\n onClick={() => void flush()}\n title=\"Drops cached metadata for every request that follows, not just yours.\"\n >\n {flushing === \"*\" ? \"Flushing…\" : \"Flush all\"}\n </Button>\n </div>\n </div>\n\n {refreshInspection ? (\n <p className=\"text-muted-foreground text-xs\">\n Rebuilding on every request. Pages will be slower until this is switched off — it is\n dropped automatically when the console closes.\n </p>\n ) : null}\n {outcome ? <p className=\"text-muted-foreground text-xs\">{outcome}</p> : null}\n {error ? <p className=\"text-destructive text-xs\">{error}</p> : null}\n\n <DataTable<CacheRow>\n data={caches.map((cache) => ({ ...cache, id: cache.policy }))}\n columns={columns}\n emptyMessage=\"This server registered no metadata caches.\"\n />\n </section>\n );\n}\n\nfunction useCaches(client: DebugClient | undefined, provided: InspectionCacheStats[] | undefined) {\n const [caches, setCaches] = useState<InspectionCacheStats[]>(provided ?? []);\n const [error, setError] = useState<string | undefined>();\n\n const reload = useCallback(async () => {\n if (provided !== undefined) return;\n try {\n setCaches((await (client ?? new DebugClient()).inspection()).caches);\n setError(undefined);\n } catch (failure: unknown) {\n setError(failure instanceof Error ? failure.message : String(failure));\n }\n }, [client, provided]);\n\n useEffect(() => {\n if (provided !== undefined) {\n setCaches(provided);\n return;\n }\n void reload();\n }, [provided, reload]);\n\n return { caches, error, reload };\n}\n\nfunction formatDuration(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`;\n if (seconds < 86_400) return `${Math.round(seconds / 3600)}h`;\n return `${Math.round(seconds / 86_400)}d`;\n}\n"],"names":[],"mappings":";;;;;AA6BO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAA0B;AACxB,QAAM,EAAE,QAAQ,OAAO,WAAW,UAAU,QAAQ,QAAQ;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAA;AAE9B,QAAM,QAAQ;AAAA,IACZ,OAAO,WAAoB;AACzB,kBAAY,UAAU,GAAG;AACzB,iBAAW,MAAS;AACpB,UAAI;AACF,cAAM,SAAS,OAAO,UAAU,IAAI,eAAe;AAAA,UACjD,SAAS,EAAE,WAAW,CAAA;AAAA,QAAC;AAIzB;AAAA,UACE,OAAO,YAAY,IACf,gCACA,WAAW,OAAO,OAAO,IAAI,OAAO,YAAY,IAAI,UAAU,SAAS,SAAS,OAAO,OAAO,MAAM,IAAI,OAAO,OAAO,WAAW,IAAI,UAAU,QAAQ;AAAA,QAAA;AAE7J,cAAM,OAAA;AAAA,MACR,SAAS,SAAkB;AACzB,mBAAW,mBAAmB,QAAQ,QAAQ,UAAU,OAAO,OAAO,CAAC;AAAA,MACzE,UAAA;AACE,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,MAAM;AAAA,EAAA;AAGjB,QAAM,UAAuC;AAAA,IAC3C,EAAE,KAAK,UAAU,OAAO,SAAS,MAAM,MAAM,UAAU,IAAA;AAAA,IACvD;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,CAAC,OAAO,QAAQ,GAAG,OAAO,SAAS,CAAC,CAAC,MAAM,IAAI,UAAU;AAAA,MACjE,WAAW,CAAC,UAAU,OAAO,SAAS,CAAC;AAAA,IAAA;AAAA,IAEzC;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA;AAAA;AAAA,MAGR,QAAQ,CAAC,UAAW,OAAO,SAAS,CAAC,IAAI,IAAI,OAAO,KAAK,IAAI;AAAA,IAAA;AAAA,IAE/D;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,CAAC,UAAU,eAAe,OAAO,SAAS,CAAC,CAAC;AAAA,MACpD,WAAW,CAAC,UAAU,OAAO,SAAS,CAAC;AAAA,IAAA;AAAA,IAEzC;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,CAAC,QAAQ,QACf;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,UAAU,aAAa,QAAQ,IAAI,YAAY;AAAA,UAC/C,SAAS,MAAM,KAAK,MAAM,IAAI,MAAM;AAAA,UAEnC,UAAA,aAAa,IAAI,SAAS,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3C;AAAA,EAEJ;AAGF,QAAM,OAAO,OAAO,OAAO,CAAC,OAAO,UAAU,QAAQ,MAAM,SAAS,CAAC;AAErE,SACE,qBAAC,WAAA,EAAQ,WAAU,+BACjB,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,6DACb,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAG,WAAU,qEAAoE,UAAA,mBAElF;AAAA,MACA,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,QAAA,qBAAC,SAAA,EAAM,WAAU,2CACf,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU,CAAC,UAAU,0BAA0B,MAAM,OAAO,OAAO;AAAA,YAAA;AAAA,UAAA;AAAA,UAErE,oBAAC,QAAA,EAAK,OAAM,yHAAwH,UAAA,2BAAA,CAEpI;AAAA,QAAA,GACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,UAAU,aAAa,QAAQ,SAAS;AAAA,YACxC,SAAS,MAAM,KAAK,MAAA;AAAA,YACpB,OAAM;AAAA,YAEL,UAAA,aAAa,MAAM,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MACpC,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAEC,oBACC,oBAAC,KAAA,EAAE,WAAU,iCAAgC,iJAG7C,IACE;AAAA,IACH,UAAU,oBAAC,KAAA,EAAE,WAAU,iCAAiC,mBAAQ,IAAO;AAAA,IACvE,QAAQ,oBAAC,KAAA,EAAE,WAAU,4BAA4B,iBAAM,IAAO;AAAA,IAE/D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,IAAI,MAAM,OAAA,EAAS;AAAA,QAC5D;AAAA,QACA,cAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACf,GACF;AAEJ;AAEA,SAAS,UAAU,QAAiC,UAA8C;AAChG,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAiC,YAAY,CAAA,CAAE;AAC3E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAA;AAE1B,QAAM,SAAS,YAAY,YAAY;AACrC,QAAI,aAAa,OAAW;AAC5B,QAAI;AACF,iBAAW,OAAO,UAAU,IAAI,eAAe,WAAA,GAAc,MAAM;AACnE,eAAS,MAAS;AAAA,IACpB,SAAS,SAAkB;AACzB,eAAS,mBAAmB,QAAQ,QAAQ,UAAU,OAAO,OAAO,CAAC;AAAA,IACvE;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,YAAU,MAAM;AACd,QAAI,aAAa,QAAW;AAC1B,gBAAU,QAAQ;AAClB;AAAA,IACF;AACA,SAAK,OAAA;AAAA,EACP,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,SAAO,EAAE,QAAQ,OAAO,OAAA;AAC1B;AAEA,SAAS,eAAe,SAAyB;AAC/C,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO;AACnC,MAAI,UAAU,KAAM,QAAO,GAAG,KAAK,MAAM,UAAU,EAAE,CAAC;AACtD,MAAI,UAAU,MAAQ,QAAO,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC;AAC1D,SAAO,GAAG,KAAK,MAAM,UAAU,KAAM,CAAC;AACxC;"}