@flanksource/clicky-ui 0.3.40 → 0.3.42

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 (759) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +14 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +14 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +3 -1
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts.map +1 -1
  9. package/dist/comments/CommentCard.js +4 -2
  10. package/dist/comments/CommentCard.js.map +1 -1
  11. package/dist/comments/CommentCardParts.cjs +16 -0
  12. package/dist/comments/CommentCardParts.cjs.map +1 -1
  13. package/dist/comments/CommentCardParts.d.ts +4 -1
  14. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  15. package/dist/comments/CommentCardParts.js +16 -0
  16. package/dist/comments/CommentCardParts.js.map +1 -1
  17. package/dist/comments/comment-types.cjs.map +1 -1
  18. package/dist/comments/comment-types.d.ts +4 -0
  19. package/dist/comments/comment-types.d.ts.map +1 -1
  20. package/dist/comments/comment-types.js.map +1 -1
  21. package/dist/components/AccordionList.cjs +5 -1
  22. package/dist/components/AccordionList.cjs.map +1 -1
  23. package/dist/components/AccordionList.d.ts +3 -1
  24. package/dist/components/AccordionList.d.ts.map +1 -1
  25. package/dist/components/AccordionList.js +5 -1
  26. package/dist/components/AccordionList.js.map +1 -1
  27. package/dist/components/Combobox.cjs +54 -8
  28. package/dist/components/Combobox.cjs.map +1 -1
  29. package/dist/components/Combobox.d.ts.map +1 -1
  30. package/dist/components/Combobox.js +56 -10
  31. package/dist/components/Combobox.js.map +1 -1
  32. package/dist/components/ComboboxMenu.cjs +139 -113
  33. package/dist/components/ComboboxMenu.cjs.map +1 -1
  34. package/dist/components/ComboboxMenu.d.ts +3 -1
  35. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  36. package/dist/components/ComboboxMenu.js +139 -113
  37. package/dist/components/ComboboxMenu.js.map +1 -1
  38. package/dist/components/ComboboxMenuTrigger.cjs +87 -0
  39. package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
  40. package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
  41. package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
  42. package/dist/components/ComboboxMenuTrigger.js +87 -0
  43. package/dist/components/ComboboxMenuTrigger.js.map +1 -0
  44. package/dist/components/JsonSchemaForm.cjs +39 -11
  45. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  46. package/dist/components/JsonSchemaForm.d.ts +1 -1
  47. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  48. package/dist/components/JsonSchemaForm.js +38 -10
  49. package/dist/components/JsonSchemaForm.js.map +1 -1
  50. package/dist/components/SegmentedControl.cjs +20 -3
  51. package/dist/components/SegmentedControl.cjs.map +1 -1
  52. package/dist/components/SegmentedControl.d.ts +11 -0
  53. package/dist/components/SegmentedControl.d.ts.map +1 -1
  54. package/dist/components/SegmentedControl.js +21 -4
  55. package/dist/components/SegmentedControl.js.map +1 -1
  56. package/dist/components/combobox-types.d.ts +8 -0
  57. package/dist/components/combobox-types.d.ts.map +1 -1
  58. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  59. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  60. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  61. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.js +3 -1
  63. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  64. package/dist/components/json-schema-form-array-view.cjs +63 -0
  65. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  66. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  67. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  68. package/dist/components/json-schema-form-array-view.js +63 -0
  69. package/dist/components/json-schema-form-array-view.js.map +1 -0
  70. package/dist/components/json-schema-form-array.cjs +3 -7
  71. package/dist/components/json-schema-form-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-array.js +3 -7
  74. package/dist/components/json-schema-form-array.js.map +1 -1
  75. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  76. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  77. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  78. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  79. package/dist/components/json-schema-form-conditionals.js +67 -0
  80. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  81. package/dist/components/json-schema-form-debug-badge.cjs +108 -0
  82. package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
  83. package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
  84. package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
  85. package/dist/components/json-schema-form-debug-badge.js +108 -0
  86. package/dist/components/json-schema-form-debug-badge.js.map +1 -0
  87. package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
  88. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
  89. package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
  90. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
  91. package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
  92. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
  93. package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
  94. package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
  95. package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
  96. package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
  97. package/dist/components/json-schema-form-debug-glyph.js +13 -0
  98. package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
  99. package/dist/components/json-schema-form-debug-groups.cjs +56 -0
  100. package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
  101. package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
  102. package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-debug-groups.js +56 -0
  104. package/dist/components/json-schema-form-debug-groups.js.map +1 -0
  105. package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
  106. package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
  107. package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
  108. package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
  109. package/dist/components/json-schema-form-debug-keywords.js +159 -0
  110. package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
  111. package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
  112. package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
  113. package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
  114. package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
  115. package/dist/components/json-schema-form-debug-listeners.js +102 -0
  116. package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
  117. package/dist/components/json-schema-form-debug.cjs +31 -0
  118. package/dist/components/json-schema-form-debug.cjs.map +1 -0
  119. package/dist/components/json-schema-form-debug.d.ts +11 -0
  120. package/dist/components/json-schema-form-debug.d.ts.map +1 -0
  121. package/dist/components/json-schema-form-debug.js +31 -0
  122. package/dist/components/json-schema-form-debug.js.map +1 -0
  123. package/dist/components/json-schema-form-defaults.cjs +68 -0
  124. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  125. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  126. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-defaults.js +68 -0
  128. package/dist/components/json-schema-form-defaults.js.map +1 -0
  129. package/dist/components/json-schema-form-enum-choice.cjs +114 -0
  130. package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
  131. package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
  132. package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-enum-choice.js +114 -0
  134. package/dist/components/json-schema-form-enum-choice.js.map +1 -0
  135. package/dist/components/json-schema-form-errors.cjs +49 -31
  136. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  137. package/dist/components/json-schema-form-errors.d.ts +4 -2
  138. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  139. package/dist/components/json-schema-form-errors.js +51 -33
  140. package/dist/components/json-schema-form-errors.js.map +1 -1
  141. package/dist/components/json-schema-form-fields.cjs +3 -93
  142. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  143. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  144. package/dist/components/json-schema-form-fields.js +1 -91
  145. package/dist/components/json-schema-form-fields.js.map +1 -1
  146. package/dist/components/json-schema-form-filter.cjs +2 -1
  147. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  148. package/dist/components/json-schema-form-filter.js +2 -1
  149. package/dist/components/json-schema-form-filter.js.map +1 -1
  150. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  151. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  152. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  153. package/dist/components/json-schema-form-item-summary.js +6 -2
  154. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  155. package/dist/components/json-schema-form-layout.cjs +28 -19
  156. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  157. package/dist/components/json-schema-form-layout.d.ts +8 -6
  158. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-layout.js +29 -20
  160. package/dist/components/json-schema-form-layout.js.map +1 -1
  161. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  162. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  163. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  164. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-listener-paths.js +52 -0
  166. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  167. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  168. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  169. package/dist/components/json-schema-form-listeners.cjs +256 -0
  170. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  171. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  172. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  173. package/dist/components/json-schema-form-listeners.js +256 -0
  174. package/dist/components/json-schema-form-listeners.js.map +1 -0
  175. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  176. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  177. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  178. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  179. package/dist/components/json-schema-form-object-array-view.js +62 -0
  180. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  181. package/dist/components/json-schema-form-object.cjs +3 -0
  182. package/dist/components/json-schema-form-object.cjs.map +1 -1
  183. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-object.js +3 -0
  185. package/dist/components/json-schema-form-object.js.map +1 -1
  186. package/dist/components/json-schema-form-preferences.cjs +1 -0
  187. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  188. package/dist/components/json-schema-form-preferences.d.ts +1 -0
  189. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  190. package/dist/components/json-schema-form-preferences.js +1 -0
  191. package/dist/components/json-schema-form-preferences.js.map +1 -1
  192. package/dist/components/json-schema-form-render.cjs +36 -12
  193. package/dist/components/json-schema-form-render.cjs.map +1 -1
  194. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  195. package/dist/components/json-schema-form-render.js +38 -14
  196. package/dist/components/json-schema-form-render.js.map +1 -1
  197. package/dist/components/json-schema-form-resolve.cjs +6 -99
  198. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  199. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  200. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  201. package/dist/components/json-schema-form-resolve.js +5 -98
  202. package/dist/components/json-schema-form-resolve.js.map +1 -1
  203. package/dist/components/json-schema-form-runtime-types.d.ts +16 -0
  204. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  205. package/dist/components/json-schema-form-table-array.cjs +67 -16
  206. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  207. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  208. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  209. package/dist/components/json-schema-form-table-array.js +70 -19
  210. package/dist/components/json-schema-form-table-array.js.map +1 -1
  211. package/dist/components/json-schema-form-tone.cjs +12 -0
  212. package/dist/components/json-schema-form-tone.cjs.map +1 -1
  213. package/dist/components/json-schema-form-tone.js +12 -0
  214. package/dist/components/json-schema-form-tone.js.map +1 -1
  215. package/dist/components/json-schema-form-types.d.ts +17 -0
  216. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  217. package/dist/components/json-schema-form-utils.cjs +7 -1
  218. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  219. package/dist/components/json-schema-form-utils.d.ts +2 -1
  220. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  221. package/dist/components/json-schema-form-utils.js +7 -1
  222. package/dist/components/json-schema-form-utils.js.map +1 -1
  223. package/dist/components.cjs +3 -2
  224. package/dist/components.cjs.map +1 -1
  225. package/dist/components.d.ts +3 -2
  226. package/dist/components.d.ts.map +1 -1
  227. package/dist/components.js +2 -1
  228. package/dist/components.js.map +1 -1
  229. package/dist/data/DataTable.cjs +9 -3
  230. package/dist/data/DataTable.cjs.map +1 -1
  231. package/dist/data/DataTable.d.ts +6 -0
  232. package/dist/data/DataTable.d.ts.map +1 -1
  233. package/dist/data/DataTable.js +9 -3
  234. package/dist/data/DataTable.js.map +1 -1
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  238. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  239. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  240. package/dist/data/GraphDiagram.cjs +125 -138
  241. package/dist/data/GraphDiagram.cjs.map +1 -1
  242. package/dist/data/GraphDiagram.d.ts +30 -23
  243. package/dist/data/GraphDiagram.d.ts.map +1 -1
  244. package/dist/data/GraphDiagram.js +128 -141
  245. package/dist/data/GraphDiagram.js.map +1 -1
  246. package/dist/data/GraphDiagramEdges.cjs +208 -0
  247. package/dist/data/GraphDiagramEdges.cjs.map +1 -0
  248. package/dist/data/GraphDiagramEdges.d.ts +40 -0
  249. package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
  250. package/dist/data/GraphDiagramEdges.js +208 -0
  251. package/dist/data/GraphDiagramEdges.js.map +1 -0
  252. package/dist/data/GraphDiagramNodes.cjs +142 -0
  253. package/dist/data/GraphDiagramNodes.cjs.map +1 -0
  254. package/dist/data/GraphDiagramNodes.d.ts +22 -0
  255. package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
  256. package/dist/data/GraphDiagramNodes.js +142 -0
  257. package/dist/data/GraphDiagramNodes.js.map +1 -0
  258. package/dist/data/Tree.cjs +10 -2
  259. package/dist/data/Tree.cjs.map +1 -1
  260. package/dist/data/Tree.d.ts +6 -1
  261. package/dist/data/Tree.d.ts.map +1 -1
  262. package/dist/data/Tree.js +10 -2
  263. package/dist/data/Tree.js.map +1 -1
  264. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
  265. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
  266. package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
  267. package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
  268. package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
  269. package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
  270. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  271. package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
  272. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  273. package/dist/data/ai/PromptRunEditor/index.js +38 -44
  274. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  275. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
  276. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  277. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
  278. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  279. package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
  280. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  281. package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
  282. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
  283. package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
  284. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
  285. package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
  286. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
  287. package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
  288. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  289. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
  290. package/dist/data/ai/SessionInspector.approvals.js +26 -2
  291. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  292. package/dist/data/ai/SessionInspector.cjs +143 -167
  293. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  294. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  295. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  296. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  297. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  298. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  299. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  300. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  301. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  302. package/dist/data/ai/SessionInspector.collection.js +18 -5
  303. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  304. package/dist/data/ai/SessionInspector.d.ts +24 -2
  305. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  306. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  307. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  308. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  309. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  310. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  311. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  312. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  313. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  314. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  315. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  316. package/dist/data/ai/SessionInspector.js +144 -168
  317. package/dist/data/ai/SessionInspector.js.map +1 -1
  318. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  319. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  321. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  323. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  325. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  326. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  327. package/dist/data/ai/SessionInspector.panels.js +3 -0
  328. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  329. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  330. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  331. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  332. package/dist/data/ai/SessionInspector.plan.js +30 -13
  333. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  334. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  335. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  336. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  337. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  338. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  339. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  340. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  341. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  342. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  343. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  344. package/dist/data/ai/SessionInspector.remote.js +275 -0
  345. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  346. package/dist/data/ai/SessionInspector.summary.cjs +9 -159
  347. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  348. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  349. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  350. package/dist/data/ai/SessionInspector.summary.js +11 -161
  351. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  352. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  353. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  354. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  355. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  356. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  357. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  358. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  359. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  360. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  361. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  362. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  363. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  364. package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
  365. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  366. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  367. package/dist/data/ai/SessionInspector.transcript.js +4 -0
  368. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  369. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  370. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  371. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  372. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  373. package/dist/data/ai/SessionInspector.verification.js +53 -0
  374. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  375. package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
  376. package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
  377. package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
  378. package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
  379. package/dist/data/ai/SessionViewer.approval-body.js +146 -0
  380. package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
  381. package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
  382. package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
  383. package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
  384. package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
  385. package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
  386. package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
  387. package/dist/data/ai/SessionViewer.cjs +57 -20
  388. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  389. package/dist/data/ai/SessionViewer.d.ts +13 -3
  390. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  391. package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
  392. package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
  393. package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
  394. package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
  395. package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
  396. package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
  397. package/dist/data/ai/SessionViewer.decision.cjs +21 -0
  398. package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
  399. package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
  400. package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
  401. package/dist/data/ai/SessionViewer.decision.js +21 -0
  402. package/dist/data/ai/SessionViewer.decision.js.map +1 -0
  403. package/dist/data/ai/SessionViewer.input.cjs +14 -0
  404. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  405. package/dist/data/ai/SessionViewer.input.d.ts +5 -0
  406. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  407. package/dist/data/ai/SessionViewer.input.js +14 -0
  408. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  409. package/dist/data/ai/SessionViewer.js +58 -21
  410. package/dist/data/ai/SessionViewer.js.map +1 -1
  411. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  412. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  413. package/dist/data/ai/SessionViewer.model.d.ts +25 -3
  414. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  415. package/dist/data/ai/SessionViewer.model.js +7 -1
  416. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  417. package/dist/data/ai/SessionViewer.rows.cjs +6 -3
  418. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  419. package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
  420. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  421. package/dist/data/ai/SessionViewer.rows.js +6 -3
  422. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  423. package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
  424. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  425. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  426. package/dist/data/ai/SessionViewer.tool-row.js +27 -235
  427. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  428. package/dist/data/ai/SessionViewer.unified.d.ts +17 -0
  429. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  430. package/dist/data/ai/SessionViewerMenu.cjs +8 -2
  431. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  432. package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
  433. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  434. package/dist/data/ai/SessionViewerMenu.js +8 -2
  435. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  436. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
  437. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  438. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
  439. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  440. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
  441. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  442. package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
  443. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  444. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
  445. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  446. package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
  447. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  448. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
  449. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
  450. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  451. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
  452. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  453. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  454. package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
  455. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  456. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
  457. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  458. package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
  459. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  460. package/dist/data/ai/approval-request.cjs +75 -0
  461. package/dist/data/ai/approval-request.cjs.map +1 -0
  462. package/dist/data/ai/approval-request.d.ts +155 -0
  463. package/dist/data/ai/approval-request.d.ts.map +1 -0
  464. package/dist/data/ai/approval-request.js +75 -0
  465. package/dist/data/ai/approval-request.js.map +1 -0
  466. package/dist/data/ai/index.d.ts +6 -1
  467. package/dist/data/ai/index.d.ts.map +1 -1
  468. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
  469. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
  470. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
  471. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
  472. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
  473. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
  474. package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
  475. package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
  476. package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
  477. package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
  478. package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
  479. package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
  480. package/dist/data/ai/runtime-preset-menu/model.js +73 -0
  481. package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
  482. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
  483. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
  484. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
  485. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
  486. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
  487. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
  488. package/dist/data/ai/runtime-spec-fields.cjs +166 -0
  489. package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
  490. package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
  491. package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
  492. package/dist/data/ai/runtime-spec-fields.js +166 -0
  493. package/dist/data/ai/runtime-spec-fields.js.map +1 -0
  494. package/dist/data/ai/session-categories.cjs +4 -0
  495. package/dist/data/ai/session-categories.cjs.map +1 -1
  496. package/dist/data/ai/session-categories.d.ts +1 -0
  497. package/dist/data/ai/session-categories.d.ts.map +1 -1
  498. package/dist/data/ai/session-categories.js +4 -0
  499. package/dist/data/ai/session-categories.js.map +1 -1
  500. package/dist/data/ai/use-session-scroll.cjs +49 -21
  501. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  502. package/dist/data/ai/use-session-scroll.d.ts +2 -0
  503. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  504. package/dist/data/ai/use-session-scroll.js +49 -21
  505. package/dist/data/ai/use-session-scroll.js.map +1 -1
  506. package/dist/data/chat/Chat.runtime.cjs +1 -1
  507. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  508. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  509. package/dist/data/chat/Chat.runtime.js +1 -1
  510. package/dist/data/chat/Chat.runtime.js.map +1 -1
  511. package/dist/data/graph-columns-layout.cjs +216 -0
  512. package/dist/data/graph-columns-layout.cjs.map +1 -0
  513. package/dist/data/graph-columns-layout.d.ts +56 -0
  514. package/dist/data/graph-columns-layout.d.ts.map +1 -0
  515. package/dist/data/graph-columns-layout.js +216 -0
  516. package/dist/data/graph-columns-layout.js.map +1 -0
  517. package/dist/data/graph-diagram-model.cjs +73 -0
  518. package/dist/data/graph-diagram-model.cjs.map +1 -0
  519. package/dist/data/graph-diagram-model.d.ts +90 -0
  520. package/dist/data/graph-diagram-model.d.ts.map +1 -0
  521. package/dist/data/graph-diagram-model.js +73 -0
  522. package/dist/data/graph-diagram-model.js.map +1 -0
  523. package/dist/data/graph-edge-routing.cjs +235 -0
  524. package/dist/data/graph-edge-routing.cjs.map +1 -0
  525. package/dist/data/graph-edge-routing.d.ts +73 -0
  526. package/dist/data/graph-edge-routing.d.ts.map +1 -0
  527. package/dist/data/graph-edge-routing.js +235 -0
  528. package/dist/data/graph-edge-routing.js.map +1 -0
  529. package/dist/data/graph-layout.cjs +0 -82
  530. package/dist/data/graph-layout.cjs.map +1 -1
  531. package/dist/data/graph-layout.d.ts +1 -28
  532. package/dist/data/graph-layout.d.ts.map +1 -1
  533. package/dist/data/graph-layout.js +1 -83
  534. package/dist/data/graph-layout.js.map +1 -1
  535. package/dist/data/har/HarPanel.cjs +129 -33
  536. package/dist/data/har/HarPanel.cjs.map +1 -1
  537. package/dist/data/har/HarPanel.d.ts +13 -1
  538. package/dist/data/har/HarPanel.d.ts.map +1 -1
  539. package/dist/data/har/HarPanel.js +130 -34
  540. package/dist/data/har/HarPanel.js.map +1 -1
  541. package/dist/data/har/fixtures.d.ts +12 -0
  542. package/dist/data/har/fixtures.d.ts.map +1 -1
  543. package/dist/data/har/types.d.ts +12 -0
  544. package/dist/data/har/types.d.ts.map +1 -1
  545. package/dist/data/runtime/RuntimeBar.cjs +67 -84
  546. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  547. package/dist/data/runtime/RuntimeBar.d.ts +4 -5
  548. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  549. package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
  550. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
  551. package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
  552. package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
  553. package/dist/data/runtime/RuntimeBar.fields.js +170 -0
  554. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
  555. package/dist/data/runtime/RuntimeBar.js +70 -87
  556. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  557. package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
  558. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
  559. package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
  560. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
  561. package/dist/data/runtime/RuntimeBar.selection.js +56 -0
  562. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
  563. package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
  564. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  565. package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
  566. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  567. package/dist/data/runtime/RuntimeBarActions.js +10 -6
  568. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  569. package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
  570. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
  571. package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
  572. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
  573. package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
  574. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
  575. package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
  576. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
  577. package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
  578. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
  579. package/dist/data/runtime/RuntimeBarLayout.js +95 -0
  580. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
  581. package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
  582. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  583. package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
  584. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  585. package/dist/data/runtime/RuntimeBarSegment.js +25 -14
  586. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  587. package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
  588. package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
  589. package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
  590. package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
  591. package/dist/data/runtime/RuntimeLimitInput.js +41 -0
  592. package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
  593. package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
  594. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
  595. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
  596. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
  597. package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
  598. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
  599. package/dist/data/use-edge-focus.cjs +20 -0
  600. package/dist/data/use-edge-focus.cjs.map +1 -0
  601. package/dist/data/use-edge-focus.d.ts +23 -0
  602. package/dist/data/use-edge-focus.d.ts.map +1 -0
  603. package/dist/data/use-edge-focus.js +20 -0
  604. package/dist/data/use-edge-focus.js.map +1 -0
  605. package/dist/data/use-pan-zoom.cjs +159 -0
  606. package/dist/data/use-pan-zoom.cjs.map +1 -0
  607. package/dist/data/use-pan-zoom.d.ts +79 -0
  608. package/dist/data/use-pan-zoom.d.ts.map +1 -0
  609. package/dist/data/use-pan-zoom.js +159 -0
  610. package/dist/data/use-pan-zoom.js.map +1 -0
  611. package/dist/data/version-info.cjs +3 -3
  612. package/dist/data/version-info.js +3 -3
  613. package/dist/data.cjs +5 -1
  614. package/dist/data.cjs.map +1 -1
  615. package/dist/data.d.ts +4 -3
  616. package/dist/data.d.ts.map +1 -1
  617. package/dist/data.js +6 -2
  618. package/dist/data.js.map +1 -1
  619. package/dist/devtools/useDebugStream.cjs +5 -1
  620. package/dist/devtools/useDebugStream.cjs.map +1 -1
  621. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  622. package/dist/devtools/useDebugStream.js +6 -2
  623. package/dist/devtools/useDebugStream.js.map +1 -1
  624. package/dist/hooks/event-source-provider.cjs +9 -0
  625. package/dist/hooks/event-source-provider.cjs.map +1 -0
  626. package/dist/hooks/event-source-provider.d.ts +15 -0
  627. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  628. package/dist/hooks/event-source-provider.js +9 -0
  629. package/dist/hooks/event-source-provider.js.map +1 -0
  630. package/dist/hooks/event-source.cjs +11 -0
  631. package/dist/hooks/event-source.cjs.map +1 -0
  632. package/dist/hooks/event-source.d.ts +22 -0
  633. package/dist/hooks/event-source.d.ts.map +1 -0
  634. package/dist/hooks/event-source.js +11 -0
  635. package/dist/hooks/event-source.js.map +1 -0
  636. package/dist/hooks/use-log-tail.cjs +5 -1
  637. package/dist/hooks/use-log-tail.cjs.map +1 -1
  638. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  639. package/dist/hooks/use-log-tail.js +5 -1
  640. package/dist/hooks/use-log-tail.js.map +1 -1
  641. package/dist/hooks/use-prompts.cjs +5 -1
  642. package/dist/hooks/use-prompts.cjs.map +1 -1
  643. package/dist/hooks/use-prompts.d.ts.map +1 -1
  644. package/dist/hooks/use-prompts.js +6 -2
  645. package/dist/hooks/use-prompts.js.map +1 -1
  646. package/dist/hooks/use-task-run.cjs +9 -2
  647. package/dist/hooks/use-task-run.cjs.map +1 -1
  648. package/dist/hooks/use-task-run.d.ts.map +1 -1
  649. package/dist/hooks/use-task-run.js +10 -3
  650. package/dist/hooks/use-task-run.js.map +1 -1
  651. package/dist/hooks.cjs +4 -0
  652. package/dist/hooks.cjs.map +1 -1
  653. package/dist/hooks.d.ts +2 -0
  654. package/dist/hooks.d.ts.map +1 -1
  655. package/dist/hooks.js +4 -0
  656. package/dist/hooks.js.map +1 -1
  657. package/dist/icons/programmingCatalog.cjs +34 -34
  658. package/dist/icons/programmingCatalog.cjs.map +1 -1
  659. package/dist/icons/programmingCatalog.js +34 -34
  660. package/dist/icons/programmingCatalog.js.map +1 -1
  661. package/dist/index.cjs +14 -3
  662. package/dist/index.cjs.map +1 -1
  663. package/dist/index.js +14 -3
  664. package/dist/index.js.map +1 -1
  665. package/dist/monaco/MonacoEditor.cjs +4 -1
  666. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  667. package/dist/monaco/MonacoEditor.d.ts +1 -1
  668. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  669. package/dist/monaco/MonacoEditor.js +4 -1
  670. package/dist/monaco/MonacoEditor.js.map +1 -1
  671. package/dist/monaco/types.d.ts +2 -1
  672. package/dist/monaco/types.d.ts.map +1 -1
  673. package/dist/overlay/CommandPalette.cjs +14 -4
  674. package/dist/overlay/CommandPalette.cjs.map +1 -1
  675. package/dist/overlay/CommandPalette.d.ts +5 -1
  676. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  677. package/dist/overlay/CommandPalette.js +14 -4
  678. package/dist/overlay/CommandPalette.js.map +1 -1
  679. package/dist/overlay/CommandPaletteList.cjs +5 -0
  680. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  681. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  682. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  683. package/dist/overlay/CommandPaletteList.js +5 -0
  684. package/dist/overlay/CommandPaletteList.js.map +1 -1
  685. package/dist/overlay/DropdownMenu.cjs +2 -0
  686. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  687. package/dist/overlay/DropdownMenu.d.ts +4 -0
  688. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  689. package/dist/overlay/DropdownMenu.js +2 -0
  690. package/dist/overlay/DropdownMenu.js.map +1 -1
  691. package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
  692. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  693. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  694. package/dist/overlay/DropdownMenuSubmenu.js +31 -15
  695. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  696. package/dist/rpc/OperationCatalog.cjs +32 -27
  697. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  698. package/dist/rpc/OperationCatalog.d.ts +11 -1
  699. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  700. package/dist/rpc/OperationCatalog.js +32 -27
  701. package/dist/rpc/OperationCatalog.js.map +1 -1
  702. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  703. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  704. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  705. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  706. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  707. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  708. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  709. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  710. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  711. package/dist/rpc/OperationEntityPicker.js +185 -0
  712. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  713. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  714. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  715. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  716. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  717. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  718. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  719. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  720. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  721. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  722. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  723. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  724. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  725. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  726. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  727. package/dist/rpc/useOperationPages.cjs +6 -1
  728. package/dist/rpc/useOperationPages.cjs.map +1 -1
  729. package/dist/rpc/useOperationPages.d.ts +3 -1
  730. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  731. package/dist/rpc/useOperationPages.js +6 -1
  732. package/dist/rpc/useOperationPages.js.map +1 -1
  733. package/dist/rpc.cjs +2 -0
  734. package/dist/rpc.cjs.map +1 -1
  735. package/dist/rpc.d.ts +2 -0
  736. package/dist/rpc.d.ts.map +1 -1
  737. package/dist/rpc.js +2 -0
  738. package/dist/rpc.js.map +1 -1
  739. package/dist/styles.css +1 -1
  740. package/package.json +4 -1
  741. package/schemas/json-schema-form.schema.json +571 -0
  742. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  743. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  744. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  745. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  746. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  747. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  748. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  749. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  750. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  751. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  752. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  753. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  754. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  755. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  756. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  757. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  758. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  759. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -1,18 +1,16 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { useState, useMemo, useEffect, useCallback } from "react";
3
- import { useQuery, keepPreviousData } from "@tanstack/react-query";
4
- import { Button } from "../components/button.js";
2
+ import { useState, useMemo, useCallback } from "react";
5
3
  import { DropdownMenu } from "../overlay/DropdownMenu.js";
6
- import { Modal } from "../overlay/Modal.js";
7
- import { CommandOutput } from "./CommandOutput.js";
8
- import { useDebouncedRecord, packParameterValues, packLookupParameterValues, parametersToFormConfig, dataTablePaginationFromForm } from "./formMetadata.js";
4
+ import { packParameterValues } from "./formMetadata.js";
9
5
  import { getClickySurfaces, filterOperationsBySurface, findSurfaceListOperation, findSurfaceDetailOperation, getOperationClickyMeta } from "./clickyMetadata.js";
6
+ import { OperationEntityPicker } from "./OperationEntityPicker.js";
10
7
  import { getClickyRowId } from "./rowNavigation.js";
11
8
  import { resolveSurfaceIcon } from "./surfaceIconMap.js";
12
9
  import { useOperations } from "./useOperations.js";
13
10
  import { entityContextItemID, clickyRowRecord, contextItemFromEntityRow } from "./OperationEntityContextPicker.model.js";
14
11
  import { UiTable } from "../icons/components/UiTable.js";
15
12
  import { UiAdd } from "../icons/components/UiAdd.js";
13
+ const plural = (count) => count === 1 ? "" : "s";
16
14
  function OperationEntityContextPicker({
17
15
  client,
18
16
  items,
@@ -28,7 +26,6 @@ function OperationEntityContextPicker({
28
26
  surfaceRenderer,
29
27
  triggerLabel = "Add context"
30
28
  }) {
31
- var _a;
32
29
  const {
33
30
  operations,
34
31
  spec,
@@ -36,12 +33,6 @@ function OperationEntityContextPicker({
36
33
  } = useOperations(client);
37
34
  const [open, setOpen] = useState(false);
38
35
  const [surfaceKey, setSurfaceKey] = useState("");
39
- const [filters, setFilters] = useState({});
40
- const [selectedRows, setSelectedRows] = useState(
41
- {}
42
- );
43
- const [attaching, setAttaching] = useState(false);
44
- const [attachError, setAttachError] = useState("");
45
36
  const surfaces = useMemo(() => {
46
37
  return getClickySurfaces(spec).flatMap((surface) => {
47
38
  const surfaceOperations = filterOperationsBySurface(
@@ -72,84 +63,14 @@ function OperationEntityContextPicker({
72
63
  return leftGroup.localeCompare(rightGroup) || left.surface.title.localeCompare(right.surface.title);
73
64
  });
74
65
  }, [operations, spec, surfaceFilter, surfaceGroup]);
75
- useEffect(() => {
76
- setFilters({});
77
- setSelectedRows({});
78
- setAttachError("");
79
- }, [surfaceKey]);
80
66
  const selected = surfaces.find((entry) => entry.surface.key === surfaceKey);
81
- const parameters = (selected == null ? void 0 : selected.listOperation.operation.parameters) ?? [];
82
- const debouncedFilters = useDebouncedRecord(filters, 250);
83
- const packedFilters = useMemo(
84
- () => packParameterValues(debouncedFilters, parameters),
85
- [debouncedFilters, parameters]
86
- );
87
- const packedLookupFilters = useMemo(
88
- () => packLookupParameterValues(debouncedFilters, parameters),
89
- [debouncedFilters, parameters]
90
- );
91
- const lookupQuery = useQuery({
92
- queryKey: [
93
- "entity-context-lookup",
94
- selected == null ? void 0 : selected.listOperation.path,
95
- packedLookupFilters
96
- ],
97
- queryFn: async () => {
98
- var _a2;
99
- return await ((_a2 = client.lookupFilters) == null ? void 0 : _a2.call(
100
- client,
101
- selected.listOperation.path,
102
- selected.listOperation.method,
103
- packedLookupFilters,
104
- { Accept: "application/json+clicky" }
105
- )) ?? { filters: {} };
106
- },
107
- enabled: open && !!selected && !!client.lookupFilters && parameters.some((parameter) => parameter.in === "query"),
108
- placeholderData: keepPreviousData,
109
- staleTime: 3e4,
110
- retry: 0
111
- });
112
- const listQuery = useQuery({
113
- queryKey: [
114
- "entity-context-list",
115
- selected == null ? void 0 : selected.listOperation.path,
116
- packedFilters
117
- ],
118
- queryFn: () => client.executeCommand(
119
- selected.listOperation.path,
120
- selected.listOperation.method,
121
- packedFilters,
122
- { Accept: "application/json+clicky" }
123
- ),
124
- enabled: open && !!selected,
125
- placeholderData: keepPreviousData,
126
- staleTime: 3e4,
127
- retry: 0
128
- });
129
- const filterShapes = (_a = spec == null ? void 0 : spec.components) == null ? void 0 : _a["x-clicky-filters"];
130
- const filterConfig = useMemo(
131
- () => parametersToFormConfig(parameters, filters, setFilters, {
132
- includeLocations: ["query"],
133
- lookup: lookupQuery.data,
134
- components: filterShapes
135
- }),
136
- [filters, filterShapes, lookupQuery.data, parameters]
137
- );
138
- const pagination = useMemo(
139
- () => dataTablePaginationFromForm(filterConfig.pagination, listQuery.data),
140
- [filterConfig.pagination, listQuery.data]
141
- );
142
67
  const existingIDs = useMemo(
143
68
  () => new Set(items.map((item) => item.id)),
144
69
  [items]
145
70
  );
146
- const markedListResponse = useMemo(
147
- () => markAttachedRows(listQuery.data, selected == null ? void 0 : selected.surface.key, existingIDs),
148
- [existingIDs, listQuery.data, selected == null ? void 0 : selected.surface.key]
149
- );
150
71
  const hydrateRow = useCallback(
151
- async (row) => {
152
- var _a2, _b, _c;
72
+ async (row, listFilters) => {
73
+ var _a, _b, _c;
153
74
  if (!selected) throw new Error("Select an entity type first.");
154
75
  const recordID = getClickyRowId(row);
155
76
  if (!recordID) {
@@ -162,7 +83,7 @@ function OperationEntityContextPicker({
162
83
  let record = clickyRowRecord(row);
163
84
  if (selected.detailOperation) {
164
85
  const detailMeta = getOperationClickyMeta(selected.detailOperation);
165
- const idParam = (detailMeta == null ? void 0 : detailMeta.idParam) ?? ((_b = (_a2 = selected.detailOperation.operation.parameters) == null ? void 0 : _a2.find(
86
+ const idParam = (detailMeta == null ? void 0 : detailMeta.idParam) ?? ((_b = (_a = selected.detailOperation.operation.parameters) == null ? void 0 : _a.find(
166
87
  (parameter) => parameter.in === "path"
167
88
  )) == null ? void 0 : _b.name) ?? "id";
168
89
  const detailParameterNames = new Set(
@@ -170,6 +91,10 @@ function OperationEntityContextPicker({
170
91
  (parameter) => parameter.name
171
92
  )) ?? []
172
93
  );
94
+ const packedFilters = packParameterValues(
95
+ listFilters,
96
+ selected.listOperation.operation.parameters ?? []
97
+ );
173
98
  const detailParams = Object.fromEntries(
174
99
  Object.entries(packedFilters).filter(
175
100
  ([key]) => detailParameterNames.has(key)
@@ -193,37 +118,34 @@ function OperationEntityContextPicker({
193
118
  throw new Error("This row does not expose a stable record ID.");
194
119
  return contextItem;
195
120
  },
196
- [client, existingIDs, packedFilters, selected]
121
+ [client, existingIDs, selected]
197
122
  );
198
- const attachSelected = useCallback(async () => {
199
- const rows = Object.values(selectedRows);
200
- if (rows.length === 0) return;
201
- setAttaching(true);
202
- setAttachError("");
203
- const results = await Promise.allSettled(rows.map(hydrateRow));
204
- const added = results.flatMap(
205
- (result) => result.status === "fulfilled" ? [result.value] : []
206
- );
207
- const failures = results.flatMap(
208
- (result) => result.status === "rejected" ? [result.reason] : []
209
- );
210
- if (added.length > 0) {
211
- if (onAddMany) onAddMany(added);
212
- else added.forEach(onAdd);
213
- }
214
- setAttaching(false);
215
- if (failures.length > 0) {
216
- const first = failures[0];
217
- setAttachError(
218
- `${failures.length} record${failures.length === 1 ? "" : "s"} could not be attached: ${first instanceof Error ? first.message : String(first)}`
123
+ const attachRows = useCallback(
124
+ async (rows, listFilters) => {
125
+ const results = await Promise.allSettled(
126
+ rows.map((row) => hydrateRow(row, listFilters))
219
127
  );
220
- return;
221
- }
222
- setSelectedRows({});
223
- setOpen(false);
224
- }, [hydrateRow, onAdd, onAddMany, selectedRows]);
128
+ const added = results.flatMap(
129
+ (result) => result.status === "fulfilled" ? [result.value] : []
130
+ );
131
+ const failures = results.flatMap(
132
+ (result) => result.status === "rejected" ? [result.reason] : []
133
+ );
134
+ if (added.length > 0) {
135
+ if (onAddMany) onAddMany(added);
136
+ else added.forEach(onAdd);
137
+ }
138
+ if (failures.length > 0) {
139
+ const first = failures[0];
140
+ throw new Error(
141
+ `${failures.length} record${plural(failures.length)} could not be attached: ${first instanceof Error ? first.message : String(first)}`
142
+ );
143
+ }
144
+ },
145
+ [hydrateRow, onAdd, onAddMany]
146
+ );
225
147
  const menuItems = useMemo(() => {
226
- var _a2;
148
+ var _a;
227
149
  const groups = [];
228
150
  const byGroup = /* @__PURE__ */ new Map();
229
151
  for (const entry of surfaces) {
@@ -249,9 +171,9 @@ function OperationEntityContextPicker({
249
171
  }
250
172
  bucket.push(leaf);
251
173
  }
252
- if (groups.length <= 1) return ((_a2 = groups[0]) == null ? void 0 : _a2.leaves) ?? [];
174
+ if (groups.length <= 1) return ((_a = groups[0]) == null ? void 0 : _a.leaves) ?? [];
253
175
  return groups.map(({ group, leaves }) => {
254
- var _a3;
176
+ var _a2;
255
177
  const groupColor = surfaceGroupColor == null ? void 0 : surfaceGroupColor(group);
256
178
  const prefix = `${group} `;
257
179
  const children = leaves.map(
@@ -260,7 +182,7 @@ function OperationEntityContextPicker({
260
182
  return {
261
183
  label: group,
262
184
  title: group,
263
- icon: (surfaceGroupIcon == null ? void 0 : surfaceGroupIcon(group)) ?? ((_a3 = leaves[0]) == null ? void 0 : _a3.icon) ?? UiTable,
185
+ icon: (surfaceGroupIcon == null ? void 0 : surfaceGroupIcon(group)) ?? ((_a2 = leaves[0]) == null ? void 0 : _a2.icon) ?? UiTable,
264
186
  ...groupColor ? { iconColor: groupColor } : {},
265
187
  onSelect: () => {
266
188
  },
@@ -276,8 +198,6 @@ function OperationEntityContextPicker({
276
198
  surfaceLabel,
277
199
  surfaces
278
200
  ]);
279
- const selectedCount = Object.keys(selectedRows).length;
280
- const selectedLabel = selected ? (surfaceLabel == null ? void 0 : surfaceLabel(selected.surface, selected.listOperation)) ?? selected.surface.title : "records";
281
201
  const trigger = /* @__PURE__ */ jsx(
282
202
  DropdownMenu,
283
203
  {
@@ -298,108 +218,40 @@ function OperationEntityContextPicker({
298
218
  ]
299
219
  }
300
220
  );
221
+ if (!selected) return trigger;
222
+ const selectedLabel = (surfaceLabel == null ? void 0 : surfaceLabel(selected.surface, selected.listOperation)) ?? selected.surface.title;
223
+ const selectedSurfaceKey = selected.surface.key;
301
224
  const defaultDialog = /* @__PURE__ */ jsx(
302
- Modal,
225
+ OperationEntityPicker,
303
226
  {
304
227
  open,
305
228
  onClose: () => setOpen(false),
306
229
  title: `Add ${selectedLabel} context`,
307
- size: "2xl",
308
- expandable: true,
309
- scrollBody: false,
310
- footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
311
- /* @__PURE__ */ 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` }),
312
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
313
- /* @__PURE__ */ jsx(
314
- Button,
315
- {
316
- type: "button",
317
- variant: "outline",
318
- onClick: () => setOpen(false),
319
- disabled: attaching,
320
- children: "Cancel"
321
- }
322
- ),
323
- /* @__PURE__ */ jsx(
324
- Button,
325
- {
326
- type: "button",
327
- onClick: () => void attachSelected(),
328
- disabled: selectedCount === 0 || attaching,
329
- children: attaching ? "Adding…" : selectedCount > 0 ? `Add ${selectedCount} record${selectedCount === 1 ? "" : "s"}` : "Add records"
330
- }
331
- )
332
- ] })
333
- ] }),
334
- children: /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-4", children: [
335
- surfaces.length === 0 && !operationsLoading ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "No attachable entity surfaces are available." }) : null,
336
- lookupQuery.error ? /* @__PURE__ */ jsx(PickerError, { error: lookupQuery.error, prefix: "Load filters" }) : null,
337
- listQuery.error ? /* @__PURE__ */ jsx(PickerError, { error: listQuery.error, prefix: "Load records" }) : null,
338
- attachError ? /* @__PURE__ */ jsx(PickerError, { error: attachError, prefix: "Attach record" }) : null,
339
- attaching ? /* @__PURE__ */ jsx("div", { role: "status", className: "text-xs text-muted-foreground", children: "Loading full record details and adding context…" }) : null,
340
- selected ? /* @__PURE__ */ jsx(
341
- CommandOutput,
342
- {
343
- bare: true,
344
- className: "mt-0 flex-1",
345
- response: markedListResponse ?? null,
346
- loading: listQuery.isLoading || listQuery.isFetching,
347
- loadingMessage: "Loading records…",
348
- emptyMessage: "No matching records.",
349
- ariaLabel: "Context records",
350
- rowSelection: {
351
- selectedRowIds: Object.keys(selectedRows),
352
- // Keep selections made on other pages: reconcile the table's
353
- // next id set against the rows on the current page, falling back
354
- // to the already-known row for ids from previously-viewed pages.
355
- onSelectionChange: (nextIds, rows) => {
356
- const rowByID = new Map(
357
- rows.flatMap((row) => {
358
- const id = getClickyRowId(row);
359
- return id ? [[id, row]] : [];
360
- })
361
- );
362
- setSelectedRows(
363
- (prev) => Object.fromEntries(
364
- nextIds.flatMap((id) => {
365
- const row = rowByID.get(id) ?? prev[id];
366
- return row ? [[id, row]] : [];
367
- })
368
- )
369
- );
370
- },
371
- getRowId: (row, index) => getClickyRowId(row) ?? `context-row-${index}`,
372
- isRowSelectable: (row) => {
373
- const id = getClickyRowId(row);
374
- return !!id && !existingIDs.has(
375
- entityContextItemID(selected.surface.key, id)
376
- );
377
- },
378
- toggleOnRowClick: true
379
- },
380
- ...filterConfig.search ? { search: filterConfig.search } : {},
381
- ...filterConfig.timeRange ? { timeRange: filterConfig.timeRange } : {},
382
- ...filterConfig.filters.length ? { externalFilters: filterConfig.filters } : {},
383
- ...pagination ? { pagination } : {},
384
- ...filterConfig.sort ? {
385
- sort: filterConfig.sort.value,
386
- onSortChange: filterConfig.sort.onChange
387
- } : {}
388
- }
389
- ) : null,
390
- items.length ? /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
391
- items.length,
392
- " context ",
393
- items.length === 1 ? "record" : "records",
394
- " ",
395
- "attached. Attached rows are disabled."
396
- ] }) : null
397
- ] })
230
+ client,
231
+ surfaceKey: selectedSurfaceKey,
232
+ mode: "multi",
233
+ onSelect: (_ids, rows, { filters }) => attachRows(rows, filters),
234
+ unavailableRows: {
235
+ isUnavailable: (row) => {
236
+ const id = getClickyRowId(row);
237
+ return !!id && existingIDs.has(entityContextItemID(selectedSurfaceKey, id));
238
+ },
239
+ label: "Attached",
240
+ columnLabel: "Context"
241
+ },
242
+ selectLabel: ({ count, pending }) => pending ? "Adding…" : count > 0 ? `Add ${count} record${plural(count)}` : "Add records",
243
+ note: items.length ? /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
244
+ items.length,
245
+ " context ",
246
+ items.length === 1 ? "record" : "records",
247
+ " ",
248
+ "attached. Attached rows are disabled."
249
+ ] }) : null
398
250
  }
399
251
  );
400
252
  return /* @__PURE__ */ jsxs(Fragment, { children: [
401
253
  trigger,
402
- selected && surfaceRenderer ? surfaceRenderer({
254
+ surfaceRenderer ? surfaceRenderer({
403
255
  surface: selected.surface,
404
256
  listOperation: selected.listOperation,
405
257
  ...selected.detailOperation ? { detailOperation: selected.detailOperation } : {},
@@ -421,52 +273,6 @@ function parseResponseJSON(response) {
421
273
  return void 0;
422
274
  }
423
275
  }
424
- function markAttachedRows(response, surfaceKey, existingIDs) {
425
- var _a;
426
- if (!response || !surfaceKey || existingIDs.size === 0 || !response.parsed)
427
- return response;
428
- const parsed = response.parsed;
429
- const node = parsed.version === 1 && parsed.node ? parsed.node : parsed;
430
- if (node.kind !== "table" || !((_a = node.rows) == null ? void 0 : _a.length)) return response;
431
- const tableNode = node;
432
- const attached = tableNode.rows.map((row) => {
433
- const id = getClickyRowId(row);
434
- return !!id && existingIDs.has(entityContextItemID(surfaceKey, id));
435
- });
436
- if (!attached.some(Boolean)) return response;
437
- const markerColumn = {
438
- name: "__chat_context",
439
- label: "Context",
440
- shrink: true
441
- };
442
- const markedNode = {
443
- ...tableNode,
444
- kind: "table",
445
- columns: [...tableNode.columns ?? [], markerColumn],
446
- rows: tableNode.rows.map((row, index) => ({
447
- ...row,
448
- cells: {
449
- ...row.cells,
450
- __chat_context: attached[index] ? { kind: "badge", badgeLabel: "Attached" } : { kind: "text", text: "", plain: "" }
451
- }
452
- }))
453
- };
454
- return {
455
- ...response,
456
- parsed: parsed.version === 1 ? { ...parsed, node: markedNode } : markedNode
457
- };
458
- }
459
- function PickerError({ error, prefix }) {
460
- const message = error instanceof Error ? error.message : String(error);
461
- return /* @__PURE__ */ jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: [
462
- /* @__PURE__ */ jsxs("span", { className: "font-medium", children: [
463
- prefix,
464
- ":"
465
- ] }),
466
- " ",
467
- message
468
- ] });
469
- }
470
276
  export {
471
277
  OperationEntityContextPicker
472
278
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OperationEntityContextPicker.js","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":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"OperationEntityContextPicker.js","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":["_a"],"mappings":"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"}