@flanksource/clicky-ui 0.3.44 → 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 (471) 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/GraphDiagram.cjs +18 -6
  22. package/dist/data/GraphDiagram.cjs.map +1 -1
  23. package/dist/data/GraphDiagram.d.ts +9 -1
  24. package/dist/data/GraphDiagram.d.ts.map +1 -1
  25. package/dist/data/GraphDiagram.js +18 -6
  26. package/dist/data/GraphDiagram.js.map +1 -1
  27. package/dist/data/GraphDiagramNodes.cjs +38 -29
  28. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  29. package/dist/data/GraphDiagramNodes.d.ts +8 -2
  30. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  31. package/dist/data/GraphDiagramNodes.js +38 -29
  32. package/dist/data/GraphDiagramNodes.js.map +1 -1
  33. package/dist/data/JsonView.cjs +118 -49
  34. package/dist/data/JsonView.cjs.map +1 -1
  35. package/dist/data/JsonView.d.ts +13 -10
  36. package/dist/data/JsonView.d.ts.map +1 -1
  37. package/dist/data/JsonView.js +118 -49
  38. package/dist/data/JsonView.js.map +1 -1
  39. package/dist/data/MarkdownEditor.cjs +2 -2
  40. package/dist/data/MarkdownEditor.cjs.map +1 -1
  41. package/dist/data/MarkdownEditor.js +2 -2
  42. package/dist/data/MarkdownEditor.js.map +1 -1
  43. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  44. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  45. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  46. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  47. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  48. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  49. package/dist/data/ai/ChatButton.cjs +2 -0
  50. package/dist/data/ai/ChatButton.cjs.map +1 -1
  51. package/dist/data/ai/ChatButton.d.ts +1 -1
  52. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  53. package/dist/data/ai/ChatButton.js +2 -0
  54. package/dist/data/ai/ChatButton.js.map +1 -1
  55. package/dist/data/ai/ChatFab.cjs +5 -1
  56. package/dist/data/ai/ChatFab.cjs.map +1 -1
  57. package/dist/data/ai/ChatFab.d.ts +5 -1
  58. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  59. package/dist/data/ai/ChatFab.js +5 -1
  60. package/dist/data/ai/ChatFab.js.map +1 -1
  61. package/dist/data/ai/ChatWindow.cjs +2 -8
  62. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  63. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  64. package/dist/data/ai/ChatWindow.js +2 -8
  65. package/dist/data/ai/ChatWindow.js.map +1 -1
  66. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  67. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  68. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  69. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  70. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  71. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  72. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  73. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  74. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  75. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  76. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  77. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  78. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  79. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  80. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  81. package/dist/data/ai/SessionViewer.cjs +13 -4
  82. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  83. package/dist/data/ai/SessionViewer.d.ts +5 -1
  84. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  85. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  86. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  87. package/dist/data/ai/SessionViewer.header.js +1 -1
  88. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  89. package/dist/data/ai/SessionViewer.js +13 -4
  90. package/dist/data/ai/SessionViewer.js.map +1 -1
  91. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  92. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  94. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  95. package/dist/data/ai/SessionViewer.model.js +2 -0
  96. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  98. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  100. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  101. package/dist/data/ai/SessionViewer.rows.js +41 -27
  102. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  103. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  104. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  105. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  106. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  107. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  108. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  109. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  110. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  111. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  112. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  113. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  114. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  115. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  116. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  117. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  119. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  121. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  123. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  125. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  127. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  128. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  129. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  130. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  131. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  132. package/dist/data/ai/SessionViewerMenu.js +18 -1
  133. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  134. package/dist/data/ai/ToolPreferences.cjs +149 -143
  135. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  136. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  137. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  138. package/dist/data/ai/ToolPreferences.js +151 -146
  139. package/dist/data/ai/ToolPreferences.js.map +1 -1
  140. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  141. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  142. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  143. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  144. package/dist/data/ai/ToolPreferences.model.js +15 -11
  145. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  146. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  147. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  148. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  149. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  150. package/dist/data/ai/ToolPreferencesList.js +2 -1
  151. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  152. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  153. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  154. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  155. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  156. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  157. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  158. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  159. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  160. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  161. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  162. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  163. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  164. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  165. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  166. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  167. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  168. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  169. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  170. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  171. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  172. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  173. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  174. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  175. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  176. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  177. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  178. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  179. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  180. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  181. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  182. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  183. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  184. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  185. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  186. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  187. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  188. package/dist/data/ai/index.d.ts +2 -2
  189. package/dist/data/ai/index.d.ts.map +1 -1
  190. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  191. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  192. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  193. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  194. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  195. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  196. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  197. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  198. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  199. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  200. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  201. package/dist/data/ai/use-session-token-sizing.js +73 -0
  202. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  203. package/dist/data/call-graph/CallGraph.cjs +250 -0
  204. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  205. package/dist/data/call-graph/CallGraph.d.ts +69 -0
  206. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  207. package/dist/data/call-graph/CallGraph.js +250 -0
  208. package/dist/data/call-graph/CallGraph.js.map +1 -0
  209. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  210. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  211. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  212. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  213. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  214. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  215. package/dist/data/call-graph/CallGraphMembers.cjs +50 -0
  216. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  217. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  218. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  219. package/dist/data/call-graph/CallGraphMembers.js +50 -0
  220. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  221. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  222. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  223. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  224. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  225. package/dist/data/call-graph/CallGraphParts.js +204 -0
  226. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  227. package/dist/data/call-graph/CallGraphToolbar.cjs +186 -0
  228. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  229. package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
  230. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  231. package/dist/data/call-graph/CallGraphToolbar.js +186 -0
  232. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  233. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  234. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  235. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  236. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  237. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  238. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  239. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  240. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  241. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  242. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  243. package/dist/data/call-graph/call-graph-labels.js +96 -0
  244. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  245. package/dist/data/call-graph/call-graph-model.cjs +161 -0
  246. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  247. package/dist/data/call-graph/call-graph-model.d.ts +102 -0
  248. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  249. package/dist/data/call-graph/call-graph-model.js +161 -0
  250. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  251. package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
  252. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  253. package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
  254. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  255. package/dist/data/call-graph/call-graph-vocabulary.js +177 -0
  256. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  257. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  258. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  259. package/dist/data/call-graph/index.d.ts +7 -0
  260. package/dist/data/call-graph/index.d.ts.map +1 -0
  261. package/dist/data/call-graph/types.cjs +5 -0
  262. package/dist/data/call-graph/types.cjs.map +1 -0
  263. package/dist/data/call-graph/types.d.ts +135 -0
  264. package/dist/data/call-graph/types.d.ts.map +1 -0
  265. package/dist/data/call-graph/types.js +5 -0
  266. package/dist/data/call-graph/types.js.map +1 -0
  267. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  268. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  269. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  270. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  271. package/dist/data/call-graph/use-call-graph.js +93 -0
  272. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  273. package/dist/data/chat/Chat.cjs +39 -15
  274. package/dist/data/chat/Chat.cjs.map +1 -1
  275. package/dist/data/chat/Chat.d.ts.map +1 -1
  276. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  277. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  278. package/dist/data/chat/Chat.fixtures.js +2 -2
  279. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  280. package/dist/data/chat/Chat.js +40 -16
  281. package/dist/data/chat/Chat.js.map +1 -1
  282. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  283. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  284. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  285. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  286. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  287. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  288. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  289. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  290. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  291. package/dist/data/chat/ContextMeter.bar.js +5 -8
  292. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  293. package/dist/data/chat/ContextMeter.cjs +18 -19
  294. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  295. package/dist/data/chat/ContextMeter.d.ts +1 -1
  296. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  297. package/dist/data/chat/ContextMeter.js +18 -19
  298. package/dist/data/chat/ContextMeter.js.map +1 -1
  299. package/dist/data/chat/Conversation.cjs +2 -1
  300. package/dist/data/chat/Conversation.cjs.map +1 -1
  301. package/dist/data/chat/Conversation.d.ts +4 -1
  302. package/dist/data/chat/Conversation.d.ts.map +1 -1
  303. package/dist/data/chat/Conversation.js +2 -1
  304. package/dist/data/chat/Conversation.js.map +1 -1
  305. package/dist/data/chat/Message.cjs +39 -12
  306. package/dist/data/chat/Message.cjs.map +1 -1
  307. package/dist/data/chat/Message.d.ts +1 -1
  308. package/dist/data/chat/Message.d.ts.map +1 -1
  309. package/dist/data/chat/Message.js +40 -13
  310. package/dist/data/chat/Message.js.map +1 -1
  311. package/dist/data/chat/ToolCall.cjs +60 -5
  312. package/dist/data/chat/ToolCall.cjs.map +1 -1
  313. package/dist/data/chat/ToolCall.d.ts +7 -2
  314. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  315. package/dist/data/chat/ToolCall.js +60 -5
  316. package/dist/data/chat/ToolCall.js.map +1 -1
  317. package/dist/data/chat/approval.cjs.map +1 -1
  318. package/dist/data/chat/approval.d.ts +2 -2
  319. package/dist/data/chat/approval.d.ts.map +1 -1
  320. package/dist/data/chat/approval.js.map +1 -1
  321. package/dist/data/chat/tool-policy.cjs +59 -2
  322. package/dist/data/chat/tool-policy.cjs.map +1 -1
  323. package/dist/data/chat/tool-policy.d.ts +9 -0
  324. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  325. package/dist/data/chat/tool-policy.js +59 -2
  326. package/dist/data/chat/tool-policy.js.map +1 -1
  327. package/dist/data/chat/types.cjs +6 -0
  328. package/dist/data/chat/types.cjs.map +1 -1
  329. package/dist/data/chat/types.d.ts +13 -4
  330. package/dist/data/chat/types.d.ts.map +1 -1
  331. package/dist/data/chat/types.js +7 -1
  332. package/dist/data/chat/types.js.map +1 -1
  333. package/dist/data/chat/usage-snapshot.cjs +11 -6
  334. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  335. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  336. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  337. package/dist/data/chat/usage-snapshot.js +11 -6
  338. package/dist/data/chat/usage-snapshot.js.map +1 -1
  339. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  340. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  341. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  342. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  343. package/dist/data/graph-columns-layout.cjs +26 -10
  344. package/dist/data/graph-columns-layout.cjs.map +1 -1
  345. package/dist/data/graph-columns-layout.d.ts +8 -0
  346. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  347. package/dist/data/graph-columns-layout.js +26 -10
  348. package/dist/data/graph-columns-layout.js.map +1 -1
  349. package/dist/data/graph-diagram-model.cjs.map +1 -1
  350. package/dist/data/graph-diagram-model.d.ts +5 -0
  351. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  352. package/dist/data/graph-diagram-model.js.map +1 -1
  353. package/dist/data/graph-edge-routing.cjs +9 -3
  354. package/dist/data/graph-edge-routing.cjs.map +1 -1
  355. package/dist/data/graph-edge-routing.d.ts +2 -0
  356. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  357. package/dist/data/graph-edge-routing.js +9 -3
  358. package/dist/data/graph-edge-routing.js.map +1 -1
  359. package/dist/data/json-view/JsonSource.cjs +84 -0
  360. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  361. package/dist/data/json-view/JsonSource.d.ts +7 -0
  362. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  363. package/dist/data/json-view/JsonSource.js +84 -0
  364. package/dist/data/json-view/JsonSource.js.map +1 -0
  365. package/dist/data/json-view/parse-prefix.cjs +132 -0
  366. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  367. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  368. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  369. package/dist/data/json-view/parse-prefix.js +132 -0
  370. package/dist/data/json-view/parse-prefix.js.map +1 -0
  371. package/dist/data/json-view/parse-source.cjs +62 -0
  372. package/dist/data/json-view/parse-source.cjs.map +1 -0
  373. package/dist/data/json-view/parse-source.d.ts +16 -0
  374. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  375. package/dist/data/json-view/parse-source.js +62 -0
  376. package/dist/data/json-view/parse-source.js.map +1 -0
  377. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  378. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  379. package/dist/data/json-view/types.d.ts +14 -0
  380. package/dist/data/json-view/types.d.ts.map +1 -0
  381. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  382. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  383. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  384. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  385. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  386. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  387. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  388. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  389. package/dist/data/runtime/RuntimeBar.js +2 -5
  390. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  391. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  392. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  393. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  394. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  395. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  396. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  397. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  398. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  399. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  400. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  401. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  402. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  403. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  404. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  405. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  406. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  407. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  408. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  409. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  410. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  411. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  412. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  413. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  414. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  415. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  416. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  417. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  418. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  419. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  420. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  421. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  422. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  423. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  424. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  425. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  426. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  427. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  428. package/dist/data/use-pan-zoom.cjs +23 -10
  429. package/dist/data/use-pan-zoom.cjs.map +1 -1
  430. package/dist/data/use-pan-zoom.d.ts +16 -2
  431. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  432. package/dist/data/use-pan-zoom.js +23 -10
  433. package/dist/data/use-pan-zoom.js.map +1 -1
  434. package/dist/data/version-info.cjs +3 -3
  435. package/dist/data/version-info.js +3 -3
  436. package/dist/data.cjs +26 -2
  437. package/dist/data.cjs.map +1 -1
  438. package/dist/data.d.ts +1 -0
  439. package/dist/data.d.ts.map +1 -1
  440. package/dist/data.js +24 -0
  441. package/dist/data.js.map +1 -1
  442. package/dist/index.cjs +28 -4
  443. package/dist/index.cjs.map +1 -1
  444. package/dist/index.js +24 -0
  445. package/dist/index.js.map +1 -1
  446. package/dist/layout/Workspace.cjs +13 -4
  447. package/dist/layout/Workspace.cjs.map +1 -1
  448. package/dist/layout/Workspace.d.ts +7 -2
  449. package/dist/layout/Workspace.d.ts.map +1 -1
  450. package/dist/layout/Workspace.js +13 -4
  451. package/dist/layout/Workspace.js.map +1 -1
  452. package/dist/lib/permission-strategies.cjs +71 -11
  453. package/dist/lib/permission-strategies.cjs.map +1 -1
  454. package/dist/lib/permission-strategies.d.ts +3 -0
  455. package/dist/lib/permission-strategies.d.ts.map +1 -1
  456. package/dist/lib/permission-strategies.js +71 -11
  457. package/dist/lib/permission-strategies.js.map +1 -1
  458. package/dist/styles.css +1 -1
  459. package/package.json +5 -3
  460. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  461. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  462. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  463. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  464. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  465. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  466. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  467. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  468. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  469. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  470. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  471. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -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":";;;;;;;;;;;AAwBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,SAAS;AAAA,IACf,aAAa;AAAA,IACb,SAAS,gBAAgB,IAAI,CAAC,aAAa;AAAA,MACzC,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAO;AAAA,IACP;AAAA,EAAA,CACD;AACH;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGqB;AACnB,SAAO,WAAW;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS,WAAW,KAAK;AAAA,IACzB,MAAM,UAAU,SAAY,KAAK,OAAO,KAAK;AAAA,IAC7C,aAAa;AAAA,IACb,SAAS,aAAa,IAAI,CAAC,UAAU;AAAA,MACnC,OAAO,WAAW,IAAI;AAAA,MACtB,OAAO;AAAA,IAAA,EACP;AAAA,IACF,OAAO;AAAA,IACP;AAAA,EAAA,CACD;AACH;AAEA,SAAS,WAAsC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWqB;AACnB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,YAAY;AAAA,IACnB,OAAO,GAAG,KAAK,MAAM,WAAW,UAAU;AAAA,IAC1C,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAK,MAAY,WAAU,wCAAA,CAAwC;AAAA,MACpE,oBAAC,QAAA,EAAK,WAAW,uBAAwB,UAAA,QAAA,CAAQ;AAAA,IAAA,GACnD;AAAA,IAEF,QACE,qBAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAW,mBAAoB,UAAA,YAAW;AAAA,MAChD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACE,oBAAC,kBAAA,EAAiB,MAAK,YAAW,UAAU,YAAY,QAAW;AAAA,QAErE,UAAU,MAAM,SAAS,MAAS;AAAA,MAAA;AAAA,MAEpC,GAAG,QAAQ,IAAI,CAAC,YAAY;AAAA,QAC1B,OACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM,OAAO;AAAA,YACb,UAAU,OAAO,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/B,UAAU,MAAM,SAAS,OAAO,KAAK;AAAA,MAAA,EACrC;AAAA,IAAA;AAAA,EACJ;AAEJ;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKqB;AACnB,QAAM,QAAQ,QAAQ,gBAAgB,KAAK,IAAI;AAC/C,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,QAAQ,KAAK;AAAA,IACpB,MAAM;AAAA,IACN,eAAe;AAAA,IACf,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAW,mBAAmB,UAAA,UAAM;AAAA,MACzC,SACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAW,GAAG,mBAAmB,iBAAiB,KAAM,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAG7D,oBAAC,UAAK,WAAW,uBACd,kBAAQ,iBAAiB,KAAK,IAAI,kBAAA,CACrC;AAAA,IAAA,GACF;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,OACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGf,UAAU,MAAM,SAAS,EAAE;AAAA,MAAA;AAAA,MAE7B,GAAG;AAAA,QACD,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,WAAW,GAAI,QAAQ,CAAC,KAAK,IAAI,EAAG,CAAC;AAAA,MAAA,EAChE,IAAI,CAAC,WAAW;AAChB,cAAM,OAAO,gBAAgB,MAAM;AACnC,eAAO;AAAA,UACL,OACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,iBAAiB,MAAM;AAAA,cAC7B,UAAU,UAAU;AAAA,cACnB,GAAI,UAAU,SAAS,MAAM,IAAI,CAAA,IAAK,EAAE,MAAM,cAAA;AAAA,YAAc;AAAA,UAAA;AAAA,UAGjE,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,UACtB,eAAe,iBAAiB,MAAM;AAAA,UACtC,UAAU,CAAC,UAAU,SAAS,MAAM;AAAA,UACpC,UAAU,MAAM,SAAS,MAAM;AAAA,QAAA;AAAA,MAEnC,CAAC;AAAA,IAAA;AAAA,EACH;AAEJ;"}
1
+ {"version":3,"file":"RuntimeBar.fields.js","sources":["../../../src/data/runtime/RuntimeBar.fields.tsx"],"sourcesContent":["import { UiBrain, UiCurrencyDollar, UiTimer } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport type { RuntimeBarAction } from \"./RuntimeBarActions\";\nimport {\n COST_PRESETS,\n TIMEOUT_PRESETS,\n formatCost,\n parseCost,\n parseTimeout,\n} from \"./RuntimeBar.limits\";\nimport { RuntimeLimitInput } from \"./RuntimeLimitInput\";\nimport {\n SEGMENT_CAPTION_CLASS,\n SEGMENT_KEY_CLASS,\n SegmentItemLabel,\n} from \"./RuntimeBarSegment\";\nimport { UNSPECIFIED_LABEL, UNSPECIFIED_HINT } from \"./unspecified\";\n\nexport function timeoutField({\n value,\n onChange,\n}: {\n value: string | undefined;\n onChange: (next: string | undefined) => void;\n}): RuntimeBarAction {\n return limitField({\n id: \"budget.timeout\",\n label: \"Timeout\",\n inputLabel: \"Timeout duration\",\n icon: UiTimer,\n current: value,\n text: value ?? \"\",\n placeholder: \"45m\",\n presets: TIMEOUT_PRESETS.map((timeout) => ({\n label: timeout,\n value: timeout,\n })),\n parse: parseTimeout,\n onChange,\n });\n}\n\nexport function budgetField({\n value,\n onChange,\n}: {\n value: number | undefined;\n onChange: (next: number | undefined) => void;\n}): RuntimeBarAction {\n return limitField({\n id: \"budget.cost\",\n label: \"Budget\",\n inputLabel: \"Budget (USD)\",\n icon: UiCurrencyDollar,\n current: formatCost(value),\n text: value === undefined ? \"\" : String(value),\n placeholder: \"2.50\",\n presets: COST_PRESETS.map((cost) => ({\n label: formatCost(cost)!,\n value: cost,\n })),\n parse: parseCost,\n onChange,\n });\n}\n\nfunction limitField<V extends string | number>({\n id,\n label,\n inputLabel,\n icon,\n current,\n text,\n placeholder,\n presets,\n parse,\n onChange,\n}: {\n id: string;\n label: string;\n inputLabel: string;\n icon: StaticIconComponent;\n current: string | undefined;\n text: string;\n placeholder: string;\n presets: { label: string; value: V }[];\n parse: (text: string) => V | undefined;\n onChange: (next: V | undefined) => void;\n}): RuntimeBarAction {\n return {\n id,\n label,\n icon,\n isSet: current !== undefined,\n title: `${label} — ${current ?? \"no limit\"}`,\n caption: (\n <>\n <Icon icon={icon} className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className={SEGMENT_CAPTION_CLASS}>{current}</span>\n </>\n ),\n header: (\n <div className=\"grid gap-1\">\n <span className={SEGMENT_KEY_CLASS}>{inputLabel}</span>\n <RuntimeLimitInput\n inputLabel={inputLabel}\n text={text}\n placeholder={placeholder}\n parse={parse}\n current={current}\n onChange={onChange}\n />\n </div>\n ),\n items: [\n {\n label: (\n <SegmentItemLabel text=\"No limit\" selected={current === undefined} />\n ),\n onSelect: () => onChange(undefined),\n },\n ...presets.map((preset) => ({\n label: (\n <SegmentItemLabel\n text={preset.label}\n selected={preset.label === current}\n />\n ),\n onSelect: () => onChange(preset.value),\n })),\n ],\n };\n}\n\nexport function effortField({\n value,\n offered,\n supported,\n onChange,\n}: {\n value: string | undefined;\n offered: string[];\n supported: string[];\n onChange: (next: string) => void;\n}): RuntimeBarAction {\n const glyph = value ? effortLevelIcon(value) : undefined;\n return {\n id: \"effort\",\n label: \"Effort\",\n title: \"Reasoning effort\",\n isSet: Boolean(value),\n icon: glyph ?? UiBrain,\n iconClassName: glyph ? effortLevelColor(value!) : \"text-muted-foreground\",\n caption: (\n <>\n <span className={SEGMENT_KEY_CLASS}>Effort</span>\n {glyph && (\n <Icon\n icon={glyph}\n className={cn(\"size-4 shrink-0\", effortLevelColor(value!))}\n />\n )}\n <span className={SEGMENT_CAPTION_CLASS}>\n {value ? effortLevelLabel(value) : UNSPECIFIED_LABEL}\n </span>\n </>\n ),\n items: [\n {\n label: (\n <SegmentItemLabel\n text={UNSPECIFIED_LABEL}\n hint={UNSPECIFIED_HINT}\n selected={!value}\n />\n ),\n onSelect: () => onChange(\"\"),\n },\n ...[\n ...new Set([...offered, ...supported, ...(value ? [value] : [])]),\n ].map((effort) => {\n const icon = effortLevelIcon(effort);\n return {\n label: (\n <SegmentItemLabel\n text={effortLevelLabel(effort)}\n selected={value === effort}\n {...(supported.includes(effort) ? {} : { hint: \"unsupported\" })}\n />\n ),\n ...(icon ? { icon } : {}),\n iconClassName: effortLevelColor(effort),\n disabled: !supported.includes(effort),\n onSelect: () => onChange(effort),\n };\n }),\n ],\n };\n}\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@ import { runtimeModelForValue } from "./RuntimeBar.model.js";
6
6
  import { RuntimeBarLayout } from "./RuntimeBarLayout.js";
7
7
  import { effortField, budgetField, timeoutField } from "./RuntimeBar.fields.js";
8
8
  import { runtimeModes, modelGroupsForMode, withRuntimeMode } from "./RuntimeBar.selection.js";
9
- import { RuntimeBarVariantContext } from "./RuntimeBar.context.js";
10
9
  import { isSelectableModel } from "./availability.js";
11
10
  import { effortOptionsForModel, reconcileModelCapabilities } from "./model-capabilities.js";
12
11
  import { selectionForRuntime, SPEC_RUNTIME_FAMILIES, familyById } from "./runtime-mode.js";
@@ -14,7 +13,6 @@ import { runtimeModeFromModel } from "../../lib/runtime-family.js";
14
13
  function RuntimeBar({
15
14
  value,
16
15
  onChange,
17
- variant = "segmented",
18
16
  models = [],
19
17
  families = SPEC_RUNTIME_FAMILIES,
20
18
  effectiveMode,
@@ -119,7 +117,7 @@ function RuntimeBar({
119
117
  })
120
118
  ] : []
121
119
  ];
122
- return /* @__PURE__ */ jsx(RuntimeBarVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
120
+ return /* @__PURE__ */ jsx(
123
121
  RuntimeBarLayout,
124
122
  {
125
123
  ariaLabel,
@@ -136,7 +134,6 @@ function RuntimeBar({
136
134
  inheritedModelLabel,
137
135
  locked,
138
136
  showModel,
139
- variant,
140
137
  onModeChange: (modeId) => applyMode(family.id, modeId),
141
138
  onCustomModel: applyCustomModel,
142
139
  onModelSelect: applyModel,
@@ -147,7 +144,7 @@ function RuntimeBar({
147
144
  }
148
145
  }
149
146
  }
150
- ) });
147
+ );
151
148
  }
152
149
  function withoutCatalogModel(value) {
153
150
  return withOptionalRuntimeValue(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.js","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarLayout } from \"./RuntimeBarLayout\";\nimport type { RuntimeBarActionsProps } from \"./RuntimeBarActions\";\nimport { timeoutField, budgetField, effortField } from \"./RuntimeBar.fields\";\nimport {\n modelGroupsForMode,\n runtimeModes,\n withRuntimeMode,\n} from \"./RuntimeBar.selection\";\nimport { RuntimeBarVariantContext } from \"./RuntimeBar.context\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** Fused field triggers or individually bordered controls. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog grouped by family and filtered by the selected mode. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?:\n | Pick<RuntimeBarActionsProps, \"fields\" | \"menu\" | \"menuLabel\">\n | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily =\n preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.id || value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const modes = runtimeModes(families);\n const mode = modes.find((entry) => entry.id === selection.mode);\n if (!mode)\n throw new Error(\n `No available runtime mode for ${JSON.stringify(selection.mode)}`,\n );\n const groups = modelGroupsForMode({ models, families, mode: mode.id });\n const resolvedModel = runtimeModelForValue(\n groups.flatMap((group) => group.models),\n value,\n );\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = withRuntimeMode({\n value,\n models,\n families,\n mode: modeId,\n reasoningEfforts,\n });\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n const fields = [\n ...(showEffort && supportedEfforts.length > 0\n ? [\n effortField({\n value: value.effort,\n offered: reasoningEfforts,\n supported: supportedEfforts,\n onChange: applyEffort,\n }),\n ]\n : []),\n ...(actions?.fields ?? []),\n ...(showCost\n ? [\n budgetField({\n value: value.budget?.cost,\n onChange: (cost) => onChange(withBudgetLimit(value, \"cost\", cost)),\n }),\n ]\n : []),\n ...(showTimeout\n ? [\n timeoutField({\n value: value.budget?.timeout,\n onChange: (timeout) =>\n onChange(withBudgetLimit(value, \"timeout\", timeout)),\n }),\n ]\n : []),\n ];\n return (\n <RuntimeBarVariantContext.Provider value={variant}>\n <RuntimeBarLayout\n ariaLabel={ariaLabel}\n className={className}\n actions={{ ...actions, fields }}\n identity={{\n family,\n mode,\n modes,\n groups,\n selectedModel: resolvedModel,\n model: value.model,\n unavailable: selectedModelUnavailable,\n inheritedModelLabel,\n locked,\n showModel,\n variant,\n onModeChange: (modeId) => applyMode(family.id, modeId),\n onCustomModel: applyCustomModel,\n onModelSelect: applyModel,\n onModelClear: clearModel,\n onFamilySelect: (familyId) => {\n setPreference({ model: effectiveModel, family: familyId });\n onChange(withoutCatalogModel(value));\n },\n }}\n />\n </RuntimeBarVariantContext.Provider>\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.js","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarLayout } from \"./RuntimeBarLayout\";\nimport type { RuntimeBarActionsProps } from \"./RuntimeBarActions\";\nimport { timeoutField, budgetField, effortField } from \"./RuntimeBar.fields\";\nimport {\n modelGroupsForMode,\n runtimeModes,\n withRuntimeMode,\n} from \"./RuntimeBar.selection\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** Model catalog grouped by family and filtered by the selected mode. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?:\n | Pick<RuntimeBarActionsProps, \"fields\" | \"menu\" | \"menuLabel\">\n | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Mode-first runtime controls with settings that adapt to the container width. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily =\n preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.id || value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const modes = runtimeModes(families);\n const mode = modes.find((entry) => entry.id === selection.mode);\n if (!mode)\n throw new Error(\n `No available runtime mode for ${JSON.stringify(selection.mode)}`,\n );\n const groups = modelGroupsForMode({ models, families, mode: mode.id });\n const resolvedModel = runtimeModelForValue(\n groups.flatMap((group) => group.models),\n value,\n );\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = withRuntimeMode({\n value,\n models,\n families,\n mode: modeId,\n reasoningEfforts,\n });\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n const fields = [\n ...(showEffort && supportedEfforts.length > 0\n ? [\n effortField({\n value: value.effort,\n offered: reasoningEfforts,\n supported: supportedEfforts,\n onChange: applyEffort,\n }),\n ]\n : []),\n ...(actions?.fields ?? []),\n ...(showCost\n ? [\n budgetField({\n value: value.budget?.cost,\n onChange: (cost) => onChange(withBudgetLimit(value, \"cost\", cost)),\n }),\n ]\n : []),\n ...(showTimeout\n ? [\n timeoutField({\n value: value.budget?.timeout,\n onChange: (timeout) =>\n onChange(withBudgetLimit(value, \"timeout\", timeout)),\n }),\n ]\n : []),\n ];\n return (\n <RuntimeBarLayout\n ariaLabel={ariaLabel}\n className={className}\n actions={{ ...actions, fields }}\n identity={{\n family,\n mode,\n modes,\n groups,\n selectedModel: resolvedModel,\n model: value.model,\n unavailable: selectedModelUnavailable,\n inheritedModelLabel,\n locked,\n showModel,\n onModeChange: (modeId) => applyMode(family.id, modeId),\n onCustomModel: applyCustomModel,\n onModelSelect: applyModel,\n onModelClear: clearModel,\n onFamilySelect: (familyId) => {\n setPreference({ model: effectiveModel, family: familyId });\n onChange(withoutCatalogModel(value));\n },\n }}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":[],"mappings":"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"}
@@ -8,7 +8,10 @@ const runtimeFamily = require("../../lib/runtime-family.cjs");
8
8
  function runtimeModes(families) {
9
9
  return [
10
10
  ...new Map(
11
- families.flatMap((family) => family.modes).filter((mode) => !availability.isUnavailable(mode.availability)).map((mode) => [mode.id, mode])
11
+ families.flatMap((family) => family.modes).filter((mode) => !availability.isUnavailable(mode.availability)).map((mode) => {
12
+ const icon = mode.icon ?? runtimeMode.runtimeModeIcon(mode.id);
13
+ return [mode.id, icon ? { ...mode, icon } : mode];
14
+ })
12
15
  ).values()
13
16
  ];
14
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.selection.cjs","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"sourcesContent":["import type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport {\n modelsForFamily,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport function runtimeModes(families: SpecRuntimeFamily[]) {\n return [\n ...new Map(\n families\n .flatMap((family) => family.modes)\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => [mode.id, mode]),\n ).values(),\n ];\n}\n\nexport function modelGroupsForMode({\n models,\n families,\n mode,\n}: {\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n}) {\n return families\n .filter((family) =>\n family.modes.some(\n (entry) => entry.id === mode && !isUnavailable(entry.availability),\n ),\n )\n .map((family) => ({\n family,\n models: modelsForFamily(models, family, mode).filter((model) => {\n const modelMode =\n model.runtime?.mode ??\n runtimeModeFromModel(model.runtime?.model ?? model.id);\n return modelMode === undefined || modelMode === mode;\n }),\n }));\n}\n\nexport function withRuntimeMode<T extends RuntimeBarValue>({\n value,\n models,\n families,\n mode,\n reasoningEfforts,\n}: {\n value: T;\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n reasoningEfforts: readonly string[];\n}): T {\n if (!runtimeModes(families).some((entry) => entry.id === mode)) {\n throw new Error(`Runtime mode ${JSON.stringify(mode)} is unavailable`);\n }\n const eligible = modelGroupsForMode({ models, families, mode }).flatMap(\n (group) => group.models,\n );\n const model = runtimeModelForValue(eligible, { ...value, mode });\n const next = { ...value, mode };\n delete next.id;\n delete next.model;\n delete next.cliArgs;\n return model\n ? reconcileModelCapabilities(next, model, reasoningEfforts, { mode })\n : next;\n}\n"],"names":["isUnavailable","modelsForFamily","runtimeModeFromModel","runtimeModelForValue","reconcileModelCapabilities"],"mappings":";;;;;;;AAWO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAACA,aAAAA,cAAc,KAAK,YAAY,CAAC,EAClD,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAAA,EAChC,OAAA;AAAA,EAAO;AAEb;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO,SACJ;AAAA,IAAO,CAAC,WACP,OAAO,MAAM;AAAA,MACX,CAAC,UAAU,MAAM,OAAO,QAAQ,CAACA,aAAAA,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQC,YAAAA,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACfC,cAAAA,uBAAqB,WAAM,YAAN,mBAAe,UAAS,MAAM,EAAE;AACvD,aAAO,cAAc,UAAa,cAAc;AAAA,IAClD,CAAC;AAAA,EAAA,EACD;AACN;AAEO,SAAS,gBAA2C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMM;AACJ,MAAI,CAAC,aAAa,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,OAAO,IAAI,GAAG;AAC9D,UAAM,IAAI,MAAM,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB;AAAA,EACvE;AACA,QAAM,WAAW,mBAAmB,EAAE,QAAQ,UAAU,KAAA,CAAM,EAAE;AAAA,IAC9D,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,QAAQC,iBAAAA,qBAAqB,UAAU,EAAE,GAAG,OAAO,MAAM;AAC/D,QAAM,OAAO,EAAE,GAAG,OAAO,KAAA;AACzB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,QACHC,kBAAAA,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;;;;"}
1
+ {"version":3,"file":"RuntimeBar.selection.cjs","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"sourcesContent":["import type { ChatModel } from \"../chat/types\";\nimport type { RuntimeBarValue } from \"./RuntimeBar\";\nimport { isUnavailable } from \"./availability\";\nimport { reconcileModelCapabilities } from \"./model-capabilities\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport {\n modelsForFamily,\n runtimeModeFromModel,\n runtimeModeIcon,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport function runtimeModes(families: SpecRuntimeFamily[]) {\n return [\n ...new Map(\n families\n .flatMap((family) => family.modes)\n .filter((mode) => !isUnavailable(mode.availability))\n .map((mode) => {\n const icon = mode.icon ?? runtimeModeIcon(mode.id);\n return [mode.id, icon ? { ...mode, icon } : mode] as const;\n }),\n ).values(),\n ];\n}\n\nexport function modelGroupsForMode({\n models,\n families,\n mode,\n}: {\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n}) {\n return families\n .filter((family) =>\n family.modes.some(\n (entry) => entry.id === mode && !isUnavailable(entry.availability),\n ),\n )\n .map((family) => ({\n family,\n models: modelsForFamily(models, family, mode).filter((model) => {\n const modelMode =\n model.runtime?.mode ??\n runtimeModeFromModel(model.runtime?.model ?? model.id);\n return modelMode === undefined || modelMode === mode;\n }),\n }));\n}\n\nexport function withRuntimeMode<T extends RuntimeBarValue>({\n value,\n models,\n families,\n mode,\n reasoningEfforts,\n}: {\n value: T;\n models: ChatModel[];\n families: SpecRuntimeFamily[];\n mode: string;\n reasoningEfforts: readonly string[];\n}): T {\n if (!runtimeModes(families).some((entry) => entry.id === mode)) {\n throw new Error(`Runtime mode ${JSON.stringify(mode)} is unavailable`);\n }\n const eligible = modelGroupsForMode({ models, families, mode }).flatMap(\n (group) => group.models,\n );\n const model = runtimeModelForValue(eligible, { ...value, mode });\n const next = { ...value, mode };\n delete next.id;\n delete next.model;\n delete next.cliArgs;\n return model\n ? reconcileModelCapabilities(next, model, reasoningEfforts, { mode })\n : next;\n}\n"],"names":["isUnavailable","runtimeModeIcon","modelsForFamily","runtimeModeFromModel","runtimeModelForValue","reconcileModelCapabilities"],"mappings":";;;;;;;AAYO,SAAS,aAAa,UAA+B;AAC1D,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,SACG,QAAQ,CAAC,WAAW,OAAO,KAAK,EAChC,OAAO,CAAC,SAAS,CAACA,aAAAA,cAAc,KAAK,YAAY,CAAC,EAClD,IAAI,CAAC,SAAS;AACb,cAAM,OAAO,KAAK,QAAQC,YAAAA,gBAAgB,KAAK,EAAE;AACjD,eAAO,CAAC,KAAK,IAAI,OAAO,EAAE,GAAG,MAAM,KAAA,IAAS,IAAI;AAAA,MAClD,CAAC;AAAA,IAAA,EACH,OAAA;AAAA,EAAO;AAEb;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO,SACJ;AAAA,IAAO,CAAC,WACP,OAAO,MAAM;AAAA,MACX,CAAC,UAAU,MAAM,OAAO,QAAQ,CAACD,aAAAA,cAAc,MAAM,YAAY;AAAA,IAAA;AAAA,EACnE,EAED,IAAI,CAAC,YAAY;AAAA,IAChB;AAAA,IACA,QAAQE,YAAAA,gBAAgB,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,UAAU;;AAC9D,YAAM,cACJ,WAAM,YAAN,mBAAe,SACfC,cAAAA,uBAAqB,WAAM,YAAN,mBAAe,UAAS,MAAM,EAAE;AACvD,aAAO,cAAc,UAAa,cAAc;AAAA,IAClD,CAAC;AAAA,EAAA,EACD;AACN;AAEO,SAAS,gBAA2C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMM;AACJ,MAAI,CAAC,aAAa,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,OAAO,IAAI,GAAG;AAC9D,UAAM,IAAI,MAAM,gBAAgB,KAAK,UAAU,IAAI,CAAC,iBAAiB;AAAA,EACvE;AACA,QAAM,WAAW,mBAAmB,EAAE,QAAQ,UAAU,KAAA,CAAM,EAAE;AAAA,IAC9D,CAAC,UAAU,MAAM;AAAA,EAAA;AAEnB,QAAM,QAAQC,iBAAAA,qBAAqB,UAAU,EAAE,GAAG,OAAO,MAAM;AAC/D,QAAM,OAAO,EAAE,GAAG,OAAO,KAAA;AACzB,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,QACHC,kBAAAA,2BAA2B,MAAM,OAAO,kBAAkB,EAAE,KAAA,CAAM,IAClE;AACN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.selection.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,oDASzD;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,IAAI,GACL,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;;;IAgBA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,EACzD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,CAAC,CAeJ"}
1
+ {"version":3,"file":"RuntimeBar.selection.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBar.selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,oDAYzD;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,IAAI,GACL,EAAE;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;;;IAgBA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,EACzD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,CAAC,CAeJ"}
@@ -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;;"}
@@ -40,7 +40,7 @@ export type RuntimeBarActionsProps = {
40
40
  };
41
41
  /**
42
42
  * The runtime bar's host-level settings plus a ⋮ menu. It fuses onto the
43
- * segmented bar border and becomes a separate control group in combo layouts.
43
+ * bar border, or renders its own border when used independently.
44
44
  */
45
45
  export declare function RuntimeBarActions({ fields, menu, inline, menuLabel, standalone, className, visibleCount, }: RuntimeBarActionsProps): import("react").JSX.Element | null;
46
46
  //# sourceMappingURL=RuntimeBarActions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBarActions.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBarActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIzD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,SAAS,CAAC;IACnB,gEAAgE;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+CAA+C;IAC/C,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxC,uEAAuE;IACvE,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACtC,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAW,EACX,IAAS,EACT,MAAa,EACb,SAA6B,EAC7B,UAAkB,EAClB,SAAS,EACT,YAA4B,GAC7B,EAAE,sBAAsB,sCA2DxB"}
1
+ {"version":3,"file":"RuntimeBarActions.d.ts","sourceRoot":"","sources":["../../../src/data/runtime/RuntimeBarActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGzD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,SAAS,CAAC;IACnB,gEAAgE;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+CAA+C;IAC/C,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACxC,uEAAuE;IACvE,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACtC,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAW,EACX,IAAS,EACT,MAAa,EACb,SAA6B,EAC7B,UAAkB,EAClB,SAAS,EACT,YAA4B,GAC7B,EAAE,sBAAsB,sCAuDxB"}
@@ -1,9 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useContext } from "react";
3
2
  import { cn } from "../../lib/utils.js";
4
3
  import { Icon } from "../Icon.js";
5
4
  import { RuntimeSegment } from "./RuntimeBarSegment.js";
6
- import { RuntimeBarVariantContext } from "./RuntimeBar.context.js";
7
5
  import { UiDotsVertical } from "../../icons/components/UiDotsVertical.js";
8
6
  function RuntimeBarActions({
9
7
  fields = [],
@@ -14,8 +12,6 @@ function RuntimeBarActions({
14
12
  className,
15
13
  visibleCount = fields.length
16
14
  }) {
17
- const variant = useContext(RuntimeBarVariantContext);
18
- const useStandalone = standalone || variant === "combo";
19
15
  const inlineFields = inline ? fields.filter((field) => field.isSet).slice(0, visibleCount) : [];
20
16
  const menuItems = [
21
17
  ...fields.map((field) => ({
@@ -37,7 +33,7 @@ function RuntimeBarActions({
37
33
  "data-runtime-bar-section": "actions",
38
34
  className: cn(
39
35
  "flex h-control-h shrink-0 items-stretch",
40
- useStandalone ? variant === "combo" ? "gap-1" : "w-fit overflow-hidden rounded-md border border-input bg-background" : "border-l border-border",
36
+ standalone ? "w-fit overflow-hidden rounded-md border border-input bg-background" : "border-l border-border",
41
37
  className
42
38
  ),
43
39
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBarActions.js","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":[],"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,UAAU,WAAW,wBAAwB;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,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,4BAAyB;AAAA,MACzB,WAAW;AAAA,QACT;AAAA,QACA,gBACI,YAAY,UACV,UACA,uEACF;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,aAAa,IAAI,CAAC,UACjB;AAAA,UAAC;AAAA,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,KAClB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO;AAAA,YACP,OAAO;AAAA,YACP,aAAW;AAAA,YAEX,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"RuntimeBarActions.js","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":[],"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,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,4BAAyB;AAAA,MACzB,WAAW;AAAA,QACT;AAAA,QACA,aACI,uEACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,aAAa,IAAI,CAAC,UACjB;AAAA,UAAC;AAAA,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,KAClB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,OAAO;AAAA,YACP,OAAO;AAAA,YACP,aAAW;AAAA,YAEX,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -25,12 +25,9 @@ function RuntimeBarIdentity({
25
25
  "div",
26
26
  {
27
27
  "data-runtime-bar-section": measure ? void 0 : "identity",
28
- className: utils.cn(
29
- "flex h-control-h min-w-0 items-stretch",
30
- props.variant === "combo" && "gap-1"
31
- ),
28
+ className: "flex h-control-h min-w-0 items-stretch",
32
29
  children: [
33
- measure ? /* @__PURE__ */ jsxRuntime.jsx(IdentityMeasure, { variant: props.variant, children: modeCaption }) : /* @__PURE__ */ jsxRuntime.jsx(
30
+ measure ? /* @__PURE__ */ jsxRuntime.jsx(IdentityMeasure, { children: modeCaption }) : /* @__PURE__ */ jsxRuntime.jsx(
34
31
  RuntimeBarSegment.RuntimeSegment,
35
32
  {
36
33
  menuLabel: "Runtime mode",
@@ -45,13 +42,12 @@ function RuntimeBarIdentity({
45
42
  children: modeCaption
46
43
  }
47
44
  ),
48
- measure ? /* @__PURE__ */ jsxRuntime.jsx(IdentityMeasure, { variant: props.variant, model: true, children: /* @__PURE__ */ jsxRuntime.jsx(ModelCaption, { ...props }) }) : /* @__PURE__ */ jsxRuntime.jsx(RuntimeModelPicker, { ...props })
45
+ measure ? /* @__PURE__ */ jsxRuntime.jsx(IdentityMeasure, { model: true, children: /* @__PURE__ */ jsxRuntime.jsx(ModelCaption, { ...props }) }) : /* @__PURE__ */ jsxRuntime.jsx(RuntimeModelPicker, { ...props })
49
46
  ]
50
47
  }
51
48
  );
52
49
  }
53
50
  function IdentityMeasure({
54
- variant,
55
51
  model = false,
56
52
  children
57
53
  }) {
@@ -59,9 +55,8 @@ function IdentityMeasure({
59
55
  "div",
60
56
  {
61
57
  className: utils.cn(
62
- "flex h-control-h items-center gap-1.5 px-density-2",
63
- model && "max-w-56 min-w-0",
64
- variant === "combo" ? "rounded-md border border-input" : "border-l border-border first:border-l-0"
58
+ "flex h-control-h items-center gap-1.5 border-l border-border px-density-2 first:border-l-0",
59
+ model && "max-w-56 min-w-0"
65
60
  ),
66
61
  children: /* @__PURE__ */ jsxRuntime.jsx(RuntimeBarSegment.RuntimeSegmentCaption, { children })
67
62
  }
@@ -141,10 +136,7 @@ function RuntimeModelPicker(props) {
141
136
  disabled: props.locked,
142
137
  value: props.unavailable ? "" : ((_a = props.selectedModel) == null ? void 0 : _a.id) ?? props.model ?? "",
143
138
  options,
144
- className: utils.cn(
145
- "h-control-h min-w-0 max-w-56 flex-1",
146
- props.variant === "combo" ? "rounded-md border border-input bg-background" : "border-l border-border first:border-l-0"
147
- ),
139
+ className: "h-control-h min-w-0 max-w-56 flex-1 border-l border-border first:border-l-0",
148
140
  triggerClassName: "h-full rounded-none border-0 px-density-2 focus-visible:ring-inset aria-expanded:bg-muted",
149
141
  triggerContent: /* @__PURE__ */ jsxRuntime.jsx(ModelCaption, { ...props }),
150
142
  onNew: (value) => ({ value, label: `Use custom: ${value}` }),
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBarIdentity.cjs","sources":["../../../src/data/runtime/RuntimeBarIdentity.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Combobox, type ComboboxOption } from \"../../components/Combobox\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport {\n RuntimeSegment,\n RuntimeSegmentCaption,\n SEGMENT_CAPTION_CLASS,\n} from \"./RuntimeBarSegment\";\nimport { modelGroupsForMode } from \"./RuntimeBar.selection\";\nimport type { SpecRuntimeFamily, SpecRuntimeModeOption } from \"./runtime-mode\";\nimport { UNSPECIFIED_LABEL, unspecifiedHint } from \"./unspecified\";\n\nexport type RuntimeBarIdentityProps = {\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n modes: SpecRuntimeModeOption[];\n groups: ReturnType<typeof modelGroupsForMode>;\n selectedModel: ChatModel | undefined;\n model: string | undefined;\n unavailable: boolean;\n inheritedModelLabel: string | undefined;\n locked: boolean;\n showModel: boolean;\n variant: \"segmented\" | \"combo\";\n onModeChange: (mode: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onCustomModel: (model: string) => void;\n onFamilySelect: (family: string) => void;\n};\n\nexport function RuntimeBarIdentity({\n measure = false,\n ...props\n}: RuntimeBarIdentityProps & { measure?: boolean }) {\n const modeCaption = (\n <>\n {props.mode.icon && (\n <Icon\n icon={props.mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={SEGMENT_CAPTION_CLASS}>{props.mode.label}</span>\n </>\n );\n return (\n <div\n data-runtime-bar-section={measure ? undefined : \"identity\"}\n className={cn(\n \"flex h-control-h min-w-0 items-stretch\",\n props.variant === \"combo\" && \"gap-1\",\n )}\n >\n {measure ? (\n <IdentityMeasure variant={props.variant}>{modeCaption}</IdentityMeasure>\n ) : (\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={`Runtime mode — ${props.mode.label}`}\n disabled={props.locked}\n className=\"shrink-0\"\n items={props.modes.map((mode) => ({\n label: mode.label,\n ...(mode.icon ? { icon: mode.icon } : {}),\n onSelect: () => props.onModeChange(mode.id),\n }))}\n >\n {modeCaption}\n </RuntimeSegment>\n )}\n {measure ? (\n <IdentityMeasure variant={props.variant} model>\n <ModelCaption {...props} />\n </IdentityMeasure>\n ) : (\n <RuntimeModelPicker {...props} />\n )}\n </div>\n );\n}\n\nfunction IdentityMeasure({\n variant,\n model = false,\n children,\n}: {\n variant: \"segmented\" | \"combo\";\n model?: boolean;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n \"flex h-control-h items-center gap-1.5 px-density-2\",\n model && \"max-w-56 min-w-0\",\n variant === \"combo\"\n ? \"rounded-md border border-input\"\n : \"border-l border-border first:border-l-0\",\n )}\n >\n <RuntimeSegmentCaption>{children}</RuntimeSegmentCaption>\n </div>\n );\n}\n\nfunction ModelCaption(props: RuntimeBarIdentityProps) {\n const brand = runtimeFamilyBrand(props.family);\n const label = props.showModel\n ? props.unavailable\n ? \"Unavailable selection\"\n : (props.selectedModel?.label ?? props.model ?? UNSPECIFIED_LABEL)\n : props.family.label;\n return (\n <>\n {props.showModel && (\n <span className=\"sr-only\">{props.family.label} </span>\n )}\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className=\"min-w-0 truncate font-mono text-xs font-semibold text-foreground\">\n {label}\n </span>\n </>\n );\n}\n\nfunction RuntimeModelPicker(props: RuntimeBarIdentityProps) {\n const title = props.showModel\n ? `Model — ${props.unavailable ? \"unavailable selection\" : props.model || \"unspecified\"}`\n : `Family — ${props.family.label}`;\n if (!props.showModel)\n return (\n <RuntimeSegment\n menuLabel=\"Family\"\n title={title}\n disabled={props.locked}\n className=\"min-w-0 max-w-56 flex-1\"\n items={props.groups.map(({ family }) => {\n const brand = runtimeFamilyBrand(family);\n return {\n label: family.label,\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => props.onFamilySelect(family.id),\n };\n })}\n >\n <ModelCaption {...props} />\n </RuntimeSegment>\n );\n const options: ComboboxOption[] = [\n {\n value: \"\",\n label: UNSPECIFIED_LABEL,\n description: unspecifiedHint(props.inheritedModelLabel),\n },\n ...props.groups.flatMap(({ family, models }) => {\n const brand = runtimeFamilyBrand(family);\n const icon = brand.icon ? (\n <Icon icon={brand.icon} className={cn(\"size-4\", brand.color)} />\n ) : undefined;\n return models.length\n ? models.map((model) => ({\n value: model.id,\n label: model.label.trim() || model.id,\n group: family.label,\n icon,\n }))\n : [\n {\n value: `family:${family.id}`,\n label: \"Custom model…\",\n group: family.label,\n icon,\n },\n ];\n }),\n ];\n return (\n <Combobox\n searchPlacement=\"menu\"\n ariaLabel=\"Model\"\n title={title}\n disabled={props.locked}\n value={\n props.unavailable ? \"\" : (props.selectedModel?.id ?? props.model ?? \"\")\n }\n options={options}\n className={cn(\n \"h-control-h min-w-0 max-w-56 flex-1\",\n props.variant === \"combo\"\n ? \"rounded-md border border-input bg-background\"\n : \"border-l border-border first:border-l-0\",\n )}\n triggerClassName=\"h-full rounded-none border-0 px-density-2 focus-visible:ring-inset aria-expanded:bg-muted\"\n triggerContent={<ModelCaption {...props} />}\n onNew={(value) => ({ value, label: `Use custom: ${value}` })}\n onChange={(value) => {\n if (!value) return props.onModelClear();\n const family = props.groups.find(\n ({ family }) => value === `family:${family.id}`,\n )?.family;\n if (family) return props.onFamilySelect(family.id);\n const model = props.groups\n .flatMap(({ models }) => models)\n .find((model) => model.id === value);\n if (model) props.onModelSelect(model);\n else props.onCustomModel(value);\n }}\n />\n );\n}\n"],"names":["jsxs","Fragment","jsx","Icon","SEGMENT_CAPTION_CLASS","cn","RuntimeSegment","RuntimeSegmentCaption","runtimeFamilyBrand","UNSPECIFIED_LABEL","unspecifiedHint","Combobox","_a","family","model"],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBarIdentity.cjs","sources":["../../../src/data/runtime/RuntimeBarIdentity.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Combobox, type ComboboxOption } from \"../../components/Combobox\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport type { ChatModel } from \"../chat/types\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport {\n RuntimeSegment,\n RuntimeSegmentCaption,\n SEGMENT_CAPTION_CLASS,\n} from \"./RuntimeBarSegment\";\nimport { modelGroupsForMode } from \"./RuntimeBar.selection\";\nimport type { SpecRuntimeFamily, SpecRuntimeModeOption } from \"./runtime-mode\";\nimport { UNSPECIFIED_LABEL, unspecifiedHint } from \"./unspecified\";\n\nexport type RuntimeBarIdentityProps = {\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n modes: SpecRuntimeModeOption[];\n groups: ReturnType<typeof modelGroupsForMode>;\n selectedModel: ChatModel | undefined;\n model: string | undefined;\n unavailable: boolean;\n inheritedModelLabel: string | undefined;\n locked: boolean;\n showModel: boolean;\n onModeChange: (mode: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onCustomModel: (model: string) => void;\n onFamilySelect: (family: string) => void;\n};\n\nexport function RuntimeBarIdentity({\n measure = false,\n ...props\n}: RuntimeBarIdentityProps & { measure?: boolean }) {\n const modeCaption = (\n <>\n {props.mode.icon && (\n <Icon\n icon={props.mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className={SEGMENT_CAPTION_CLASS}>{props.mode.label}</span>\n </>\n );\n return (\n <div\n data-runtime-bar-section={measure ? undefined : \"identity\"}\n className=\"flex h-control-h min-w-0 items-stretch\"\n >\n {measure ? (\n <IdentityMeasure>{modeCaption}</IdentityMeasure>\n ) : (\n <RuntimeSegment\n menuLabel=\"Runtime mode\"\n title={`Runtime mode — ${props.mode.label}`}\n disabled={props.locked}\n className=\"shrink-0\"\n items={props.modes.map((mode) => ({\n label: mode.label,\n ...(mode.icon ? { icon: mode.icon } : {}),\n onSelect: () => props.onModeChange(mode.id),\n }))}\n >\n {modeCaption}\n </RuntimeSegment>\n )}\n {measure ? (\n <IdentityMeasure model>\n <ModelCaption {...props} />\n </IdentityMeasure>\n ) : (\n <RuntimeModelPicker {...props} />\n )}\n </div>\n );\n}\n\nfunction IdentityMeasure({\n model = false,\n children,\n}: {\n model?: boolean;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n \"flex h-control-h items-center gap-1.5 border-l border-border px-density-2 first:border-l-0\",\n model && \"max-w-56 min-w-0\",\n )}\n >\n <RuntimeSegmentCaption>{children}</RuntimeSegmentCaption>\n </div>\n );\n}\n\nfunction ModelCaption(props: RuntimeBarIdentityProps) {\n const brand = runtimeFamilyBrand(props.family);\n const label = props.showModel\n ? props.unavailable\n ? \"Unavailable selection\"\n : (props.selectedModel?.label ?? props.model ?? UNSPECIFIED_LABEL)\n : props.family.label;\n return (\n <>\n {props.showModel && (\n <span className=\"sr-only\">{props.family.label} </span>\n )}\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n <span className=\"min-w-0 truncate font-mono text-xs font-semibold text-foreground\">\n {label}\n </span>\n </>\n );\n}\n\nfunction RuntimeModelPicker(props: RuntimeBarIdentityProps) {\n const title = props.showModel\n ? `Model — ${props.unavailable ? \"unavailable selection\" : props.model || \"unspecified\"}`\n : `Family — ${props.family.label}`;\n if (!props.showModel)\n return (\n <RuntimeSegment\n menuLabel=\"Family\"\n title={title}\n disabled={props.locked}\n className=\"min-w-0 max-w-56 flex-1\"\n items={props.groups.map(({ family }) => {\n const brand = runtimeFamilyBrand(family);\n return {\n label: family.label,\n ...(brand.icon ? { icon: brand.icon } : {}),\n onSelect: () => props.onFamilySelect(family.id),\n };\n })}\n >\n <ModelCaption {...props} />\n </RuntimeSegment>\n );\n const options: ComboboxOption[] = [\n {\n value: \"\",\n label: UNSPECIFIED_LABEL,\n description: unspecifiedHint(props.inheritedModelLabel),\n },\n ...props.groups.flatMap(({ family, models }) => {\n const brand = runtimeFamilyBrand(family);\n const icon = brand.icon ? (\n <Icon icon={brand.icon} className={cn(\"size-4\", brand.color)} />\n ) : undefined;\n return models.length\n ? models.map((model) => ({\n value: model.id,\n label: model.label.trim() || model.id,\n group: family.label,\n icon,\n }))\n : [\n {\n value: `family:${family.id}`,\n label: \"Custom model…\",\n group: family.label,\n icon,\n },\n ];\n }),\n ];\n return (\n <Combobox\n searchPlacement=\"menu\"\n ariaLabel=\"Model\"\n title={title}\n disabled={props.locked}\n value={\n props.unavailable ? \"\" : (props.selectedModel?.id ?? props.model ?? \"\")\n }\n options={options}\n className=\"h-control-h min-w-0 max-w-56 flex-1 border-l border-border first:border-l-0\"\n triggerClassName=\"h-full rounded-none border-0 px-density-2 focus-visible:ring-inset aria-expanded:bg-muted\"\n triggerContent={<ModelCaption {...props} />}\n onNew={(value) => ({ value, label: `Use custom: ${value}` })}\n onChange={(value) => {\n if (!value) return props.onModelClear();\n const family = props.groups.find(\n ({ family }) => value === `family:${family.id}`,\n )?.family;\n if (family) return props.onFamilySelect(family.id);\n const model = props.groups\n .flatMap(({ models }) => models)\n .find((model) => model.id === value);\n if (model) props.onModelSelect(model);\n else props.onCustomModel(value);\n }}\n />\n );\n}\n"],"names":["jsxs","Fragment","jsx","Icon","SEGMENT_CAPTION_CLASS","RuntimeSegment","cn","RuntimeSegmentCaption","runtimeFamilyBrand","UNSPECIFIED_LABEL","unspecifiedHint","Combobox","_a","family","model"],"mappings":"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"}
@@ -12,7 +12,6 @@ export type RuntimeBarIdentityProps = {
12
12
  inheritedModelLabel: string | undefined;
13
13
  locked: boolean;
14
14
  showModel: boolean;
15
- variant: "segmented" | "combo";
16
15
  onModeChange: (mode: string) => void;
17
16
  onModelSelect: (model: ChatModel) => void;
18
17
  onModelClear: () => void;