@flanksource/clicky-ui 0.3.40 → 0.3.41

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 (342) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +10 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +10 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/components/AccordionList.cjs +5 -1
  7. package/dist/components/AccordionList.cjs.map +1 -1
  8. package/dist/components/AccordionList.d.ts +3 -1
  9. package/dist/components/AccordionList.d.ts.map +1 -1
  10. package/dist/components/AccordionList.js +5 -1
  11. package/dist/components/AccordionList.js.map +1 -1
  12. package/dist/components/JsonSchemaForm.cjs +9 -4
  13. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  14. package/dist/components/JsonSchemaForm.d.ts +1 -1
  15. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  16. package/dist/components/JsonSchemaForm.js +8 -3
  17. package/dist/components/JsonSchemaForm.js.map +1 -1
  18. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  19. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  20. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  21. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  22. package/dist/components/json-schema-form-accordion-array.js +3 -1
  23. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  24. package/dist/components/json-schema-form-array-view.cjs +63 -0
  25. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  26. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  27. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  28. package/dist/components/json-schema-form-array-view.js +63 -0
  29. package/dist/components/json-schema-form-array-view.js.map +1 -0
  30. package/dist/components/json-schema-form-array.cjs +3 -7
  31. package/dist/components/json-schema-form-array.cjs.map +1 -1
  32. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  33. package/dist/components/json-schema-form-array.js +3 -7
  34. package/dist/components/json-schema-form-array.js.map +1 -1
  35. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  36. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  37. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  38. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  39. package/dist/components/json-schema-form-conditionals.js +67 -0
  40. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  41. package/dist/components/json-schema-form-defaults.cjs +68 -0
  42. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  43. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  44. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  45. package/dist/components/json-schema-form-defaults.js +68 -0
  46. package/dist/components/json-schema-form-defaults.js.map +1 -0
  47. package/dist/components/json-schema-form-errors.cjs +49 -31
  48. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  49. package/dist/components/json-schema-form-errors.d.ts +4 -2
  50. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  51. package/dist/components/json-schema-form-errors.js +51 -33
  52. package/dist/components/json-schema-form-errors.js.map +1 -1
  53. package/dist/components/json-schema-form-filter.cjs +2 -1
  54. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  55. package/dist/components/json-schema-form-filter.js +2 -1
  56. package/dist/components/json-schema-form-filter.js.map +1 -1
  57. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  58. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  59. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  60. package/dist/components/json-schema-form-item-summary.js +6 -2
  61. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  62. package/dist/components/json-schema-form-layout.cjs +28 -19
  63. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  64. package/dist/components/json-schema-form-layout.d.ts +8 -6
  65. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  66. package/dist/components/json-schema-form-layout.js +29 -20
  67. package/dist/components/json-schema-form-layout.js.map +1 -1
  68. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  69. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  70. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  71. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  72. package/dist/components/json-schema-form-listener-paths.js +52 -0
  73. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  74. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  75. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  76. package/dist/components/json-schema-form-listeners.cjs +250 -0
  77. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  78. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  79. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  80. package/dist/components/json-schema-form-listeners.js +250 -0
  81. package/dist/components/json-schema-form-listeners.js.map +1 -0
  82. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  83. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  84. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  85. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  86. package/dist/components/json-schema-form-object-array-view.js +62 -0
  87. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  88. package/dist/components/json-schema-form-object.cjs +3 -0
  89. package/dist/components/json-schema-form-object.cjs.map +1 -1
  90. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  91. package/dist/components/json-schema-form-object.js +3 -0
  92. package/dist/components/json-schema-form-object.js.map +1 -1
  93. package/dist/components/json-schema-form-render.cjs +17 -9
  94. package/dist/components/json-schema-form-render.cjs.map +1 -1
  95. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  96. package/dist/components/json-schema-form-render.js +19 -11
  97. package/dist/components/json-schema-form-render.js.map +1 -1
  98. package/dist/components/json-schema-form-resolve.cjs +6 -99
  99. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  100. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  101. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  102. package/dist/components/json-schema-form-resolve.js +5 -98
  103. package/dist/components/json-schema-form-resolve.js.map +1 -1
  104. package/dist/components/json-schema-form-runtime-types.d.ts +15 -0
  105. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  106. package/dist/components/json-schema-form-table-array.cjs +67 -16
  107. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  108. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  109. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  110. package/dist/components/json-schema-form-table-array.js +70 -19
  111. package/dist/components/json-schema-form-table-array.js.map +1 -1
  112. package/dist/components/json-schema-form-types.d.ts +16 -0
  113. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  114. package/dist/components/json-schema-form-utils.cjs +7 -1
  115. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  116. package/dist/components/json-schema-form-utils.d.ts +2 -1
  117. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  118. package/dist/components/json-schema-form-utils.js +7 -1
  119. package/dist/components/json-schema-form-utils.js.map +1 -1
  120. package/dist/components.cjs +3 -2
  121. package/dist/components.cjs.map +1 -1
  122. package/dist/components.d.ts +3 -2
  123. package/dist/components.d.ts.map +1 -1
  124. package/dist/components.js +2 -1
  125. package/dist/components.js.map +1 -1
  126. package/dist/data/DataTable.cjs +9 -3
  127. package/dist/data/DataTable.cjs.map +1 -1
  128. package/dist/data/DataTable.d.ts +6 -0
  129. package/dist/data/DataTable.d.ts.map +1 -1
  130. package/dist/data/DataTable.js +9 -3
  131. package/dist/data/DataTable.js.map +1 -1
  132. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  133. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  134. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  135. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  136. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  137. package/dist/data/Tree.cjs +10 -2
  138. package/dist/data/Tree.cjs.map +1 -1
  139. package/dist/data/Tree.d.ts +6 -1
  140. package/dist/data/Tree.d.ts.map +1 -1
  141. package/dist/data/Tree.js +10 -2
  142. package/dist/data/Tree.js.map +1 -1
  143. package/dist/data/ai/SessionInspector.cjs +143 -167
  144. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  145. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  146. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  147. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  148. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  149. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  150. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  151. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  152. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  153. package/dist/data/ai/SessionInspector.collection.js +18 -5
  154. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  155. package/dist/data/ai/SessionInspector.d.ts +24 -2
  156. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  157. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  158. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  159. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  160. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  161. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  162. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  163. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  164. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  165. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  166. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  167. package/dist/data/ai/SessionInspector.js +144 -168
  168. package/dist/data/ai/SessionInspector.js.map +1 -1
  169. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  170. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  171. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  172. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  173. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  174. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  175. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  176. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  177. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  178. package/dist/data/ai/SessionInspector.panels.js +3 -0
  179. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  180. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  181. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  182. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  183. package/dist/data/ai/SessionInspector.plan.js +30 -13
  184. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  185. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  186. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  187. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  188. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  189. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  190. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  191. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  192. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  193. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  194. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  195. package/dist/data/ai/SessionInspector.remote.js +275 -0
  196. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  197. package/dist/data/ai/SessionInspector.summary.cjs +0 -156
  198. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  199. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  200. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  201. package/dist/data/ai/SessionInspector.summary.js +2 -158
  202. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  203. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  204. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  205. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  206. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  207. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  208. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  209. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  210. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  211. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  212. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  213. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  214. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  215. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  216. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  217. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  218. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  219. package/dist/data/ai/SessionInspector.verification.js +53 -0
  220. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  221. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  222. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  223. package/dist/data/ai/SessionViewer.model.d.ts +21 -3
  224. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  225. package/dist/data/ai/SessionViewer.model.js +7 -1
  226. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  227. package/dist/data/ai/SessionViewer.unified.d.ts +13 -0
  228. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  229. package/dist/data/ai/index.d.ts +3 -1
  230. package/dist/data/ai/index.d.ts.map +1 -1
  231. package/dist/data/version-info.cjs +3 -3
  232. package/dist/data/version-info.js +3 -3
  233. package/dist/devtools/useDebugStream.cjs +5 -1
  234. package/dist/devtools/useDebugStream.cjs.map +1 -1
  235. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  236. package/dist/devtools/useDebugStream.js +6 -2
  237. package/dist/devtools/useDebugStream.js.map +1 -1
  238. package/dist/hooks/event-source-provider.cjs +9 -0
  239. package/dist/hooks/event-source-provider.cjs.map +1 -0
  240. package/dist/hooks/event-source-provider.d.ts +15 -0
  241. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  242. package/dist/hooks/event-source-provider.js +9 -0
  243. package/dist/hooks/event-source-provider.js.map +1 -0
  244. package/dist/hooks/event-source.cjs +11 -0
  245. package/dist/hooks/event-source.cjs.map +1 -0
  246. package/dist/hooks/event-source.d.ts +22 -0
  247. package/dist/hooks/event-source.d.ts.map +1 -0
  248. package/dist/hooks/event-source.js +11 -0
  249. package/dist/hooks/event-source.js.map +1 -0
  250. package/dist/hooks/use-log-tail.cjs +5 -1
  251. package/dist/hooks/use-log-tail.cjs.map +1 -1
  252. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  253. package/dist/hooks/use-log-tail.js +5 -1
  254. package/dist/hooks/use-log-tail.js.map +1 -1
  255. package/dist/hooks/use-prompts.cjs +5 -1
  256. package/dist/hooks/use-prompts.cjs.map +1 -1
  257. package/dist/hooks/use-prompts.d.ts.map +1 -1
  258. package/dist/hooks/use-prompts.js +6 -2
  259. package/dist/hooks/use-prompts.js.map +1 -1
  260. package/dist/hooks/use-task-run.cjs +9 -2
  261. package/dist/hooks/use-task-run.cjs.map +1 -1
  262. package/dist/hooks/use-task-run.d.ts.map +1 -1
  263. package/dist/hooks/use-task-run.js +10 -3
  264. package/dist/hooks/use-task-run.js.map +1 -1
  265. package/dist/hooks.cjs +4 -0
  266. package/dist/hooks.cjs.map +1 -1
  267. package/dist/hooks.d.ts +2 -0
  268. package/dist/hooks.d.ts.map +1 -1
  269. package/dist/hooks.js +4 -0
  270. package/dist/hooks.js.map +1 -1
  271. package/dist/icons/programmingCatalog.cjs +34 -34
  272. package/dist/icons/programmingCatalog.cjs.map +1 -1
  273. package/dist/icons/programmingCatalog.js +34 -34
  274. package/dist/icons/programmingCatalog.js.map +1 -1
  275. package/dist/index.cjs +9 -2
  276. package/dist/index.cjs.map +1 -1
  277. package/dist/index.js +8 -1
  278. package/dist/index.js.map +1 -1
  279. package/dist/monaco/MonacoEditor.cjs +4 -1
  280. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  281. package/dist/monaco/MonacoEditor.d.ts +1 -1
  282. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  283. package/dist/monaco/MonacoEditor.js +4 -1
  284. package/dist/monaco/MonacoEditor.js.map +1 -1
  285. package/dist/monaco/types.d.ts +2 -1
  286. package/dist/monaco/types.d.ts.map +1 -1
  287. package/dist/overlay/CommandPalette.cjs +14 -4
  288. package/dist/overlay/CommandPalette.cjs.map +1 -1
  289. package/dist/overlay/CommandPalette.d.ts +5 -1
  290. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  291. package/dist/overlay/CommandPalette.js +14 -4
  292. package/dist/overlay/CommandPalette.js.map +1 -1
  293. package/dist/overlay/CommandPaletteList.cjs +5 -0
  294. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  295. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  296. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  297. package/dist/overlay/CommandPaletteList.js +5 -0
  298. package/dist/overlay/CommandPaletteList.js.map +1 -1
  299. package/dist/overlay/DropdownMenu.cjs +1 -0
  300. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  301. package/dist/overlay/DropdownMenu.js +1 -0
  302. package/dist/overlay/DropdownMenu.js.map +1 -1
  303. package/dist/rpc/OperationCatalog.cjs +29 -26
  304. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  305. package/dist/rpc/OperationCatalog.d.ts +9 -1
  306. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  307. package/dist/rpc/OperationCatalog.js +29 -26
  308. package/dist/rpc/OperationCatalog.js.map +1 -1
  309. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  310. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  311. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  312. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  313. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  314. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  315. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  316. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  317. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  318. package/dist/rpc/OperationEntityPicker.js +185 -0
  319. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  320. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  321. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  322. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  323. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  324. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  325. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  326. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  327. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  328. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  329. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  330. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  331. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  332. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  333. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  334. package/dist/rpc.cjs +2 -0
  335. package/dist/rpc.cjs.map +1 -1
  336. package/dist/rpc.d.ts +2 -0
  337. package/dist/rpc.d.ts.map +1 -1
  338. package/dist/rpc.js +2 -0
  339. package/dist/rpc.js.map +1 -1
  340. package/dist/styles.css +1 -1
  341. package/package.json +4 -1
  342. package/schemas/json-schema-form.schema.json +566 -0
@@ -2,19 +2,17 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
- const reactQuery = require("@tanstack/react-query");
6
- const button = require("../components/button.cjs");
7
5
  const DropdownMenu = require("../overlay/DropdownMenu.cjs");
8
- const Modal = require("../overlay/Modal.cjs");
9
- const CommandOutput = require("./CommandOutput.cjs");
10
6
  const formMetadata = require("./formMetadata.cjs");
11
7
  const clickyMetadata = require("./clickyMetadata.cjs");
8
+ const OperationEntityPicker = require("./OperationEntityPicker.cjs");
12
9
  const rowNavigation = require("./rowNavigation.cjs");
13
10
  const surfaceIconMap = require("./surfaceIconMap.cjs");
14
11
  const useOperations = require("./useOperations.cjs");
15
12
  const OperationEntityContextPicker_model = require("./OperationEntityContextPicker.model.cjs");
16
13
  const UiTable = require("../icons/components/UiTable.cjs");
17
14
  const UiAdd = require("../icons/components/UiAdd.cjs");
15
+ const plural = (count) => count === 1 ? "" : "s";
18
16
  function OperationEntityContextPicker({
19
17
  client,
20
18
  items,
@@ -30,7 +28,6 @@ function OperationEntityContextPicker({
30
28
  surfaceRenderer,
31
29
  triggerLabel = "Add context"
32
30
  }) {
33
- var _a;
34
31
  const {
35
32
  operations,
36
33
  spec,
@@ -38,12 +35,6 @@ function OperationEntityContextPicker({
38
35
  } = useOperations.useOperations(client);
39
36
  const [open, setOpen] = react.useState(false);
40
37
  const [surfaceKey, setSurfaceKey] = react.useState("");
41
- const [filters, setFilters] = react.useState({});
42
- const [selectedRows, setSelectedRows] = react.useState(
43
- {}
44
- );
45
- const [attaching, setAttaching] = react.useState(false);
46
- const [attachError, setAttachError] = react.useState("");
47
38
  const surfaces = react.useMemo(() => {
48
39
  return clickyMetadata.getClickySurfaces(spec).flatMap((surface) => {
49
40
  const surfaceOperations = clickyMetadata.filterOperationsBySurface(
@@ -74,84 +65,14 @@ function OperationEntityContextPicker({
74
65
  return leftGroup.localeCompare(rightGroup) || left.surface.title.localeCompare(right.surface.title);
75
66
  });
76
67
  }, [operations, spec, surfaceFilter, surfaceGroup]);
77
- react.useEffect(() => {
78
- setFilters({});
79
- setSelectedRows({});
80
- setAttachError("");
81
- }, [surfaceKey]);
82
68
  const selected = surfaces.find((entry) => entry.surface.key === surfaceKey);
83
- const parameters = (selected == null ? void 0 : selected.listOperation.operation.parameters) ?? [];
84
- const debouncedFilters = formMetadata.useDebouncedRecord(filters, 250);
85
- const packedFilters = react.useMemo(
86
- () => formMetadata.packParameterValues(debouncedFilters, parameters),
87
- [debouncedFilters, parameters]
88
- );
89
- const packedLookupFilters = react.useMemo(
90
- () => formMetadata.packLookupParameterValues(debouncedFilters, parameters),
91
- [debouncedFilters, parameters]
92
- );
93
- const lookupQuery = reactQuery.useQuery({
94
- queryKey: [
95
- "entity-context-lookup",
96
- selected == null ? void 0 : selected.listOperation.path,
97
- packedLookupFilters
98
- ],
99
- queryFn: async () => {
100
- var _a2;
101
- return await ((_a2 = client.lookupFilters) == null ? void 0 : _a2.call(
102
- client,
103
- selected.listOperation.path,
104
- selected.listOperation.method,
105
- packedLookupFilters,
106
- { Accept: "application/json+clicky" }
107
- )) ?? { filters: {} };
108
- },
109
- enabled: open && !!selected && !!client.lookupFilters && parameters.some((parameter) => parameter.in === "query"),
110
- placeholderData: reactQuery.keepPreviousData,
111
- staleTime: 3e4,
112
- retry: 0
113
- });
114
- const listQuery = reactQuery.useQuery({
115
- queryKey: [
116
- "entity-context-list",
117
- selected == null ? void 0 : selected.listOperation.path,
118
- packedFilters
119
- ],
120
- queryFn: () => client.executeCommand(
121
- selected.listOperation.path,
122
- selected.listOperation.method,
123
- packedFilters,
124
- { Accept: "application/json+clicky" }
125
- ),
126
- enabled: open && !!selected,
127
- placeholderData: reactQuery.keepPreviousData,
128
- staleTime: 3e4,
129
- retry: 0
130
- });
131
- const filterShapes = (_a = spec == null ? void 0 : spec.components) == null ? void 0 : _a["x-clicky-filters"];
132
- const filterConfig = react.useMemo(
133
- () => formMetadata.parametersToFormConfig(parameters, filters, setFilters, {
134
- includeLocations: ["query"],
135
- lookup: lookupQuery.data,
136
- components: filterShapes
137
- }),
138
- [filters, filterShapes, lookupQuery.data, parameters]
139
- );
140
- const pagination = react.useMemo(
141
- () => formMetadata.dataTablePaginationFromForm(filterConfig.pagination, listQuery.data),
142
- [filterConfig.pagination, listQuery.data]
143
- );
144
69
  const existingIDs = react.useMemo(
145
70
  () => new Set(items.map((item) => item.id)),
146
71
  [items]
147
72
  );
148
- const markedListResponse = react.useMemo(
149
- () => markAttachedRows(listQuery.data, selected == null ? void 0 : selected.surface.key, existingIDs),
150
- [existingIDs, listQuery.data, selected == null ? void 0 : selected.surface.key]
151
- );
152
73
  const hydrateRow = react.useCallback(
153
- async (row) => {
154
- var _a2, _b, _c;
74
+ async (row, listFilters) => {
75
+ var _a, _b, _c;
155
76
  if (!selected) throw new Error("Select an entity type first.");
156
77
  const recordID = rowNavigation.getClickyRowId(row);
157
78
  if (!recordID) {
@@ -164,7 +85,7 @@ function OperationEntityContextPicker({
164
85
  let record = OperationEntityContextPicker_model.clickyRowRecord(row);
165
86
  if (selected.detailOperation) {
166
87
  const detailMeta = clickyMetadata.getOperationClickyMeta(selected.detailOperation);
167
- const idParam = (detailMeta == null ? void 0 : detailMeta.idParam) ?? ((_b = (_a2 = selected.detailOperation.operation.parameters) == null ? void 0 : _a2.find(
88
+ const idParam = (detailMeta == null ? void 0 : detailMeta.idParam) ?? ((_b = (_a = selected.detailOperation.operation.parameters) == null ? void 0 : _a.find(
168
89
  (parameter) => parameter.in === "path"
169
90
  )) == null ? void 0 : _b.name) ?? "id";
170
91
  const detailParameterNames = new Set(
@@ -172,6 +93,10 @@ function OperationEntityContextPicker({
172
93
  (parameter) => parameter.name
173
94
  )) ?? []
174
95
  );
96
+ const packedFilters = formMetadata.packParameterValues(
97
+ listFilters,
98
+ selected.listOperation.operation.parameters ?? []
99
+ );
175
100
  const detailParams = Object.fromEntries(
176
101
  Object.entries(packedFilters).filter(
177
102
  ([key]) => detailParameterNames.has(key)
@@ -195,37 +120,34 @@ function OperationEntityContextPicker({
195
120
  throw new Error("This row does not expose a stable record ID.");
196
121
  return contextItem;
197
122
  },
198
- [client, existingIDs, packedFilters, selected]
123
+ [client, existingIDs, selected]
199
124
  );
200
- const attachSelected = react.useCallback(async () => {
201
- const rows = Object.values(selectedRows);
202
- if (rows.length === 0) return;
203
- setAttaching(true);
204
- setAttachError("");
205
- const results = await Promise.allSettled(rows.map(hydrateRow));
206
- const added = results.flatMap(
207
- (result) => result.status === "fulfilled" ? [result.value] : []
208
- );
209
- const failures = results.flatMap(
210
- (result) => result.status === "rejected" ? [result.reason] : []
211
- );
212
- if (added.length > 0) {
213
- if (onAddMany) onAddMany(added);
214
- else added.forEach(onAdd);
215
- }
216
- setAttaching(false);
217
- if (failures.length > 0) {
218
- const first = failures[0];
219
- setAttachError(
220
- `${failures.length} record${failures.length === 1 ? "" : "s"} could not be attached: ${first instanceof Error ? first.message : String(first)}`
125
+ const attachRows = react.useCallback(
126
+ async (rows, listFilters) => {
127
+ const results = await Promise.allSettled(
128
+ rows.map((row) => hydrateRow(row, listFilters))
221
129
  );
222
- return;
223
- }
224
- setSelectedRows({});
225
- setOpen(false);
226
- }, [hydrateRow, onAdd, onAddMany, selectedRows]);
130
+ const added = results.flatMap(
131
+ (result) => result.status === "fulfilled" ? [result.value] : []
132
+ );
133
+ const failures = results.flatMap(
134
+ (result) => result.status === "rejected" ? [result.reason] : []
135
+ );
136
+ if (added.length > 0) {
137
+ if (onAddMany) onAddMany(added);
138
+ else added.forEach(onAdd);
139
+ }
140
+ if (failures.length > 0) {
141
+ const first = failures[0];
142
+ throw new Error(
143
+ `${failures.length} record${plural(failures.length)} could not be attached: ${first instanceof Error ? first.message : String(first)}`
144
+ );
145
+ }
146
+ },
147
+ [hydrateRow, onAdd, onAddMany]
148
+ );
227
149
  const menuItems = react.useMemo(() => {
228
- var _a2;
150
+ var _a;
229
151
  const groups = [];
230
152
  const byGroup = /* @__PURE__ */ new Map();
231
153
  for (const entry of surfaces) {
@@ -251,9 +173,9 @@ function OperationEntityContextPicker({
251
173
  }
252
174
  bucket.push(leaf);
253
175
  }
254
- if (groups.length <= 1) return ((_a2 = groups[0]) == null ? void 0 : _a2.leaves) ?? [];
176
+ if (groups.length <= 1) return ((_a = groups[0]) == null ? void 0 : _a.leaves) ?? [];
255
177
  return groups.map(({ group, leaves }) => {
256
- var _a3;
178
+ var _a2;
257
179
  const groupColor = surfaceGroupColor == null ? void 0 : surfaceGroupColor(group);
258
180
  const prefix = `${group} `;
259
181
  const children = leaves.map(
@@ -262,7 +184,7 @@ function OperationEntityContextPicker({
262
184
  return {
263
185
  label: group,
264
186
  title: group,
265
- icon: (surfaceGroupIcon == null ? void 0 : surfaceGroupIcon(group)) ?? ((_a3 = leaves[0]) == null ? void 0 : _a3.icon) ?? UiTable.UiTable,
187
+ icon: (surfaceGroupIcon == null ? void 0 : surfaceGroupIcon(group)) ?? ((_a2 = leaves[0]) == null ? void 0 : _a2.icon) ?? UiTable.UiTable,
266
188
  ...groupColor ? { iconColor: groupColor } : {},
267
189
  onSelect: () => {
268
190
  },
@@ -278,8 +200,6 @@ function OperationEntityContextPicker({
278
200
  surfaceLabel,
279
201
  surfaces
280
202
  ]);
281
- const selectedCount = Object.keys(selectedRows).length;
282
- const selectedLabel = selected ? (surfaceLabel == null ? void 0 : surfaceLabel(selected.surface, selected.listOperation)) ?? selected.surface.title : "records";
283
203
  const trigger = /* @__PURE__ */ jsxRuntime.jsx(
284
204
  DropdownMenu.DropdownMenu,
285
205
  {
@@ -300,108 +220,40 @@ function OperationEntityContextPicker({
300
220
  ]
301
221
  }
302
222
  );
223
+ if (!selected) return trigger;
224
+ const selectedLabel = (surfaceLabel == null ? void 0 : surfaceLabel(selected.surface, selected.listOperation)) ?? selected.surface.title;
225
+ const selectedSurfaceKey = selected.surface.key;
303
226
  const defaultDialog = /* @__PURE__ */ jsxRuntime.jsx(
304
- Modal.Modal,
227
+ OperationEntityPicker.OperationEntityPicker,
305
228
  {
306
229
  open,
307
230
  onClose: () => setOpen(false),
308
231
  title: `Add ${selectedLabel} context`,
309
- size: "2xl",
310
- expandable: true,
311
- scrollBody: false,
312
- footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
313
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: selectedCount === 0 ? "Select one or more records from the table." : `${selectedCount} record${selectedCount === 1 ? "" : "s"} selected` }),
314
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
315
- /* @__PURE__ */ jsxRuntime.jsx(
316
- button.Button,
317
- {
318
- type: "button",
319
- variant: "outline",
320
- onClick: () => setOpen(false),
321
- disabled: attaching,
322
- children: "Cancel"
323
- }
324
- ),
325
- /* @__PURE__ */ jsxRuntime.jsx(
326
- button.Button,
327
- {
328
- type: "button",
329
- onClick: () => void attachSelected(),
330
- disabled: selectedCount === 0 || attaching,
331
- children: attaching ? "Adding…" : selectedCount > 0 ? `Add ${selectedCount} record${selectedCount === 1 ? "" : "s"}` : "Add records"
332
- }
333
- )
334
- ] })
335
- ] }),
336
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-4", children: [
337
- surfaces.length === 0 && !operationsLoading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No attachable entity surfaces are available." }) : null,
338
- lookupQuery.error ? /* @__PURE__ */ jsxRuntime.jsx(PickerError, { error: lookupQuery.error, prefix: "Load filters" }) : null,
339
- listQuery.error ? /* @__PURE__ */ jsxRuntime.jsx(PickerError, { error: listQuery.error, prefix: "Load records" }) : null,
340
- attachError ? /* @__PURE__ */ jsxRuntime.jsx(PickerError, { error: attachError, prefix: "Attach record" }) : null,
341
- attaching ? /* @__PURE__ */ jsxRuntime.jsx("div", { role: "status", className: "text-xs text-muted-foreground", children: "Loading full record details and adding context…" }) : null,
342
- selected ? /* @__PURE__ */ jsxRuntime.jsx(
343
- CommandOutput.CommandOutput,
344
- {
345
- bare: true,
346
- className: "mt-0 flex-1",
347
- response: markedListResponse ?? null,
348
- loading: listQuery.isLoading || listQuery.isFetching,
349
- loadingMessage: "Loading records…",
350
- emptyMessage: "No matching records.",
351
- ariaLabel: "Context records",
352
- rowSelection: {
353
- selectedRowIds: Object.keys(selectedRows),
354
- // Keep selections made on other pages: reconcile the table's
355
- // next id set against the rows on the current page, falling back
356
- // to the already-known row for ids from previously-viewed pages.
357
- onSelectionChange: (nextIds, rows) => {
358
- const rowByID = new Map(
359
- rows.flatMap((row) => {
360
- const id = rowNavigation.getClickyRowId(row);
361
- return id ? [[id, row]] : [];
362
- })
363
- );
364
- setSelectedRows(
365
- (prev) => Object.fromEntries(
366
- nextIds.flatMap((id) => {
367
- const row = rowByID.get(id) ?? prev[id];
368
- return row ? [[id, row]] : [];
369
- })
370
- )
371
- );
372
- },
373
- getRowId: (row, index) => rowNavigation.getClickyRowId(row) ?? `context-row-${index}`,
374
- isRowSelectable: (row) => {
375
- const id = rowNavigation.getClickyRowId(row);
376
- return !!id && !existingIDs.has(
377
- OperationEntityContextPicker_model.entityContextItemID(selected.surface.key, id)
378
- );
379
- },
380
- toggleOnRowClick: true
381
- },
382
- ...filterConfig.search ? { search: filterConfig.search } : {},
383
- ...filterConfig.timeRange ? { timeRange: filterConfig.timeRange } : {},
384
- ...filterConfig.filters.length ? { externalFilters: filterConfig.filters } : {},
385
- ...pagination ? { pagination } : {},
386
- ...filterConfig.sort ? {
387
- sort: filterConfig.sort.value,
388
- onSortChange: filterConfig.sort.onChange
389
- } : {}
390
- }
391
- ) : null,
392
- items.length ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
393
- items.length,
394
- " context ",
395
- items.length === 1 ? "record" : "records",
396
- " ",
397
- "attached. Attached rows are disabled."
398
- ] }) : null
399
- ] })
232
+ client,
233
+ surfaceKey: selectedSurfaceKey,
234
+ mode: "multi",
235
+ onSelect: (_ids, rows, { filters }) => attachRows(rows, filters),
236
+ unavailableRows: {
237
+ isUnavailable: (row) => {
238
+ const id = rowNavigation.getClickyRowId(row);
239
+ return !!id && existingIDs.has(OperationEntityContextPicker_model.entityContextItemID(selectedSurfaceKey, id));
240
+ },
241
+ label: "Attached",
242
+ columnLabel: "Context"
243
+ },
244
+ selectLabel: ({ count, pending }) => pending ? "Adding…" : count > 0 ? `Add ${count} record${plural(count)}` : "Add records",
245
+ note: items.length ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
246
+ items.length,
247
+ " context ",
248
+ items.length === 1 ? "record" : "records",
249
+ " ",
250
+ "attached. Attached rows are disabled."
251
+ ] }) : null
400
252
  }
401
253
  );
402
254
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
403
255
  trigger,
404
- selected && surfaceRenderer ? surfaceRenderer({
256
+ surfaceRenderer ? surfaceRenderer({
405
257
  surface: selected.surface,
406
258
  listOperation: selected.listOperation,
407
259
  ...selected.detailOperation ? { detailOperation: selected.detailOperation } : {},
@@ -423,51 +275,5 @@ function parseResponseJSON(response) {
423
275
  return void 0;
424
276
  }
425
277
  }
426
- function markAttachedRows(response, surfaceKey, existingIDs) {
427
- var _a;
428
- if (!response || !surfaceKey || existingIDs.size === 0 || !response.parsed)
429
- return response;
430
- const parsed = response.parsed;
431
- const node = parsed.version === 1 && parsed.node ? parsed.node : parsed;
432
- if (node.kind !== "table" || !((_a = node.rows) == null ? void 0 : _a.length)) return response;
433
- const tableNode = node;
434
- const attached = tableNode.rows.map((row) => {
435
- const id = rowNavigation.getClickyRowId(row);
436
- return !!id && existingIDs.has(OperationEntityContextPicker_model.entityContextItemID(surfaceKey, id));
437
- });
438
- if (!attached.some(Boolean)) return response;
439
- const markerColumn = {
440
- name: "__chat_context",
441
- label: "Context",
442
- shrink: true
443
- };
444
- const markedNode = {
445
- ...tableNode,
446
- kind: "table",
447
- columns: [...tableNode.columns ?? [], markerColumn],
448
- rows: tableNode.rows.map((row, index) => ({
449
- ...row,
450
- cells: {
451
- ...row.cells,
452
- __chat_context: attached[index] ? { kind: "badge", badgeLabel: "Attached" } : { kind: "text", text: "", plain: "" }
453
- }
454
- }))
455
- };
456
- return {
457
- ...response,
458
- parsed: parsed.version === 1 ? { ...parsed, node: markedNode } : markedNode
459
- };
460
- }
461
- function PickerError({ error, prefix }) {
462
- const message = error instanceof Error ? error.message : String(error);
463
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: [
464
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium", children: [
465
- prefix,
466
- ":"
467
- ] }),
468
- " ",
469
- message
470
- ] });
471
- }
472
278
  exports.OperationEntityContextPicker = OperationEntityContextPicker;
473
279
  //# sourceMappingURL=OperationEntityContextPicker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperationEntityContextPicker.cjs","sources":["../../src/rpc/OperationEntityContextPicker.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport type { ClickyDocument, ClickyNode, ClickyRow } from \"../data/Clicky\";\nimport type { StaticIconComponent } from \"../data/Icon\";\nimport type { ChatContextItem } from \"../data/ai/context\";\nimport { UiAdd, UiTable } from \"../icons\";\nimport { DropdownMenu, type DropdownMenuItem } from \"../overlay/DropdownMenu\";\nimport { Modal } from \"../overlay/Modal\";\nimport { CommandOutput } from \"./CommandOutput\";\nimport {\n dataTablePaginationFromForm,\n packLookupParameterValues,\n packParameterValues,\n parametersToFormConfig,\n useDebouncedRecord,\n type ParameterValues,\n} from \"./formMetadata\";\nimport {\n filterOperationsBySurface,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getClickySurfaces,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport { getClickyRowId } from \"./rowNavigation\";\nimport { resolveSurfaceIcon } from \"./surfaceIconMap\";\nimport type {\n ClickySurface,\n ExecutionResponse,\n ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n clickyRowRecord,\n contextItemFromEntityRow,\n entityContextItemID,\n} from \"./OperationEntityContextPicker.model\";\n\nexport type EntityContextSurfaceFilter = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => boolean;\n\nexport type EntityContextSurfaceText = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string;\n\nexport type EntityContextSurfaceIcon = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string | StaticIconComponent | undefined;\n\nexport type EntityContextSurfaceColor = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string | undefined;\n\nexport type EntityContextGroupIcon = (\n group: string,\n) => string | StaticIconComponent | undefined;\n\nexport type EntityContextGroupColor = (group: string) => string | undefined;\n\n// EntityContextSurfaceRenderContext is handed to a host-supplied surfaceRenderer\n// so it can replace the picker dialog for selected surfaces, the way\n// ResultRenderer replaces a result surface. The generic dialog lists whatever\n// the entity's list operation returns, which is the right default and the wrong\n// answer for a surface the host already browses with a purpose-built UI — a\n// document tree, a map, a calendar. `defaultView` is the standard dialog;\n// return it unchanged to keep it.\n//\n// The whole dialog is replaced rather than only its body: a replacement that\n// owns selection has to own the confirm button too, or the footer would count\n// rows the host is no longer tracking.\nexport type EntityContextSurfaceRenderContext = {\n surface: ClickySurface;\n listOperation: ResolvedOperation;\n detailOperation?: ResolvedOperation;\n /** Already-attached items, so a replacement can disable them. */\n items: ChatContextItem[];\n onAdd: (item: ChatContextItem) => void;\n onAddMany: (items: ChatContextItem[]) => void;\n /** True while this surface is the one chosen from the dropdown. */\n open: boolean;\n close: () => void;\n defaultView: ReactNode;\n};\n\nexport type EntityContextSurfaceRenderer = (\n ctx: EntityContextSurfaceRenderContext,\n) => ReactNode;\n\nexport type OperationEntityContextPickerProps = {\n client: OperationsApiClient;\n items: ChatContextItem[];\n onAdd: (item: ChatContextItem) => void;\n onAddMany?: (items: ChatContextItem[]) => void;\n surfaceFilter?: EntityContextSurfaceFilter;\n surfaceLabel?: EntityContextSurfaceText;\n surfaceGroup?: EntityContextSurfaceText;\n surfaceIcon?: EntityContextSurfaceIcon;\n surfaceColor?: EntityContextSurfaceColor;\n /** Icon for a top-level provider/group row (the submenu trigger). */\n surfaceGroupIcon?: EntityContextGroupIcon;\n /** Icon colour for a top-level provider/group row. */\n surfaceGroupColor?: EntityContextGroupColor;\n /** Replaces the picker dialog for surfaces the host browses its own way. */\n surfaceRenderer?: EntityContextSurfaceRenderer;\n triggerLabel?: string;\n};\n\ntype ContextSurface = {\n surface: ClickySurface;\n listOperation: ResolvedOperation;\n detailOperation?: ResolvedOperation;\n};\n\nexport function OperationEntityContextPicker({\n client,\n items,\n onAdd,\n onAddMany,\n surfaceFilter,\n surfaceLabel,\n surfaceGroup,\n surfaceIcon,\n surfaceColor,\n surfaceGroupIcon,\n surfaceGroupColor,\n surfaceRenderer,\n triggerLabel = \"Add context\",\n}: OperationEntityContextPickerProps) {\n const {\n operations,\n spec,\n isLoading: operationsLoading,\n } = useOperations(client);\n const [open, setOpen] = useState(false);\n const [surfaceKey, setSurfaceKey] = useState(\"\");\n const [filters, setFilters] = useState<ParameterValues>({});\n const [selectedRows, setSelectedRows] = useState<Record<string, ClickyRow>>(\n {},\n );\n const [attaching, setAttaching] = useState(false);\n const [attachError, setAttachError] = useState(\"\");\n\n const surfaces = useMemo<ContextSurface[]>(() => {\n return getClickySurfaces(spec)\n .flatMap((surface): ContextSurface[] => {\n const surfaceOperations = filterOperationsBySurface(\n operations,\n surface.key,\n );\n const listOperation = findSurfaceListOperation(\n surfaceOperations,\n surface.key,\n );\n if (!listOperation || listOperation.method.toUpperCase() !== \"GET\")\n return [];\n if (surfaceFilter && !surfaceFilter(surface, listOperation)) return [];\n const detailOperation = findSurfaceDetailOperation(\n surfaceOperations,\n surface.key,\n );\n return [\n {\n surface,\n listOperation,\n ...(detailOperation ? { detailOperation } : {}),\n },\n ];\n })\n .sort((left, right) => {\n const leftGroup =\n surfaceGroup?.(left.surface, left.listOperation) ??\n left.surface.parent ??\n \"\";\n const rightGroup =\n surfaceGroup?.(right.surface, right.listOperation) ??\n right.surface.parent ??\n \"\";\n return (\n leftGroup.localeCompare(rightGroup) ||\n left.surface.title.localeCompare(right.surface.title)\n );\n });\n }, [operations, spec, surfaceFilter, surfaceGroup]);\n\n useEffect(() => {\n setFilters({});\n setSelectedRows({});\n setAttachError(\"\");\n }, [surfaceKey]);\n\n const selected = surfaces.find((entry) => entry.surface.key === surfaceKey);\n const parameters = selected?.listOperation.operation.parameters ?? [];\n const debouncedFilters = useDebouncedRecord(filters, 250);\n const packedFilters = useMemo(\n () => packParameterValues(debouncedFilters, parameters),\n [debouncedFilters, parameters],\n );\n const packedLookupFilters = useMemo(\n () => packLookupParameterValues(debouncedFilters, parameters),\n [debouncedFilters, parameters],\n );\n\n const lookupQuery = useQuery({\n queryKey: [\n \"entity-context-lookup\",\n selected?.listOperation.path,\n packedLookupFilters,\n ],\n queryFn: async () =>\n (await client.lookupFilters?.(\n selected!.listOperation.path,\n selected!.listOperation.method,\n packedLookupFilters,\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} },\n enabled:\n open &&\n !!selected &&\n !!client.lookupFilters &&\n parameters.some((parameter) => parameter.in === \"query\"),\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n const listQuery = useQuery<ExecutionResponse>({\n queryKey: [\n \"entity-context-list\",\n selected?.listOperation.path,\n packedFilters,\n ],\n queryFn: () =>\n client.executeCommand(\n selected!.listOperation.path,\n selected!.listOperation.method,\n packedFilters,\n { Accept: \"application/json+clicky\" },\n ),\n enabled: open && !!selected,\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n // Shapes come from the spec so a control keeps its identity while the lookup\n // that fills it is in flight; see parametersToFormConfig.\n const filterShapes = spec?.components?.[\"x-clicky-filters\"];\n const filterConfig = useMemo(\n () =>\n parametersToFormConfig(parameters, filters, setFilters, {\n includeLocations: [\"query\"],\n lookup: lookupQuery.data,\n components: filterShapes,\n }),\n [filters, filterShapes, lookupQuery.data, parameters],\n );\n const pagination = useMemo(\n () => dataTablePaginationFromForm(filterConfig.pagination, listQuery.data),\n [filterConfig.pagination, listQuery.data],\n );\n const existingIDs = useMemo(\n () => new Set(items.map((item) => item.id)),\n [items],\n );\n const markedListResponse = useMemo(\n () => markAttachedRows(listQuery.data, selected?.surface.key, existingIDs),\n [existingIDs, listQuery.data, selected?.surface.key],\n );\n\n const hydrateRow = useCallback(\n async (row: ClickyRow) => {\n if (!selected) throw new Error(\"Select an entity type first.\");\n const recordID = getClickyRowId(row);\n if (!recordID) {\n throw new Error(\"This row does not expose a stable record ID.\");\n }\n const contextID = entityContextItemID(selected.surface.key, recordID);\n if (existingIDs.has(contextID)) {\n throw new Error(\"This record is already attached.\");\n }\n\n let record: unknown = clickyRowRecord(row);\n if (selected.detailOperation) {\n const detailMeta = getOperationClickyMeta(selected.detailOperation);\n const idParam =\n detailMeta?.idParam ??\n selected.detailOperation.operation.parameters?.find(\n (parameter) => parameter.in === \"path\",\n )?.name ??\n \"id\";\n const detailParameterNames = new Set(\n selected.detailOperation.operation.parameters?.map(\n (parameter) => parameter.name,\n ) ?? [],\n );\n const detailParams = Object.fromEntries(\n Object.entries(packedFilters).filter(([key]) =>\n detailParameterNames.has(key),\n ),\n );\n detailParams[idParam] = recordID;\n const response = await client.executeCommand(\n selected.detailOperation.path,\n selected.detailOperation.method,\n detailParams,\n { Accept: \"application/json\" },\n );\n record = response.parsed ?? parseResponseJSON(response) ?? record;\n }\n\n const contextItem = contextItemFromEntityRow(\n selected.surface,\n row,\n record,\n );\n if (!contextItem)\n throw new Error(\"This row does not expose a stable record ID.\");\n return contextItem;\n },\n [client, existingIDs, packedFilters, selected],\n );\n\n const attachSelected = useCallback(async () => {\n const rows = Object.values(selectedRows);\n if (rows.length === 0) return;\n setAttaching(true);\n setAttachError(\"\");\n const results = await Promise.allSettled(rows.map(hydrateRow));\n const added = results.flatMap((result) =>\n result.status === \"fulfilled\" ? [result.value] : [],\n );\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (added.length > 0) {\n if (onAddMany) onAddMany(added);\n else added.forEach(onAdd);\n }\n setAttaching(false);\n if (failures.length > 0) {\n const first = failures[0];\n setAttachError(\n `${failures.length} record${failures.length === 1 ? \"\" : \"s\"} could not be attached: ${first instanceof Error ? first.message : String(first)}`,\n );\n return;\n }\n setSelectedRows({});\n setOpen(false);\n }, [hydrateRow, onAdd, onAddMany, selectedRows]);\n\n const menuItems = useMemo<DropdownMenuItem[]>(() => {\n // `surfaces` is pre-sorted by group then title, so bucketing by group in\n // insertion order yields a stable provider → type tree without re-sorting.\n const groups: Array<{ group: string; leaves: DropdownMenuItem[] }> = [];\n const byGroup = new Map<string, DropdownMenuItem[]>();\n for (const entry of surfaces) {\n const group =\n surfaceGroup?.(entry.surface, entry.listOperation) ??\n entry.surface.parent ??\n \"Other\";\n const label =\n surfaceLabel?.(entry.surface, entry.listOperation) ??\n entry.surface.title;\n const icon =\n surfaceIcon?.(entry.surface, entry.listOperation) ??\n resolveSurfaceIcon(entry.surface.icon) ??\n UiTable;\n const iconColor = surfaceColor?.(entry.surface, entry.listOperation);\n const leaf: DropdownMenuItem = {\n label,\n title: label,\n icon,\n ...(iconColor ? { iconColor } : {}),\n onSelect: () => {\n setSurfaceKey(entry.surface.key);\n setOpen(true);\n },\n };\n let bucket = byGroup.get(group);\n if (!bucket) {\n bucket = [];\n byGroup.set(group, bucket);\n groups.push({ group, leaves: bucket });\n }\n bucket.push(leaf);\n }\n\n // A single group would nest everything under one lone submenu; render its\n // types flat instead.\n if (groups.length <= 1) return groups[0]?.leaves ?? [];\n\n return groups.map(({ group, leaves }): DropdownMenuItem => {\n const groupColor = surfaceGroupColor?.(group);\n // A submenu child already sits under its group header — don't repeat the\n // group name in the child label. The tooltip (title) and the detail dialog\n // keep the full label.\n const prefix = `${group} `;\n const children = leaves.map((leaf) =>\n typeof leaf.label === \"string\" && leaf.label.startsWith(prefix)\n ? { ...leaf, label: leaf.label.slice(prefix.length) }\n : leaf,\n );\n return {\n label: group,\n title: group,\n icon: surfaceGroupIcon?.(group) ?? leaves[0]?.icon ?? UiTable,\n ...(groupColor ? { iconColor: groupColor } : {}),\n onSelect: () => {},\n children,\n };\n });\n }, [\n surfaceColor,\n surfaceGroup,\n surfaceGroupColor,\n surfaceGroupIcon,\n surfaceIcon,\n surfaceLabel,\n surfaces,\n ]);\n\n const selectedCount = Object.keys(selectedRows).length;\n const selectedLabel = selected\n ? (surfaceLabel?.(selected.surface, selected.listOperation) ??\n selected.surface.title)\n : \"records\";\n\n const trigger = (\n <DropdownMenu\n label={triggerLabel}\n icon={UiAdd}\n variant=\"ghost\"\n size=\"sm\"\n align=\"left\"\n menuLabel=\"Context entity types\"\n menuClassName=\"min-w-56\"\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n label: operationsLoading\n ? \"Loading entity types…\"\n : \"No entity listings available\",\n disabled: true,\n onSelect: () => {},\n },\n ]\n }\n />\n );\n\n const defaultDialog = (\n <Modal\n open={open}\n onClose={() => setOpen(false)}\n title={`Add ${selectedLabel} context`}\n size=\"2xl\"\n expandable\n scrollBody={false}\n footer={\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs text-muted-foreground\">\n {selectedCount === 0\n ? \"Select one or more records from the table.\"\n : `${selectedCount} record${selectedCount === 1 ? \"\" : \"s\"} selected`}\n </span>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setOpen(false)}\n disabled={attaching}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n onClick={() => void attachSelected()}\n disabled={selectedCount === 0 || attaching}\n >\n {attaching\n ? \"Adding…\"\n : selectedCount > 0\n ? `Add ${selectedCount} record${selectedCount === 1 ? \"\" : \"s\"}`\n : \"Add records\"}\n </Button>\n </div>\n </div>\n }\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4\">\n {surfaces.length === 0 && !operationsLoading ? (\n <p className=\"text-sm text-muted-foreground\">\n No attachable entity surfaces are available.\n </p>\n ) : null}\n {lookupQuery.error ? (\n <PickerError error={lookupQuery.error} prefix=\"Load filters\" />\n ) : null}\n {listQuery.error ? (\n <PickerError error={listQuery.error} prefix=\"Load records\" />\n ) : null}\n {attachError ? (\n <PickerError error={attachError} prefix=\"Attach record\" />\n ) : null}\n {attaching ? (\n <div role=\"status\" className=\"text-xs text-muted-foreground\">\n Loading full record details and adding context…\n </div>\n ) : null}\n\n {selected ? (\n <CommandOutput\n bare\n className=\"mt-0 flex-1\"\n response={markedListResponse ?? null}\n loading={listQuery.isLoading || listQuery.isFetching}\n loadingMessage=\"Loading records…\"\n emptyMessage=\"No matching records.\"\n ariaLabel=\"Context records\"\n rowSelection={{\n selectedRowIds: Object.keys(selectedRows),\n // Keep selections made on other pages: reconcile the table's\n // next id set against the rows on the current page, falling back\n // to the already-known row for ids from previously-viewed pages.\n onSelectionChange: (nextIds, rows) => {\n const rowByID = new Map(\n rows.flatMap((row) => {\n const id = getClickyRowId(row);\n return id ? [[id, row] as const] : [];\n }),\n );\n setSelectedRows((prev) =>\n Object.fromEntries(\n nextIds.flatMap((id) => {\n const row = rowByID.get(id) ?? prev[id];\n return row ? [[id, row] as const] : [];\n }),\n ),\n );\n },\n getRowId: (row, index) =>\n getClickyRowId(row) ?? `context-row-${index}`,\n isRowSelectable: (row) => {\n const id = getClickyRowId(row);\n return (\n !!id &&\n !existingIDs.has(\n entityContextItemID(selected.surface.key, id),\n )\n );\n },\n toggleOnRowClick: true,\n }}\n {...(filterConfig.search ? { search: filterConfig.search } : {})}\n {...(filterConfig.timeRange\n ? { timeRange: filterConfig.timeRange }\n : {})}\n {...(filterConfig.filters.length\n ? { externalFilters: filterConfig.filters }\n : {})}\n {...(pagination ? { pagination } : {})}\n {...(filterConfig.sort\n ? {\n sort: filterConfig.sort.value,\n onSortChange: filterConfig.sort.onChange,\n }\n : {})}\n />\n ) : null}\n\n {items.length ? (\n <p className=\"text-xs text-muted-foreground\">\n {items.length} context {items.length === 1 ? \"record\" : \"records\"}{\" \"}\n attached. Attached rows are disabled.\n </p>\n ) : null}\n </div>\n </Modal>\n );\n\n return (\n <>\n {trigger}\n {selected && surfaceRenderer\n ? surfaceRenderer({\n surface: selected.surface,\n listOperation: selected.listOperation,\n ...(selected.detailOperation\n ? { detailOperation: selected.detailOperation }\n : {}),\n items,\n onAdd,\n onAddMany: (added) =>\n onAddMany ? onAddMany(added) : added.forEach(onAdd),\n open,\n close: () => setOpen(false),\n defaultView: defaultDialog,\n })\n : defaultDialog}\n </>\n );\n}\n\nfunction parseResponseJSON(response: ExecutionResponse): unknown {\n const text = response.stdout || response.output || \"\";\n if (!text.trim()) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\nfunction markAttachedRows(\n response: ExecutionResponse | undefined,\n surfaceKey: string | undefined,\n existingIDs: Set<string>,\n): ExecutionResponse | undefined {\n if (!response || !surfaceKey || existingIDs.size === 0 || !response.parsed)\n return response;\n const parsed = response.parsed as Partial<ClickyDocument> &\n Partial<ClickyNode>;\n const node = parsed.version === 1 && parsed.node ? parsed.node : parsed;\n if (node.kind !== \"table\" || !node.rows?.length) return response;\n const tableNode = node as ClickyNode;\n const attached = tableNode.rows!.map((row) => {\n const id = getClickyRowId(row);\n return !!id && existingIDs.has(entityContextItemID(surfaceKey, id));\n });\n if (!attached.some(Boolean)) return response;\n\n const markerColumn = {\n name: \"__chat_context\",\n label: \"Context\",\n shrink: true,\n };\n const markedNode: ClickyNode = {\n ...tableNode,\n kind: \"table\",\n columns: [...(tableNode.columns ?? []), markerColumn],\n rows: tableNode.rows!.map((row, index) => ({\n ...row,\n cells: {\n ...row.cells,\n __chat_context: attached[index]\n ? { kind: \"badge\", badgeLabel: \"Attached\" }\n : { kind: \"text\", text: \"\", plain: \"\" },\n },\n })),\n };\n return {\n ...response,\n parsed:\n parsed.version === 1\n ? { ...(parsed as ClickyDocument), node: markedNode }\n : markedNode,\n };\n}\n\nfunction PickerError({ error, prefix }: { error: unknown; prefix: string }) {\n const message = error instanceof Error ? error.message : String(error);\n return (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n <span className=\"font-medium\">{prefix}:</span> {message}\n </div>\n );\n}\n"],"names":["useOperations","useState","useMemo","getClickySurfaces","filterOperationsBySurface","findSurfaceListOperation","findSurfaceDetailOperation","useEffect","useDebouncedRecord","packParameterValues","packLookupParameterValues","useQuery","_a","keepPreviousData","parametersToFormConfig","dataTablePaginationFromForm","useCallback","getClickyRowId","entityContextItemID","clickyRowRecord","getOperationClickyMeta","contextItemFromEntityRow","resolveSurfaceIcon","UiTable","jsx","DropdownMenu","UiAdd","Modal","jsxs","Button","CommandOutput","Fragment"],"mappings":";;;;;;;;;;;;;;;;;AAuHO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAsC;;AACpC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EAAA,IACTA,cAAAA,cAAc,MAAM;AACxB,QAAM,CAAC,MAAM,OAAO,IAAIC,MAAAA,SAAS,KAAK;AACtC,QAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAAS,EAAE;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAA0B,CAAA,CAAE;AAC1D,QAAM,CAAC,cAAc,eAAe,IAAIA,MAAAA;AAAAA,IACtC,CAAA;AAAA,EAAC;AAEH,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,KAAK;AAChD,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,EAAE;AAEjD,QAAM,WAAWC,MAAAA,QAA0B,MAAM;AAC/C,WAAOC,eAAAA,kBAAkB,IAAI,EAC1B,QAAQ,CAAC,YAA8B;AACtC,YAAM,oBAAoBC,eAAAA;AAAAA,QACxB;AAAA,QACA,QAAQ;AAAA,MAAA;AAEV,YAAM,gBAAgBC,eAAAA;AAAAA,QACpB;AAAA,QACA,QAAQ;AAAA,MAAA;AAEV,UAAI,CAAC,iBAAiB,cAAc,OAAO,kBAAkB;AAC3D,eAAO,CAAA;AACT,UAAI,iBAAiB,CAAC,cAAc,SAAS,aAAa,UAAU,CAAA;AACpE,YAAM,kBAAkBC,eAAAA;AAAAA,QACtB;AAAA,QACA,QAAQ;AAAA,MAAA;AAEV,aAAO;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA,GAAI,kBAAkB,EAAE,oBAAoB,CAAA;AAAA,QAAC;AAAA,MAC/C;AAAA,IAEJ,CAAC,EACA,KAAK,CAAC,MAAM,UAAU;AACrB,YAAM,aACJ,6CAAe,KAAK,SAAS,KAAK,mBAClC,KAAK,QAAQ,UACb;AACF,YAAM,cACJ,6CAAe,MAAM,SAAS,MAAM,mBACpC,MAAM,QAAQ,UACd;AACF,aACE,UAAU,cAAc,UAAU,KAClC,KAAK,QAAQ,MAAM,cAAc,MAAM,QAAQ,KAAK;AAAA,IAExD,CAAC;AAAA,EACL,GAAG,CAAC,YAAY,MAAM,eAAe,YAAY,CAAC;AAElDC,QAAAA,UAAU,MAAM;AACd,eAAW,CAAA,CAAE;AACb,oBAAgB,CAAA,CAAE;AAClB,mBAAe,EAAE;AAAA,EACnB,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,WAAW,SAAS,KAAK,CAAC,UAAU,MAAM,QAAQ,QAAQ,UAAU;AAC1E,QAAM,cAAa,qCAAU,cAAc,UAAU,eAAc,CAAA;AACnE,QAAM,mBAAmBC,aAAAA,mBAAmB,SAAS,GAAG;AACxD,QAAM,gBAAgBN,MAAAA;AAAAA,IACpB,MAAMO,aAAAA,oBAAoB,kBAAkB,UAAU;AAAA,IACtD,CAAC,kBAAkB,UAAU;AAAA,EAAA;AAE/B,QAAM,sBAAsBP,MAAAA;AAAAA,IAC1B,MAAMQ,aAAAA,0BAA0B,kBAAkB,UAAU;AAAA,IAC5D,CAAC,kBAAkB,UAAU;AAAA,EAAA;AAG/B,QAAM,cAAcC,WAAAA,SAAS;AAAA,IAC3B,UAAU;AAAA,MACR;AAAA,MACA,qCAAU,cAAc;AAAA,MACxB;AAAA,IAAA;AAAA,IAEF,SAAS,YAAA;;AACN,qBAAMC,MAAA,OAAO,kBAAP,gBAAAA,IAAA;AAAA;AAAA,QACL,SAAU,cAAc;AAAA,QACxB,SAAU,cAAc;AAAA,QACxB;AAAA,QACA,EAAE,QAAQ,0BAAA;AAAA,YACN,EAAE,SAAS,GAAC;AAAA;AAAA,IACpB,SACE,QACA,CAAC,CAAC,YACF,CAAC,CAAC,OAAO,iBACT,WAAW,KAAK,CAAC,cAAc,UAAU,OAAO,OAAO;AAAA,IACzD,iBAAiBC,WAAAA;AAAAA,IACjB,WAAW;AAAA,IACX,OAAO;AAAA,EAAA,CACR;AAED,QAAM,YAAYF,WAAAA,SAA4B;AAAA,IAC5C,UAAU;AAAA,MACR;AAAA,MACA,qCAAU,cAAc;AAAA,MACxB;AAAA,IAAA;AAAA,IAEF,SAAS,MACP,OAAO;AAAA,MACL,SAAU,cAAc;AAAA,MACxB,SAAU,cAAc;AAAA,MACxB;AAAA,MACA,EAAE,QAAQ,0BAAA;AAAA,IAA0B;AAAA,IAExC,SAAS,QAAQ,CAAC,CAAC;AAAA,IACnB,iBAAiBE,WAAAA;AAAAA,IACjB,WAAW;AAAA,IACX,OAAO;AAAA,EAAA,CACR;AAID,QAAM,gBAAe,kCAAM,eAAN,mBAAmB;AACxC,QAAM,eAAeX,MAAAA;AAAAA,IACnB,MACEY,oCAAuB,YAAY,SAAS,YAAY;AAAA,MACtD,kBAAkB,CAAC,OAAO;AAAA,MAC1B,QAAQ,YAAY;AAAA,MACpB,YAAY;AAAA,IAAA,CACb;AAAA,IACH,CAAC,SAAS,cAAc,YAAY,MAAM,UAAU;AAAA,EAAA;AAEtD,QAAM,aAAaZ,MAAAA;AAAAA,IACjB,MAAMa,aAAAA,4BAA4B,aAAa,YAAY,UAAU,IAAI;AAAA,IACzE,CAAC,aAAa,YAAY,UAAU,IAAI;AAAA,EAAA;AAE1C,QAAM,cAAcb,MAAAA;AAAAA,IAClB,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAAA,IAC1C,CAAC,KAAK;AAAA,EAAA;AAER,QAAM,qBAAqBA,MAAAA;AAAAA,IACzB,MAAM,iBAAiB,UAAU,MAAM,qCAAU,QAAQ,KAAK,WAAW;AAAA,IACzE,CAAC,aAAa,UAAU,MAAM,qCAAU,QAAQ,GAAG;AAAA,EAAA;AAGrD,QAAM,aAAac,MAAAA;AAAAA,IACjB,OAAO,QAAmB;;AACxB,UAAI,CAAC,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAC7D,YAAM,WAAWC,cAAAA,eAAe,GAAG;AACnC,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AACA,YAAM,YAAYC,mCAAAA,oBAAoB,SAAS,QAAQ,KAAK,QAAQ;AACpE,UAAI,YAAY,IAAI,SAAS,GAAG;AAC9B,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAEA,UAAI,SAAkBC,mCAAAA,gBAAgB,GAAG;AACzC,UAAI,SAAS,iBAAiB;AAC5B,cAAM,aAAaC,eAAAA,uBAAuB,SAAS,eAAe;AAClE,cAAM,WACJ,yCAAY,cACZ,MAAAR,MAAA,SAAS,gBAAgB,UAAU,eAAnC,gBAAAA,IAA+C;AAAA,UAC7C,CAAC,cAAc,UAAU,OAAO;AAAA,cADlC,mBAEG,SACH;AACF,cAAM,uBAAuB,IAAI;AAAA,YAC/B,cAAS,gBAAgB,UAAU,eAAnC,mBAA+C;AAAA,YAC7C,CAAC,cAAc,UAAU;AAAA,gBACtB,CAAA;AAAA,QAAC;AAER,cAAM,eAAe,OAAO;AAAA,UAC1B,OAAO,QAAQ,aAAa,EAAE;AAAA,YAAO,CAAC,CAAC,GAAG,MACxC,qBAAqB,IAAI,GAAG;AAAA,UAAA;AAAA,QAC9B;AAEF,qBAAa,OAAO,IAAI;AACxB,cAAM,WAAW,MAAM,OAAO;AAAA,UAC5B,SAAS,gBAAgB;AAAA,UACzB,SAAS,gBAAgB;AAAA,UACzB;AAAA,UACA,EAAE,QAAQ,mBAAA;AAAA,QAAmB;AAE/B,iBAAS,SAAS,UAAU,kBAAkB,QAAQ,KAAK;AAAA,MAC7D;AAEA,YAAM,cAAcS,mCAAAA;AAAAA,QAClB,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAEF,UAAI,CAAC;AACH,cAAM,IAAI,MAAM,8CAA8C;AAChE,aAAO;AAAA,IACT;AAAA,IACA,CAAC,QAAQ,aAAa,eAAe,QAAQ;AAAA,EAAA;AAG/C,QAAM,iBAAiBL,MAAAA,YAAY,YAAY;AAC7C,UAAM,OAAO,OAAO,OAAO,YAAY;AACvC,QAAI,KAAK,WAAW,EAAG;AACvB,iBAAa,IAAI;AACjB,mBAAe,EAAE;AACjB,UAAM,UAAU,MAAM,QAAQ,WAAW,KAAK,IAAI,UAAU,CAAC;AAC7D,UAAM,QAAQ,QAAQ;AAAA,MAAQ,CAAC,WAC7B,OAAO,WAAW,cAAc,CAAC,OAAO,KAAK,IAAI,CAAA;AAAA,IAAC;AAEpD,UAAM,WAAW,QAAQ;AAAA,MAAQ,CAAC,WAChC,OAAO,WAAW,aAAa,CAAC,OAAO,MAAM,IAAI,CAAA;AAAA,IAAC;AAEpD,QAAI,MAAM,SAAS,GAAG;AACpB,UAAI,qBAAqB,KAAK;AAAA,UACzB,OAAM,QAAQ,KAAK;AAAA,IAC1B;AACA,iBAAa,KAAK;AAClB,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,QAAQ,SAAS,CAAC;AACxB;AAAA,QACE,GAAG,SAAS,MAAM,UAAU,SAAS,WAAW,IAAI,KAAK,GAAG,2BAA2B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MAAA;AAE/I;AAAA,IACF;AACA,oBAAgB,CAAA,CAAE;AAClB,YAAQ,KAAK;AAAA,EACf,GAAG,CAAC,YAAY,OAAO,WAAW,YAAY,CAAC;AAE/C,QAAM,YAAYd,MAAAA,QAA4B,MAAM;;AAGlD,UAAM,SAA+D,CAAA;AACrE,UAAM,8BAAc,IAAA;AACpB,eAAW,SAAS,UAAU;AAC5B,YAAM,SACJ,6CAAe,MAAM,SAAS,MAAM,mBACpC,MAAM,QAAQ,UACd;AACF,YAAM,SACJ,6CAAe,MAAM,SAAS,MAAM,mBACpC,MAAM,QAAQ;AAChB,YAAM,QACJ,2CAAc,MAAM,SAAS,MAAM,mBACnCoB,eAAAA,mBAAmB,MAAM,QAAQ,IAAI,KACrCC,QAAAA;AACF,YAAM,YAAY,6CAAe,MAAM,SAAS,MAAM;AACtD,YAAM,OAAyB;AAAA,QAC7B;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,QAChC,UAAU,MAAM;AACd,wBAAc,MAAM,QAAQ,GAAG;AAC/B,kBAAQ,IAAI;AAAA,QACd;AAAA,MAAA;AAEF,UAAI,SAAS,QAAQ,IAAI,KAAK;AAC9B,UAAI,CAAC,QAAQ;AACX,iBAAS,CAAA;AACT,gBAAQ,IAAI,OAAO,MAAM;AACzB,eAAO,KAAK,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACvC;AACA,aAAO,KAAK,IAAI;AAAA,IAClB;AAIA,QAAI,OAAO,UAAU,EAAG,UAAOX,MAAA,OAAO,CAAC,MAAR,gBAAAA,IAAW,WAAU,CAAA;AAEpD,WAAO,OAAO,IAAI,CAAC,EAAE,OAAO,aAA+B;;AACzD,YAAM,aAAa,uDAAoB;AAIvC,YAAM,SAAS,GAAG,KAAK;AACvB,YAAM,WAAW,OAAO;AAAA,QAAI,CAAC,SAC3B,OAAO,KAAK,UAAU,YAAY,KAAK,MAAM,WAAW,MAAM,IAC1D,EAAE,GAAG,MAAM,OAAO,KAAK,MAAM,MAAM,OAAO,MAAM,MAChD;AAAA,MAAA;AAEN,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAM,qDAAmB,aAAUA,MAAA,OAAO,CAAC,MAAR,gBAAAA,IAAW,SAAQW,QAAAA;AAAAA,QACtD,GAAI,aAAa,EAAE,WAAW,WAAA,IAAe,CAAA;AAAA,QAC7C,UAAU,MAAM;AAAA,QAAC;AAAA,QACjB;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,gBAAgB,OAAO,KAAK,YAAY,EAAE;AAChD,QAAM,gBAAgB,YACjB,6CAAe,SAAS,SAAS,SAAS,mBAC3C,SAAS,QAAQ,QACjB;AAEJ,QAAM,UACJC,2BAAAA;AAAAA,IAACC,aAAAA;AAAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,MAAMC,MAAAA;AAAAA,MACN,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,WAAU;AAAA,MACV,eAAc;AAAA,MACd,OACE,UAAU,SAAS,IACf,YACA;AAAA,QACE;AAAA,UACE,OAAO,oBACH,0BACA;AAAA,UACJ,UAAU;AAAA,UACV,UAAU,MAAM;AAAA,UAAC;AAAA,QAAA;AAAA,MACnB;AAAA,IACF;AAAA,EAAA;AAKV,QAAM,gBACFF,2BAAAA;AAAAA,IAACG,MAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAS,MAAM,QAAQ,KAAK;AAAA,MAC5B,OAAO,OAAO,aAAa;AAAA,MAC3B,MAAK;AAAA,MACL,YAAU;AAAA,MACV,YAAY;AAAA,MACZ,QACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,QAAAJ,2BAAAA,IAAC,QAAA,EAAK,WAAU,iCACb,UAAA,kBAAkB,IACf,+CACA,GAAG,aAAa,UAAU,kBAAkB,IAAI,KAAK,GAAG,aAC9D;AAAA,QACAI,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAAJ,2BAAAA;AAAAA,YAACK,OAAAA;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM,QAAQ,KAAK;AAAA,cAC5B,UAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGDL,2BAAAA;AAAAA,YAACK,OAAAA;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,KAAK,eAAA;AAAA,cACpB,UAAU,kBAAkB,KAAK;AAAA,cAEhC,UAAA,YACG,YACA,gBAAgB,IACd,OAAO,aAAa,UAAU,kBAAkB,IAAI,KAAK,GAAG,KAC5D;AAAA,YAAA;AAAA,UAAA;AAAA,QACR,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAGF,UAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,QAAA,SAAS,WAAW,KAAK,CAAC,mDACxB,KAAA,EAAE,WAAU,iCAAgC,UAAA,+CAAA,CAE7C,IACE;AAAA,QACH,YAAY,QACXJ,+BAAC,aAAA,EAAY,OAAO,YAAY,OAAO,QAAO,eAAA,CAAe,IAC3D;AAAA,QACH,UAAU,QACTA,+BAAC,aAAA,EAAY,OAAO,UAAU,OAAO,QAAO,eAAA,CAAe,IACzD;AAAA,QACH,cACCA,2BAAAA,IAAC,aAAA,EAAY,OAAO,aAAa,QAAO,iBAAgB,IACtD;AAAA,QACH,2CACE,OAAA,EAAI,MAAK,UAAS,WAAU,iCAAgC,6DAE7D,IACE;AAAA,QAEH,WACCA,2BAAAA;AAAAA,UAACM,cAAAA;AAAAA,UAAA;AAAA,YACC,MAAI;AAAA,YACJ,WAAU;AAAA,YACV,UAAU,sBAAsB;AAAA,YAChC,SAAS,UAAU,aAAa,UAAU;AAAA,YAC1C,gBAAe;AAAA,YACf,cAAa;AAAA,YACb,WAAU;AAAA,YACV,cAAc;AAAA,cACZ,gBAAgB,OAAO,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA,cAIxC,mBAAmB,CAAC,SAAS,SAAS;AACpC,sBAAM,UAAU,IAAI;AAAA,kBAClB,KAAK,QAAQ,CAAC,QAAQ;AACpB,0BAAM,KAAKb,cAAAA,eAAe,GAAG;AAC7B,2BAAO,KAAK,CAAC,CAAC,IAAI,GAAG,CAAU,IAAI,CAAA;AAAA,kBACrC,CAAC;AAAA,gBAAA;AAEH;AAAA,kBAAgB,CAAC,SACf,OAAO;AAAA,oBACL,QAAQ,QAAQ,CAAC,OAAO;AACtB,4BAAM,MAAM,QAAQ,IAAI,EAAE,KAAK,KAAK,EAAE;AACtC,6BAAO,MAAM,CAAC,CAAC,IAAI,GAAG,CAAU,IAAI,CAAA;AAAA,oBACtC,CAAC;AAAA,kBAAA;AAAA,gBACH;AAAA,cAEJ;AAAA,cACA,UAAU,CAAC,KAAK,UACdA,cAAAA,eAAe,GAAG,KAAK,eAAe,KAAK;AAAA,cAC7C,iBAAiB,CAAC,QAAQ;AACxB,sBAAM,KAAKA,cAAAA,eAAe,GAAG;AAC7B,uBACE,CAAC,CAAC,MACF,CAAC,YAAY;AAAA,kBACXC,mCAAAA,oBAAoB,SAAS,QAAQ,KAAK,EAAE;AAAA,gBAAA;AAAA,cAGlD;AAAA,cACA,kBAAkB;AAAA,YAAA;AAAA,YAEnB,GAAI,aAAa,SAAS,EAAE,QAAQ,aAAa,OAAA,IAAW,CAAA;AAAA,YAC5D,GAAI,aAAa,YACd,EAAE,WAAW,aAAa,UAAA,IAC1B,CAAA;AAAA,YACH,GAAI,aAAa,QAAQ,SACtB,EAAE,iBAAiB,aAAa,QAAA,IAChC,CAAA;AAAA,YACH,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,YAClC,GAAI,aAAa,OACd;AAAA,cACE,MAAM,aAAa,KAAK;AAAA,cACxB,cAAc,aAAa,KAAK;AAAA,YAAA,IAElC,CAAA;AAAA,UAAC;AAAA,QAAA,IAEL;AAAA,QAEH,MAAM,SACLU,gCAAC,KAAA,EAAE,WAAU,iCACV,UAAA;AAAA,UAAA,MAAM;AAAA,UAAO;AAAA,UAAU,MAAM,WAAW,IAAI,WAAW;AAAA,UAAW;AAAA,UAAI;AAAA,QAAA,EAAA,CAEzE,IACE;AAAA,MAAA,EAAA,CACN;AAAA,IAAA;AAAA,EAAA;AAIN,SACEA,2BAAAA,KAAAG,qBAAA,EACG,UAAA;AAAA,IAAA;AAAA,IACA,YAAY,kBACT,gBAAgB;AAAA,MACd,SAAS,SAAS;AAAA,MAClB,eAAe,SAAS;AAAA,MACxB,GAAI,SAAS,kBACT,EAAE,iBAAiB,SAAS,gBAAA,IAC5B,CAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA,WAAW,CAAC,UACV,YAAY,UAAU,KAAK,IAAI,MAAM,QAAQ,KAAK;AAAA,MACpD;AAAA,MACA,OAAO,MAAM,QAAQ,KAAK;AAAA,MAC1B,aAAa;AAAA,IAAA,CACd,IACD;AAAA,EAAA,GACN;AAEJ;AAEA,SAAS,kBAAkB,UAAsC;AAC/D,QAAM,OAAO,SAAS,UAAU,SAAS,UAAU;AACnD,MAAI,CAAC,KAAK,KAAA,EAAQ,QAAO;AACzB,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBACP,UACA,YACA,aAC+B;;AAC/B,MAAI,CAAC,YAAY,CAAC,cAAc,YAAY,SAAS,KAAK,CAAC,SAAS;AAClE,WAAO;AACT,QAAM,SAAS,SAAS;AAExB,QAAM,OAAO,OAAO,YAAY,KAAK,OAAO,OAAO,OAAO,OAAO;AACjE,MAAI,KAAK,SAAS,WAAW,GAAC,UAAK,SAAL,mBAAW,QAAQ,QAAO;AACxD,QAAM,YAAY;AAClB,QAAM,WAAW,UAAU,KAAM,IAAI,CAAC,QAAQ;AAC5C,UAAM,KAAKd,cAAAA,eAAe,GAAG;AAC7B,WAAO,CAAC,CAAC,MAAM,YAAY,IAAIC,uDAAoB,YAAY,EAAE,CAAC;AAAA,EACpE,CAAC;AACD,MAAI,CAAC,SAAS,KAAK,OAAO,EAAG,QAAO;AAEpC,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAEV,QAAM,aAAyB;AAAA,IAC7B,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS,CAAC,GAAI,UAAU,WAAW,CAAA,GAAK,YAAY;AAAA,IACpD,MAAM,UAAU,KAAM,IAAI,CAAC,KAAK,WAAW;AAAA,MACzC,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,IAAI;AAAA,QACP,gBAAgB,SAAS,KAAK,IAC1B,EAAE,MAAM,SAAS,YAAY,WAAA,IAC7B,EAAE,MAAM,QAAQ,MAAM,IAAI,OAAO,GAAA;AAAA,MAAG;AAAA,IAC1C,EACA;AAAA,EAAA;AAEJ,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QACE,OAAO,YAAY,IACf,EAAE,GAAI,QAA2B,MAAM,eACvC;AAAA,EAAA;AAEV;AAEA,SAAS,YAAY,EAAE,OAAO,UAA8C;AAC1E,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SACEU,2BAAAA,KAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,eAAe,UAAA;AAAA,MAAA;AAAA,MAAO;AAAA,IAAA,GAAC;AAAA,IAAO;AAAA,IAAE;AAAA,EAAA,GAClD;AAEJ;;"}
1
+ {"version":3,"file":"OperationEntityContextPicker.cjs","sources":["../../src/rpc/OperationEntityContextPicker.tsx"],"sourcesContent":["import { useCallback, useMemo, useState, type ReactNode } from \"react\";\nimport type { ClickyRow } from \"../data/Clicky\";\nimport type { StaticIconComponent } from \"../data/Icon\";\nimport type { ChatContextItem } from \"../data/ai/context\";\nimport { UiAdd, UiTable } from \"../icons\";\nimport { DropdownMenu, type DropdownMenuItem } from \"../overlay/DropdownMenu\";\nimport { packParameterValues, type ParameterValues } from \"./formMetadata\";\nimport {\n filterOperationsBySurface,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getClickySurfaces,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport { OperationEntityPicker } from \"./OperationEntityPicker\";\nimport { getClickyRowId } from \"./rowNavigation\";\nimport { resolveSurfaceIcon } from \"./surfaceIconMap\";\nimport type {\n ClickySurface,\n ExecutionResponse,\n ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n clickyRowRecord,\n contextItemFromEntityRow,\n entityContextItemID,\n} from \"./OperationEntityContextPicker.model\";\n\nexport type EntityContextSurfaceFilter = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => boolean;\n\nexport type EntityContextSurfaceText = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string;\n\nexport type EntityContextSurfaceIcon = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string | StaticIconComponent | undefined;\n\nexport type EntityContextSurfaceColor = (\n surface: ClickySurface,\n listOperation: ResolvedOperation,\n) => string | undefined;\n\nexport type EntityContextGroupIcon = (\n group: string,\n) => string | StaticIconComponent | undefined;\n\nexport type EntityContextGroupColor = (group: string) => string | undefined;\n\n// EntityContextSurfaceRenderContext is handed to a host-supplied surfaceRenderer\n// so it can replace the picker dialog for selected surfaces, the way\n// ResultRenderer replaces a result surface. The generic dialog lists whatever\n// the entity's list operation returns, which is the right default and the wrong\n// answer for a surface the host already browses with a purpose-built UI — a\n// document tree, a map, a calendar. `defaultView` is the standard dialog;\n// return it unchanged to keep it.\n//\n// The whole dialog is replaced rather than only its body: a replacement that\n// owns selection has to own the confirm button too, or the footer would count\n// rows the host is no longer tracking.\nexport type EntityContextSurfaceRenderContext = {\n surface: ClickySurface;\n listOperation: ResolvedOperation;\n detailOperation?: ResolvedOperation;\n /** Already-attached items, so a replacement can disable them. */\n items: ChatContextItem[];\n onAdd: (item: ChatContextItem) => void;\n onAddMany: (items: ChatContextItem[]) => void;\n /** True while this surface is the one chosen from the dropdown. */\n open: boolean;\n close: () => void;\n defaultView: ReactNode;\n};\n\nexport type EntityContextSurfaceRenderer = (\n ctx: EntityContextSurfaceRenderContext,\n) => ReactNode;\n\nexport type OperationEntityContextPickerProps = {\n client: OperationsApiClient;\n items: ChatContextItem[];\n onAdd: (item: ChatContextItem) => void;\n onAddMany?: (items: ChatContextItem[]) => void;\n surfaceFilter?: EntityContextSurfaceFilter;\n surfaceLabel?: EntityContextSurfaceText;\n surfaceGroup?: EntityContextSurfaceText;\n surfaceIcon?: EntityContextSurfaceIcon;\n surfaceColor?: EntityContextSurfaceColor;\n /** Icon for a top-level provider/group row (the submenu trigger). */\n surfaceGroupIcon?: EntityContextGroupIcon;\n /** Icon colour for a top-level provider/group row. */\n surfaceGroupColor?: EntityContextGroupColor;\n /** Replaces the picker dialog for surfaces the host browses its own way. */\n surfaceRenderer?: EntityContextSurfaceRenderer;\n triggerLabel?: string;\n};\n\ntype ContextSurface = {\n surface: ClickySurface;\n listOperation: ResolvedOperation;\n detailOperation?: ResolvedOperation;\n};\n\nconst plural = (count: number) => (count === 1 ? \"\" : \"s\");\n\nexport function OperationEntityContextPicker({\n client,\n items,\n onAdd,\n onAddMany,\n surfaceFilter,\n surfaceLabel,\n surfaceGroup,\n surfaceIcon,\n surfaceColor,\n surfaceGroupIcon,\n surfaceGroupColor,\n surfaceRenderer,\n triggerLabel = \"Add context\",\n}: OperationEntityContextPickerProps) {\n const {\n operations,\n spec,\n isLoading: operationsLoading,\n } = useOperations(client);\n const [open, setOpen] = useState(false);\n const [surfaceKey, setSurfaceKey] = useState(\"\");\n\n const surfaces = useMemo<ContextSurface[]>(() => {\n return getClickySurfaces(spec)\n .flatMap((surface): ContextSurface[] => {\n const surfaceOperations = filterOperationsBySurface(\n operations,\n surface.key,\n );\n const listOperation = findSurfaceListOperation(\n surfaceOperations,\n surface.key,\n );\n if (!listOperation || listOperation.method.toUpperCase() !== \"GET\")\n return [];\n if (surfaceFilter && !surfaceFilter(surface, listOperation)) return [];\n const detailOperation = findSurfaceDetailOperation(\n surfaceOperations,\n surface.key,\n );\n return [\n {\n surface,\n listOperation,\n ...(detailOperation ? { detailOperation } : {}),\n },\n ];\n })\n .sort((left, right) => {\n const leftGroup =\n surfaceGroup?.(left.surface, left.listOperation) ??\n left.surface.parent ??\n \"\";\n const rightGroup =\n surfaceGroup?.(right.surface, right.listOperation) ??\n right.surface.parent ??\n \"\";\n return (\n leftGroup.localeCompare(rightGroup) ||\n left.surface.title.localeCompare(right.surface.title)\n );\n });\n }, [operations, spec, surfaceFilter, surfaceGroup]);\n\n const selected = surfaces.find((entry) => entry.surface.key === surfaceKey);\n const existingIDs = useMemo(\n () => new Set(items.map((item) => item.id)),\n [items],\n );\n\n const hydrateRow = useCallback(\n async (row: ClickyRow, listFilters: ParameterValues) => {\n if (!selected) throw new Error(\"Select an entity type first.\");\n const recordID = getClickyRowId(row);\n if (!recordID) {\n throw new Error(\"This row does not expose a stable record ID.\");\n }\n const contextID = entityContextItemID(selected.surface.key, recordID);\n if (existingIDs.has(contextID)) {\n throw new Error(\"This record is already attached.\");\n }\n\n let record: unknown = clickyRowRecord(row);\n if (selected.detailOperation) {\n const detailMeta = getOperationClickyMeta(selected.detailOperation);\n const idParam =\n detailMeta?.idParam ??\n selected.detailOperation.operation.parameters?.find(\n (parameter) => parameter.in === \"path\",\n )?.name ??\n \"id\";\n const detailParameterNames = new Set(\n selected.detailOperation.operation.parameters?.map(\n (parameter) => parameter.name,\n ) ?? [],\n );\n // The list's own scope (a database, an environment) rides along to the\n // detail call wherever the detail operation accepts the same parameter.\n const packedFilters = packParameterValues(\n listFilters,\n selected.listOperation.operation.parameters ?? [],\n );\n const detailParams = Object.fromEntries(\n Object.entries(packedFilters).filter(([key]) =>\n detailParameterNames.has(key),\n ),\n );\n detailParams[idParam] = recordID;\n const response = await client.executeCommand(\n selected.detailOperation.path,\n selected.detailOperation.method,\n detailParams,\n { Accept: \"application/json\" },\n );\n record = response.parsed ?? parseResponseJSON(response) ?? record;\n }\n\n const contextItem = contextItemFromEntityRow(\n selected.surface,\n row,\n record,\n );\n if (!contextItem)\n throw new Error(\"This row does not expose a stable record ID.\");\n return contextItem;\n },\n [client, existingIDs, selected],\n );\n\n // Adds every record that hydrates, then rejects with the failures so the\n // picker keeps the dialog open and shows them.\n const attachRows = useCallback(\n async (rows: ClickyRow[], listFilters: ParameterValues) => {\n const results = await Promise.allSettled(\n rows.map((row) => hydrateRow(row, listFilters)),\n );\n const added = results.flatMap((result) =>\n result.status === \"fulfilled\" ? [result.value] : [],\n );\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (added.length > 0) {\n if (onAddMany) onAddMany(added);\n else added.forEach(onAdd);\n }\n if (failures.length > 0) {\n const first = failures[0];\n throw new Error(\n `${failures.length} record${plural(failures.length)} could not be attached: ${first instanceof Error ? first.message : String(first)}`,\n );\n }\n },\n [hydrateRow, onAdd, onAddMany],\n );\n\n const menuItems = useMemo<DropdownMenuItem[]>(() => {\n // `surfaces` is pre-sorted by group then title, so bucketing by group in\n // insertion order yields a stable provider → type tree without re-sorting.\n const groups: Array<{ group: string; leaves: DropdownMenuItem[] }> = [];\n const byGroup = new Map<string, DropdownMenuItem[]>();\n for (const entry of surfaces) {\n const group =\n surfaceGroup?.(entry.surface, entry.listOperation) ??\n entry.surface.parent ??\n \"Other\";\n const label =\n surfaceLabel?.(entry.surface, entry.listOperation) ??\n entry.surface.title;\n const icon =\n surfaceIcon?.(entry.surface, entry.listOperation) ??\n resolveSurfaceIcon(entry.surface.icon) ??\n UiTable;\n const iconColor = surfaceColor?.(entry.surface, entry.listOperation);\n const leaf: DropdownMenuItem = {\n label,\n title: label,\n icon,\n ...(iconColor ? { iconColor } : {}),\n onSelect: () => {\n setSurfaceKey(entry.surface.key);\n setOpen(true);\n },\n };\n let bucket = byGroup.get(group);\n if (!bucket) {\n bucket = [];\n byGroup.set(group, bucket);\n groups.push({ group, leaves: bucket });\n }\n bucket.push(leaf);\n }\n\n // A single group would nest everything under one lone submenu; render its\n // types flat instead.\n if (groups.length <= 1) return groups[0]?.leaves ?? [];\n\n return groups.map(({ group, leaves }): DropdownMenuItem => {\n const groupColor = surfaceGroupColor?.(group);\n // A submenu child already sits under its group header — don't repeat the\n // group name in the child label. The tooltip (title) and the detail dialog\n // keep the full label.\n const prefix = `${group} `;\n const children = leaves.map((leaf) =>\n typeof leaf.label === \"string\" && leaf.label.startsWith(prefix)\n ? { ...leaf, label: leaf.label.slice(prefix.length) }\n : leaf,\n );\n return {\n label: group,\n title: group,\n icon: surfaceGroupIcon?.(group) ?? leaves[0]?.icon ?? UiTable,\n ...(groupColor ? { iconColor: groupColor } : {}),\n onSelect: () => {},\n children,\n };\n });\n }, [\n surfaceColor,\n surfaceGroup,\n surfaceGroupColor,\n surfaceGroupIcon,\n surfaceIcon,\n surfaceLabel,\n surfaces,\n ]);\n\n const trigger = (\n <DropdownMenu\n label={triggerLabel}\n icon={UiAdd}\n variant=\"ghost\"\n size=\"sm\"\n align=\"left\"\n menuLabel=\"Context entity types\"\n menuClassName=\"min-w-56\"\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n label: operationsLoading\n ? \"Loading entity types…\"\n : \"No entity listings available\",\n disabled: true,\n onSelect: () => {},\n },\n ]\n }\n />\n );\n\n if (!selected) return trigger;\n\n const selectedLabel =\n surfaceLabel?.(selected.surface, selected.listOperation) ??\n selected.surface.title;\n const selectedSurfaceKey = selected.surface.key;\n const defaultDialog = (\n <OperationEntityPicker\n open={open}\n onClose={() => setOpen(false)}\n title={`Add ${selectedLabel} context`}\n client={client}\n surfaceKey={selectedSurfaceKey}\n mode=\"multi\"\n onSelect={(_ids, rows, { filters }) => attachRows(rows, filters)}\n unavailableRows={{\n isUnavailable: (row) => {\n const id = getClickyRowId(row);\n return (\n !!id && existingIDs.has(entityContextItemID(selectedSurfaceKey, id))\n );\n },\n label: \"Attached\",\n columnLabel: \"Context\",\n }}\n selectLabel={({ count, pending }) =>\n pending\n ? \"Adding…\"\n : count > 0\n ? `Add ${count} record${plural(count)}`\n : \"Add records\"\n }\n note={\n items.length ? (\n <p className=\"text-xs text-muted-foreground\">\n {items.length} context {items.length === 1 ? \"record\" : \"records\"}{\" \"}\n attached. Attached rows are disabled.\n </p>\n ) : null\n }\n />\n );\n\n return (\n <>\n {trigger}\n {surfaceRenderer\n ? surfaceRenderer({\n surface: selected.surface,\n listOperation: selected.listOperation,\n ...(selected.detailOperation\n ? { detailOperation: selected.detailOperation }\n : {}),\n items,\n onAdd,\n onAddMany: (added) =>\n onAddMany ? onAddMany(added) : added.forEach(onAdd),\n open,\n close: () => setOpen(false),\n defaultView: defaultDialog,\n })\n : defaultDialog}\n </>\n );\n}\n\nfunction parseResponseJSON(response: ExecutionResponse): unknown {\n const text = response.stdout || response.output || \"\";\n if (!text.trim()) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"names":["useOperations","useState","useMemo","getClickySurfaces","filterOperationsBySurface","findSurfaceListOperation","findSurfaceDetailOperation","useCallback","getClickyRowId","entityContextItemID","clickyRowRecord","getOperationClickyMeta","packParameterValues","contextItemFromEntityRow","resolveSurfaceIcon","UiTable","_a","jsx","DropdownMenu","UiAdd","OperationEntityPicker","jsxs","Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OperationEntityContextPicker.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationEntityContextPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAsB1D,OAAO,KAAK,EACV,aAAa,EAEb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO1E,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,OAAO,CAAC;AAEb,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,CAAC;AAEZ,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,GAAG,SAAS,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAa5E,MAAM,MAAM,iCAAiC,GAAG;IAC9C,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,iEAAiE;IACjE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CACzC,GAAG,EAAE,iCAAiC,KACnC,SAAS,CAAC;AAEf,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,4EAA4E;IAC5E,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAQF,wBAAgB,4BAA4B,CAAC,EAC3C,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAA4B,GAC7B,EAAE,iCAAiC,+BA4dnC"}
1
+ {"version":3,"file":"OperationEntityContextPicker.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationEntityContextPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D,OAAO,KAAK,EACV,aAAa,EAEb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO1E,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,OAAO,CAAC;AAEb,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,CAAC;AAEZ,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,iBAAiB,KAC7B,MAAM,GAAG,SAAS,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAa5E,MAAM,MAAM,iCAAiC,GAAG;IAC9C,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,iEAAiE;IACjE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,mEAAmE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CACzC,GAAG,EAAE,iCAAiC,KACnC,SAAS,CAAC;AAEf,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,4EAA4E;IAC5E,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,wBAAgB,4BAA4B,CAAC,EAC3C,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAA4B,GAC7B,EAAE,iCAAiC,+BA+SnC"}