@flanksource/clicky-ui 0.3.25 → 0.3.27

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 (535) 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/FixtureEditor/fixture-frontmatter.cjs +4 -0
  52. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  53. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
  54. package/dist/data/FixtureEditor/fixture-frontmatter.js +4 -0
  55. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  56. package/dist/data/TaskExecDetails.cjs +8 -3
  57. package/dist/data/TaskExecDetails.cjs.map +1 -1
  58. package/dist/data/TaskExecDetails.d.ts +4 -0
  59. package/dist/data/TaskExecDetails.d.ts.map +1 -1
  60. package/dist/data/TaskExecDetails.js +9 -4
  61. package/dist/data/TaskExecDetails.js.map +1 -1
  62. package/dist/data/TaskManagerButton.cjs +101 -7
  63. package/dist/data/TaskManagerButton.cjs.map +1 -1
  64. package/dist/data/TaskManagerButton.d.ts +6 -1
  65. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  66. package/dist/data/TaskManagerButton.js +103 -9
  67. package/dist/data/TaskManagerButton.js.map +1 -1
  68. package/dist/data/TaskProcessDetails.cjs +2 -0
  69. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  70. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  71. package/dist/data/TaskProcessDetails.js +2 -0
  72. package/dist/data/TaskProcessDetails.js.map +1 -1
  73. package/dist/data/TaskProgress.cjs +14 -4
  74. package/dist/data/TaskProgress.cjs.map +1 -1
  75. package/dist/data/TaskProgress.js +14 -4
  76. package/dist/data/TaskProgress.js.map +1 -1
  77. package/dist/data/TaskSnapshot.cjs.map +1 -1
  78. package/dist/data/TaskSnapshot.d.ts +1 -0
  79. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  80. package/dist/data/TaskSnapshot.js.map +1 -1
  81. package/dist/data/ai/ChatWindow.cjs +18 -23
  82. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  83. package/dist/data/ai/ChatWindow.d.ts +1 -1
  84. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  85. package/dist/data/ai/ChatWindow.js +19 -24
  86. package/dist/data/ai/ChatWindow.js.map +1 -1
  87. package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
  88. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  89. package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
  90. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  91. package/dist/data/ai/ChatWindow.preferences.js +12 -21
  92. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  93. package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
  94. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  95. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
  96. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  97. package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
  98. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  99. package/dist/data/ai/ChatWindow.types.d.ts +2 -2
  100. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  101. package/dist/data/ai/ChatWindowManager.cjs +2 -2
  102. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  103. package/dist/data/ai/ChatWindowManager.js +2 -2
  104. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  105. package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
  106. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
  107. package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
  108. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
  109. package/dist/data/ai/ChatWindowRequestBody.js +4 -2
  110. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
  111. package/dist/data/ai/PromptRunEditor/index.cjs +2 -3
  112. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  113. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  114. package/dist/data/ai/PromptRunEditor/index.js +2 -3
  115. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  116. package/dist/data/ai/PromptRunEditor/model.cjs +1 -0
  117. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  118. package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
  119. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  120. package/dist/data/ai/PromptRunEditor/model.js +1 -0
  121. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  122. package/dist/data/ai/RuntimeModePicker.cjs +11 -9
  123. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  124. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  125. package/dist/data/ai/RuntimeModePicker.js +12 -10
  126. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  127. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +5 -0
  128. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  129. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  130. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +5 -0
  131. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  132. package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
  133. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  134. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -0
  135. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  136. package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
  137. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  138. package/dist/data/ai/ToolPreferences.cjs +5 -5
  139. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  140. package/dist/data/ai/ToolPreferences.d.ts +6 -5
  141. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  142. package/dist/data/ai/ToolPreferences.js +5 -5
  143. package/dist/data/ai/ToolPreferences.js.map +1 -1
  144. package/dist/data/ai/ToolPreferences.model.cjs +61 -37
  145. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  146. package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
  147. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  148. package/dist/data/ai/ToolPreferences.model.js +62 -38
  149. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  150. package/dist/data/ai/ToolPreferencesList.cjs +17 -20
  151. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  152. package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
  153. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  154. package/dist/data/ai/ToolPreferencesList.js +18 -21
  155. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  156. package/dist/data/ai/chat-window-context.cjs +1 -1
  157. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  158. package/dist/data/ai/chat-window-context.d.ts +7 -7
  159. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  160. package/dist/data/ai/chat-window-context.js +1 -1
  161. package/dist/data/ai/chat-window-context.js.map +1 -1
  162. package/dist/data/ai/index.d.ts +3 -1
  163. package/dist/data/ai/index.d.ts.map +1 -1
  164. package/dist/data/chat/Chat.cjs +4 -2
  165. package/dist/data/chat/Chat.cjs.map +1 -1
  166. package/dist/data/chat/Chat.d.ts.map +1 -1
  167. package/dist/data/chat/Chat.js +4 -2
  168. package/dist/data/chat/Chat.js.map +1 -1
  169. package/dist/data/chat/Chat.runtime.cjs +14 -3
  170. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  171. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  172. package/dist/data/chat/Chat.runtime.js +15 -4
  173. package/dist/data/chat/Chat.runtime.js.map +1 -1
  174. package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
  175. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  176. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  177. package/dist/data/chat/clickyOperationsToTools.js +2 -1
  178. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  179. package/dist/data/chat/index.d.ts +2 -1
  180. package/dist/data/chat/index.d.ts.map +1 -1
  181. package/dist/data/chat/tool-policy.cjs +132 -0
  182. package/dist/data/chat/tool-policy.cjs.map +1 -0
  183. package/dist/data/chat/tool-policy.d.ts +81 -0
  184. package/dist/data/chat/tool-policy.d.ts.map +1 -0
  185. package/dist/data/chat/tool-policy.js +132 -0
  186. package/dist/data/chat/tool-policy.js.map +1 -0
  187. package/dist/data/chat/types.cjs +20 -0
  188. package/dist/data/chat/types.cjs.map +1 -1
  189. package/dist/data/chat/types.d.ts +22 -2
  190. package/dist/data/chat/types.d.ts.map +1 -1
  191. package/dist/data/chat/types.js +20 -0
  192. package/dist/data/chat/types.js.map +1 -1
  193. package/dist/data/debugConsoleSignal.cjs +64 -0
  194. package/dist/data/debugConsoleSignal.cjs.map +1 -0
  195. package/dist/data/debugConsoleSignal.d.ts +83 -0
  196. package/dist/data/debugConsoleSignal.d.ts.map +1 -0
  197. package/dist/data/debugConsoleSignal.js +64 -0
  198. package/dist/data/debugConsoleSignal.js.map +1 -0
  199. package/dist/data/har/HarPanel.cjs +20 -14
  200. package/dist/data/har/HarPanel.cjs.map +1 -1
  201. package/dist/data/har/HarPanel.d.ts.map +1 -1
  202. package/dist/data/har/HarPanel.js +20 -14
  203. package/dist/data/har/HarPanel.js.map +1 -1
  204. package/dist/data/har/types.d.ts +18 -0
  205. package/dist/data/har/types.d.ts.map +1 -1
  206. package/dist/data/query-browser/QueryBrowser.cjs +4 -42
  207. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  208. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  209. package/dist/data/query-browser/QueryBrowser.js +5 -43
  210. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  211. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  212. package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
  213. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  214. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  215. package/dist/data/runtime/RuntimeBar.cjs +26 -41
  216. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  217. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  218. package/dist/data/runtime/RuntimeBar.js +28 -43
  219. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  220. package/dist/data/runtime/RuntimeBar.model.cjs +65 -0
  221. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  222. package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
  223. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  224. package/dist/data/runtime/RuntimeBar.model.js +65 -0
  225. package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
  226. package/dist/data/runtime/model-capabilities.cjs +8 -5
  227. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  228. package/dist/data/runtime/model-capabilities.d.ts +6 -1
  229. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  230. package/dist/data/runtime/model-capabilities.js +8 -5
  231. package/dist/data/runtime/model-capabilities.js.map +1 -1
  232. package/dist/data/runtime/runtime-mode.cjs +17 -0
  233. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  234. package/dist/data/runtime/runtime-mode.d.ts +6 -0
  235. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  236. package/dist/data/runtime/runtime-mode.js +17 -0
  237. package/dist/data/runtime/runtime-mode.js.map +1 -1
  238. package/dist/data/useDebugAction.cjs +29 -0
  239. package/dist/data/useDebugAction.cjs.map +1 -0
  240. package/dist/data/useDebugAction.d.ts +16 -0
  241. package/dist/data/useDebugAction.d.ts.map +1 -0
  242. package/dist/data/useDebugAction.js +29 -0
  243. package/dist/data/useDebugAction.js.map +1 -0
  244. package/dist/data/version-info.cjs +3 -3
  245. package/dist/data/version-info.js +3 -3
  246. package/dist/data.cjs +16 -8
  247. package/dist/data.cjs.map +1 -1
  248. package/dist/data.d.ts +3 -2
  249. package/dist/data.d.ts.map +1 -1
  250. package/dist/data.js +16 -8
  251. package/dist/devtools/DebugConsole.cjs +138 -0
  252. package/dist/devtools/DebugConsole.cjs.map +1 -0
  253. package/dist/devtools/DebugConsole.d.ts +23 -0
  254. package/dist/devtools/DebugConsole.d.ts.map +1 -0
  255. package/dist/devtools/DebugConsole.js +138 -0
  256. package/dist/devtools/DebugConsole.js.map +1 -0
  257. package/dist/devtools/DebugConsoleButton.cjs +59 -0
  258. package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
  259. package/dist/devtools/DebugConsoleButton.d.ts +20 -0
  260. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
  261. package/dist/devtools/DebugConsoleButton.js +59 -0
  262. package/dist/devtools/DebugConsoleButton.js.map +1 -0
  263. package/dist/devtools/DebugConsoleDock.cjs +112 -0
  264. package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
  265. package/dist/devtools/DebugConsoleDock.d.ts +26 -0
  266. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
  267. package/dist/devtools/DebugConsoleDock.js +112 -0
  268. package/dist/devtools/DebugConsoleDock.js.map +1 -0
  269. package/dist/devtools/ExecutionDetail.cjs +135 -0
  270. package/dist/devtools/ExecutionDetail.cjs.map +1 -0
  271. package/dist/devtools/ExecutionDetail.d.ts +19 -0
  272. package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
  273. package/dist/devtools/ExecutionDetail.js +135 -0
  274. package/dist/devtools/ExecutionDetail.js.map +1 -0
  275. package/dist/devtools/debugClient.cjs +172 -0
  276. package/dist/devtools/debugClient.cjs.map +1 -0
  277. package/dist/devtools/debugClient.d.ts +98 -0
  278. package/dist/devtools/debugClient.d.ts.map +1 -0
  279. package/dist/devtools/debugClient.js +172 -0
  280. package/dist/devtools/debugClient.js.map +1 -0
  281. package/dist/devtools/debugStore.cjs +115 -0
  282. package/dist/devtools/debugStore.cjs.map +1 -0
  283. package/dist/devtools/debugStore.d.ts +83 -0
  284. package/dist/devtools/debugStore.d.ts.map +1 -0
  285. package/dist/devtools/debugStore.js +115 -0
  286. package/dist/devtools/debugStore.js.map +1 -0
  287. package/dist/devtools/dockState.cjs +51 -0
  288. package/dist/devtools/dockState.cjs.map +1 -0
  289. package/dist/devtools/dockState.d.ts +31 -0
  290. package/dist/devtools/dockState.d.ts.map +1 -0
  291. package/dist/devtools/dockState.js +51 -0
  292. package/dist/devtools/dockState.js.map +1 -0
  293. package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
  294. package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
  295. package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
  296. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
  297. package/dist/devtools/tabs/ConsoleTab.js +36 -0
  298. package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
  299. package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
  300. package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
  301. package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
  302. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
  303. package/dist/devtools/tabs/InspectionCaches.js +150 -0
  304. package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
  305. package/dist/devtools/tabs/InspectionTab.cjs +316 -0
  306. package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
  307. package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
  308. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
  309. package/dist/devtools/tabs/InspectionTab.js +316 -0
  310. package/dist/devtools/tabs/InspectionTab.js.map +1 -0
  311. package/dist/devtools/tabs/NetworkTab.cjs +91 -0
  312. package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
  313. package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
  314. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
  315. package/dist/devtools/tabs/NetworkTab.js +91 -0
  316. package/dist/devtools/tabs/NetworkTab.js.map +1 -0
  317. package/dist/devtools/tabs/QueriesTab.cjs +85 -0
  318. package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
  319. package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
  320. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
  321. package/dist/devtools/tabs/QueriesTab.js +85 -0
  322. package/dist/devtools/tabs/QueriesTab.js.map +1 -0
  323. package/dist/devtools/types.cjs +26 -0
  324. package/dist/devtools/types.cjs.map +1 -0
  325. package/dist/devtools/types.d.ts +235 -0
  326. package/dist/devtools/types.d.ts.map +1 -0
  327. package/dist/devtools/types.js +26 -0
  328. package/dist/devtools/types.js.map +1 -0
  329. package/dist/devtools/useDebugStream.cjs +46 -0
  330. package/dist/devtools/useDebugStream.cjs.map +1 -0
  331. package/dist/devtools/useDebugStream.d.ts +23 -0
  332. package/dist/devtools/useDebugStream.d.ts.map +1 -0
  333. package/dist/devtools/useDebugStream.js +46 -0
  334. package/dist/devtools/useDebugStream.js.map +1 -0
  335. package/dist/devtools.cjs +51 -0
  336. package/dist/devtools.cjs.map +1 -0
  337. package/dist/devtools.d.ts +37 -0
  338. package/dist/devtools.d.ts.map +1 -0
  339. package/dist/devtools.js +51 -0
  340. package/dist/devtools.js.map +1 -0
  341. package/dist/icons/components/UiOpenScad.cjs +10 -0
  342. package/dist/icons/components/UiOpenScad.cjs.map +1 -0
  343. package/dist/icons/components/UiOpenScad.d.ts +9 -0
  344. package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
  345. package/dist/icons/components/UiOpenScad.js +10 -0
  346. package/dist/icons/components/UiOpenScad.js.map +1 -0
  347. package/dist/icons/index.d.ts +1 -0
  348. package/dist/icons/index.d.ts.map +1 -1
  349. package/dist/icons/registry.cjs +2 -0
  350. package/dist/icons/registry.cjs.map +1 -1
  351. package/dist/icons/registry.d.ts.map +1 -1
  352. package/dist/icons/registry.js +2 -0
  353. package/dist/icons/registry.js.map +1 -1
  354. package/dist/icons.cjs +2 -0
  355. package/dist/icons.cjs.map +1 -1
  356. package/dist/icons.js +2 -0
  357. package/dist/icons.js.map +1 -1
  358. package/dist/index.cjs +20 -8
  359. package/dist/index.cjs.map +1 -1
  360. package/dist/index.js +20 -8
  361. package/dist/index.js.map +1 -1
  362. package/dist/layout/AppShell.cjs +15 -10
  363. package/dist/layout/AppShell.cjs.map +1 -1
  364. package/dist/layout/AppShell.d.ts +11 -0
  365. package/dist/layout/AppShell.d.ts.map +1 -1
  366. package/dist/layout/AppShell.js +15 -10
  367. package/dist/layout/AppShell.js.map +1 -1
  368. package/dist/layout/AppShell.nav.cjs +170 -49
  369. package/dist/layout/AppShell.nav.cjs.map +1 -1
  370. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  371. package/dist/layout/AppShell.nav.js +170 -49
  372. package/dist/layout/AppShell.nav.js.map +1 -1
  373. package/dist/overlay/CellActions.cjs +18 -124
  374. package/dist/overlay/CellActions.cjs.map +1 -1
  375. package/dist/overlay/CellActions.d.ts +1 -1
  376. package/dist/overlay/CellActions.d.ts.map +1 -1
  377. package/dist/overlay/CellActions.js +18 -124
  378. package/dist/overlay/CellActions.js.map +1 -1
  379. package/dist/overlay/ContextMenu.cjs +144 -0
  380. package/dist/overlay/ContextMenu.cjs.map +1 -0
  381. package/dist/overlay/ContextMenu.d.ts +8 -0
  382. package/dist/overlay/ContextMenu.d.ts.map +1 -0
  383. package/dist/overlay/ContextMenu.js +144 -0
  384. package/dist/overlay/ContextMenu.js.map +1 -0
  385. package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
  386. package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
  387. package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
  388. package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
  389. package/dist/profiles/connections/connectionBrowserModel.js +14 -65
  390. package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
  391. package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
  392. package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
  393. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
  394. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  395. package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
  396. package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
  397. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
  398. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
  399. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
  400. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
  401. package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
  402. package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
  403. package/dist/profiles/connections/index.d.ts +1 -0
  404. package/dist/profiles/connections/index.d.ts.map +1 -1
  405. package/dist/profiles/connections/inspectionStatus.cjs +44 -0
  406. package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
  407. package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
  408. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
  409. package/dist/profiles/connections/inspectionStatus.js +44 -0
  410. package/dist/profiles/connections/inspectionStatus.js.map +1 -0
  411. package/dist/profiles/connections/useInspection.cjs +123 -0
  412. package/dist/profiles/connections/useInspection.cjs.map +1 -0
  413. package/dist/profiles/connections/useInspection.d.ts +35 -0
  414. package/dist/profiles/connections/useInspection.d.ts.map +1 -0
  415. package/dist/profiles/connections/useInspection.js +123 -0
  416. package/dist/profiles/connections/useInspection.js.map +1 -0
  417. package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
  418. package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
  419. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  420. package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
  421. package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
  422. package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
  423. package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
  424. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  425. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  426. package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
  427. package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
  428. package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
  429. package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
  430. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  431. package/dist/profiles/fields/profileFieldEditor.js +137 -22
  432. package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
  433. package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
  434. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  435. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
  436. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  437. package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
  438. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  439. package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
  440. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  441. package/dist/profiles/fields/profileFieldIcons.js +6 -3
  442. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  443. package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
  444. package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
  445. package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
  446. package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
  447. package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
  448. package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
  449. package/dist/profiles/query/profileSamplePayload.cjs +6 -4
  450. package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
  451. package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
  452. package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
  453. package/dist/profiles/query/profileSamplePayload.js +6 -4
  454. package/dist/profiles/query/profileSamplePayload.js.map +1 -1
  455. package/dist/profiles/query/profileSampleResult.cjs +26 -0
  456. package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
  457. package/dist/profiles/query/profileSampleResult.d.ts +11 -0
  458. package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
  459. package/dist/profiles/query/profileSampleResult.js +26 -0
  460. package/dist/profiles/query/profileSampleResult.js.map +1 -0
  461. package/dist/profiles/query/queryTargetPicker.cjs +5 -3
  462. package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
  463. package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
  464. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  465. package/dist/profiles/query/queryTargetPicker.js +5 -3
  466. package/dist/profiles/query/queryTargetPicker.js.map +1 -1
  467. package/dist/profiles/wizard/profileWizard.cjs +14 -5
  468. package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
  469. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  470. package/dist/profiles/wizard/profileWizard.js +15 -6
  471. package/dist/profiles/wizard/profileWizard.js.map +1 -1
  472. package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
  473. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  474. package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
  475. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  476. package/dist/profiles/wizard/profileWizardModel.js +35 -6
  477. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  478. package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
  479. package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
  480. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  481. package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
  482. package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
  483. package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
  484. package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
  485. package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
  486. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  487. package/dist/profiles/wizard/profileWizardSteps.js +33 -2
  488. package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
  489. package/dist/profiles.cjs +8 -2
  490. package/dist/profiles.cjs.map +1 -1
  491. package/dist/profiles.js +10 -4
  492. package/dist/profiles.js.map +1 -1
  493. package/dist/rpc/FilterForm.cjs +21 -237
  494. package/dist/rpc/FilterForm.cjs.map +1 -1
  495. package/dist/rpc/FilterForm.d.ts +3 -1
  496. package/dist/rpc/FilterForm.d.ts.map +1 -1
  497. package/dist/rpc/FilterForm.js +21 -237
  498. package/dist/rpc/FilterForm.js.map +1 -1
  499. package/dist/rpc/FilterFormFields.cjs +240 -0
  500. package/dist/rpc/FilterFormFields.cjs.map +1 -0
  501. package/dist/rpc/FilterFormFields.d.ts +12 -0
  502. package/dist/rpc/FilterFormFields.d.ts.map +1 -0
  503. package/dist/rpc/FilterFormFields.js +240 -0
  504. package/dist/rpc/FilterFormFields.js.map +1 -0
  505. package/dist/rpc/router.cjs +3 -2
  506. package/dist/rpc/router.cjs.map +1 -1
  507. package/dist/rpc/router.d.ts.map +1 -1
  508. package/dist/rpc/router.js +3 -2
  509. package/dist/rpc/router.js.map +1 -1
  510. package/dist/rpc/types.cjs.map +1 -1
  511. package/dist/rpc/types.d.ts +3 -1
  512. package/dist/rpc/types.d.ts.map +1 -1
  513. package/dist/rpc/types.js.map +1 -1
  514. package/dist/styles.css +1 -1
  515. package/package.json +6 -1
  516. package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
  517. package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
  518. package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
  519. package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
  520. package/dist/data/query-info/QueryInfoDialog.js +0 -106
  521. package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
  522. package/dist/data/query-info/index.d.ts +0 -4
  523. package/dist/data/query-info/index.d.ts.map +0 -1
  524. package/dist/data/query-info/queryInfo.cjs +0 -42
  525. package/dist/data/query-info/queryInfo.cjs.map +0 -1
  526. package/dist/data/query-info/queryInfo.d.ts +0 -45
  527. package/dist/data/query-info/queryInfo.d.ts.map +0 -1
  528. package/dist/data/query-info/queryInfo.js +0 -42
  529. package/dist/data/query-info/queryInfo.js.map +0 -1
  530. package/dist/data/query-info/useQueryInfo.cjs +0 -48
  531. package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
  532. package/dist/data/query-info/useQueryInfo.d.ts +0 -26
  533. package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
  534. package/dist/data/query-info/useQueryInfo.js +0 -48
  535. package/dist/data/query-info/useQueryInfo.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"profileWizardQueryStep.cjs","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n useInspection,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport { defaultParamValues, paramRoles } from \"../elasticsearch/esQueryBuilderForm\";\n\ntype SampleResult = QueryBrowserResult & {\n columns: ProfileColumn[];\n renderedQuery: string;\n};\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: String(liveOptions.index ?? providerOptions.index ?? \"\"),\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">Explore the source, then run a sample</p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) => onDraftChange(withProfileLimits(draft, limits))}\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<SampleResult>(profileApiPath(\"profile/sample\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(profileSamplePayload(nextDraft, request)),\n });\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return result;\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["browserBaseUrl","useQuery","fetchJSON","useMemo","_a","useState","supportsQueryBuilder","useEffect","useInspection","mergeProviderOptions","useCallback","jsx","profileWizardErrorMessage","jsxs","ConnectionQueryWorkspace","queryBrowserOptionsSchema","defaultParamValues","paramRoles","withProfileLimits","profileApiPath","profileSamplePayload"],"mappings":";;;;;;;;;;;;AA6CO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;;AAC9B,QAAM,UAAUA,uBAAAA,eAAe,YAAY;AAC3C,QAAM,aAAaC,WAAAA,SAAS;AAAA,IAC1B,UAAU,CAAC,6BAA6B,YAAY;AAAA,IACpD,SAAS,MAAMC,uBAAAA,UAA6B,OAAO;AAAA,IACnD,OAAO;AAAA,EAAA,CACR;AACD,QAAM,kBAAkBC,MAAAA;AAAAA,IACtB,MAAA;;AAAO,eAAE,IAAGC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,QAAA;AAAA;AAAA,IAC5B,EAAC,WAAM,aAAN,mBAAgB,OAAO;AAAA,EAAA;AAE1B,QAAM,CAAC,OAAO,QAAQ,IAAIC,MAAAA,SAAS,MAAM,SAAS,EAAE;AACpD,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,eAAe;AAC9D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA;AAAAA,IAC1C,CAAA;AAAA,EAAC;AAEH,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,MAAAA,SAAS,EAAE;AAK3D,QAAM,cACJ,WAAW,SAAS,UAAa,CAACC,8BAAAA,qBAAqB,WAAW,IAAI;AACxEC,QAAAA,UAAU,MAAM;;AACd,QAAI,eAAe,CAAC,WAASH,MAAA,WAAW,SAAX,gBAAAA,IAAiB,eAAc;AAC1D,eAAS,WAAW,KAAK,YAAY;AACrC,oBAAc,EAAE,GAAG,OAAO,OAAO,WAAW,KAAK,cAAc;AAAA,IACjE;AAAA,EACF,GAAG,EAAC,gBAAW,SAAX,mBAAiB,cAAc,OAAO,eAAe,OAAO,WAAW,CAAC;AAE5E,QAAM,qBAAqB,YAAY,cAAc,gBAAgB;AACrE,QAAM,aAAaI,uBAAAA,cAAc;AAAA,IAC/B,UAAU;AAAA,IACV,IAAI;AAAA,IACJ;AAAA,IACA,WAAS,gBAAW,SAAX,mBAAiB,aAAY;AAAA,IACtC,UAAU;AAAA,IACV,kBAAkB,OAAO,gBAAgB,YAAY,EAAE;AAAA,IACvD,QAAQ,OAAO,YAAY,SAAS,gBAAgB,SAAS,EAAE;AAAA,IAC/D,GAAI,OAAO,uBAAuB,WAC9B,EAAE,YAAY,mBAAA,IACd,CAAA;AAAA,EAAC,CACN;AACD,QAAM,iBAAiBL,MAAAA;AAAAA,IACrB,MAAA;;AACEM,yDAAqB;AAAA,QACnB,QAAQ;AAAA,WACNL,MAAA,WAAW,SAAX,gBAAAA,IAAiB;AAAA,UACjB;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAU,WAAW;AAAA,QACrB,gBAAgB;AAAA,MAAA,CACjB;AAAA;AAAA,IACH;AAAA,MACE;AAAA,OACA,gBAAW,SAAX,mBAAiB;AAAA,MACjB,WAAW;AAAA,MACX;AAAA,IAAA;AAAA,EACF;AAEF,QAAM,mBAAmBM,MAAAA;AAAAA,IACvB,CAAC,YACCD,uBAAAA,qBAAqB;AAAA,MACnB,QAAQ,CAAC,iBAAiB,gBAAgB,OAAO;AAAA,MACjD,UAAU,WAAW;AAAA,IAAA,CACtB;AAAA,IACH,CAAC,gBAAgB,WAAW,aAAa,eAAe;AAAA,EAAA;AAG1D,MAAI,WAAW,WAAW;AACxB,WAAOE,2BAAAA,IAAC,oBAAiB,UAAA,8BAAA,CAA2B;AAAA,EACtD;AACA,MAAI,WAAW,SAAS;AACtB,WACEA,2BAAAA,IAAC,kBAAA,EAAiB,OAAK,MACpB,UAAAC,mBAAAA;AAAAA,MACC,WAAW;AAAA,MACX;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACA,MAAI,CAAC,WAAW,MAAM;AACpB,WACED,2BAAAA,IAAC,oBAAiB,UAAA,yDAAA,CAElB;AAAA,EAEJ;AAEA,SACEE,2BAAAA,KAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,mFACb,UAAA;AAAA,MAAAA,gCAAC,OAAA,EACC,UAAA;AAAA,QAAAF,2BAAAA,IAAC,KAAA,EAAE,WAAU,uBAAsB,UAAA,yCAAqC;AAAA,QACxEA,2BAAAA,IAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,wDAAA,CAE7C;AAAA,MAAA,GACF;AAAA,MACAA,2BAAAA,IAAC,QAAA,EAAK,WAAU,2FACb,UAAA,WAAW,SACR,GAAG,WAAW,MAAM,uBACpB,gBAAA,CACN;AAAA,IAAA,GACF;AAAA,IACAA,2BAAAA;AAAAA,MAACG,yBAAAA;AAAAA,MAAA;AAAA,QACC,IAAI,kBAAkB,YAAY;AAAA,QAClC,OAAM;AAAA,QACN,YAAY,WAAW;AAAA,QACvB;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,QACT,eAAeC,uBAAAA,0BAA0B,WAAW,IAAI;AAAA,QACxD,QAAQ,gBAAgB;AAAA,QACxB,gBAAgB,CAAC,eAAe;AAG9B,gBAAM,UAAU,iBAAiB,WAAW;AAC5C,cAAI,WAAW,OAAQ,SAAQ,SAAS,WAAW;AAAA,sBACvC,QAAQ;AACpB,mBAAS,WAAW,KAAK;AACzB,wBAAc;AAAA,YACZ,GAAG;AAAA,YACH,OAAO,WAAW;AAAA,YAClB,UAAU,EAAE,GAAG,MAAM,UAAU,QAAA;AAAA,UAAQ,CACxC;AAAA,QACH;AAAA,QACA,QAAQ,MAAM,UAAU,CAAA;AAAA,QACxB,sBAAsB,CAAC,SAAS;AAC9B,gBAAM,UAAU,iBAAiB,WAAW;AAC5C,kBAAQ,SAAS,KAAK;AACtB,mBAAS,EAAE;AACX,wBAAc;AAAA,YACZ,GAAG;AAAA,YACH,OAAO;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,UAAU,EAAE,GAAG,MAAM,UAAU,QAAA;AAAA,UAAQ,CACxC;AAAA,QACH;AAAA,QACA,aAAaC,mBAAAA,mBAAmB,MAAM,MAAM;AAAA,QAC5C,YAAYC,mBAAAA,WAAW,MAAM,MAAM;AAAA,QAClC,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,QAC/C,gBAAgB,CAAC,WAAW,cAAcC,mBAAAA,kBAAkB,OAAO,MAAM,CAAC;AAAA,QAC1E,gBAAgB;AAAA,QAChB,WAAU;AAAA,QACV,eAAe,CAAC,cAAc;AAC5B,mBAAS,SAAS;AAClB,wBAAc,EAAE,GAAG,OAAO,OAAO,WAAW;AAAA,QAC9C;AAAA,QACA,iBAAiB,CAAC,YAAY;AAC5B,yBAAe,OAAO;AACtB,wBAAc;AAAA,YACZ,GAAG;AAAA,YACH,UAAU;AAAA,cACR,GAAG,MAAM;AAAA,cACT,SAAS,iBAAiB,OAAO;AAAA,YAAA;AAAA,UACnC,CACD;AAAA,QACH;AAAA,QACA,iBAAiB,CAAC,SAAS;AACzB,gBAAM,YAAY,KAAK,SAAS;AAChC,gBAAM,cAAc,KAAK,WAAW,CAAA;AACpC,mBAAS,SAAS;AAClB,4BAAkB,WAAW;AAC7B,yBAAe,EAAE,GAAG,gBAAgB,GAAG,aAAa;AACpD,wBAAc;AAAA,YACZ,GAAG;AAAA,YACH,OAAO;AAAA,YACP,UAAU;AAAA,cACR,GAAG,MAAM;AAAA,cACT,SAAS,iBAAiB,EAAE,GAAG,gBAAgB,GAAG,aAAa;AAAA,YAAA;AAAA,UACjE,CACD;AAAA,QACH;AAAA,QACA,SAAS,OAAO,YAAY;AAC1B,gBAAM,YAAY;AAAA,YAChB,GAAG;AAAA,YACH,OAAO,QAAQ;AAAA,YACf,UAAU;AAAA,cACR,GAAG,MAAM;AAAA,cACT,SAAS,iBAAiB,QAAQ,OAAO;AAAA,YAAA;AAAA,UAC3C;AAEF,wBAAc,SAAS;AACvB,gBAAM,SAAS,MAAMhB,uBAAAA,UAAwBiB,WAAAA,eAAe,gBAAgB,GAAG;AAAA,YAC7E,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,YAC3B,MAAM,KAAK,UAAUC,qBAAAA,qBAAqB,WAAW,OAAO,CAAC;AAAA,UAAA,CAC9D;AACD,mBAAS;AAAA,YACP,SAAS,OAAO,WAAW,CAAA;AAAA,YAC3B,MAAM,OAAO,QAAQ,CAAA;AAAA,YACrB,aAAa;AAAA,UAAA,CACd;AACD,iBAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA,QAAQ;AACV,GAGG;AACD,SACET,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,uFAAuF,QAAQ,2CAA2C,uBAAuB;AAAA,MAE3K;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
1
+ {"version":3,"file":"profileWizardQueryStep.cjs","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { debugCaptureHeaders } from \"../../data/debugConsoleSignal\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { useInspection } from \"../connections/useInspection\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport { lookupProfileSampleFilterValues } from \"../query/profileSampleFilterLookup\";\nimport {\n profileSampleFilterColumns,\n profileSampleQueryResult,\n type ProfileSampleResponse,\n} from \"../query/profileSampleResult\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport {\n defaultParamValues,\n paramRoles,\n} from \"../elasticsearch/esQueryBuilderForm\";\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n const filterColumns = useRef<ProfileColumn[]>([]);\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind =\n liveOptions.targetKind ?? providerOptions.targetKind;\n const targetOption =\n descriptor.data?.target?.kind === \"index\"\n ? descriptor.data.target.option\n : \"\";\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: targetOption\n ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? \"\")\n : \"\",\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">\n Explore the source, then run a sample\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) =>\n onDraftChange(withProfileLimits(draft, limits))\n }\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n lookupFilterValues={(request) =>\n lookupProfileSampleFilterValues({\n draft: {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n },\n params: defaultParamValues(draft.params),\n filterColumns: filterColumns.current,\n request,\n })\n }\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<ProfileSampleResponse>(\n profileApiPath(\"profile/sample\"),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...debugCaptureHeaders(),\n },\n body: JSON.stringify(\n profileSamplePayload({\n draft: nextDraft,\n request,\n params: defaultParamValues(nextDraft.params),\n filterColumns: filterColumns.current,\n }),\n ),\n },\n );\n filterColumns.current = profileSampleFilterColumns(result);\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return profileSampleQueryResult(result);\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["browserBaseUrl","useQuery","fetchJSON","useMemo","_a","useState","useRef","supportsQueryBuilder","useEffect","useInspection","mergeProviderOptions","useCallback","jsx","profileWizardErrorMessage","jsxs","ConnectionQueryWorkspace","queryBrowserOptionsSchema","defaultParamValues","paramRoles","withProfileLimits","lookupProfileSampleFilterValues","profileApiPath","debugCaptureHeaders","profileSamplePayload","profileSampleFilterColumns","profileSampleQueryResult"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"profileWizardQueryStep.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAS9B;gFACgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,KAAK,EACL,UAAU,EACV,aAAa,EACb,QAAQ,GACT,EAAE,2BAA2B,2CAyM7B"}
1
+ {"version":3,"file":"profileWizardQueryStep.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAO9B;gFACgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,KAAK,EACL,UAAU,EACV,aAAa,EACb,QAAQ,GACT,EAAE,2BAA2B,2CAkP7B"}
@@ -1,13 +1,17 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useQuery } from "@tanstack/react-query";
3
- import { useMemo, useState, useEffect, useCallback } from "react";
4
- import { browserBaseUrl, fetchJSON, useInspection, mergeProviderOptions, queryBrowserOptionsSchema } from "../connections/connectionBrowserModel.js";
3
+ import { debugCaptureHeaders } from "../../data/debugConsoleSignal.js";
4
+ import { useMemo, useState, useRef, useEffect, useCallback } from "react";
5
+ import { browserBaseUrl, fetchJSON, mergeProviderOptions, queryBrowserOptionsSchema } from "../connections/connectionBrowserModel.js";
5
6
  import { ConnectionQueryWorkspace } from "../connections/connectionQueryWorkspace.js";
7
+ import { useInspection } from "../connections/useInspection.js";
6
8
  import { profileApiPath } from "../profileApi.js";
7
9
  import { profileSamplePayload } from "../query/profileSamplePayload.js";
10
+ import { lookupProfileSampleFilterValues } from "../query/profileSampleFilterLookup.js";
11
+ import { profileSampleFilterColumns, profileSampleQueryResult } from "../query/profileSampleResult.js";
8
12
  import { profileWizardErrorMessage, withProfileLimits } from "./profileWizardModel.js";
9
13
  import { supportsQueryBuilder } from "../connections/connectionQueryWorkspaceModel.js";
10
- import { paramRoles, defaultParamValues } from "../elasticsearch/esQueryBuilderForm.js";
14
+ import { defaultParamValues, paramRoles } from "../elasticsearch/esQueryBuilderForm.js";
11
15
  function ProfileWizardQueryStep({
12
16
  connectionID,
13
17
  draft,
@@ -15,7 +19,7 @@ function ProfileWizardQueryStep({
15
19
  onDraftChange,
16
20
  onSample
17
21
  }) {
18
- var _a, _b, _c, _d;
22
+ var _a, _b, _c, _d, _e, _f;
19
23
  const baseUrl = browserBaseUrl(connectionID);
20
24
  const descriptor = useQuery({
21
25
  queryKey: ["profile-wizard-descriptor", connectionID],
@@ -35,6 +39,7 @@ function ProfileWizardQueryStep({
35
39
  {}
36
40
  );
37
41
  const [selectedDatabase, setSelectedDatabase] = useState("");
42
+ const filterColumns = useRef([]);
38
43
  const rawArtifact = descriptor.data !== void 0 && !supportsQueryBuilder(descriptor.data);
39
44
  useEffect(() => {
40
45
  var _a2;
@@ -44,14 +49,15 @@ function ProfileWizardQueryStep({
44
49
  }
45
50
  }, [(_b = descriptor.data) == null ? void 0 : _b.defaultQuery, draft, onDraftChange, query, rawArtifact]);
46
51
  const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;
52
+ const targetOption = ((_d = (_c = descriptor.data) == null ? void 0 : _c.target) == null ? void 0 : _d.kind) === "index" ? descriptor.data.target.option : "";
47
53
  const inspection = useInspection({
48
54
  cacheKey: "profile-wizard-inspection",
49
55
  id: connectionID,
50
56
  baseUrl,
51
- enabled: ((_c = descriptor.data) == null ? void 0 : _c.catalog) === true,
57
+ enabled: ((_e = descriptor.data) == null ? void 0 : _e.catalog) === true,
52
58
  database: selectedDatabase,
53
59
  fallbackDatabase: String(providerOptions.database ?? ""),
54
- target: String(liveOptions.index ?? providerOptions.index ?? ""),
60
+ target: targetOption ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? "") : "",
55
61
  ...typeof explicitTargetKind === "string" ? { targetKind: explicitTargetKind } : {}
56
62
  });
57
63
  const browserOptions = useMemo(
@@ -69,7 +75,7 @@ function ProfileWizardQueryStep({
69
75
  },
70
76
  [
71
77
  catalogOptions,
72
- (_d = descriptor.data) == null ? void 0 : _d.initialOptions,
78
+ (_f = descriptor.data) == null ? void 0 : _f.initialOptions,
73
79
  inspection.sqlDatabase,
74
80
  providerOptions
75
81
  ]
@@ -171,6 +177,19 @@ function ProfileWizardQueryStep({
171
177
  }
172
178
  });
173
179
  },
180
+ lookupFilterValues: (request) => lookupProfileSampleFilterValues({
181
+ draft: {
182
+ ...draft,
183
+ query: request.query,
184
+ provider: {
185
+ ...draft.provider,
186
+ options: effectiveOptions(request.options)
187
+ }
188
+ },
189
+ params: defaultParamValues(draft.params),
190
+ filterColumns: filterColumns.current,
191
+ request
192
+ }),
174
193
  execute: async (request) => {
175
194
  const nextDraft = {
176
195
  ...draft,
@@ -181,17 +200,31 @@ function ProfileWizardQueryStep({
181
200
  }
182
201
  };
183
202
  onDraftChange(nextDraft);
184
- const result = await fetchJSON(profileApiPath("profile/sample"), {
185
- method: "POST",
186
- headers: { "Content-Type": "application/json" },
187
- body: JSON.stringify(profileSamplePayload(nextDraft, request))
188
- });
203
+ const result = await fetchJSON(
204
+ profileApiPath("profile/sample"),
205
+ {
206
+ method: "POST",
207
+ headers: {
208
+ "Content-Type": "application/json",
209
+ ...debugCaptureHeaders()
210
+ },
211
+ body: JSON.stringify(
212
+ profileSamplePayload({
213
+ draft: nextDraft,
214
+ request,
215
+ params: defaultParamValues(nextDraft.params),
216
+ filterColumns: filterColumns.current
217
+ })
218
+ )
219
+ }
220
+ );
221
+ filterColumns.current = profileSampleFilterColumns(result);
189
222
  onSample({
190
223
  columns: result.columns ?? [],
191
224
  rows: result.rows ?? [],
192
225
  sourceDraft: nextDraft
193
226
  });
194
- return result;
227
+ return profileSampleQueryResult(result);
195
228
  }
196
229
  }
197
230
  )
@@ -1 +1 @@
1
- {"version":3,"file":"profileWizardQueryStep.js","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n useInspection,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport { defaultParamValues, paramRoles } from \"../elasticsearch/esQueryBuilderForm\";\n\ntype SampleResult = QueryBrowserResult & {\n columns: ProfileColumn[];\n renderedQuery: string;\n};\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: String(liveOptions.index ?? providerOptions.index ?? \"\"),\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">Explore the source, then run a sample</p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) => onDraftChange(withProfileLimits(draft, limits))}\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<SampleResult>(profileApiPath(\"profile/sample\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(profileSamplePayload(nextDraft, request)),\n });\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return result;\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"profileWizardQueryStep.js","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { debugCaptureHeaders } from \"../../data/debugConsoleSignal\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { useInspection } from \"../connections/useInspection\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport { lookupProfileSampleFilterValues } from \"../query/profileSampleFilterLookup\";\nimport {\n profileSampleFilterColumns,\n profileSampleQueryResult,\n type ProfileSampleResponse,\n} from \"../query/profileSampleResult\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport {\n defaultParamValues,\n paramRoles,\n} from \"../elasticsearch/esQueryBuilderForm\";\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n const filterColumns = useRef<ProfileColumn[]>([]);\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind =\n liveOptions.targetKind ?? providerOptions.targetKind;\n const targetOption =\n descriptor.data?.target?.kind === \"index\"\n ? descriptor.data.target.option\n : \"\";\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: targetOption\n ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? \"\")\n : \"\",\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">\n Explore the source, then run a sample\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) =>\n onDraftChange(withProfileLimits(draft, limits))\n }\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n lookupFilterValues={(request) =>\n lookupProfileSampleFilterValues({\n draft: {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n },\n params: defaultParamValues(draft.params),\n filterColumns: filterColumns.current,\n request,\n })\n }\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<ProfileSampleResponse>(\n profileApiPath(\"profile/sample\"),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...debugCaptureHeaders(),\n },\n body: JSON.stringify(\n profileSamplePayload({\n draft: nextDraft,\n request,\n params: defaultParamValues(nextDraft.params),\n filterColumns: filterColumns.current,\n }),\n ),\n },\n );\n filterColumns.current = profileSampleFilterColumns(result);\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return profileSampleQueryResult(result);\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
@@ -41,8 +41,10 @@ function SourceStep({
41
41
  selected,
42
42
  selectedType,
43
43
  onSearchChange,
44
- onSelect
44
+ onSelect,
45
+ onProviderTypeChange
45
46
  }) {
47
+ const selectedChoice = choices.find((choice) => choice.value === selected);
46
48
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]", children: [
47
49
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "overflow-hidden rounded-xl border bg-card", children: [
48
50
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "grid gap-1.5 text-sm font-medium", children: [
@@ -71,7 +73,13 @@ function SourceStep({
71
73
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-sm font-medium", children: choice.name }),
72
74
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs text-muted-foreground", children: "Saved connection" })
73
75
  ] }),
74
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-muted px-2.5 py-1 text-xs font-medium", children: choice.providerType })
76
+ /* @__PURE__ */ jsxRuntime.jsx(
77
+ "span",
78
+ {
79
+ className: `rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? "bg-destructive/10 text-destructive" : "bg-muted"}`,
80
+ children: choice.providerTypes.length === 0 ? `${choice.connectionType} · not queryable` : choice.providerTypes.join(" / ")
81
+ }
82
+ )
75
83
  ]
76
84
  },
77
85
  choice.value
@@ -93,6 +101,29 @@ function SourceStep({
93
101
  selected ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
94
102
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-3 font-semibold", children: profileWizardModel.profileConnectionID(selected) }),
95
103
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: selectedType }),
104
+ selectedChoice && selectedChoice.providerTypes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("p", { role: "alert", className: "mt-4 text-sm leading-6 text-destructive", children: [
105
+ "No query provider reads ",
106
+ selectedChoice.connectionType,
107
+ " ",
108
+ "connections, so this one cannot back a profile."
109
+ ] }) : null,
110
+ selectedChoice && selectedChoice.providerTypes.length > 1 ? (
111
+ // A connection type several providers can read is a real choice —
112
+ // a Google Cloud connection is queried very differently by Cloud
113
+ // Logging than by BigQuery — so it is asked rather than guessed.
114
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "mt-4 grid gap-1.5 text-sm font-medium", children: [
115
+ "Read it with",
116
+ /* @__PURE__ */ jsxRuntime.jsx(
117
+ "select",
118
+ {
119
+ value: selectedType,
120
+ className: "rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15",
121
+ onChange: (event) => onProviderTypeChange(event.target.value),
122
+ children: selectedChoice.providerTypes.map((type) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: type, children: type }, type))
123
+ }
124
+ )
125
+ ] })
126
+ ) : null,
96
127
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-5 text-sm leading-6 text-muted-foreground", children: "The next step loads this connection's catalog, query language, and sampling controls." })
97
128
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm leading-6 text-muted-foreground", children: "Choose a connection to begin. Connection credentials stay on the server and are never copied into the profile." })
98
129
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"profileWizardSteps.cjs","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { ProfileFieldManager } from \"../fields/profileFieldManager\";\nimport {\n profileConnectionID,\n profileWizardErrorMessage,\n profileWizardSteps,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\n\nexport type ConnectionChoice = {\n value: string;\n label: string;\n name: string;\n providerType: string;\n};\n\nexport function WizardProgress({\n stepIndex,\n onStepChange,\n}: {\n stepIndex: number;\n onStepChange: (index: number) => void;\n}) {\n return (\n <ol className=\"grid grid-cols-4 gap-2\" aria-label=\"Profile builder progress\">\n {profileWizardSteps.map((step, index) => (\n <li key={step.id}>\n <button\n type=\"button\"\n disabled={index > stepIndex}\n aria-current={index === stepIndex ? \"step\" : undefined}\n className={`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left ${index === stepIndex ? \"bg-primary/10 text-foreground\" : \"text-muted-foreground\"}`}\n onClick={() => onStepChange(index)}\n >\n <span\n className={`grid size-6 shrink-0 place-items-center rounded-full text-xs font-semibold ${index <= stepIndex ? \"bg-primary text-primary-foreground\" : \"bg-muted\"}`}\n >\n {index + 1}\n </span>\n <span className=\"hidden min-w-0 md:block\">\n <span className=\"block truncate text-xs font-medium\">{step.label}</span>\n <span className=\"block truncate text-[10px]\">{step.description}</span>\n </span>\n </button>\n </li>\n ))}\n </ol>\n );\n}\n\nexport function SourceStep({\n choices,\n loading,\n error,\n truncated,\n total,\n search,\n selected,\n selectedType,\n onSearchChange,\n onSelect,\n}: {\n choices: ConnectionChoice[];\n loading: boolean;\n error: unknown;\n truncated?: boolean;\n total?: number;\n search: string;\n selected: string;\n selectedType: string;\n onSearchChange: (search: string) => void;\n onSelect: (choice: ConnectionChoice) => void;\n}) {\n return (\n <div className=\"mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]\">\n <section className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"border-b p-4\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Find a saved connection\n <input\n type=\"search\"\n value={search}\n autoFocus\n placeholder=\"Search connections\"\n className=\"rounded-md border border-input bg-background px-3 py-2.5 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onSearchChange(event.target.value)}\n />\n </label>\n </div>\n <div className=\"max-h-[26rem] overflow-auto p-2\">\n {choices.map((choice) => (\n <button\n key={choice.value}\n type=\"button\"\n className={`flex w-full items-center justify-between rounded-lg border px-4 py-3 text-left transition-colors ${selected === choice.value ? \"border-primary bg-primary/8\" : \"border-transparent hover:bg-muted/60\"}`}\n onClick={() => onSelect(choice)}\n >\n <span>\n <span className=\"block text-sm font-medium\">{choice.name}</span>\n <span className=\"block text-xs text-muted-foreground\">\n Saved connection\n </span>\n </span>\n <span className=\"rounded-full bg-muted px-2.5 py-1 text-xs font-medium\">\n {choice.providerType}\n </span>\n </button>\n ))}\n {loading ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n Loading connections…\n </p>\n ) : null}\n {error ? (\n <p className=\"p-8 text-center text-sm text-destructive\">\n {profileWizardErrorMessage(error, \"Unable to load connections\")}\n </p>\n ) : null}\n {!loading && !error && choices.length === 0 ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n No saved connections match this search.\n </p>\n ) : null}\n </div>\n {truncated ? (\n <p className=\"border-t px-4 py-2 text-xs text-muted-foreground\">\n Showing the first {choices.length} of {total ?? \"many\"}. Search to narrow the list.\n </p>\n ) : null}\n </section>\n <aside className=\"rounded-xl border bg-muted/25 p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Selected source\n </p>\n {selected ? (\n <>\n <h3 className=\"mt-3 font-semibold\">{profileConnectionID(selected)}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{selectedType}</p>\n <p className=\"mt-5 text-sm leading-6 text-muted-foreground\">\n The next step loads this connection&apos;s catalog, query language,\n and sampling controls.\n </p>\n </>\n ) : (\n <p className=\"mt-3 text-sm leading-6 text-muted-foreground\">\n Choose a connection to begin. Connection credentials stay on the\n server and are never copied into the profile.\n </p>\n )}\n </aside>\n </div>\n );\n}\n\nexport function FieldsStep({\n draft,\n discovered,\n activeField,\n onDraftChange,\n onActiveFieldChange,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n activeField: string;\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onActiveFieldChange: (name: string) => void;\n}) {\n return (\n <div className=\"grid gap-5\">\n <section className=\"grid gap-4 rounded-xl border bg-muted/25 p-4 md:grid-cols-2\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Profile name <span className=\"text-destructive\">*</span>\n <input\n value={draft.profile ?? \"\"}\n placeholder=\"e.g. service-logs\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, profile: event.target.value })\n }\n />\n </label>\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Namespace <span className=\"font-normal text-muted-foreground\">Optional</span>\n <input\n value={draft.namespace ?? \"\"}\n placeholder=\"e.g. observability\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, namespace: event.target.value })\n }\n />\n </label>\n </section>\n <ProfileFieldManager\n discovered={discovered}\n configured={draft.columns ?? []}\n activeName={activeField}\n onConfiguredChange={(columns) => onDraftChange({ ...draft, columns })}\n onActiveNameChange={onActiveFieldChange}\n />\n </div>\n );\n}\n\nexport function ReviewStep({\n draft,\n discovered,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n}) {\n const connection = profileConnectionID(draft.provider?.connection ?? \"\");\n return (\n <div className=\"mx-auto grid max-w-5xl gap-4 lg:grid-cols-2\">\n <ReviewCard label=\"Profile\" value={draft.profile || \"Unnamed\"}>\n {draft.namespace ? `Namespace: ${draft.namespace}` : \"Default namespace\"}\n </ReviewCard>\n <ReviewCard label=\"Source\" value={connection || \"Not selected\"}>\n {draft.provider?.type || \"Unknown provider\"}\n </ReviewCard>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Fields\n </p>\n <h3 className=\"mt-1 font-semibold\">\n {draft.columns?.length ?? 0} of {discovered.length} included\n </h3>\n </div>\n <span className=\"rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary\">\n {draft.columns?.filter((field) => field.hidden).length ?? 0} hidden\n </span>\n </div>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {(draft.columns ?? []).slice(0, 16).map((field) => (\n <span\n key={field.name}\n className=\"rounded-md border bg-muted/30 px-2.5 py-1.5 font-mono text-xs\"\n >\n {field.label || field.name}\n <span className=\"ml-2 text-muted-foreground\">\n {field.type || \"auto\"}\n </span>\n </span>\n ))}\n {(draft.columns?.length ?? 0) > 16 ? (\n <span className=\"px-2 py-1.5 text-xs text-muted-foreground\">\n +{(draft.columns?.length ?? 0) - 16} more\n </span>\n ) : null}\n </div>\n </section>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Query\n </p>\n <pre className=\"mt-3 max-h-72 overflow-auto whitespace-pre-wrap rounded-lg bg-muted/50 p-4 font-mono text-xs leading-6\">\n {draft.query}\n </pre>\n </section>\n </div>\n );\n}\n\nfunction ReviewCard({\n label,\n value,\n children,\n}: {\n label: string;\n value: ReactNode;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n <h3 className=\"mt-2 text-lg font-semibold\">{value}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>\n </section>\n );\n}\n"],"names":["jsx","profileWizardSteps","jsxs","profileWizardErrorMessage","Fragment","profileConnectionID","ProfileFieldManager"],"mappings":"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"}
1
+ {"version":3,"file":"profileWizardSteps.cjs","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { ProfileFieldManager } from \"../fields/profileFieldManager\";\nimport {\n profileConnectionID,\n profileWizardErrorMessage,\n profileWizardSteps,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\n\nexport type ConnectionChoice = {\n value: string;\n label: string;\n name: string;\n /** The saved connection's own type, e.g. `aws`. */\n connectionType: string;\n /**\n * The query providers that can read it, most specific first — `aws` yields\n * `[\"cloudwatch\"]`. More than one is a genuine choice the reader has to make\n * (`google_cloud` is read by both `gcpcloudlogging` and `bigquery`); none\n * means no provider reads this connection type at all.\n */\n providerTypes: string[];\n};\n\nexport function WizardProgress({\n stepIndex,\n onStepChange,\n}: {\n stepIndex: number;\n onStepChange: (index: number) => void;\n}) {\n return (\n <ol className=\"grid grid-cols-4 gap-2\" aria-label=\"Profile builder progress\">\n {profileWizardSteps.map((step, index) => (\n <li key={step.id}>\n <button\n type=\"button\"\n disabled={index > stepIndex}\n aria-current={index === stepIndex ? \"step\" : undefined}\n className={`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left ${index === stepIndex ? \"bg-primary/10 text-foreground\" : \"text-muted-foreground\"}`}\n onClick={() => onStepChange(index)}\n >\n <span\n className={`grid size-6 shrink-0 place-items-center rounded-full text-xs font-semibold ${index <= stepIndex ? \"bg-primary text-primary-foreground\" : \"bg-muted\"}`}\n >\n {index + 1}\n </span>\n <span className=\"hidden min-w-0 md:block\">\n <span className=\"block truncate text-xs font-medium\">{step.label}</span>\n <span className=\"block truncate text-[10px]\">{step.description}</span>\n </span>\n </button>\n </li>\n ))}\n </ol>\n );\n}\n\nexport function SourceStep({\n choices,\n loading,\n error,\n truncated,\n total,\n search,\n selected,\n selectedType,\n onSearchChange,\n onSelect,\n onProviderTypeChange,\n}: {\n choices: ConnectionChoice[];\n loading: boolean;\n error: unknown;\n truncated?: boolean;\n total?: number;\n search: string;\n selected: string;\n selectedType: string;\n onSearchChange: (search: string) => void;\n onSelect: (choice: ConnectionChoice) => void;\n onProviderTypeChange: (type: string) => void;\n}) {\n const selectedChoice = choices.find((choice) => choice.value === selected);\n return (\n <div className=\"mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]\">\n <section className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"border-b p-4\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Find a saved connection\n <input\n type=\"search\"\n value={search}\n autoFocus\n placeholder=\"Search connections\"\n className=\"rounded-md border border-input bg-background px-3 py-2.5 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onSearchChange(event.target.value)}\n />\n </label>\n </div>\n <div className=\"max-h-[26rem] overflow-auto p-2\">\n {choices.map((choice) => (\n <button\n key={choice.value}\n type=\"button\"\n className={`flex w-full items-center justify-between rounded-lg border px-4 py-3 text-left transition-colors ${selected === choice.value ? \"border-primary bg-primary/8\" : \"border-transparent hover:bg-muted/60\"}`}\n onClick={() => onSelect(choice)}\n >\n <span>\n <span className=\"block text-sm font-medium\">{choice.name}</span>\n <span className=\"block text-xs text-muted-foreground\">\n Saved connection\n </span>\n </span>\n <span\n className={`rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? \"bg-destructive/10 text-destructive\" : \"bg-muted\"}`}\n >\n {choice.providerTypes.length === 0\n ? `${choice.connectionType} · not queryable`\n : choice.providerTypes.join(\" / \")}\n </span>\n </button>\n ))}\n {loading ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n Loading connections…\n </p>\n ) : null}\n {error ? (\n <p className=\"p-8 text-center text-sm text-destructive\">\n {profileWizardErrorMessage(error, \"Unable to load connections\")}\n </p>\n ) : null}\n {!loading && !error && choices.length === 0 ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n No saved connections match this search.\n </p>\n ) : null}\n </div>\n {truncated ? (\n <p className=\"border-t px-4 py-2 text-xs text-muted-foreground\">\n Showing the first {choices.length} of {total ?? \"many\"}. Search to narrow the list.\n </p>\n ) : null}\n </section>\n <aside className=\"rounded-xl border bg-muted/25 p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Selected source\n </p>\n {selected ? (\n <>\n <h3 className=\"mt-3 font-semibold\">{profileConnectionID(selected)}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{selectedType}</p>\n {selectedChoice && selectedChoice.providerTypes.length === 0 ? (\n <p role=\"alert\" className=\"mt-4 text-sm leading-6 text-destructive\">\n No query provider reads {selectedChoice.connectionType}{\" \"}\n connections, so this one cannot back a profile.\n </p>\n ) : null}\n {selectedChoice && selectedChoice.providerTypes.length > 1 ? (\n // A connection type several providers can read is a real choice —\n // a Google Cloud connection is queried very differently by Cloud\n // Logging than by BigQuery — so it is asked rather than guessed.\n <label className=\"mt-4 grid gap-1.5 text-sm font-medium\">\n Read it with\n <select\n value={selectedType}\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onProviderTypeChange(event.target.value)}\n >\n {selectedChoice.providerTypes.map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n <p className=\"mt-5 text-sm leading-6 text-muted-foreground\">\n The next step loads this connection&apos;s catalog, query language,\n and sampling controls.\n </p>\n </>\n ) : (\n <p className=\"mt-3 text-sm leading-6 text-muted-foreground\">\n Choose a connection to begin. Connection credentials stay on the\n server and are never copied into the profile.\n </p>\n )}\n </aside>\n </div>\n );\n}\n\nexport function FieldsStep({\n draft,\n discovered,\n activeField,\n onDraftChange,\n onActiveFieldChange,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n activeField: string;\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onActiveFieldChange: (name: string) => void;\n}) {\n return (\n <div className=\"grid gap-5\">\n <section className=\"grid gap-4 rounded-xl border bg-muted/25 p-4 md:grid-cols-2\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Profile name <span className=\"text-destructive\">*</span>\n <input\n value={draft.profile ?? \"\"}\n placeholder=\"e.g. service-logs\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, profile: event.target.value })\n }\n />\n </label>\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Namespace <span className=\"font-normal text-muted-foreground\">Optional</span>\n <input\n value={draft.namespace ?? \"\"}\n placeholder=\"e.g. observability\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, namespace: event.target.value })\n }\n />\n </label>\n </section>\n <ProfileFieldManager\n discovered={discovered}\n configured={draft.columns ?? []}\n activeName={activeField}\n onConfiguredChange={(columns) => onDraftChange({ ...draft, columns })}\n onActiveNameChange={onActiveFieldChange}\n />\n </div>\n );\n}\n\nexport function ReviewStep({\n draft,\n discovered,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n}) {\n const connection = profileConnectionID(draft.provider?.connection ?? \"\");\n return (\n <div className=\"mx-auto grid max-w-5xl gap-4 lg:grid-cols-2\">\n <ReviewCard label=\"Profile\" value={draft.profile || \"Unnamed\"}>\n {draft.namespace ? `Namespace: ${draft.namespace}` : \"Default namespace\"}\n </ReviewCard>\n <ReviewCard label=\"Source\" value={connection || \"Not selected\"}>\n {draft.provider?.type || \"Unknown provider\"}\n </ReviewCard>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Fields\n </p>\n <h3 className=\"mt-1 font-semibold\">\n {draft.columns?.length ?? 0} of {discovered.length} included\n </h3>\n </div>\n <span className=\"rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary\">\n {draft.columns?.filter((field) => field.hidden).length ?? 0} hidden\n </span>\n </div>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {(draft.columns ?? []).slice(0, 16).map((field) => (\n <span\n key={field.name}\n className=\"rounded-md border bg-muted/30 px-2.5 py-1.5 font-mono text-xs\"\n >\n {field.label || field.name}\n <span className=\"ml-2 text-muted-foreground\">\n {field.type || \"auto\"}\n </span>\n </span>\n ))}\n {(draft.columns?.length ?? 0) > 16 ? (\n <span className=\"px-2 py-1.5 text-xs text-muted-foreground\">\n +{(draft.columns?.length ?? 0) - 16} more\n </span>\n ) : null}\n </div>\n </section>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Query\n </p>\n <pre className=\"mt-3 max-h-72 overflow-auto whitespace-pre-wrap rounded-lg bg-muted/50 p-4 font-mono text-xs leading-6\">\n {draft.query}\n </pre>\n </section>\n </div>\n );\n}\n\nfunction ReviewCard({\n label,\n value,\n children,\n}: {\n label: string;\n value: ReactNode;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n <h3 className=\"mt-2 text-lg font-semibold\">{value}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>\n </section>\n );\n}\n"],"names":["jsx","profileWizardSteps","jsxs","profileWizardErrorMessage","Fragment","profileConnectionID","ProfileFieldManager"],"mappings":"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"}
@@ -3,13 +3,21 @@ export type ConnectionChoice = {
3
3
  value: string;
4
4
  label: string;
5
5
  name: string;
6
- providerType: string;
6
+ /** The saved connection's own type, e.g. `aws`. */
7
+ connectionType: string;
8
+ /**
9
+ * The query providers that can read it, most specific first — `aws` yields
10
+ * `["cloudwatch"]`. More than one is a genuine choice the reader has to make
11
+ * (`google_cloud` is read by both `gcpcloudlogging` and `bigquery`); none
12
+ * means no provider reads this connection type at all.
13
+ */
14
+ providerTypes: string[];
7
15
  };
8
16
  export declare function WizardProgress({ stepIndex, onStepChange, }: {
9
17
  stepIndex: number;
10
18
  onStepChange: (index: number) => void;
11
19
  }): import("react/jsx-runtime").JSX.Element;
12
- export declare function SourceStep({ choices, loading, error, truncated, total, search, selected, selectedType, onSearchChange, onSelect, }: {
20
+ export declare function SourceStep({ choices, loading, error, truncated, total, search, selected, selectedType, onSearchChange, onSelect, onProviderTypeChange, }: {
13
21
  choices: ConnectionChoice[];
14
22
  loading: boolean;
15
23
  error: unknown;
@@ -20,6 +28,7 @@ export declare function SourceStep({ choices, loading, error, truncated, total,
20
28
  selectedType: string;
21
29
  onSearchChange: (search: string) => void;
22
30
  onSelect: (choice: ConnectionChoice) => void;
31
+ onProviderTypeChange: (type: string) => void;
23
32
  }): import("react/jsx-runtime").JSX.Element;
24
33
  export declare function FieldsStep({ draft, discovered, activeField, onDraftChange, onActiveFieldChange, }: {
25
34
  draft: ProfileWizardDraft;
@@ -1 +1 @@
1
- {"version":3,"file":"profileWizardSteps.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,2CA0BA;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C,2CAgFA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,2CAoCA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B,2CAqDA"}
1
+ {"version":3,"file":"profileWizardSteps.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,2CA0BA;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,oBAAoB,GACrB,EAAE;IACD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,2CA8GA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,2CAoCA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B,2CAqDA"}
@@ -39,8 +39,10 @@ function SourceStep({
39
39
  selected,
40
40
  selectedType,
41
41
  onSearchChange,
42
- onSelect
42
+ onSelect,
43
+ onProviderTypeChange
43
44
  }) {
45
+ const selectedChoice = choices.find((choice) => choice.value === selected);
44
46
  return /* @__PURE__ */ jsxs("div", { className: "mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]", children: [
45
47
  /* @__PURE__ */ jsxs("section", { className: "overflow-hidden rounded-xl border bg-card", children: [
46
48
  /* @__PURE__ */ jsx("div", { className: "border-b p-4", children: /* @__PURE__ */ jsxs("label", { className: "grid gap-1.5 text-sm font-medium", children: [
@@ -69,7 +71,13 @@ function SourceStep({
69
71
  /* @__PURE__ */ jsx("span", { className: "block text-sm font-medium", children: choice.name }),
70
72
  /* @__PURE__ */ jsx("span", { className: "block text-xs text-muted-foreground", children: "Saved connection" })
71
73
  ] }),
72
- /* @__PURE__ */ jsx("span", { className: "rounded-full bg-muted px-2.5 py-1 text-xs font-medium", children: choice.providerType })
74
+ /* @__PURE__ */ jsx(
75
+ "span",
76
+ {
77
+ className: `rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? "bg-destructive/10 text-destructive" : "bg-muted"}`,
78
+ children: choice.providerTypes.length === 0 ? `${choice.connectionType} · not queryable` : choice.providerTypes.join(" / ")
79
+ }
80
+ )
73
81
  ]
74
82
  },
75
83
  choice.value
@@ -91,6 +99,29 @@ function SourceStep({
91
99
  selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
92
100
  /* @__PURE__ */ jsx("h3", { className: "mt-3 font-semibold", children: profileConnectionID(selected) }),
93
101
  /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: selectedType }),
102
+ selectedChoice && selectedChoice.providerTypes.length === 0 ? /* @__PURE__ */ jsxs("p", { role: "alert", className: "mt-4 text-sm leading-6 text-destructive", children: [
103
+ "No query provider reads ",
104
+ selectedChoice.connectionType,
105
+ " ",
106
+ "connections, so this one cannot back a profile."
107
+ ] }) : null,
108
+ selectedChoice && selectedChoice.providerTypes.length > 1 ? (
109
+ // A connection type several providers can read is a real choice —
110
+ // a Google Cloud connection is queried very differently by Cloud
111
+ // Logging than by BigQuery — so it is asked rather than guessed.
112
+ /* @__PURE__ */ jsxs("label", { className: "mt-4 grid gap-1.5 text-sm font-medium", children: [
113
+ "Read it with",
114
+ /* @__PURE__ */ jsx(
115
+ "select",
116
+ {
117
+ value: selectedType,
118
+ className: "rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15",
119
+ onChange: (event) => onProviderTypeChange(event.target.value),
120
+ children: selectedChoice.providerTypes.map((type) => /* @__PURE__ */ jsx("option", { value: type, children: type }, type))
121
+ }
122
+ )
123
+ ] })
124
+ ) : null,
94
125
  /* @__PURE__ */ jsx("p", { className: "mt-5 text-sm leading-6 text-muted-foreground", children: "The next step loads this connection's catalog, query language, and sampling controls." })
95
126
  ] }) : /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm leading-6 text-muted-foreground", children: "Choose a connection to begin. Connection credentials stay on the server and are never copied into the profile." })
96
127
  ] })