@flanksource/clicky-ui 0.3.43 → 0.3.45

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 (483) hide show
  1. package/README.md +2 -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/CodeBlock.cjs +3 -2
  16. package/dist/data/CodeBlock.cjs.map +1 -1
  17. package/dist/data/CodeBlock.d.ts +3 -1
  18. package/dist/data/CodeBlock.d.ts.map +1 -1
  19. package/dist/data/CodeBlock.js +3 -2
  20. package/dist/data/CodeBlock.js.map +1 -1
  21. package/dist/data/CodeLine.cjs +22 -0
  22. package/dist/data/CodeLine.cjs.map +1 -0
  23. package/dist/data/CodeLine.d.ts +8 -0
  24. package/dist/data/CodeLine.d.ts.map +1 -0
  25. package/dist/data/CodeLine.js +22 -0
  26. package/dist/data/CodeLine.js.map +1 -0
  27. package/dist/data/GraphDiagram.cjs +18 -6
  28. package/dist/data/GraphDiagram.cjs.map +1 -1
  29. package/dist/data/GraphDiagram.d.ts +9 -1
  30. package/dist/data/GraphDiagram.d.ts.map +1 -1
  31. package/dist/data/GraphDiagram.js +18 -6
  32. package/dist/data/GraphDiagram.js.map +1 -1
  33. package/dist/data/GraphDiagramNodes.cjs +38 -29
  34. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  35. package/dist/data/GraphDiagramNodes.d.ts +8 -2
  36. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  37. package/dist/data/GraphDiagramNodes.js +38 -29
  38. package/dist/data/GraphDiagramNodes.js.map +1 -1
  39. package/dist/data/JsonView.cjs +118 -49
  40. package/dist/data/JsonView.cjs.map +1 -1
  41. package/dist/data/JsonView.d.ts +13 -10
  42. package/dist/data/JsonView.d.ts.map +1 -1
  43. package/dist/data/JsonView.js +118 -49
  44. package/dist/data/JsonView.js.map +1 -1
  45. package/dist/data/MarkdownEditor.cjs +2 -2
  46. package/dist/data/MarkdownEditor.cjs.map +1 -1
  47. package/dist/data/MarkdownEditor.js +2 -2
  48. package/dist/data/MarkdownEditor.js.map +1 -1
  49. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  50. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  51. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  52. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  53. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  54. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  55. package/dist/data/ai/ChatButton.cjs +2 -0
  56. package/dist/data/ai/ChatButton.cjs.map +1 -1
  57. package/dist/data/ai/ChatButton.d.ts +1 -1
  58. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  59. package/dist/data/ai/ChatButton.js +2 -0
  60. package/dist/data/ai/ChatButton.js.map +1 -1
  61. package/dist/data/ai/ChatFab.cjs +5 -1
  62. package/dist/data/ai/ChatFab.cjs.map +1 -1
  63. package/dist/data/ai/ChatFab.d.ts +5 -1
  64. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  65. package/dist/data/ai/ChatFab.js +5 -1
  66. package/dist/data/ai/ChatFab.js.map +1 -1
  67. package/dist/data/ai/ChatWindow.cjs +2 -8
  68. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  69. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  70. package/dist/data/ai/ChatWindow.js +2 -8
  71. package/dist/data/ai/ChatWindow.js.map +1 -1
  72. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  73. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  74. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  75. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  76. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  77. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  78. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  79. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  80. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  81. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  82. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  83. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  84. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  85. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  86. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  87. package/dist/data/ai/SessionViewer.cjs +13 -4
  88. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  89. package/dist/data/ai/SessionViewer.d.ts +5 -1
  90. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  91. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  92. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.header.js +1 -1
  94. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  95. package/dist/data/ai/SessionViewer.js +13 -4
  96. package/dist/data/ai/SessionViewer.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  98. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  100. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  101. package/dist/data/ai/SessionViewer.model.js +2 -0
  102. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  103. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  104. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  105. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  106. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  107. package/dist/data/ai/SessionViewer.rows.js +41 -27
  108. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  109. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  110. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  111. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  112. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  113. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  114. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  115. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  116. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  117. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  118. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  119. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  120. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  121. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  122. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  123. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  125. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  127. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  128. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  129. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  130. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  131. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  132. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  133. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  134. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  135. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  136. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  137. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  138. package/dist/data/ai/SessionViewerMenu.js +18 -1
  139. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  140. package/dist/data/ai/ToolPreferences.cjs +149 -143
  141. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  142. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  143. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  144. package/dist/data/ai/ToolPreferences.js +151 -146
  145. package/dist/data/ai/ToolPreferences.js.map +1 -1
  146. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  147. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  148. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  149. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  150. package/dist/data/ai/ToolPreferences.model.js +15 -11
  151. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  152. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  153. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  154. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  155. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  156. package/dist/data/ai/ToolPreferencesList.js +2 -1
  157. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  158. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  159. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  160. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  161. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  162. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  163. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  164. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  165. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  166. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  167. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  168. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  169. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  170. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  171. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  172. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  173. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  174. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  175. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  176. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  177. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  178. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  179. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  180. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  181. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  182. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  183. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  184. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  185. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  186. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  187. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  188. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  189. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  190. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  191. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  192. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  193. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  194. package/dist/data/ai/index.d.ts +2 -2
  195. package/dist/data/ai/index.d.ts.map +1 -1
  196. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  197. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  198. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  199. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  200. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  201. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  202. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  203. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  204. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  205. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  206. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  207. package/dist/data/ai/use-session-token-sizing.js +73 -0
  208. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  209. package/dist/data/call-graph/CallGraph.cjs +250 -0
  210. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  211. package/dist/data/call-graph/CallGraph.d.ts +69 -0
  212. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  213. package/dist/data/call-graph/CallGraph.js +250 -0
  214. package/dist/data/call-graph/CallGraph.js.map +1 -0
  215. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  216. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  217. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  218. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  219. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  220. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  221. package/dist/data/call-graph/CallGraphMembers.cjs +50 -0
  222. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  223. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  224. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  225. package/dist/data/call-graph/CallGraphMembers.js +50 -0
  226. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  227. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  228. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  229. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  230. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  231. package/dist/data/call-graph/CallGraphParts.js +204 -0
  232. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  233. package/dist/data/call-graph/CallGraphToolbar.cjs +186 -0
  234. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  235. package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
  236. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  237. package/dist/data/call-graph/CallGraphToolbar.js +186 -0
  238. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  239. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  240. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  241. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  242. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  243. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  244. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  245. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  246. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  247. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  248. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  249. package/dist/data/call-graph/call-graph-labels.js +96 -0
  250. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  251. package/dist/data/call-graph/call-graph-model.cjs +161 -0
  252. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  253. package/dist/data/call-graph/call-graph-model.d.ts +102 -0
  254. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  255. package/dist/data/call-graph/call-graph-model.js +161 -0
  256. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  257. package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
  258. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  259. package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
  260. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  261. package/dist/data/call-graph/call-graph-vocabulary.js +177 -0
  262. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  263. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  264. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  265. package/dist/data/call-graph/index.d.ts +7 -0
  266. package/dist/data/call-graph/index.d.ts.map +1 -0
  267. package/dist/data/call-graph/types.cjs +5 -0
  268. package/dist/data/call-graph/types.cjs.map +1 -0
  269. package/dist/data/call-graph/types.d.ts +135 -0
  270. package/dist/data/call-graph/types.d.ts.map +1 -0
  271. package/dist/data/call-graph/types.js +5 -0
  272. package/dist/data/call-graph/types.js.map +1 -0
  273. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  274. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  275. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  276. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  277. package/dist/data/call-graph/use-call-graph.js +93 -0
  278. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  279. package/dist/data/chat/Chat.cjs +39 -15
  280. package/dist/data/chat/Chat.cjs.map +1 -1
  281. package/dist/data/chat/Chat.d.ts.map +1 -1
  282. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  283. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  284. package/dist/data/chat/Chat.fixtures.js +2 -2
  285. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  286. package/dist/data/chat/Chat.js +40 -16
  287. package/dist/data/chat/Chat.js.map +1 -1
  288. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  289. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  290. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  291. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  292. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  293. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  294. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  295. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  296. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  297. package/dist/data/chat/ContextMeter.bar.js +5 -8
  298. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  299. package/dist/data/chat/ContextMeter.cjs +18 -19
  300. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  301. package/dist/data/chat/ContextMeter.d.ts +1 -1
  302. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  303. package/dist/data/chat/ContextMeter.js +18 -19
  304. package/dist/data/chat/ContextMeter.js.map +1 -1
  305. package/dist/data/chat/Conversation.cjs +2 -1
  306. package/dist/data/chat/Conversation.cjs.map +1 -1
  307. package/dist/data/chat/Conversation.d.ts +4 -1
  308. package/dist/data/chat/Conversation.d.ts.map +1 -1
  309. package/dist/data/chat/Conversation.js +2 -1
  310. package/dist/data/chat/Conversation.js.map +1 -1
  311. package/dist/data/chat/Message.cjs +39 -12
  312. package/dist/data/chat/Message.cjs.map +1 -1
  313. package/dist/data/chat/Message.d.ts +1 -1
  314. package/dist/data/chat/Message.d.ts.map +1 -1
  315. package/dist/data/chat/Message.js +40 -13
  316. package/dist/data/chat/Message.js.map +1 -1
  317. package/dist/data/chat/ToolCall.cjs +60 -5
  318. package/dist/data/chat/ToolCall.cjs.map +1 -1
  319. package/dist/data/chat/ToolCall.d.ts +7 -2
  320. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  321. package/dist/data/chat/ToolCall.js +60 -5
  322. package/dist/data/chat/ToolCall.js.map +1 -1
  323. package/dist/data/chat/approval.cjs.map +1 -1
  324. package/dist/data/chat/approval.d.ts +2 -2
  325. package/dist/data/chat/approval.d.ts.map +1 -1
  326. package/dist/data/chat/approval.js.map +1 -1
  327. package/dist/data/chat/tool-policy.cjs +59 -2
  328. package/dist/data/chat/tool-policy.cjs.map +1 -1
  329. package/dist/data/chat/tool-policy.d.ts +9 -0
  330. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  331. package/dist/data/chat/tool-policy.js +59 -2
  332. package/dist/data/chat/tool-policy.js.map +1 -1
  333. package/dist/data/chat/types.cjs +6 -0
  334. package/dist/data/chat/types.cjs.map +1 -1
  335. package/dist/data/chat/types.d.ts +13 -4
  336. package/dist/data/chat/types.d.ts.map +1 -1
  337. package/dist/data/chat/types.js +7 -1
  338. package/dist/data/chat/types.js.map +1 -1
  339. package/dist/data/chat/usage-snapshot.cjs +11 -6
  340. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  341. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  342. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  343. package/dist/data/chat/usage-snapshot.js +11 -6
  344. package/dist/data/chat/usage-snapshot.js.map +1 -1
  345. package/dist/data/diagnostics/RenderedStackTrace.cjs +2 -1
  346. package/dist/data/diagnostics/RenderedStackTrace.cjs.map +1 -1
  347. package/dist/data/diagnostics/RenderedStackTrace.d.ts +3 -1
  348. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -1
  349. package/dist/data/diagnostics/RenderedStackTrace.js +2 -1
  350. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -1
  351. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  352. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  353. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  354. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  355. package/dist/data/graph-columns-layout.cjs +26 -10
  356. package/dist/data/graph-columns-layout.cjs.map +1 -1
  357. package/dist/data/graph-columns-layout.d.ts +8 -0
  358. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  359. package/dist/data/graph-columns-layout.js +26 -10
  360. package/dist/data/graph-columns-layout.js.map +1 -1
  361. package/dist/data/graph-diagram-model.cjs.map +1 -1
  362. package/dist/data/graph-diagram-model.d.ts +5 -0
  363. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  364. package/dist/data/graph-diagram-model.js.map +1 -1
  365. package/dist/data/graph-edge-routing.cjs +9 -3
  366. package/dist/data/graph-edge-routing.cjs.map +1 -1
  367. package/dist/data/graph-edge-routing.d.ts +2 -0
  368. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  369. package/dist/data/graph-edge-routing.js +9 -3
  370. package/dist/data/graph-edge-routing.js.map +1 -1
  371. package/dist/data/json-view/JsonSource.cjs +84 -0
  372. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  373. package/dist/data/json-view/JsonSource.d.ts +7 -0
  374. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  375. package/dist/data/json-view/JsonSource.js +84 -0
  376. package/dist/data/json-view/JsonSource.js.map +1 -0
  377. package/dist/data/json-view/parse-prefix.cjs +132 -0
  378. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  379. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  380. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  381. package/dist/data/json-view/parse-prefix.js +132 -0
  382. package/dist/data/json-view/parse-prefix.js.map +1 -0
  383. package/dist/data/json-view/parse-source.cjs +62 -0
  384. package/dist/data/json-view/parse-source.cjs.map +1 -0
  385. package/dist/data/json-view/parse-source.d.ts +16 -0
  386. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  387. package/dist/data/json-view/parse-source.js +62 -0
  388. package/dist/data/json-view/parse-source.js.map +1 -0
  389. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  390. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  391. package/dist/data/json-view/types.d.ts +14 -0
  392. package/dist/data/json-view/types.d.ts.map +1 -0
  393. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  394. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  395. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  396. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  397. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  398. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  399. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  400. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  401. package/dist/data/runtime/RuntimeBar.js +2 -5
  402. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  403. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  404. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  405. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  406. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  407. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  408. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  409. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  410. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  411. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  412. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  413. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  414. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  415. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  416. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  417. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  418. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  419. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  420. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  421. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  422. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  423. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  424. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  425. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  426. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  427. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  429. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  430. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  431. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  432. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  433. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  434. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  435. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  436. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  437. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  438. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  439. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  440. package/dist/data/use-pan-zoom.cjs +23 -10
  441. package/dist/data/use-pan-zoom.cjs.map +1 -1
  442. package/dist/data/use-pan-zoom.d.ts +16 -2
  443. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  444. package/dist/data/use-pan-zoom.js +23 -10
  445. package/dist/data/use-pan-zoom.js.map +1 -1
  446. package/dist/data/version-info.cjs +3 -3
  447. package/dist/data/version-info.js +3 -3
  448. package/dist/data.cjs +28 -2
  449. package/dist/data.cjs.map +1 -1
  450. package/dist/data.d.ts +2 -0
  451. package/dist/data.d.ts.map +1 -1
  452. package/dist/data.js +26 -0
  453. package/dist/data.js.map +1 -1
  454. package/dist/index.cjs +30 -4
  455. package/dist/index.cjs.map +1 -1
  456. package/dist/index.js +26 -0
  457. package/dist/index.js.map +1 -1
  458. package/dist/layout/Workspace.cjs +13 -4
  459. package/dist/layout/Workspace.cjs.map +1 -1
  460. package/dist/layout/Workspace.d.ts +7 -2
  461. package/dist/layout/Workspace.d.ts.map +1 -1
  462. package/dist/layout/Workspace.js +13 -4
  463. package/dist/layout/Workspace.js.map +1 -1
  464. package/dist/lib/permission-strategies.cjs +71 -11
  465. package/dist/lib/permission-strategies.cjs.map +1 -1
  466. package/dist/lib/permission-strategies.d.ts +3 -0
  467. package/dist/lib/permission-strategies.d.ts.map +1 -1
  468. package/dist/lib/permission-strategies.js +71 -11
  469. package/dist/lib/permission-strategies.js.map +1 -1
  470. package/dist/styles.css +1 -1
  471. package/package.json +5 -3
  472. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  473. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  474. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  475. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  476. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  477. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  478. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  479. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  480. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  481. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  482. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  483. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -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":"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"}
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":"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"}
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"}
@@ -1,12 +1,15 @@
1
1
  import { isUnavailable } from "./availability.js";
2
2
  import { reconcileModelCapabilities } from "./model-capabilities.js";
3
3
  import { runtimeModelForValue } from "./RuntimeBar.model.js";
4
- import { modelsForFamily } from "./runtime-mode.js";
4
+ import { runtimeModeIcon, modelsForFamily } from "./runtime-mode.js";
5
5
  import { runtimeModeFromModel } from "../../lib/runtime-family.js";
6
6
  function runtimeModes(families) {
7
7
  return [
8
8
  ...new Map(
9
- families.flatMap((family) => family.modes).filter((mode) => !isUnavailable(mode.availability)).map((mode) => [mode.id, mode])
9
+ families.flatMap((family) => family.modes).filter((mode) => !isUnavailable(mode.availability)).map((mode) => {
10
+ const icon = mode.icon ?? runtimeModeIcon(mode.id);
11
+ return [mode.id, icon ? { ...mode, icon } : mode];
12
+ })
10
13
  ).values()
11
14
  ];
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.selection.js","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":[],"mappings":";;;;;AAWO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAAC,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,CAAC,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQ,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACf,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,QAAQ,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,QACH,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;"}
1
+ {"version":3,"file":"RuntimeBar.selection.js","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":[],"mappings":";;;;;AAYO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAAC,cAAc,KAAK,YAAY,CAAC,EAClD,IAAI,CAAC,SAAS;AACb,cAAM,OAAO,KAAK,QAAQ,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,CAAC,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQ,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACf,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,QAAQ,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,QACH,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;"}
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const react = require("react");
5
4
  const utils = require("../../lib/utils.cjs");
6
5
  const Icon = require("../Icon.cjs");
7
6
  const RuntimeBarSegment = require("./RuntimeBarSegment.cjs");
8
- const RuntimeBar_context = require("./RuntimeBar.context.cjs");
9
7
  const UiDotsVertical = require("../../icons/components/UiDotsVertical.cjs");
10
8
  function RuntimeBarActions({
11
9
  fields = [],
@@ -16,8 +14,6 @@ function RuntimeBarActions({
16
14
  className,
17
15
  visibleCount = fields.length
18
16
  }) {
19
- const variant = react.useContext(RuntimeBar_context.RuntimeBarVariantContext);
20
- const useStandalone = standalone || variant === "combo";
21
17
  const inlineFields = inline ? fields.filter((field) => field.isSet).slice(0, visibleCount) : [];
22
18
  const menuItems = [
23
19
  ...fields.map((field) => ({
@@ -39,7 +35,7 @@ function RuntimeBarActions({
39
35
  "data-runtime-bar-section": "actions",
40
36
  className: utils.cn(
41
37
  "flex h-control-h shrink-0 items-stretch",
42
- useStandalone ? variant === "combo" ? "gap-1" : "w-fit overflow-hidden rounded-md border border-input bg-background" : "border-l border-border",
38
+ standalone ? "w-fit overflow-hidden rounded-md border border-input bg-background" : "border-l border-border",
43
39
  className
44
40
  ),
45
41
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBarActions.cjs","sources":["../../../src/data/runtime/RuntimeBarActions.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { UiDotsVertical } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport type { DropdownMenuItem } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { RuntimeSegment } from \"./RuntimeBarSegment\";\nimport { RuntimeBarVariantContext } from \"./RuntimeBar.context\";\n\n/**\n * A run setting offered by the runtime bar. Its choices are `DropdownMenuItem`s\n * so the inline and collapsed renderings are the SAME list: inline it is a\n * segment's menu, collapsed it is a flyout submenu of the ⋮ menu. Anything that\n * cannot be a menu item (a multi-select, reorder buttons) belongs in a modal\n * reached from an item, not in this list.\n */\nexport type RuntimeBarAction = {\n id: string;\n /** Menu entry label when collapsed; also the inline segment's menu label. */\n label: string;\n icon?: StaticIconComponent | undefined;\n iconClassName?: string | undefined;\n /** Tooltip on the inline segment, e.g. \"Permission posture — Plan\". */\n title: string;\n /** Inline segment caption: key + glyph + current value. */\n caption: ReactNode;\n /** Only supplied settings are candidates for inline display. */\n isSet: boolean;\n /** Custom editor shared by the inline dropdown and overflow submenu. */\n header?: ReactNode;\n /** Choices, identical inline and collapsed. */\n items: DropdownMenuItem[];\n};\n\nexport type RuntimeBarActionsProps = {\n fields?: RuntimeBarAction[] | undefined;\n /** Always-collapsed entries listed after the fields, e.g. Advanced. */\n menu?: DropdownMenuItem[] | undefined;\n /** False collapses every field into the ⋮ menu. */\n inline?: boolean | undefined;\n menuLabel?: string | undefined;\n /** Renders its own bar chrome instead of fusing onto the bar's border. */\n standalone?: boolean | undefined;\n className?: string | undefined;\n /** Number of supplied fields that fit beside the runtime identity. */\n visibleCount?: number | undefined;\n};\n\n/**\n * The runtime bar's host-level settings plus a ⋮ menu. It fuses onto the\n * segmented bar border and becomes a separate control group in combo layouts.\n */\nexport function RuntimeBarActions({\n fields = [],\n menu = [],\n inline = true,\n menuLabel = \"Runtime options\",\n standalone = false,\n className,\n visibleCount = fields.length,\n}: RuntimeBarActionsProps) {\n const variant = useContext(RuntimeBarVariantContext);\n const useStandalone = standalone || variant === \"combo\";\n const inlineFields = inline\n ? fields.filter((field) => field.isSet).slice(0, visibleCount)\n : [];\n const menuItems: DropdownMenuItem[] = [\n ...fields.map((field) => ({\n label: field.label,\n ...(field.icon ? { icon: field.icon } : {}),\n ...(field.iconClassName ? { iconClassName: field.iconClassName } : {}),\n // Ignored: an item with `children` is a submenu trigger, not a leaf.\n onSelect: () => {},\n children: field.items,\n ...(field.header ? { header: field.header } : {}),\n })),\n ...menu,\n ];\n if (inlineFields.length === 0 && menuItems.length === 0) return null;\n\n return (\n <div\n data-runtime-bar-section=\"actions\"\n className={cn(\n \"flex h-control-h shrink-0 items-stretch\",\n useStandalone\n ? variant === \"combo\"\n ? \"gap-1\"\n : \"w-fit overflow-hidden rounded-md border border-input bg-background\"\n : \"border-l border-border\",\n className,\n )}\n >\n {inlineFields.map((field) => (\n <RuntimeSegment\n key={field.id}\n menuLabel={field.label}\n title={field.title}\n items={field.items}\n {...(field.header ? { header: field.header } : {})}\n >\n {field.caption}\n </RuntimeSegment>\n ))}\n {menuItems.length > 0 && (\n <RuntimeSegment\n menuLabel={menuLabel}\n title={menuLabel}\n items={menuItems}\n hideChevron\n >\n <Icon\n icon={UiDotsVertical}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n </RuntimeSegment>\n )}\n </div>\n );\n}\n"],"names":["useContext","RuntimeBarVariantContext","jsxs","cn","jsx","RuntimeSegment","Icon","UiDotsVertical"],"mappings":";;;;;;;;;AAmDO,SAAS,kBAAkB;AAAA,EAChC,SAAS,CAAA;AAAA,EACT,OAAO,CAAA;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AAAA,EACb;AAAA,EACA,eAAe,OAAO;AACxB,GAA2B;AACzB,QAAM,UAAUA,MAAAA,WAAWC,2CAAwB;AACnD,QAAM,gBAAgB,cAAc,YAAY;AAChD,QAAM,eAAe,SACjB,OAAO,OAAO,CAAC,UAAU,MAAM,KAAK,EAAE,MAAM,GAAG,YAAY,IAC3D,CAAA;AACJ,QAAM,YAAgC;AAAA,IACpC,GAAG,OAAO,IAAI,CAAC,WAAW;AAAA,MACxB,OAAO,MAAM;AAAA,MACb,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAA,IAAS,CAAA;AAAA,MACxC,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAA,IAAkB,CAAA;AAAA;AAAA,MAEnE,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,IAAC,EAC/C;AAAA,IACF,GAAG;AAAA,EAAA;AAEL,MAAI,aAAa,WAAW,KAAK,UAAU,WAAW,EAAG,QAAO;AAEhE,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,4BAAyB;AAAA,MACzB,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,gBACI,YAAY,UACV,UACA,uEACF;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,aAAa,IAAI,CAAC,UACjBC,2BAAAA;AAAAA,UAACC,kBAAAA;AAAAA,UAAA;AAAA,YAEC,WAAW,MAAM;AAAA,YACjB,OAAO,MAAM;AAAA,YACb,OAAO,MAAM;AAAA,YACZ,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,YAE9C,UAAA,MAAM;AAAA,UAAA;AAAA,UANF,MAAM;AAAA,QAAA,CAQd;AAAA,QACA,UAAU,SAAS,KAClBD,2BAAAA;AAAAA,UAACC,kBAAAA;AAAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO;AAAA,YACP,OAAO;AAAA,YACP,aAAW;AAAA,YAEX,UAAAD,2BAAAA;AAAAA,cAACE,KAAAA;AAAAA,cAAA;AAAA,gBACC,MAAMC,eAAAA;AAAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;;"}
1
+ {"version":3,"file":"RuntimeBarActions.cjs","sources":["../../../src/data/runtime/RuntimeBarActions.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { UiDotsVertical } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport type { DropdownMenuItem } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport { RuntimeSegment } from \"./RuntimeBarSegment\";\n\n/**\n * A run setting offered by the runtime bar. Its choices are `DropdownMenuItem`s\n * so the inline and collapsed renderings are the SAME list: inline it is a\n * segment's menu, collapsed it is a flyout submenu of the ⋮ menu. Anything that\n * cannot be a menu item (a multi-select, reorder buttons) belongs in a modal\n * reached from an item, not in this list.\n */\nexport type RuntimeBarAction = {\n id: string;\n /** Menu entry label when collapsed; also the inline segment's menu label. */\n label: string;\n icon?: StaticIconComponent | undefined;\n iconClassName?: string | undefined;\n /** Tooltip on the inline segment, e.g. \"Permission posture — Plan\". */\n title: string;\n /** Inline segment caption: key + glyph + current value. */\n caption: ReactNode;\n /** Only supplied settings are candidates for inline display. */\n isSet: boolean;\n /** Custom editor shared by the inline dropdown and overflow submenu. */\n header?: ReactNode;\n /** Choices, identical inline and collapsed. */\n items: DropdownMenuItem[];\n};\n\nexport type RuntimeBarActionsProps = {\n fields?: RuntimeBarAction[] | undefined;\n /** Always-collapsed entries listed after the fields, e.g. Advanced. */\n menu?: DropdownMenuItem[] | undefined;\n /** False collapses every field into the ⋮ menu. */\n inline?: boolean | undefined;\n menuLabel?: string | undefined;\n /** Renders its own bar chrome instead of fusing onto the bar's border. */\n standalone?: boolean | undefined;\n className?: string | undefined;\n /** Number of supplied fields that fit beside the runtime identity. */\n visibleCount?: number | undefined;\n};\n\n/**\n * The runtime bar's host-level settings plus a ⋮ menu. It fuses onto the\n * bar border, or renders its own border when used independently.\n */\nexport function RuntimeBarActions({\n fields = [],\n menu = [],\n inline = true,\n menuLabel = \"Runtime options\",\n standalone = false,\n className,\n visibleCount = fields.length,\n}: RuntimeBarActionsProps) {\n const inlineFields = inline\n ? fields.filter((field) => field.isSet).slice(0, visibleCount)\n : [];\n const menuItems: DropdownMenuItem[] = [\n ...fields.map((field) => ({\n label: field.label,\n ...(field.icon ? { icon: field.icon } : {}),\n ...(field.iconClassName ? { iconClassName: field.iconClassName } : {}),\n // Ignored: an item with `children` is a submenu trigger, not a leaf.\n onSelect: () => {},\n children: field.items,\n ...(field.header ? { header: field.header } : {}),\n })),\n ...menu,\n ];\n if (inlineFields.length === 0 && menuItems.length === 0) return null;\n\n return (\n <div\n data-runtime-bar-section=\"actions\"\n className={cn(\n \"flex h-control-h shrink-0 items-stretch\",\n standalone\n ? \"w-fit overflow-hidden rounded-md border border-input bg-background\"\n : \"border-l border-border\",\n className,\n )}\n >\n {inlineFields.map((field) => (\n <RuntimeSegment\n key={field.id}\n menuLabel={field.label}\n title={field.title}\n items={field.items}\n {...(field.header ? { header: field.header } : {})}\n >\n {field.caption}\n </RuntimeSegment>\n ))}\n {menuItems.length > 0 && (\n <RuntimeSegment\n menuLabel={menuLabel}\n title={menuLabel}\n items={menuItems}\n hideChevron\n >\n <Icon\n icon={UiDotsVertical}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n </RuntimeSegment>\n )}\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","RuntimeSegment","Icon","UiDotsVertical"],"mappings":";;;;;;;AAkDO,SAAS,kBAAkB;AAAA,EAChC,SAAS,CAAA;AAAA,EACT,OAAO,CAAA;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AAAA,EACb;AAAA,EACA,eAAe,OAAO;AACxB,GAA2B;AACzB,QAAM,eAAe,SACjB,OAAO,OAAO,CAAC,UAAU,MAAM,KAAK,EAAE,MAAM,GAAG,YAAY,IAC3D,CAAA;AACJ,QAAM,YAAgC;AAAA,IACpC,GAAG,OAAO,IAAI,CAAC,WAAW;AAAA,MACxB,OAAO,MAAM;AAAA,MACb,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAA,IAAS,CAAA;AAAA,MACxC,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAA,IAAkB,CAAA;AAAA;AAAA,MAEnE,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,IAAC,EAC/C;AAAA,IACF,GAAG;AAAA,EAAA;AAEL,MAAI,aAAa,WAAW,KAAK,UAAU,WAAW,EAAG,QAAO;AAEhE,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,4BAAyB;AAAA,MACzB,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,aACI,uEACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,aAAa,IAAI,CAAC,UACjBC,2BAAAA;AAAAA,UAACC,kBAAAA;AAAAA,UAAA;AAAA,YAEC,WAAW,MAAM;AAAA,YACjB,OAAO,MAAM;AAAA,YACb,OAAO,MAAM;AAAA,YACZ,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAA,IAAW,CAAA;AAAA,YAE9C,UAAA,MAAM;AAAA,UAAA;AAAA,UANF,MAAM;AAAA,QAAA,CAQd;AAAA,QACA,UAAU,SAAS,KAClBD,2BAAAA;AAAAA,UAACC,kBAAAA;AAAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO;AAAA,YACP,OAAO;AAAA,YACP,aAAW;AAAA,YAEX,UAAAD,2BAAAA;AAAAA,cAACE,KAAAA;AAAAA,cAAA;AAAA,gBACC,MAAMC,eAAAA;AAAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;;"}