@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 +1 @@
1
- {"version":3,"file":"HarPanel.js","sources":["../../../src/data/har/HarPanel.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { DataTable, type DataTableColumn } from \"../DataTable\";\nimport { JsonView } from \"../JsonView\";\nimport type { HAREntry } from \"./types\";\n\nexport type HarPanelProps = {\n /** HAR entries to render. */\n entries: HAREntry[];\n /** Optional external search term. When omitted, the internal DataTable search is shown. */\n search?: string;\n /** Empty-state label for no entries or no matches. */\n emptyLabel?: string;\n /** Classes applied to the panel root. */\n className?: string;\n};\n\nconst COLS: DataTableColumn<HAREntry>[] = [\n {\n key: \"request.method\",\n label: \"Method\",\n shrink: true,\n },\n {\n key: \"request.url\",\n label: \"URL\",\n grow: true,\n render: (value) => <span title={String(value ?? \"\")}>{String(value ?? \"\")}</span>,\n },\n {\n key: \"response.status\",\n label: \"Status\",\n shrink: true,\n render: (value) => (\n <span className={statusColor(Number(value ?? 0))}>{String(value ?? \"\")}</span>\n ),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"time\",\n label: \"Time\",\n align: \"right\",\n shrink: true,\n render: (value) => `${Number(value ?? 0).toFixed(0)}ms`,\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.bodySize\",\n label: \"Size\",\n align: \"right\",\n shrink: true,\n render: (value) => formatBytes(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.content.mimeType\",\n label: \"Type\",\n shrink: true,\n },\n];\n\nexport function HarPanel({\n entries,\n search,\n emptyLabel = \"No HTTP traffic captured\",\n className,\n}: HarPanelProps) {\n const filteredEntries = useMemo(() => {\n if (search === undefined || search.trim() === \"\") return entries;\n return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));\n }, [entries, search]);\n\n if (!entries || entries.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">{emptyLabel}</div>\n );\n }\n\n return (\n // A flex column, not a plain block: DataTable sizes itself as `flex-1\n // min-h-0` so its own scroll region can be bounded, and in a block parent\n // that resolves to content height — the table grows past the panel and\n // nothing scrolls.\n <div className={`flex h-full min-h-0 flex-col ${className ?? \"\"}`}>\n <DataTable\n data={filteredEntries}\n columns={COLS}\n autoFilter\n showGlobalFilter={search === undefined}\n globalFilterPlaceholder=\"Filter URL, method, or body…\"\n defaultSort={{ key: \"time\", dir: \"asc\" }}\n emptyMessage={emptyLabel}\n getRowId={(entry, index) =>\n `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}-${entry.time}`\n }\n renderExpandedRow={(entry) => <HarRowDetails entry={entry} />}\n />\n </div>\n );\n}\n\nfunction HarRowDetails({ entry }: { entry: HAREntry }) {\n return (\n <>\n <div className=\"grid grid-cols-2 gap-density-4\">\n <div>\n <HeaderList\n title=\"Request Headers\"\n {...(entry.request.headers ? { headers: entry.request.headers } : {})}\n />\n {entry.request.postData?.text && (\n <div className=\"mt-density-2\">\n <div className=\"font-semibold text-foreground mb-1\">Request Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-48\">\n <BodyView\n text={entry.request.postData.text}\n {...(entry.request.postData.mimeType\n ? { mimeType: entry.request.postData.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </div>\n <div>\n <HeaderList\n title=\"Response Headers\"\n {...(entry.response.headers ? { headers: entry.response.headers } : {})}\n />\n </div>\n </div>\n {entry.response.content?.text && (\n <div className=\"mt-density-3\">\n <div className=\"font-semibold text-foreground mb-1\">Response Body</div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-64\">\n <BodyView\n text={entry.response.content.text}\n {...(entry.response.content.mimeType\n ? { mimeType: entry.response.content.mimeType }\n : {})}\n />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction HeaderList({\n title,\n headers,\n}: {\n title: string;\n headers?: { name: string; value: string }[];\n}) {\n return (\n <>\n <div className=\"font-semibold text-foreground mb-1\">{title}</div>\n <div className=\"space-y-0.5\">\n {headers?.map((h, i) => (\n <div key={i} className=\"whitespace-nowrap\">\n <span className=\"text-purple-600 dark:text-purple-400\">{h.name}:</span> {h.value}\n </div>\n ))}\n </div>\n </>\n );\n}\n\nfunction BodyView({ text, mimeType }: { text: string; mimeType?: string }) {\n if (isJsonType(mimeType)) {\n const parsed = tryParseJson(text);\n if (parsed !== null) return <JsonView data={parsed} />;\n }\n return <pre className=\"whitespace-pre-wrap break-all\">{text}</pre>;\n}\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nfunction isJsonType(mime?: string): boolean {\n return !!mime && (mime.includes(\"json\") || mime.includes(\"javascript\"));\n}\n\nfunction matchesSearch(needle: string, entry: HAREntry): boolean {\n return [\n entry.request.method,\n entry.request.url,\n entry.request.postData?.text,\n entry.response.content?.text,\n ].some((value) => !!value && value.toLowerCase().includes(needle));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 0) return \"\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)}MB`;\n}\n\nfunction statusColor(status: number): string {\n if (status >= 500) return \"text-red-600\";\n if (status >= 400) return \"text-amber-600\";\n if (status >= 300) return \"text-blue-600\";\n if (status >= 200) return \"text-green-600\";\n return \"text-muted-foreground\";\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HarPanel.js","sources":["../../../src/data/har/HarPanel.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { useResourceClock } from \"../../hooks/use-resource-clock\";\nimport { UiLoader } from \"../../icons\";\nimport { formatDuration } from \"../../lib/format\";\nimport { DataTable, type DataTableColumn, type DataTableFooterContext } from \"../DataTable\";\nimport { Icon } from \"../Icon\";\nimport { JsonView } from \"../JsonView\";\nimport type { HAREntry } from \"./types\";\n\nconst ERROR_PREVIEW_CHARS = 80;\n\n/** Wall-clock ms shared by every in-flight row, ticking only while one exists. */\nconst HarClockContext = createContext<number | undefined>(undefined);\n\nexport type HarPanelProps = {\n /** HAR entries to render. */\n entries: HAREntry[];\n /** Optional external search term. When omitted, the internal DataTable search is shown. */\n search?: string;\n /** Empty-state label for no entries or no matches. */\n emptyLabel?: string;\n /** Classes applied to the panel root. */\n className?: string;\n /** Optional private body store used only when an expanded row needs a preview. */\n bodySource?: HarPanelBodySource;\n};\n\nexport type HarPanelBodySource = {\n hasBody: (entry: HAREntry, part: \"request\" | \"response\") => boolean;\n preview: (requestId: string, part: \"request\" | \"response\") => Promise<string>;\n downloadHref: (entry: HAREntry, part: \"request\" | \"response\") => string;\n};\n\nexport type HarEntryDetailsProps = { entry: HAREntry; bodySource?: HarPanelBodySource | undefined };\n\nconst COLS: DataTableColumn<HAREntry>[] = [\n {\n key: \"request.method\",\n label: \"Method\",\n shrink: true,\n },\n {\n key: \"request.url\",\n label: \"URL\",\n grow: true,\n render: (value, entry) => (\n <span className=\"inline-flex min-w-0 items-baseline gap-density-2\">\n <span title={String(value ?? \"\")}>{String(value ?? \"\")}</span>\n {entry._error ? (\n <span className=\"text-destructive text-xs\" title={entry._error}>\n {previewError(entry._error)}\n </span>\n ) : null}\n </span>\n ),\n },\n {\n key: \"response.status\",\n label: \"Status\",\n shrink: true,\n render: (value, entry) => <HarStatus status={Number(value ?? 0)} entry={entry} />,\n sortValue: (value) => Number(value ?? 0),\n filterValue: (value, entry) => harStatusLabel(Number(value ?? 0), entry),\n },\n {\n key: \"time\",\n label: \"Time\",\n align: \"right\",\n shrink: true,\n render: (value, entry) =>\n entry._pending ? <PendingElapsed entry={entry} /> : `${Number(value ?? 0).toFixed(0)}ms`,\n sortValue: (value, entry) =>\n entry._pending ? pendingElapsedMs(entry, Date.now()) : Number(value ?? 0),\n },\n {\n key: \"response.bodySize\",\n label: \"Size\",\n align: \"right\",\n shrink: true,\n render: (value) => formatBytes(Number(value ?? 0)),\n sortValue: (value) => Number(value ?? 0),\n },\n {\n key: \"response.content.mimeType\",\n label: \"Type\",\n shrink: true,\n },\n];\n\nexport function HarPanel({\n entries,\n search,\n emptyLabel = \"No HTTP traffic captured\",\n className,\n bodySource,\n}: HarPanelProps) {\n const filteredEntries = useMemo(() => {\n if (search === undefined || search.trim() === \"\") return entries;\n return entries.filter((entry) => matchesSearch(search.trim().toLowerCase(), entry));\n }, [entries, search]);\n const runningCount = useMemo(() => entries.filter((entry) => entry._pending).length, [entries]);\n const now = useResourceClock(runningCount > 0);\n\n if (!entries || entries.length === 0) {\n return (\n <div className=\"p-density-6 text-center text-muted-foreground text-sm\">{emptyLabel}</div>\n );\n }\n\n return (\n // A flex column, not a plain block: DataTable sizes itself as `flex-1\n // min-h-0` so its own scroll region can be bounded, and in a block parent\n // that resolves to content height — the table grows past the panel and\n // nothing scrolls.\n <div className={`flex h-full min-h-0 flex-col ${className ?? \"\"}`}>\n <HarClockContext.Provider value={now}>\n <DataTable\n data={filteredEntries}\n columns={COLS}\n autoFilter\n showGlobalFilter={search === undefined}\n globalFilterPlaceholder=\"Filter URL, method, or body…\"\n defaultSort={{ key: \"time\", dir: \"asc\" }}\n emptyMessage={emptyLabel}\n {...(runningCount > 0\n ? {\n footer: ({ visibleRowCount, totalRowCount }: DataTableFooterContext) =>\n `${visibleRowCount} of ${totalRowCount} row${totalRowCount === 1 ? \"\" : \"s\"} · ${runningCount} running`,\n }\n : {})}\n getRowId={(entry, index) =>\n // `_id` is the same on a request's pending and completed snapshots,\n // so an expanded row survives the transition. Without it, leave out\n // an in-flight entry's `time`, which grows with every snapshot.\n entry._id ??\n `${entry.startedDateTime ?? index}-${entry.request.method}-${entry.request.url}${entry._pending ? \"-pending\" : `-${entry.time}`}`\n }\n renderExpandedRow={(entry) => <HarEntryDetails entry={entry} bodySource={bodySource} />}\n />\n </HarClockContext.Provider>\n </div>\n );\n}\n\nfunction HarStatus({ status, entry }: { status: number; entry: HAREntry }) {\n if (entry._pending) {\n return (\n <span className=\"inline-flex items-center gap-1 text-muted-foreground\">\n <Icon icon={UiLoader} className=\"animate-spin\" />\n running\n </span>\n );\n }\n if (entry._error) return <span className=\"font-semibold text-destructive\">ERR</span>;\n return <span className={statusColor(status)}>{String(status)}</span>;\n}\n\nfunction PendingElapsed({ entry }: { entry: HAREntry }) {\n const now = useContext(HarClockContext);\n if (now === undefined) throw new Error(\"PendingElapsed must render inside HarPanel's clock\");\n return <span className=\"tabular-nums\">{formatDuration(pendingElapsedMs(entry, now))}</span>;\n}\n\n/**\n * Elapsed time of an in-flight request, measured from `startedDateTime` so it\n * keeps ticking between snapshots. The snapshot's `time` is only used when the\n * start timestamp cannot be parsed.\n */\nfunction pendingElapsedMs(entry: HAREntry, now: number): number {\n const started = Date.parse(entry.startedDateTime ?? \"\");\n if (Number.isNaN(started)) return entry.time;\n // Server and browser clocks can disagree by a little; a negative elapsed is noise.\n return Math.max(0, now - started);\n}\n\nfunction harStatusLabel(status: number, entry: HAREntry): string {\n if (entry._pending) return \"running\";\n if (entry._error) return \"ERR\";\n return String(status);\n}\n\nfunction previewError(error: string): string {\n return error.length > ERROR_PREVIEW_CHARS ? `${error.slice(0, ERROR_PREVIEW_CHARS)}…` : error;\n}\n\nexport function HarEntryDetails({ entry, bodySource }: HarEntryDetailsProps) {\n const parentNow = useContext(HarClockContext);\n const ownNow = useResourceClock(Boolean(entry._pending) && parentNow === undefined);\n return <HarClockContext.Provider value={parentNow ?? ownNow}><HarRowDetails entry={entry} bodySource={bodySource} /></HarClockContext.Provider>;\n}\n\nfunction HarRowDetails({ entry, bodySource }: HarEntryDetailsProps) {\n return (\n <>\n {entry._error && (\n <div className=\"mb-density-3\">\n <div className=\"font-semibold text-foreground mb-1\">Transport Error</div>\n <pre className=\"whitespace-pre-wrap break-all text-destructive\">{entry._error}</pre>\n </div>\n )}\n {entry._pending && (\n <div className=\"mb-density-3 text-muted-foreground\">\n Waiting for response — in flight for <PendingElapsed entry={entry} />\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-density-4\">\n <div>\n <HeaderList\n title=\"Request Headers\"\n {...(entry.request.headers ? { headers: entry.request.headers } : {})}\n />\n {(entry.request.postData?.text || bodySource?.hasBody(entry, \"request\")) && (\n <BodySection entry={entry} part=\"request\" text={entry.request.postData?.text}\n mimeType={entry.request.postData?.mimeType} bodySource={bodySource} />\n )}\n </div>\n <div>\n <HeaderList\n title=\"Response Headers\"\n {...(entry.response.headers ? { headers: entry.response.headers } : {})}\n />\n </div>\n </div>\n {(entry.response.content?.text || bodySource?.hasBody(entry, \"response\")) && (\n <BodySection entry={entry} part=\"response\" text={entry.response.content?.text}\n mimeType={entry.response.content?.mimeType} bodySource={bodySource} />\n )}\n </>\n );\n}\n\nfunction BodySection({ entry, part, text, mimeType, bodySource }: {\n entry: HAREntry;\n part: \"request\" | \"response\";\n text?: string | undefined;\n mimeType?: string | undefined;\n bodySource?: HarPanelBodySource | undefined;\n}) {\n const remote = !text && bodySource?.hasBody(entry, part);\n const requestId = entry._id;\n if (remote && !requestId) throw new Error(\"Private HAR body requires a request ID\");\n const [preview, setPreview] = useState<string | undefined>();\n const [error, setError] = useState<Error | undefined>();\n useEffect(() => {\n if (!remote || !bodySource || !requestId) return;\n let active = true;\n setPreview(undefined);\n setError(undefined);\n bodySource.preview(requestId, part).then(\n (value) => { if (active) setPreview(value); },\n (reason: unknown) => { if (active) setError(reason instanceof Error ? reason : new Error(String(reason))); },\n );\n return () => { active = false; };\n }, [bodySource, requestId, part, remote]);\n return (\n <div className=\"mt-density-3\">\n <div className=\"mb-1 flex items-center gap-2 font-semibold text-foreground\">\n {part === \"request\" ? \"Request Body\" : \"Response Body\"}\n {remote && bodySource && <a className=\"text-sm font-normal text-primary underline\" href={bodySource.downloadHref(entry, part)} download>Download full body</a>}\n </div>\n <div className=\"bg-background p-density-2 rounded border border-border overflow-auto max-h-64\">\n {error ? <span role=\"alert\" className=\"text-destructive\">{error.message}</span>\n : remote && preview === undefined ? <span className=\"text-muted-foreground\">Loading preview…</span>\n : <BodyView text={text || preview || \"\"} {...(mimeType ? { mimeType } : {})} />}\n </div>\n {remote && <p className=\"mt-1 text-xs text-muted-foreground\">Preview shows at most the first 64 KiB.</p>}\n </div>\n );\n}\n\nfunction HeaderList({\n title,\n headers,\n}: {\n title: string;\n headers?: { name: string; value: string }[];\n}) {\n return (\n <>\n <div className=\"font-semibold text-foreground mb-1\">{title}</div>\n <div className=\"space-y-0.5\">\n {headers?.map((h, i) => (\n <div key={i} className=\"whitespace-nowrap\">\n <span className=\"text-purple-600 dark:text-purple-400\">{h.name}:</span> {h.value}\n </div>\n ))}\n </div>\n </>\n );\n}\n\nfunction BodyView({ text, mimeType }: { text: string; mimeType?: string }) {\n if (isJsonType(mimeType)) {\n const parsed = tryParseJson(text);\n if (parsed !== null) return <JsonView data={parsed} />;\n }\n return <pre className=\"whitespace-pre-wrap break-all\">{text}</pre>;\n}\n\nfunction tryParseJson(text: string): unknown | null {\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nfunction isJsonType(mime?: string): boolean {\n return !!mime && (mime.includes(\"json\") || mime.includes(\"javascript\"));\n}\n\nfunction matchesSearch(needle: string, entry: HAREntry): boolean {\n return [\n entry.request.method,\n entry.request.url,\n entry.request.postData?.text,\n entry.response.content?.text,\n entry._error,\n ].some((value) => !!value && value.toLowerCase().includes(needle));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 0) return \"\";\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)}MB`;\n}\n\nfunction statusColor(status: number): string {\n if (status >= 500) return \"text-red-600\";\n if (status >= 400) return \"text-amber-600\";\n if (status >= 300) return \"text-blue-600\";\n if (status >= 200) return \"text-green-600\";\n return \"text-muted-foreground\";\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,15 @@
1
1
  import { HAREntry } from './types.js';
2
+ /**
3
+ * An in-flight request as the commons/har collector snapshots it: `_pending`,
4
+ * a zeroed response, and `time` holding the elapsed ms at snapshot time.
5
+ */
6
+ export declare function pendingHarEntry(startedAt: Date, snapshotElapsedMs: number): HAREntry;
7
+ /**
8
+ * The later snapshot of the same request once its response arrived: same `_id`
9
+ * and start, `_pending` gone, a real response and final `time`.
10
+ */
11
+ export declare function completedHarEntry(pending: HAREntry, responseText: string): HAREntry;
12
+ /** A request that never got a response: status 0 plus the transport error. */
13
+ export declare function transportErrorHarEntry(startedAt: Date, error: string): HAREntry;
2
14
  export declare const sampleHarEntries: HAREntry[];
3
15
  //# sourceMappingURL=fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/har/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EA+EtC,CAAC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/har/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAepF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CAanF;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAc/E;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EA+EtC,CAAC"}
@@ -43,6 +43,18 @@ export interface HAREntry extends Record<string, unknown> {
43
43
  wait?: number;
44
44
  receive?: number;
45
45
  };
46
+ /**
47
+ * HAR 1.2 custom field: a stable per-request id, identical on the pending and
48
+ * completed snapshots of one request.
49
+ */
50
+ _id?: string;
51
+ /**
52
+ * HAR 1.2 custom field: the request is still in flight. `response` is empty
53
+ * (status 0) and `time` is the elapsed ms when the snapshot was taken.
54
+ */
55
+ _pending?: boolean;
56
+ /** HAR 1.2 custom field: the transport error of a request that got no response (status 0). */
57
+ _error?: string;
46
58
  }
47
59
  export interface HARCreator {
48
60
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/har/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;CACb"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/har/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -3,11 +3,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const effortIcons = require("../chat/effort-icons.cjs");
6
- const utils = require("../../lib/utils.cjs");
7
6
  const RuntimeBar_limits = require("./RuntimeBar.limits.cjs");
8
7
  const RuntimeBar_model = require("./RuntimeBar.model.cjs");
9
- const RuntimeBarCombo = require("./RuntimeBarCombo.cjs");
10
- const RuntimeBarSegments = require("./RuntimeBarSegments.cjs");
8
+ const RuntimeBarLayout = require("./RuntimeBarLayout.cjs");
9
+ const RuntimeBar_fields = require("./RuntimeBar.fields.cjs");
10
+ const RuntimeBar_selection = require("./RuntimeBar.selection.cjs");
11
11
  const RuntimeBar_context = require("./RuntimeBar.context.cjs");
12
12
  const availability = require("./availability.cjs");
13
13
  const modelCapabilities = require("./model-capabilities.cjs");
@@ -31,24 +31,32 @@ function RuntimeBar({
31
31
  ariaLabel = "Runtime",
32
32
  className
33
33
  }) {
34
- var _a, _b;
34
+ var _a, _b, _c, _d;
35
35
  const [preference, setPreference] = react.useState({ model: effectiveModel, family: void 0 });
36
36
  if (preference.model !== effectiveModel) {
37
37
  setPreference({ model: effectiveModel, family: void 0 });
38
38
  }
39
39
  const preferredFamily = preference.model === effectiveModel ? preference.family : void 0;
40
- const specMode = runtimeFamily.runtimeModeFromModel(value.model) || ((_a = value.mode) == null ? void 0 : _a.trim()) || (effectiveMode == null ? void 0 : effectiveMode.trim());
40
+ const specMode = ((_a = value.mode) == null ? void 0 : _a.trim()) || runtimeFamily.runtimeModeFromModel(value.model) || (effectiveMode == null ? void 0 : effectiveMode.trim());
41
41
  const selection = runtimeMode.selectionForRuntime(
42
42
  families,
43
43
  specMode,
44
- value.model || (preferredFamily ? void 0 : effectiveModel),
44
+ value.id || value.model || (preferredFamily ? void 0 : effectiveModel),
45
45
  models,
46
46
  preferredFamily
47
47
  );
48
48
  const family = runtimeMode.familyById(families, selection.family);
49
- const mode = family.modes.find((entry) => entry.id === selection.mode) ?? runtimeMode.firstMode(family);
50
- const modelOptions = runtimeMode.modelsForFamily(models, family, specMode);
51
- const resolvedModel = RuntimeBar_model.runtimeModelForValue(models, value, availability.isSelectableModel);
49
+ const modes = RuntimeBar_selection.runtimeModes(families);
50
+ const mode = modes.find((entry) => entry.id === selection.mode);
51
+ if (!mode)
52
+ throw new Error(
53
+ `No available runtime mode for ${JSON.stringify(selection.mode)}`
54
+ );
55
+ const groups = RuntimeBar_selection.modelGroupsForMode({ models, families, mode: mode.id });
56
+ const resolvedModel = RuntimeBar_model.runtimeModelForValue(
57
+ groups.flatMap((group) => group.models),
58
+ value
59
+ );
52
60
  const selectedModelUnavailable = Boolean(
53
61
  !resolvedModel && (value.id || value.model) && RuntimeBar_model.runtimeModelForValue(models, value, (entry) => !availability.isSelectableModel(entry))
54
62
  );
@@ -63,14 +71,13 @@ function RuntimeBar({
63
71
  )) == null ? void 0 : _b.label) ?? effectiveModel;
64
72
  const applyMode = (familyId, modeId) => {
65
73
  setPreference({ model: effectiveModel, family: familyId });
66
- const next = RuntimeBar_model.applyRuntimeMode(
74
+ const next = RuntimeBar_selection.withRuntimeMode({
67
75
  value,
68
76
  models,
69
77
  families,
70
- familyId,
71
- modeId,
78
+ mode: modeId,
72
79
  reasoningEfforts
73
- );
80
+ });
74
81
  if (next !== value) onChange(next);
75
82
  };
76
83
  const applyCustomModel = (model) => {
@@ -91,80 +98,56 @@ function RuntimeBar({
91
98
  onChange(withoutCatalogModel(value));
92
99
  };
93
100
  const applyEffort = (effort) => onChange(withOptionalRuntimeValue(value, "effort", effort));
94
- if (variant === "combo") {
95
- return /* @__PURE__ */ jsxRuntime.jsx(RuntimeBar_context.RuntimeBarVariantContext.Provider, { value: "combo", children: /* @__PURE__ */ jsxRuntime.jsxs(
96
- "div",
97
- {
98
- role: "group",
99
- "aria-label": ariaLabel,
100
- "data-runtime-bar-variant": "combo",
101
- className: utils.cn("inline-flex max-w-full flex-wrap items-stretch gap-1", className),
102
- children: [
103
- /* @__PURE__ */ jsxRuntime.jsx(
104
- RuntimeBarCombo.RuntimeBarCombo,
105
- {
106
- value,
107
- families,
108
- family,
109
- mode,
110
- selectedMode: selection.mode,
111
- models: modelOptions,
112
- selectedModel: resolvedModel,
113
- selectedModelUnavailable,
114
- inheritedModelLabel,
115
- supportedEfforts,
116
- locked,
117
- showModel,
118
- showEffort,
119
- showTimeout,
120
- showCost,
121
- ariaLabel,
122
- className: "max-w-full",
123
- onFamilyChange: (familyId) => applyMode(familyId, selection.mode),
124
- onModeChange: (modeId) => applyMode(family.id, modeId),
125
- onModelSelect: applyModel,
126
- onModelClear: clearModel,
127
- onCustomModel: applyCustomModel,
128
- onEffortChange: applyEffort,
129
- onTimeoutChange: (timeout) => onChange(RuntimeBar_limits.withBudgetLimit(value, "timeout", timeout)),
130
- onCostChange: (cost) => onChange(RuntimeBar_limits.withBudgetLimit(value, "cost", cost))
131
- }
132
- ),
133
- actions
134
- ]
135
- }
136
- ) });
137
- }
138
- return /* @__PURE__ */ jsxRuntime.jsx(RuntimeBar_context.RuntimeBarVariantContext.Provider, { value: "segmented", children: /* @__PURE__ */ jsxRuntime.jsx(
139
- RuntimeBarSegments.RuntimeBarSegments,
101
+ const fields = [
102
+ ...showEffort && supportedEfforts.length > 0 ? [
103
+ RuntimeBar_fields.effortField({
104
+ value: value.effort,
105
+ offered: reasoningEfforts,
106
+ supported: supportedEfforts,
107
+ onChange: applyEffort
108
+ })
109
+ ] : [],
110
+ ...(actions == null ? void 0 : actions.fields) ?? [],
111
+ ...showCost ? [
112
+ RuntimeBar_fields.budgetField({
113
+ value: (_c = value.budget) == null ? void 0 : _c.cost,
114
+ onChange: (cost) => onChange(RuntimeBar_limits.withBudgetLimit(value, "cost", cost))
115
+ })
116
+ ] : [],
117
+ ...showTimeout ? [
118
+ RuntimeBar_fields.timeoutField({
119
+ value: (_d = value.budget) == null ? void 0 : _d.timeout,
120
+ onChange: (timeout) => onChange(RuntimeBar_limits.withBudgetLimit(value, "timeout", timeout))
121
+ })
122
+ ] : []
123
+ ];
124
+ return /* @__PURE__ */ jsxRuntime.jsx(RuntimeBar_context.RuntimeBarVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
125
+ RuntimeBarLayout.RuntimeBarLayout,
140
126
  {
141
- value,
142
- models,
143
- modelOptions,
144
- resolvedModel,
145
- selectedModelUnavailable,
146
- inheritedModelLabel,
147
- families,
148
- family,
149
- mode,
150
- selectedMode: selection.mode,
151
- reasoningEfforts,
152
- supportedEfforts,
153
- locked,
154
- showModel,
155
- showEffort,
156
- showTimeout,
157
- showCost,
158
- actions,
159
127
  ariaLabel,
160
128
  className,
161
- onModeChange: applyMode,
162
- onCustomModel: applyCustomModel,
163
- onModelSelect: applyModel,
164
- onModelClear: clearModel,
165
- onEffortChange: applyEffort,
166
- onTimeoutChange: (timeout) => onChange(RuntimeBar_limits.withBudgetLimit(value, "timeout", timeout)),
167
- onCostChange: (cost) => onChange(RuntimeBar_limits.withBudgetLimit(value, "cost", cost))
129
+ actions: { ...actions, fields },
130
+ identity: {
131
+ family,
132
+ mode,
133
+ modes,
134
+ groups,
135
+ selectedModel: resolvedModel,
136
+ model: value.model,
137
+ unavailable: selectedModelUnavailable,
138
+ inheritedModelLabel,
139
+ locked,
140
+ showModel,
141
+ variant,
142
+ onModeChange: (modeId) => applyMode(family.id, modeId),
143
+ onCustomModel: applyCustomModel,
144
+ onModelSelect: applyModel,
145
+ onModelClear: clearModel,
146
+ onFamilySelect: (familyId) => {
147
+ setPreference({ model: effectiveModel, family: familyId });
148
+ onChange(withoutCatalogModel(value));
149
+ }
150
+ }
168
151
  }
169
152
  ) });
170
153
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport { cn } from \"../../lib/utils\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { applyRuntimeMode, runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarCombo } from \"./RuntimeBarCombo\";\nimport { RuntimeBarSegments } from \"./RuntimeBarSegments\";\nimport { RuntimeBarVariantContext } from \"./RuntimeBar.context\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n firstMode,\n modelsForFamily,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog. Only the selected family's models are listed; a family the\n * catalog does not describe is served by the segment's free-text entry. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?: ReactNode | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily = preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n runtimeModeFromModel(value.model) ||\n value.mode?.trim() ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const mode =\n family.modes.find((entry) => entry.id === selection.mode) ??\n firstMode(family);\n const modelOptions = modelsForFamily(models, family, specMode);\n const resolvedModel = runtimeModelForValue(models, value, isSelectableModel);\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = applyRuntimeMode(\n value,\n models,\n families,\n familyId,\n modeId,\n reasoningEfforts,\n );\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n if (variant === \"combo\") {\n return (\n <RuntimeBarVariantContext.Provider value=\"combo\">\n <div\n role=\"group\"\n aria-label={ariaLabel}\n data-runtime-bar-variant=\"combo\"\n className={cn(\"inline-flex max-w-full flex-wrap items-stretch gap-1\", className)}\n >\n <RuntimeBarCombo\n value={value}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n models={modelOptions}\n selectedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n inheritedModelLabel={inheritedModelLabel}\n supportedEfforts={supportedEfforts}\n locked={locked}\n showModel={showModel}\n showEffort={showEffort}\n showTimeout={showTimeout}\n showCost={showCost}\n ariaLabel={ariaLabel}\n className=\"max-w-full\"\n onFamilyChange={(familyId) => applyMode(familyId, selection.mode)}\n onModeChange={(modeId) => applyMode(family.id, modeId)}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onCustomModel={applyCustomModel}\n onEffortChange={applyEffort}\n onTimeoutChange={(timeout) => onChange(withBudgetLimit(value, \"timeout\", timeout))}\n onCostChange={(cost) => onChange(withBudgetLimit(value, \"cost\", cost))}\n />\n {actions}\n </div>\n </RuntimeBarVariantContext.Provider>\n );\n }\n\n return (\n <RuntimeBarVariantContext.Provider value=\"segmented\">\n <RuntimeBarSegments\n value={value}\n models={models}\n modelOptions={modelOptions}\n resolvedModel={resolvedModel}\n selectedModelUnavailable={selectedModelUnavailable}\n inheritedModelLabel={inheritedModelLabel}\n families={families}\n family={family}\n mode={mode}\n selectedMode={selection.mode}\n reasoningEfforts={reasoningEfforts}\n supportedEfforts={supportedEfforts}\n locked={locked}\n showModel={showModel}\n showEffort={showEffort}\n showTimeout={showTimeout}\n showCost={showCost}\n actions={actions}\n ariaLabel={ariaLabel}\n className={className}\n onModeChange={applyMode}\n onCustomModel={applyCustomModel}\n onModelSelect={applyModel}\n onModelClear={clearModel}\n onEffortChange={applyEffort}\n onTimeoutChange={(timeout) => onChange(withBudgetLimit(value, \"timeout\", timeout))}\n onCostChange={(cost) => onChange(withBudgetLimit(value, \"cost\", cost))}\n />\n </RuntimeBarVariantContext.Provider>\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","useState","runtimeModeFromModel","selectionForRuntime","familyById","firstMode","modelsForFamily","runtimeModelForValue","isSelectableModel","effortOptionsForModel","applyRuntimeMode","reconcileModelCapabilities","jsx","RuntimeBarVariantContext","jsxs","cn","RuntimeBarCombo","withBudgetLimit","RuntimeBarSegments"],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarLayout } from \"./RuntimeBarLayout\";\nimport type { RuntimeBarActionsProps } from \"./RuntimeBarActions\";\nimport { timeoutField, budgetField, effortField } from \"./RuntimeBar.fields\";\nimport {\n modelGroupsForMode,\n runtimeModes,\n withRuntimeMode,\n} from \"./RuntimeBar.selection\";\nimport { RuntimeBarVariantContext } from \"./RuntimeBar.context\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** Fused field triggers or individually bordered controls. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog grouped by family and filtered by the selected mode. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?:\n | Pick<RuntimeBarActionsProps, \"fields\" | \"menu\" | \"menuLabel\">\n | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily =\n preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.id || value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const modes = runtimeModes(families);\n const mode = modes.find((entry) => entry.id === selection.mode);\n if (!mode)\n throw new Error(\n `No available runtime mode for ${JSON.stringify(selection.mode)}`,\n );\n const groups = modelGroupsForMode({ models, families, mode: mode.id });\n const resolvedModel = runtimeModelForValue(\n groups.flatMap((group) => group.models),\n value,\n );\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = withRuntimeMode({\n value,\n models,\n families,\n mode: modeId,\n reasoningEfforts,\n });\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n const fields = [\n ...(showEffort && supportedEfforts.length > 0\n ? [\n effortField({\n value: value.effort,\n offered: reasoningEfforts,\n supported: supportedEfforts,\n onChange: applyEffort,\n }),\n ]\n : []),\n ...(actions?.fields ?? []),\n ...(showCost\n ? [\n budgetField({\n value: value.budget?.cost,\n onChange: (cost) => onChange(withBudgetLimit(value, \"cost\", cost)),\n }),\n ]\n : []),\n ...(showTimeout\n ? [\n timeoutField({\n value: value.budget?.timeout,\n onChange: (timeout) =>\n onChange(withBudgetLimit(value, \"timeout\", timeout)),\n }),\n ]\n : []),\n ];\n return (\n <RuntimeBarVariantContext.Provider value={variant}>\n <RuntimeBarLayout\n ariaLabel={ariaLabel}\n className={className}\n actions={{ ...actions, fields }}\n identity={{\n family,\n mode,\n modes,\n groups,\n selectedModel: resolvedModel,\n model: value.model,\n unavailable: selectedModelUnavailable,\n inheritedModelLabel,\n locked,\n showModel,\n variant,\n onModeChange: (modeId) => applyMode(family.id, modeId),\n onCustomModel: applyCustomModel,\n onModelSelect: applyModel,\n onModelClear: clearModel,\n onFamilySelect: (familyId) => {\n setPreference({ model: effectiveModel, family: familyId });\n onChange(withoutCatalogModel(value));\n },\n }}\n />\n </RuntimeBarVariantContext.Provider>\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","useState","runtimeModeFromModel","selectionForRuntime","familyById","runtimeModes","modelGroupsForMode","runtimeModelForValue","isSelectableModel","effortOptionsForModel","withRuntimeMode","reconcileModelCapabilities","effortField","budgetField","withBudgetLimit","timeoutField","jsx","RuntimeBarVariantContext","RuntimeBarLayout"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { ReactNode } from 'react';
2
1
  import { ChatModel, ChatModelRuntime } from '../chat/types.js';
3
2
  import { RuntimeBarBudget } from './RuntimeBar.limits.js';
3
+ import { RuntimeBarActionsProps } from './RuntimeBarActions.js';
4
4
  import { SpecRuntimeFamily } from './runtime-mode.js';
5
5
  export type RuntimeBarValue = ChatModelRuntime & {
6
6
  cliArgs?: Record<string, unknown>;
@@ -10,10 +10,9 @@ export type RuntimeBarValue = ChatModelRuntime & {
10
10
  export type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {
11
11
  value: T;
12
12
  onChange: (value: T) => void;
13
- /** `segmented` uses field triggers; `combo` uses one direct-edit menu. */
13
+ /** Fused field triggers or individually bordered controls. */
14
14
  variant?: "combo" | "segmented";
15
- /** Model catalog. Only the selected family's models are listed; a family the
16
- * catalog does not describe is served by the segment's free-text entry. */
15
+ /** Model catalog grouped by family and filtered by the selected mode. */
17
16
  models?: ChatModel[] | undefined;
18
17
  families?: SpecRuntimeFamily[] | undefined;
19
18
  /** Resolved mode shown when the editable value inherits it from another layer. */
@@ -33,7 +32,7 @@ export type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {
33
32
  /** Opt-in control for `budget.cost`. */
34
33
  showCost?: boolean | undefined;
35
34
  /** Host-level settings belonging to the surrounding spec rather than this runtime row. */
36
- actions?: ReactNode | undefined;
35
+ actions?: Pick<RuntimeBarActionsProps, "fields" | "menu" | "menuLabel"> | undefined;
37
36
  ariaLabel?: string | undefined;
38
37
  className?: string | undefined;
39
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAU7E,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qEAAqE;IACrE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAChC;gFAC4E;IAC5E,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3C,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EACpD,KAAK,EACL,QAAQ,EACR,OAAqB,EACrB,MAAW,EACX,QAAgC,EAChC,aAAa,EACb,cAAc,EACd,gBAA4C,EAC5C,MAAc,EACd,SAAgB,EAChB,UAAiB,EACjB,WAAmB,EACnB,QAAgB,EAChB,OAAO,EACP,SAAqB,EACrB,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,+BA4JpB"}
1
+ {"version":3,"file":"RuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAalE,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qEAAqE;IACrE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAChC,yEAAyE;IACzE,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3C,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,OAAO,CAAC,EACJ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,GAC7D,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EACpD,KAAK,EACL,QAAQ,EACR,OAAqB,EACrB,MAAW,EACX,QAAgC,EAChC,aAAa,EACb,cAAc,EACd,gBAA4C,EAC5C,MAAc,EACd,SAAgB,EAChB,UAAiB,EACjB,WAAmB,EACnB,QAAgB,EAChB,OAAO,EACP,SAAqB,EACrB,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,+BAmJpB"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../../lib/utils.cjs");
5
+ const Icon = require("../Icon.cjs");
6
+ const effortIcons = require("../chat/effort-icons.cjs");
7
+ const RuntimeBar_limits = require("./RuntimeBar.limits.cjs");
8
+ const RuntimeLimitInput = require("./RuntimeLimitInput.cjs");
9
+ const RuntimeBarSegment = require("./RuntimeBarSegment.cjs");
10
+ const unspecified = require("./unspecified.cjs");
11
+ const UiBrain = require("../../icons/components/UiBrain.cjs");
12
+ const UiTimer = require("../../icons/components/UiTimer.cjs");
13
+ const UiCurrencyDollar = require("../../icons/components/UiCurrencyDollar.cjs");
14
+ function timeoutField({
15
+ value,
16
+ onChange
17
+ }) {
18
+ return limitField({
19
+ id: "budget.timeout",
20
+ label: "Timeout",
21
+ inputLabel: "Timeout duration",
22
+ icon: UiTimer.UiTimer,
23
+ current: value,
24
+ text: value ?? "",
25
+ placeholder: "45m",
26
+ presets: RuntimeBar_limits.TIMEOUT_PRESETS.map((timeout) => ({
27
+ label: timeout,
28
+ value: timeout
29
+ })),
30
+ parse: RuntimeBar_limits.parseTimeout,
31
+ onChange
32
+ });
33
+ }
34
+ function budgetField({
35
+ value,
36
+ onChange
37
+ }) {
38
+ return limitField({
39
+ id: "budget.cost",
40
+ label: "Budget",
41
+ inputLabel: "Budget (USD)",
42
+ icon: UiCurrencyDollar.UiCurrencyDollar,
43
+ current: RuntimeBar_limits.formatCost(value),
44
+ text: value === void 0 ? "" : String(value),
45
+ placeholder: "2.50",
46
+ presets: RuntimeBar_limits.COST_PRESETS.map((cost) => ({
47
+ label: RuntimeBar_limits.formatCost(cost),
48
+ value: cost
49
+ })),
50
+ parse: RuntimeBar_limits.parseCost,
51
+ onChange
52
+ });
53
+ }
54
+ function limitField({
55
+ id,
56
+ label,
57
+ inputLabel,
58
+ icon,
59
+ current,
60
+ text,
61
+ placeholder,
62
+ presets,
63
+ parse,
64
+ onChange
65
+ }) {
66
+ return {
67
+ id,
68
+ label,
69
+ icon,
70
+ isSet: current !== void 0,
71
+ title: `${label} — ${current ?? "no limit"}`,
72
+ caption: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
73
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: "size-4 shrink-0 text-muted-foreground" }),
74
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: RuntimeBarSegment.SEGMENT_CAPTION_CLASS, children: current })
75
+ ] }),
76
+ header: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-1", children: [
77
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: RuntimeBarSegment.SEGMENT_KEY_CLASS, children: inputLabel }),
78
+ /* @__PURE__ */ jsxRuntime.jsx(
79
+ RuntimeLimitInput.RuntimeLimitInput,
80
+ {
81
+ inputLabel,
82
+ text,
83
+ placeholder,
84
+ parse,
85
+ current,
86
+ onChange
87
+ }
88
+ )
89
+ ] }),
90
+ items: [
91
+ {
92
+ label: /* @__PURE__ */ jsxRuntime.jsx(RuntimeBarSegment.SegmentItemLabel, { text: "No limit", selected: current === void 0 }),
93
+ onSelect: () => onChange(void 0)
94
+ },
95
+ ...presets.map((preset) => ({
96
+ label: /* @__PURE__ */ jsxRuntime.jsx(
97
+ RuntimeBarSegment.SegmentItemLabel,
98
+ {
99
+ text: preset.label,
100
+ selected: preset.label === current
101
+ }
102
+ ),
103
+ onSelect: () => onChange(preset.value)
104
+ }))
105
+ ]
106
+ };
107
+ }
108
+ function effortField({
109
+ value,
110
+ offered,
111
+ supported,
112
+ onChange
113
+ }) {
114
+ const glyph = value ? effortIcons.effortLevelIcon(value) : void 0;
115
+ return {
116
+ id: "effort",
117
+ label: "Effort",
118
+ title: "Reasoning effort",
119
+ isSet: Boolean(value),
120
+ icon: UiBrain.UiBrain,
121
+ iconClassName: "text-muted-foreground",
122
+ caption: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
123
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: RuntimeBarSegment.SEGMENT_KEY_CLASS, children: "Effort" }),
124
+ glyph && /* @__PURE__ */ jsxRuntime.jsx(
125
+ Icon.Icon,
126
+ {
127
+ icon: glyph,
128
+ className: utils.cn("size-4 shrink-0", effortIcons.effortLevelColor(value))
129
+ }
130
+ ),
131
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: RuntimeBarSegment.SEGMENT_CAPTION_CLASS, children: value ? effortIcons.effortLevelLabel(value) : unspecified.UNSPECIFIED_LABEL })
132
+ ] }),
133
+ items: [
134
+ {
135
+ label: /* @__PURE__ */ jsxRuntime.jsx(
136
+ RuntimeBarSegment.SegmentItemLabel,
137
+ {
138
+ text: unspecified.UNSPECIFIED_LABEL,
139
+ hint: unspecified.UNSPECIFIED_HINT,
140
+ selected: !value
141
+ }
142
+ ),
143
+ onSelect: () => onChange("")
144
+ },
145
+ ...[
146
+ .../* @__PURE__ */ new Set([...offered, ...supported, ...value ? [value] : []])
147
+ ].map((effort) => {
148
+ const icon = effortIcons.effortLevelIcon(effort);
149
+ return {
150
+ label: /* @__PURE__ */ jsxRuntime.jsx(
151
+ RuntimeBarSegment.SegmentItemLabel,
152
+ {
153
+ text: effortIcons.effortLevelLabel(effort),
154
+ selected: value === effort,
155
+ ...supported.includes(effort) ? {} : { hint: "unsupported" }
156
+ }
157
+ ),
158
+ ...icon ? { icon } : {},
159
+ iconClassName: effortIcons.effortLevelColor(effort),
160
+ disabled: !supported.includes(effort),
161
+ onSelect: () => onChange(effort)
162
+ };
163
+ })
164
+ ]
165
+ };
166
+ }
167
+ exports.budgetField = budgetField;
168
+ exports.effortField = effortField;
169
+ exports.timeoutField = timeoutField;
170
+ //# sourceMappingURL=RuntimeBar.fields.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeBar.fields.cjs","sources":["../../../src/data/runtime/RuntimeBar.fields.tsx"],"sourcesContent":["import { UiBrain, UiCurrencyDollar, UiTimer } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport type { RuntimeBarAction } from \"./RuntimeBarActions\";\nimport {\n COST_PRESETS,\n TIMEOUT_PRESETS,\n formatCost,\n parseCost,\n parseTimeout,\n} from \"./RuntimeBar.limits\";\nimport { RuntimeLimitInput } from \"./RuntimeLimitInput\";\nimport {\n SEGMENT_CAPTION_CLASS,\n SEGMENT_KEY_CLASS,\n SegmentItemLabel,\n} from \"./RuntimeBarSegment\";\nimport { UNSPECIFIED_LABEL, UNSPECIFIED_HINT } from \"./unspecified\";\n\nexport function timeoutField({\n value,\n onChange,\n}: {\n value: string | undefined;\n onChange: (next: string | undefined) => void;\n}): RuntimeBarAction {\n return limitField({\n id: \"budget.timeout\",\n label: \"Timeout\",\n inputLabel: \"Timeout duration\",\n icon: UiTimer,\n current: value,\n text: value ?? \"\",\n placeholder: \"45m\",\n presets: TIMEOUT_PRESETS.map((timeout) => ({\n label: timeout,\n value: timeout,\n })),\n parse: parseTimeout,\n onChange,\n });\n}\n\nexport function budgetField({\n value,\n onChange,\n}: {\n value: number | undefined;\n onChange: (next: number | undefined) => void;\n}): RuntimeBarAction {\n return limitField({\n id: \"budget.cost\",\n label: \"Budget\",\n inputLabel: \"Budget (USD)\",\n icon: UiCurrencyDollar,\n current: formatCost(value),\n text: value === undefined ? \"\" : String(value),\n placeholder: \"2.50\",\n presets: COST_PRESETS.map((cost) => ({\n label: formatCost(cost)!,\n value: cost,\n })),\n parse: parseCost,\n onChange,\n });\n}\n\nfunction limitField<V extends string | number>({\n id,\n label,\n inputLabel,\n icon,\n current,\n text,\n placeholder,\n presets,\n parse,\n onChange,\n}: {\n id: string;\n label: string;\n inputLabel: string;\n icon: StaticIconComponent;\n current: string | undefined;\n text: string;\n placeholder: string;\n presets: { label: string; value: V }[];\n parse: (text: string) => V | undefined;\n onChange: (next: V | undefined) => void;\n}): RuntimeBarAction {\n return {\n id,\n label,\n icon,\n isSet: current !== undefined,\n title: `${label} — ${current ?? \"no limit\"}`,\n caption: (\n <>\n <Icon icon={icon} className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className={SEGMENT_CAPTION_CLASS}>{current}</span>\n </>\n ),\n header: (\n <div className=\"grid gap-1\">\n <span className={SEGMENT_KEY_CLASS}>{inputLabel}</span>\n <RuntimeLimitInput\n inputLabel={inputLabel}\n text={text}\n placeholder={placeholder}\n parse={parse}\n current={current}\n onChange={onChange}\n />\n </div>\n ),\n items: [\n {\n label: (\n <SegmentItemLabel text=\"No limit\" selected={current === undefined} />\n ),\n onSelect: () => onChange(undefined),\n },\n ...presets.map((preset) => ({\n label: (\n <SegmentItemLabel\n text={preset.label}\n selected={preset.label === current}\n />\n ),\n onSelect: () => onChange(preset.value),\n })),\n ],\n };\n}\n\nexport function effortField({\n value,\n offered,\n supported,\n onChange,\n}: {\n value: string | undefined;\n offered: string[];\n supported: string[];\n onChange: (next: string) => void;\n}): RuntimeBarAction {\n const glyph = value ? effortLevelIcon(value) : undefined;\n return {\n id: \"effort\",\n label: \"Effort\",\n title: \"Reasoning effort\",\n isSet: Boolean(value),\n icon: UiBrain,\n iconClassName: \"text-muted-foreground\",\n caption: (\n <>\n <span className={SEGMENT_KEY_CLASS}>Effort</span>\n {glyph && (\n <Icon\n icon={glyph}\n className={cn(\"size-4 shrink-0\", effortLevelColor(value!))}\n />\n )}\n <span className={SEGMENT_CAPTION_CLASS}>\n {value ? effortLevelLabel(value) : UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n {\n label: (\n <SegmentItemLabel\n text={UNSPECIFIED_LABEL}\n hint={UNSPECIFIED_HINT}\n selected={!value}\n />\n ),\n onSelect: () => onChange(\"\"),\n },\n ...[\n ...new Set([...offered, ...supported, ...(value ? [value] : [])]),\n ].map((effort) => {\n const icon = effortLevelIcon(effort);\n return {\n label: (\n <SegmentItemLabel\n text={effortLevelLabel(effort)}\n selected={value === effort}\n {...(supported.includes(effort) ? {} : { hint: \"unsupported\" })}\n />\n ),\n ...(icon ? { icon } : {}),\n iconClassName: effortLevelColor(effort),\n disabled: !supported.includes(effort),\n onSelect: () => onChange(effort),\n };\n }),\n ],\n };\n}\n"],"names":["UiTimer","TIMEOUT_PRESETS","parseTimeout","UiCurrencyDollar","formatCost","COST_PRESETS","parseCost","jsxs","Fragment","jsx","Icon","SEGMENT_CAPTION_CLASS","SEGMENT_KEY_CLASS","RuntimeLimitInput","SegmentItemLabel","effortLevelIcon","UiBrain","cn","effortLevelColor","effortLevelLabel","UNSPECIFIED_LABEL","UNSPECIFIED_HINT"],"mappings":"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"}