@flanksource/clicky-ui 0.3.44 → 0.3.46

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 (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const parsePrefix = require("./parse-prefix.cjs");
4
+ function parseJsonSource(source, inputFormat = "json") {
5
+ switch (inputFormat) {
6
+ case "json":
7
+ return parseDocument(source);
8
+ case "ndjson":
9
+ return parseRecords(source);
10
+ default:
11
+ throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);
12
+ }
13
+ }
14
+ function parseDocument(source) {
15
+ try {
16
+ return { status: "complete", value: JSON.parse(source) };
17
+ } catch (error) {
18
+ if (!(error instanceof SyntaxError)) throw error;
19
+ }
20
+ const result = parsePrefix.parseJsonPrefix(source);
21
+ if (result.status === "complete")
22
+ throw new Error(
23
+ "JSON prefix parser accepted a document rejected by JSON.parse"
24
+ );
25
+ const before = source.slice(0, result.offset).split(/\r\n|\r|\n/);
26
+ const last = before.at(-1);
27
+ if (last === void 0) throw new Error("JSON diagnostic has no source line");
28
+ return {
29
+ status: result.status,
30
+ ...result.status === "incomplete" && "value" in result ? { value: result.value } : {},
31
+ diagnostic: {
32
+ message: result.message,
33
+ line: before.length,
34
+ column: last.length + 1
35
+ }
36
+ };
37
+ }
38
+ function parseRecords(source) {
39
+ const lines = source.split(/\r\n|\n/);
40
+ const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);
41
+ const records = [];
42
+ for (const [index, line] of lines.entries()) {
43
+ if (line.trim().length === 0) continue;
44
+ const result = parseDocument(line);
45
+ if (result.status === "complete") {
46
+ records.push(result.value);
47
+ continue;
48
+ }
49
+ if (!result.diagnostic)
50
+ throw new Error("Invalid NDJSON record has no diagnostic");
51
+ const incomplete = result.status === "incomplete" && index === lastRecord;
52
+ return {
53
+ status: incomplete ? "incomplete" : "invalid",
54
+ ...records.length > 0 ? { value: records } : {},
55
+ diagnostic: { ...result.diagnostic, line: index + 1 },
56
+ ...incomplete && "value" in result ? { partialRecord: { line: index + 1, value: result.value } } : {}
57
+ };
58
+ }
59
+ return { status: "complete", value: records };
60
+ }
61
+ exports.parseJsonSource = parseJsonSource;
62
+ //# sourceMappingURL=parse-source.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.cjs","sources":["../../../src/data/json-view/parse-source.ts"],"sourcesContent":["import { parseJsonPrefix } from \"./parse-prefix\";\n\nexport type SourceDiagnostic = {\n message: string;\n line: number;\n column: number;\n};\nexport type JsonSourceResult = {\n status: \"complete\" | \"incomplete\" | \"invalid\";\n value?: unknown;\n diagnostic?: SourceDiagnostic;\n partialRecord?: { line: number; value: unknown };\n};\n\nexport function parseJsonSource(\n source: string,\n inputFormat: \"json\" | \"ndjson\" = \"json\",\n): JsonSourceResult {\n switch (inputFormat) {\n case \"json\":\n return parseDocument(source);\n case \"ndjson\":\n return parseRecords(source);\n default:\n throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);\n }\n}\n\nfunction parseDocument(source: string): JsonSourceResult {\n try {\n return { status: \"complete\", value: JSON.parse(source) };\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n }\n const result = parseJsonPrefix(source);\n if (result.status === \"complete\")\n throw new Error(\n \"JSON prefix parser accepted a document rejected by JSON.parse\",\n );\n const before = source.slice(0, result.offset).split(/\\r\\n|\\r|\\n/);\n const last = before.at(-1);\n if (last === undefined) throw new Error(\"JSON diagnostic has no source line\");\n return {\n status: result.status,\n ...(result.status === \"incomplete\" && \"value\" in result\n ? { value: result.value }\n : {}),\n diagnostic: {\n message: result.message,\n line: before.length,\n column: last.length + 1,\n },\n };\n}\n\nfunction parseRecords(source: string): JsonSourceResult {\n const lines = source.split(/\\r\\n|\\n/);\n const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);\n const records: unknown[] = [];\n for (const [index, line] of lines.entries()) {\n if (line.trim().length === 0) continue;\n const result = parseDocument(line);\n if (result.status === \"complete\") {\n records.push(result.value);\n continue;\n }\n if (!result.diagnostic)\n throw new Error(\"Invalid NDJSON record has no diagnostic\");\n const incomplete = result.status === \"incomplete\" && index === lastRecord;\n return {\n status: incomplete ? \"incomplete\" : \"invalid\",\n ...(records.length > 0 ? { value: records } : {}),\n diagnostic: { ...result.diagnostic, line: index + 1 },\n ...(incomplete && \"value\" in result\n ? { partialRecord: { line: index + 1, value: result.value } }\n : {}),\n };\n }\n return { status: \"complete\", value: records };\n}\n"],"names":["parseJsonPrefix"],"mappings":";;;AAcO,SAAS,gBACd,QACA,cAAiC,QACf;AAClB,UAAQ,aAAA;AAAA,IACN,KAAK;AACH,aAAO,cAAc,MAAM;AAAA,IAC7B,KAAK;AACH,aAAO,aAAa,MAAM;AAAA,IAC5B;AACE,YAAM,IAAI,MAAM,kCAAkC,OAAO,WAAW,CAAC,EAAE;AAAA,EAAA;AAE7E;AAEA,SAAS,cAAc,QAAkC;AACvD,MAAI;AACF,WAAO,EAAE,QAAQ,YAAY,OAAO,KAAK,MAAM,MAAM,EAAA;AAAA,EACvD,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,aAAc,OAAM;AAAA,EAC7C;AACA,QAAM,SAASA,YAAAA,gBAAgB,MAAM;AACrC,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAEJ,QAAM,SAAS,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,YAAY;AAChE,QAAM,OAAO,OAAO,GAAG,EAAE;AACzB,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,oCAAoC;AAC5E,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,GAAI,OAAO,WAAW,gBAAgB,WAAW,SAC7C,EAAE,OAAO,OAAO,MAAA,IAChB,CAAA;AAAA,IACJ,YAAY;AAAA,MACV,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,IAAA;AAAA,EACxB;AAEJ;AAEA,SAAS,aAAa,QAAkC;AACtD,QAAM,QAAQ,OAAO,MAAM,SAAS;AACpC,QAAM,aAAa,MAAM,cAAc,CAAC,SAAS,KAAK,KAAA,EAAO,SAAS,CAAC;AACvE,QAAM,UAAqB,CAAA;AAC3B,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,WAAW;AAC3C,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,OAAO,WAAW,YAAY;AAChC,cAAQ,KAAK,OAAO,KAAK;AACzB;AAAA,IACF;AACA,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,yCAAyC;AAC3D,UAAM,aAAa,OAAO,WAAW,gBAAgB,UAAU;AAC/D,WAAO;AAAA,MACL,QAAQ,aAAa,eAAe;AAAA,MACpC,GAAI,QAAQ,SAAS,IAAI,EAAE,OAAO,QAAA,IAAY,CAAA;AAAA,MAC9C,YAAY,EAAE,GAAG,OAAO,YAAY,MAAM,QAAQ,EAAA;AAAA,MAClD,GAAI,cAAc,WAAW,SACzB,EAAE,eAAe,EAAE,MAAM,QAAQ,GAAG,OAAO,OAAO,MAAA,EAAM,IACxD,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAO,EAAE,QAAQ,YAAY,OAAO,QAAA;AACtC;;"}
@@ -0,0 +1,16 @@
1
+ export type SourceDiagnostic = {
2
+ message: string;
3
+ line: number;
4
+ column: number;
5
+ };
6
+ export type JsonSourceResult = {
7
+ status: "complete" | "incomplete" | "invalid";
8
+ value?: unknown;
9
+ diagnostic?: SourceDiagnostic;
10
+ partialRecord?: {
11
+ line: number;
12
+ value: unknown;
13
+ };
14
+ };
15
+ export declare function parseJsonSource(source: string, inputFormat?: "json" | "ndjson"): JsonSourceResult;
16
+ //# sourceMappingURL=parse-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/parse-source.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAClD,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAM,GAAG,QAAiB,GACtC,gBAAgB,CASlB"}
@@ -0,0 +1,62 @@
1
+ import { parseJsonPrefix } from "./parse-prefix.js";
2
+ function parseJsonSource(source, inputFormat = "json") {
3
+ switch (inputFormat) {
4
+ case "json":
5
+ return parseDocument(source);
6
+ case "ndjson":
7
+ return parseRecords(source);
8
+ default:
9
+ throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);
10
+ }
11
+ }
12
+ function parseDocument(source) {
13
+ try {
14
+ return { status: "complete", value: JSON.parse(source) };
15
+ } catch (error) {
16
+ if (!(error instanceof SyntaxError)) throw error;
17
+ }
18
+ const result = parseJsonPrefix(source);
19
+ if (result.status === "complete")
20
+ throw new Error(
21
+ "JSON prefix parser accepted a document rejected by JSON.parse"
22
+ );
23
+ const before = source.slice(0, result.offset).split(/\r\n|\r|\n/);
24
+ const last = before.at(-1);
25
+ if (last === void 0) throw new Error("JSON diagnostic has no source line");
26
+ return {
27
+ status: result.status,
28
+ ...result.status === "incomplete" && "value" in result ? { value: result.value } : {},
29
+ diagnostic: {
30
+ message: result.message,
31
+ line: before.length,
32
+ column: last.length + 1
33
+ }
34
+ };
35
+ }
36
+ function parseRecords(source) {
37
+ const lines = source.split(/\r\n|\n/);
38
+ const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);
39
+ const records = [];
40
+ for (const [index, line] of lines.entries()) {
41
+ if (line.trim().length === 0) continue;
42
+ const result = parseDocument(line);
43
+ if (result.status === "complete") {
44
+ records.push(result.value);
45
+ continue;
46
+ }
47
+ if (!result.diagnostic)
48
+ throw new Error("Invalid NDJSON record has no diagnostic");
49
+ const incomplete = result.status === "incomplete" && index === lastRecord;
50
+ return {
51
+ status: incomplete ? "incomplete" : "invalid",
52
+ ...records.length > 0 ? { value: records } : {},
53
+ diagnostic: { ...result.diagnostic, line: index + 1 },
54
+ ...incomplete && "value" in result ? { partialRecord: { line: index + 1, value: result.value } } : {}
55
+ };
56
+ }
57
+ return { status: "complete", value: records };
58
+ }
59
+ export {
60
+ parseJsonSource
61
+ };
62
+ //# sourceMappingURL=parse-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.js","sources":["../../../src/data/json-view/parse-source.ts"],"sourcesContent":["import { parseJsonPrefix } from \"./parse-prefix\";\n\nexport type SourceDiagnostic = {\n message: string;\n line: number;\n column: number;\n};\nexport type JsonSourceResult = {\n status: \"complete\" | \"incomplete\" | \"invalid\";\n value?: unknown;\n diagnostic?: SourceDiagnostic;\n partialRecord?: { line: number; value: unknown };\n};\n\nexport function parseJsonSource(\n source: string,\n inputFormat: \"json\" | \"ndjson\" = \"json\",\n): JsonSourceResult {\n switch (inputFormat) {\n case \"json\":\n return parseDocument(source);\n case \"ndjson\":\n return parseRecords(source);\n default:\n throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);\n }\n}\n\nfunction parseDocument(source: string): JsonSourceResult {\n try {\n return { status: \"complete\", value: JSON.parse(source) };\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n }\n const result = parseJsonPrefix(source);\n if (result.status === \"complete\")\n throw new Error(\n \"JSON prefix parser accepted a document rejected by JSON.parse\",\n );\n const before = source.slice(0, result.offset).split(/\\r\\n|\\r|\\n/);\n const last = before.at(-1);\n if (last === undefined) throw new Error(\"JSON diagnostic has no source line\");\n return {\n status: result.status,\n ...(result.status === \"incomplete\" && \"value\" in result\n ? { value: result.value }\n : {}),\n diagnostic: {\n message: result.message,\n line: before.length,\n column: last.length + 1,\n },\n };\n}\n\nfunction parseRecords(source: string): JsonSourceResult {\n const lines = source.split(/\\r\\n|\\n/);\n const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);\n const records: unknown[] = [];\n for (const [index, line] of lines.entries()) {\n if (line.trim().length === 0) continue;\n const result = parseDocument(line);\n if (result.status === \"complete\") {\n records.push(result.value);\n continue;\n }\n if (!result.diagnostic)\n throw new Error(\"Invalid NDJSON record has no diagnostic\");\n const incomplete = result.status === \"incomplete\" && index === lastRecord;\n return {\n status: incomplete ? \"incomplete\" : \"invalid\",\n ...(records.length > 0 ? { value: records } : {}),\n diagnostic: { ...result.diagnostic, line: index + 1 },\n ...(incomplete && \"value\" in result\n ? { partialRecord: { line: index + 1, value: result.value } }\n : {}),\n };\n }\n return { status: \"complete\", value: records };\n}\n"],"names":[],"mappings":";AAcO,SAAS,gBACd,QACA,cAAiC,QACf;AAClB,UAAQ,aAAA;AAAA,IACN,KAAK;AACH,aAAO,cAAc,MAAM;AAAA,IAC7B,KAAK;AACH,aAAO,aAAa,MAAM;AAAA,IAC5B;AACE,YAAM,IAAI,MAAM,kCAAkC,OAAO,WAAW,CAAC,EAAE;AAAA,EAAA;AAE7E;AAEA,SAAS,cAAc,QAAkC;AACvD,MAAI;AACF,WAAO,EAAE,QAAQ,YAAY,OAAO,KAAK,MAAM,MAAM,EAAA;AAAA,EACvD,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,aAAc,OAAM;AAAA,EAC7C;AACA,QAAM,SAAS,gBAAgB,MAAM;AACrC,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAEJ,QAAM,SAAS,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,YAAY;AAChE,QAAM,OAAO,OAAO,GAAG,EAAE;AACzB,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,oCAAoC;AAC5E,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,GAAI,OAAO,WAAW,gBAAgB,WAAW,SAC7C,EAAE,OAAO,OAAO,MAAA,IAChB,CAAA;AAAA,IACJ,YAAY;AAAA,MACV,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,IAAA;AAAA,EACxB;AAEJ;AAEA,SAAS,aAAa,QAAkC;AACtD,QAAM,QAAQ,OAAO,MAAM,SAAS;AACpC,QAAM,aAAa,MAAM,cAAc,CAAC,SAAS,KAAK,KAAA,EAAO,SAAS,CAAC;AACvE,QAAM,UAAqB,CAAA;AAC3B,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,WAAW;AAC3C,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,OAAO,WAAW,YAAY;AAChC,cAAQ,KAAK,OAAO,KAAK;AACzB;AAAA,IACF;AACA,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,yCAAyC;AAC3D,UAAM,aAAa,OAAO,WAAW,gBAAgB,UAAU;AAC/D,WAAO;AAAA,MACL,QAAQ,aAAa,eAAe;AAAA,MACpC,GAAI,QAAQ,SAAS,IAAI,EAAE,OAAO,QAAA,IAAY,CAAA;AAAA,MAC9C,YAAY,EAAE,GAAG,OAAO,YAAY,MAAM,QAAQ,EAAA;AAAA,MAClD,GAAI,cAAc,WAAW,SACzB,EAAE,eAAe,EAAE,MAAM,QAAQ,GAAG,OAAO,OAAO,MAAA,EAAM,IACxD,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAO,EAAE,QAAQ,YAAY,OAAO,QAAA;AACtC;"}
@@ -0,0 +1,6 @@
1
+ export declare const largeJsonSource: string;
2
+ export declare const truncatedObjectSource = "{\n \"requestId\": \"run-0042\",\n \"service\": {\n \"name\": \"api\",\n \"metrics\": { \"ready\": true, \"requests\": 128, \"latencyMs\":";
3
+ export declare const truncatedArraySource = "{\n \"service\": \"api\",\n \"ports\": [8080, 9090, { \"name\": \"metrics\", \"port\":";
4
+ export declare const truncatedStringSource = "{\n \"service\": \"worker\",\n \"enabled\": true,\n \"message\": \"The worker was processing a record when";
5
+ export declare const ndjsonSource: string;
6
+ //# sourceMappingURL=story-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/story-fixtures.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,QAwB1B,CAAC;AAEH,eAAO,MAAM,qBAAqB,uJACkG,CAAC;AACrI,eAAO,MAAM,oBAAoB,6FAC+C,CAAC;AACjF,eAAO,MAAM,qBAAqB,kHACsE,CAAC;AAEzG,eAAO,MAAM,YAAY,QAIb,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Density } from '../../hooks/use-density.js';
2
+ export type JsonViewOptions = {
3
+ /** Property name displayed before the value. */
4
+ name?: string;
5
+ /** Current nesting depth; callers usually leave this unset. */
6
+ depth?: number;
7
+ /** Depth that starts expanded by default. */
8
+ defaultOpenDepth?: number;
9
+ /** YAML is the default; JSON retains braces and quoted strings. */
10
+ format?: "yaml" | "json";
11
+ /** Override the inherited application density for this viewer. */
12
+ density?: Density;
13
+ };
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -8,7 +8,6 @@ const RuntimeBar_model = require("./RuntimeBar.model.cjs");
8
8
  const RuntimeBarLayout = require("./RuntimeBarLayout.cjs");
9
9
  const RuntimeBar_fields = require("./RuntimeBar.fields.cjs");
10
10
  const RuntimeBar_selection = require("./RuntimeBar.selection.cjs");
11
- const RuntimeBar_context = require("./RuntimeBar.context.cjs");
12
11
  const availability = require("./availability.cjs");
13
12
  const modelCapabilities = require("./model-capabilities.cjs");
14
13
  const runtimeMode = require("./runtime-mode.cjs");
@@ -16,7 +15,6 @@ const runtimeFamily = require("../../lib/runtime-family.cjs");
16
15
  function RuntimeBar({
17
16
  value,
18
17
  onChange,
19
- variant = "segmented",
20
18
  models = [],
21
19
  families = runtimeMode.SPEC_RUNTIME_FAMILIES,
22
20
  effectiveMode,
@@ -121,7 +119,7 @@ function RuntimeBar({
121
119
  })
122
120
  ] : []
123
121
  ];
124
- return /* @__PURE__ */ jsxRuntime.jsx(RuntimeBar_context.RuntimeBarVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
122
+ return /* @__PURE__ */ jsxRuntime.jsx(
125
123
  RuntimeBarLayout.RuntimeBarLayout,
126
124
  {
127
125
  ariaLabel,
@@ -138,7 +136,6 @@ function RuntimeBar({
138
136
  inheritedModelLabel,
139
137
  locked,
140
138
  showModel,
141
- variant,
142
139
  onModeChange: (modeId) => applyMode(family.id, modeId),
143
140
  onCustomModel: applyCustomModel,
144
141
  onModelSelect: applyModel,
@@ -149,7 +146,7 @@ function RuntimeBar({
149
146
  }
150
147
  }
151
148
  }
152
- ) });
149
+ );
153
150
  }
154
151
  function withoutCatalogModel(value) {
155
152
  return withOptionalRuntimeValue(
@@ -1 +1 @@
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
+ {"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 { 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 /** 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/** Mode-first runtime controls with settings that adapt to the container width. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\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 <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 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 );\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","RuntimeBarLayout"],"mappings":"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"}
@@ -10,8 +10,6 @@ export type RuntimeBarValue = ChatModelRuntime & {
10
10
  export type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {
11
11
  value: T;
12
12
  onChange: (value: T) => void;
13
- /** Fused field triggers or individually bordered controls. */
14
- variant?: "combo" | "segmented";
15
13
  /** Model catalog grouped by family and filtered by the selected mode. */
16
14
  models?: ChatModel[] | undefined;
17
15
  families?: SpecRuntimeFamily[] | undefined;
@@ -36,6 +34,6 @@ export type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {
36
34
  ariaLabel?: string | undefined;
37
35
  className?: string | undefined;
38
36
  };
39
- /** Self-describing runtime controls with segmented and combo presentations. */
40
- export declare function RuntimeBar<T extends RuntimeBarValue>({ value, onChange, variant, models, families, effectiveMode, effectiveModel, reasoningEfforts, locked, showModel, showEffort, showTimeout, showCost, actions, ariaLabel, className, }: RuntimeBarProps<T>): import("react").JSX.Element;
37
+ /** Mode-first runtime controls with settings that adapt to the container width. */
38
+ export declare function RuntimeBar<T extends RuntimeBarValue>({ value, onChange, models, families, effectiveMode, effectiveModel, reasoningEfforts, locked, showModel, showEffort, showTimeout, showCost, actions, ariaLabel, className, }: RuntimeBarProps<T>): import("react").JSX.Element;
41
39
  //# sourceMappingURL=RuntimeBar.d.ts.map
@@ -1 +1 @@
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"}
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;AAYlE,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,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,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EACpD,KAAK,EACL,QAAQ,EACR,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,+BAgJpB"}
@@ -117,8 +117,8 @@ function effortField({
117
117
  label: "Effort",
118
118
  title: "Reasoning effort",
119
119
  isSet: Boolean(value),
120
- icon: UiBrain.UiBrain,
121
- iconClassName: "text-muted-foreground",
120
+ icon: glyph ?? UiBrain.UiBrain,
121
+ iconClassName: glyph ? effortIcons.effortLevelColor(value) : "text-muted-foreground",
122
122
  caption: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
123
123
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: RuntimeBarSegment.SEGMENT_KEY_CLASS, children: "Effort" }),
124
124
  glyph && /* @__PURE__ */ jsxRuntime.jsx(
@@ -1 +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":";;;;;;;;;;;;;AAwBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAMA,QAAAA;AAAAA,IACN,SAAS;AAAA,IACT,MAAM,SAAS;AAAA,IACf,aAAa;AAAA,IACb,SAASC,kBAAAA,gBAAgB,IAAI,CAAC,aAAa;AAAA,MACzC,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAOC,kBAAAA;AAAAA,IACP;AAAA,EAAA,CACD;AACH;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAMC,iBAAAA;AAAAA,IACN,SAASC,kBAAAA,WAAW,KAAK;AAAA,IACzB,MAAM,UAAU,SAAY,KAAK,OAAO,KAAK;AAAA,IAC7C,aAAa;AAAA,IACb,SAASC,kBAAAA,aAAa,IAAI,CAAC,UAAU;AAAA,MACnC,OAAOD,kBAAAA,WAAW,IAAI;AAAA,MACtB,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAOE,kBAAAA;AAAAA,IACP;AAAA,EAAA,CACD;AACH;AAEA,SAAS,WAAsC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWqB;AACnB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,YAAY;AAAA,IACnB,OAAO,GAAG,KAAK,MAAM,WAAW,UAAU;AAAA,IAC1C,SACEC,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,MAAAC,2BAAAA,IAACC,KAAAA,MAAA,EAAK,MAAY,WAAU,wCAAA,CAAwC;AAAA,MACpED,2BAAAA,IAAC,QAAA,EAAK,WAAWE,kBAAAA,uBAAwB,UAAA,QAAA,CAAQ;AAAA,IAAA,GACnD;AAAA,IAEF,QACEJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAAE,2BAAAA,IAAC,QAAA,EAAK,WAAWG,kBAAAA,mBAAoB,UAAA,YAAW;AAAA,MAChDH,2BAAAA;AAAAA,QAACI,kBAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACEJ,2BAAAA,IAACK,kBAAAA,kBAAA,EAAiB,MAAK,YAAW,UAAU,YAAY,QAAW;AAAA,QAErE,UAAU,MAAM,SAAS,MAAS;AAAA,MAAA;AAAA,MAEpC,GAAG,QAAQ,IAAI,CAAC,YAAY;AAAA,QAC1B,OACEL,2BAAAA;AAAAA,UAACK,kBAAAA;AAAAA,UAAA;AAAA,YACC,MAAM,OAAO;AAAA,YACb,UAAU,OAAO,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/B,UAAU,MAAM,SAAS,OAAO,KAAK;AAAA,MAAA,EACrC;AAAA,IAAA;AAAA,EACJ;AAEJ;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKqB;AACnB,QAAM,QAAQ,QAAQC,4BAAgB,KAAK,IAAI;AAC/C,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,QAAQ,KAAK;AAAA,IACpB,MAAMC,QAAAA;AAAAA,IACN,eAAe;AAAA,IACf,SACET,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,MAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAWG,kBAAAA,mBAAmB,UAAA,UAAM;AAAA,MACzC,SACCH,2BAAAA;AAAAA,QAACC,KAAAA;AAAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAWO,MAAAA,GAAG,mBAAmBC,YAAAA,iBAAiB,KAAM,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAG7DT,+BAAC,UAAK,WAAWE,kBAAAA,uBACd,kBAAQQ,YAAAA,iBAAiB,KAAK,IAAIC,8BAAA,CACrC;AAAA,IAAA,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACEX,2BAAAA;AAAAA,UAACK,kBAAAA;AAAAA,UAAA;AAAA,YACC,MAAMM,YAAAA;AAAAA,YACN,MAAMC,YAAAA;AAAAA,YACN,UAAU,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGf,UAAU,MAAM,SAAS,EAAE;AAAA,MAAA;AAAA,MAE7B,GAAG;AAAA,QACD,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,WAAW,GAAI,QAAQ,CAAC,KAAK,IAAI,EAAG,CAAC;AAAA,MAAA,EAChE,IAAI,CAAC,WAAW;AAChB,cAAM,OAAON,YAAAA,gBAAgB,MAAM;AACnC,eAAO;AAAA,UACL,OACEN,2BAAAA;AAAAA,YAACK,kBAAAA;AAAAA,YAAA;AAAA,cACC,MAAMK,YAAAA,iBAAiB,MAAM;AAAA,cAC7B,UAAU,UAAU;AAAA,cACnB,GAAI,UAAU,SAAS,MAAM,IAAI,CAAA,IAAK,EAAE,MAAM,cAAA;AAAA,YAAc;AAAA,UAAA;AAAA,UAGjE,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,UACtB,eAAeD,YAAAA,iBAAiB,MAAM;AAAA,UACtC,UAAU,CAAC,UAAU,SAAS,MAAM;AAAA,UACpC,UAAU,MAAM,SAAS,MAAM;AAAA,QAAA;AAAA,MAEnC,CAAC;AAAA,IAAA;AAAA,EACH;AAEJ;;;;"}
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: glyph ?? UiBrain,\n iconClassName: glyph ? effortLevelColor(value!) : \"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","effortLevelColor","cn","effortLevelLabel","UNSPECIFIED_LABEL","UNSPECIFIED_HINT"],"mappings":"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"}
@@ -115,8 +115,8 @@ function effortField({
115
115
  label: "Effort",
116
116
  title: "Reasoning effort",
117
117
  isSet: Boolean(value),
118
- icon: UiBrain,
119
- iconClassName: "text-muted-foreground",
118
+ icon: glyph ?? UiBrain,
119
+ iconClassName: glyph ? effortLevelColor(value) : "text-muted-foreground",
120
120
  caption: /* @__PURE__ */ jsxs(Fragment, { children: [
121
121
  /* @__PURE__ */ jsx("span", { className: SEGMENT_KEY_CLASS, children: "Effort" }),
122
122
  glyph && /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.fields.js","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":[],"mappings":";;;;;;;;;;;AAwBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,SAAS;AAAA,IACf,aAAa;AAAA,IACb,SAAS,gBAAgB,IAAI,CAAC,aAAa;AAAA,MACzC,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAO;AAAA,IACP;AAAA,EAAA,CACD;AACH;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS,WAAW,KAAK;AAAA,IACzB,MAAM,UAAU,SAAY,KAAK,OAAO,KAAK;AAAA,IAC7C,aAAa;AAAA,IACb,SAAS,aAAa,IAAI,CAAC,UAAU;AAAA,MACnC,OAAO,WAAW,IAAI;AAAA,MACtB,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAO;AAAA,IACP;AAAA,EAAA,CACD;AACH;AAEA,SAAS,WAAsC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWqB;AACnB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,YAAY;AAAA,IACnB,OAAO,GAAG,KAAK,MAAM,WAAW,UAAU;AAAA,IAC1C,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAK,MAAY,WAAU,wCAAA,CAAwC;AAAA,MACpE,oBAAC,QAAA,EAAK,WAAW,uBAAwB,UAAA,QAAA,CAAQ;AAAA,IAAA,GACnD;AAAA,IAEF,QACE,qBAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAW,mBAAoB,UAAA,YAAW;AAAA,MAChD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACE,oBAAC,kBAAA,EAAiB,MAAK,YAAW,UAAU,YAAY,QAAW;AAAA,QAErE,UAAU,MAAM,SAAS,MAAS;AAAA,MAAA;AAAA,MAEpC,GAAG,QAAQ,IAAI,CAAC,YAAY;AAAA,QAC1B,OACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM,OAAO;AAAA,YACb,UAAU,OAAO,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/B,UAAU,MAAM,SAAS,OAAO,KAAK;AAAA,MAAA,EACrC;AAAA,IAAA;AAAA,EACJ;AAEJ;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKqB;AACnB,QAAM,QAAQ,QAAQ,gBAAgB,KAAK,IAAI;AAC/C,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,QAAQ,KAAK;AAAA,IACpB,MAAM;AAAA,IACN,eAAe;AAAA,IACf,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAW,mBAAmB,UAAA,UAAM;AAAA,MACzC,SACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAW,GAAG,mBAAmB,iBAAiB,KAAM,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAG7D,oBAAC,UAAK,WAAW,uBACd,kBAAQ,iBAAiB,KAAK,IAAI,kBAAA,CACrC;AAAA,IAAA,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGf,UAAU,MAAM,SAAS,EAAE;AAAA,MAAA;AAAA,MAE7B,GAAG;AAAA,QACD,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,WAAW,GAAI,QAAQ,CAAC,KAAK,IAAI,EAAG,CAAC;AAAA,MAAA,EAChE,IAAI,CAAC,WAAW;AAChB,cAAM,OAAO,gBAAgB,MAAM;AACnC,eAAO;AAAA,UACL,OACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,iBAAiB,MAAM;AAAA,cAC7B,UAAU,UAAU;AAAA,cACnB,GAAI,UAAU,SAAS,MAAM,IAAI,CAAA,IAAK,EAAE,MAAM,cAAA;AAAA,YAAc;AAAA,UAAA;AAAA,UAGjE,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,UACtB,eAAe,iBAAiB,MAAM;AAAA,UACtC,UAAU,CAAC,UAAU,SAAS,MAAM;AAAA,UACpC,UAAU,MAAM,SAAS,MAAM;AAAA,QAAA;AAAA,MAEnC,CAAC;AAAA,IAAA;AAAA,EACH;AAEJ;"}
1
+ {"version":3,"file":"RuntimeBar.fields.js","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: glyph ?? UiBrain,\n iconClassName: glyph ? effortLevelColor(value!) : \"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":[],"mappings":"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"}
@@ -6,7 +6,6 @@ import { runtimeModelForValue } from "./RuntimeBar.model.js";
6
6
  import { RuntimeBarLayout } from "./RuntimeBarLayout.js";
7
7
  import { effortField, budgetField, timeoutField } from "./RuntimeBar.fields.js";
8
8
  import { runtimeModes, modelGroupsForMode, withRuntimeMode } from "./RuntimeBar.selection.js";
9
- import { RuntimeBarVariantContext } from "./RuntimeBar.context.js";
10
9
  import { isSelectableModel } from "./availability.js";
11
10
  import { effortOptionsForModel, reconcileModelCapabilities } from "./model-capabilities.js";
12
11
  import { selectionForRuntime, SPEC_RUNTIME_FAMILIES, familyById } from "./runtime-mode.js";
@@ -14,7 +13,6 @@ import { runtimeModeFromModel } from "../../lib/runtime-family.js";
14
13
  function RuntimeBar({
15
14
  value,
16
15
  onChange,
17
- variant = "segmented",
18
16
  models = [],
19
17
  families = SPEC_RUNTIME_FAMILIES,
20
18
  effectiveMode,
@@ -119,7 +117,7 @@ function RuntimeBar({
119
117
  })
120
118
  ] : []
121
119
  ];
122
- return /* @__PURE__ */ jsx(RuntimeBarVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
120
+ return /* @__PURE__ */ jsx(
123
121
  RuntimeBarLayout,
124
122
  {
125
123
  ariaLabel,
@@ -136,7 +134,6 @@ function RuntimeBar({
136
134
  inheritedModelLabel,
137
135
  locked,
138
136
  showModel,
139
- variant,
140
137
  onModeChange: (modeId) => applyMode(family.id, modeId),
141
138
  onCustomModel: applyCustomModel,
142
139
  onModelSelect: applyModel,
@@ -147,7 +144,7 @@ function RuntimeBar({
147
144
  }
148
145
  }
149
146
  }
150
- ) });
147
+ );
151
148
  }
152
149
  function withoutCatalogModel(value) {
153
150
  return withOptionalRuntimeValue(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.js","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":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.js","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 { 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 /** 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/** Mode-first runtime controls with settings that adapt to the container width. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\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 <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 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 );\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":[],"mappings":"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"}
@@ -8,7 +8,10 @@ const runtimeFamily = require("../../lib/runtime-family.cjs");
8
8
  function runtimeModes(families) {
9
9
  return [
10
10
  ...new Map(
11
- families.flatMap((family) => family.modes).filter((mode) => !availability.isUnavailable(mode.availability)).map((mode) => [mode.id, mode])
11
+ families.flatMap((family) => family.modes).filter((mode) => !availability.isUnavailable(mode.availability)).map((mode) => {
12
+ const icon = mode.icon ?? runtimeMode.runtimeModeIcon(mode.id);
13
+ return [mode.id, icon ? { ...mode, icon } : mode];
14
+ })
12
15
  ).values()
13
16
  ];
14
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.selection.cjs","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"sourcesContent":["import type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport {\n modelsForFamily,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport function runtimeModes(families: SpecRuntimeFamily[]) {\n return [\n ...new Map(\n families\n .flatMap((family) => family.modes)\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => [mode.id, mode]),\n ).values(),\n ];\n}\n\nexport function modelGroupsForMode({\n models,\n families,\n mode,\n}: {\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n}) {\n return families\n .filter((family) =>\n family.modes.some(\n (entry) => entry.id === mode && !isUnavailable(entry.availability),\n ),\n )\n .map((family) => ({\n family,\n models: modelsForFamily(models, family, mode).filter((model) => {\n const modelMode =\n model.runtime?.mode ??\n runtimeModeFromModel(model.runtime?.model ?? model.id);\n return modelMode === undefined || modelMode === mode;\n }),\n }));\n}\n\nexport function withRuntimeMode<T extends RuntimeBarValue>({\n value,\n models,\n families,\n mode,\n reasoningEfforts,\n}: {\n value: T;\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n reasoningEfforts: readonly string[];\n}): T {\n if (!runtimeModes(families).some((entry) => entry.id === mode)) {\n throw new Error(`Runtime mode ${JSON.stringify(mode)} is unavailable`);\n }\n const eligible = modelGroupsForMode({ models, families, mode }).flatMap(\n (group) => group.models,\n );\n const model = runtimeModelForValue(eligible, { ...value, mode });\n const next = { ...value, mode };\n delete next.id;\n delete next.model;\n delete next.cliArgs;\n return model\n ? reconcileModelCapabilities(next, model, reasoningEfforts, { mode })\n : next;\n}\n"],"names":["isUnavailable","modelsForFamily","runtimeModeFromModel","runtimeModelForValue","reconcileModelCapabilities"],"mappings":";;;;;;;AAWO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAACA,aAAAA,cAAc,KAAK,YAAY,CAAC,EAClD,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAAA,EAChC,OAAA;AAAA,EAAO;AAEb;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO,SACJ;AAAA,IAAO,CAAC,WACP,OAAO,MAAM;AAAA,MACX,CAAC,UAAU,MAAM,OAAO,QAAQ,CAACA,aAAAA,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQC,YAAAA,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACfC,cAAAA,uBAAqB,WAAM,YAAN,mBAAe,UAAS,MAAM,EAAE;AACvD,aAAO,cAAc,UAAa,cAAc;AAAA,IAClD,CAAC;AAAA,EAAA,EACD;AACN;AAEO,SAAS,gBAA2C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMM;AACJ,MAAI,CAAC,aAAa,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,OAAO,IAAI,GAAG;AAC9D,UAAM,IAAI,MAAM,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB;AAAA,EACvE;AACA,QAAM,WAAW,mBAAmB,EAAE,QAAQ,UAAU,KAAA,CAAM,EAAE;AAAA,IAC9D,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,QAAQC,iBAAAA,qBAAqB,UAAU,EAAE,GAAG,OAAO,MAAM;AAC/D,QAAM,OAAO,EAAE,GAAG,OAAO,KAAA;AACzB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,QACHC,kBAAAA,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;;;;"}
1
+ {"version":3,"file":"RuntimeBar.selection.cjs","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"sourcesContent":["import type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport {\n modelsForFamily,\n runtimeModeFromModel,\n runtimeModeIcon,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport function runtimeModes(families: SpecRuntimeFamily[]) {\n return [\n ...new Map(\n families\n .flatMap((family) => family.modes)\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => {\n const icon = mode.icon ?? runtimeModeIcon(mode.id);\n return [mode.id, icon ? { ...mode, icon } : mode] as const;\n }),\n ).values(),\n ];\n}\n\nexport function modelGroupsForMode({\n models,\n families,\n mode,\n}: {\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n}) {\n return families\n .filter((family) =>\n family.modes.some(\n (entry) => entry.id === mode && !isUnavailable(entry.availability),\n ),\n )\n .map((family) => ({\n family,\n models: modelsForFamily(models, family, mode).filter((model) => {\n const modelMode =\n model.runtime?.mode ??\n runtimeModeFromModel(model.runtime?.model ?? model.id);\n return modelMode === undefined || modelMode === mode;\n }),\n }));\n}\n\nexport function withRuntimeMode<T extends RuntimeBarValue>({\n value,\n models,\n families,\n mode,\n reasoningEfforts,\n}: {\n value: T;\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n reasoningEfforts: readonly string[];\n}): T {\n if (!runtimeModes(families).some((entry) => entry.id === mode)) {\n throw new Error(`Runtime mode ${JSON.stringify(mode)} is unavailable`);\n }\n const eligible = modelGroupsForMode({ models, families, mode }).flatMap(\n (group) => group.models,\n );\n const model = runtimeModelForValue(eligible, { ...value, mode });\n const next = { ...value, mode };\n delete next.id;\n delete next.model;\n delete next.cliArgs;\n return model\n ? reconcileModelCapabilities(next, model, reasoningEfforts, { mode })\n : next;\n}\n"],"names":["isUnavailable","runtimeModeIcon","modelsForFamily","runtimeModeFromModel","runtimeModelForValue","reconcileModelCapabilities"],"mappings":";;;;;;;AAYO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAACA,aAAAA,cAAc,KAAK,YAAY,CAAC,EAClD,IAAI,CAAC,SAAS;AACb,cAAM,OAAO,KAAK,QAAQC,YAAAA,gBAAgB,KAAK,EAAE;AACjD,eAAO,CAAC,KAAK,IAAI,OAAO,EAAE,GAAG,MAAM,KAAA,IAAS,IAAI;AAAA,MAClD,CAAC;AAAA,IAAA,EACH,OAAA;AAAA,EAAO;AAEb;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO,SACJ;AAAA,IAAO,CAAC,WACP,OAAO,MAAM;AAAA,MACX,CAAC,UAAU,MAAM,OAAO,QAAQ,CAACD,aAAAA,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQE,YAAAA,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACfC,cAAAA,uBAAqB,WAAM,YAAN,mBAAe,UAAS,MAAM,EAAE;AACvD,aAAO,cAAc,UAAa,cAAc;AAAA,IAClD,CAAC;AAAA,EAAA,EACD;AACN;AAEO,SAAS,gBAA2C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMM;AACJ,MAAI,CAAC,aAAa,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,OAAO,IAAI,GAAG;AAC9D,UAAM,IAAI,MAAM,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB;AAAA,EACvE;AACA,QAAM,WAAW,mBAAmB,EAAE,QAAQ,UAAU,KAAA,CAAM,EAAE;AAAA,IAC9D,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,QAAQC,iBAAAA,qBAAqB,UAAU,EAAE,GAAG,OAAO,MAAM;AAC/D,QAAM,OAAO,EAAE,GAAG,OAAO,KAAA;AACzB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,QACHC,kBAAAA,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.selection.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,oDASzD;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,IAAI,GACL,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;;;IAgBA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,EACzD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,CAAC,CAeJ"}
1
+ {"version":3,"file":"RuntimeBar.selection.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,oDAYzD;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,IAAI,GACL,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;;;IAgBA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,EACzD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,CAAC,CAeJ"}