@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
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsoncParser = require("jsonc-parser");
4
+ const STRING_PREFIX = /^"(?:[^"\\]|\\["\\/bfnrt]|\\u[\da-fA-F]{4})*(?:\\(?:u[\da-fA-F]{0,3})?)?$/;
5
+ const NUMBER_PREFIX = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d*)?$/;
6
+ const FRACTION_PREFIX = /^-?(?:0|[1-9]\d*)\.$/;
7
+ function isScalarPrefix(raw) {
8
+ if (raw.startsWith('"')) {
9
+ for (const character of raw) {
10
+ if (character.charCodeAt(0) < 32) return false;
11
+ }
12
+ return STRING_PREFIX.test(raw);
13
+ }
14
+ return raw === "-" || NUMBER_PREFIX.test(raw) || FRACTION_PREFIX.test(raw) || ["true", "false", "null"].some((literal) => literal.startsWith(raw));
15
+ }
16
+ function parseJsonPrefix(source) {
17
+ const scanner = jsoncParser.createScanner(source);
18
+ const token = () => source.slice(
19
+ scanner.getTokenOffset(),
20
+ scanner.getTokenOffset() + scanner.getTokenLength()
21
+ );
22
+ const issue = (status, message) => ({
23
+ status,
24
+ message,
25
+ offset: scanner.getTokenOffset()
26
+ });
27
+ function next() {
28
+ do {
29
+ scanner.scan();
30
+ } while (/^[ \t\r\n]+$/.test(token()));
31
+ }
32
+ function retain(result2, value) {
33
+ if (result2.status !== "incomplete") return result2;
34
+ return { ...result2, ...Object.keys(value).length > 0 ? { value } : {} };
35
+ }
36
+ function readScalar() {
37
+ const offset = scanner.getTokenOffset();
38
+ const raw = source.slice(offset, offset + scanner.getTokenLength());
39
+ let value;
40
+ try {
41
+ value = JSON.parse(raw);
42
+ } catch (error) {
43
+ if (!(error instanceof SyntaxError)) throw error;
44
+ return issue(
45
+ offset + raw.length === source.length && isScalarPrefix(raw) ? "incomplete" : "invalid",
46
+ "Expected a complete JSON string, number, boolean, or null"
47
+ );
48
+ }
49
+ next();
50
+ return { status: "complete", value };
51
+ }
52
+ function readValue() {
53
+ if (token() === "")
54
+ return issue("incomplete", "Input ended before a JSON value");
55
+ if (token() === "{") return readObject();
56
+ if (token() === "[") return readArray();
57
+ return readScalar();
58
+ }
59
+ function readObject() {
60
+ const value = {};
61
+ next();
62
+ if (token() === "}") {
63
+ next();
64
+ return { status: "complete", value };
65
+ }
66
+ while (true) {
67
+ if (token() === "")
68
+ return retain(
69
+ issue("incomplete", "Input ended before a property name or '}'"),
70
+ value
71
+ );
72
+ if (!token().startsWith('"'))
73
+ return issue("invalid", "Expected a quoted property name");
74
+ const key = readScalar();
75
+ if (key.status !== "complete") return retain(key, value);
76
+ if (typeof key.value !== "string")
77
+ throw new Error("JSON property scanner returned a non-string key");
78
+ if (token() === "")
79
+ return retain(issue("incomplete", "Input ended before ':'"), value);
80
+ if (token() !== ":")
81
+ return issue("invalid", "Expected ':' after the property name");
82
+ next();
83
+ const child = readValue();
84
+ if ("value" in child)
85
+ Object.defineProperty(value, key.value, {
86
+ value: child.value,
87
+ enumerable: true,
88
+ configurable: true,
89
+ writable: true
90
+ });
91
+ if (child.status !== "complete") return retain(child, value);
92
+ if (token() === "}") {
93
+ next();
94
+ return { status: "complete", value };
95
+ }
96
+ if (token() === "")
97
+ return retain(issue("incomplete", "Input ended before '}'"), value);
98
+ if (token() !== ",")
99
+ return issue("invalid", "Expected ',' or '}' after the property value");
100
+ next();
101
+ }
102
+ }
103
+ function readArray() {
104
+ const value = [];
105
+ next();
106
+ if (token() === "]") {
107
+ next();
108
+ return { status: "complete", value };
109
+ }
110
+ while (true) {
111
+ const child = readValue();
112
+ if ("value" in child) value.push(child.value);
113
+ if (child.status !== "complete") return retain(child, value);
114
+ if (token() === "]") {
115
+ next();
116
+ return { status: "complete", value };
117
+ }
118
+ if (token() === "")
119
+ return retain(issue("incomplete", "Input ended before ']'"), value);
120
+ if (token() !== ",")
121
+ return issue("invalid", "Expected ',' or ']' after the array item");
122
+ next();
123
+ }
124
+ }
125
+ next();
126
+ const result = readValue();
127
+ if (result.status === "complete" && token() !== "")
128
+ return issue("invalid", "Unexpected content after the JSON value");
129
+ return result;
130
+ }
131
+ exports.parseJsonPrefix = parseJsonPrefix;
132
+ //# sourceMappingURL=parse-prefix.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-prefix.cjs","sources":["../../../src/data/json-view/parse-prefix.ts"],"sourcesContent":["import { createScanner } from \"jsonc-parser\";\n\nexport type PrefixResult =\n | { status: \"complete\"; value: unknown }\n | {\n status: \"incomplete\" | \"invalid\";\n message: string;\n offset: number;\n value?: unknown;\n };\n\nconst STRING_PREFIX =\n /^\"(?:[^\"\\\\]|\\\\[\"\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*(?:\\\\(?:u[\\da-fA-F]{0,3})?)?$/;\nconst NUMBER_PREFIX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d*)?$/;\nconst FRACTION_PREFIX = /^-?(?:0|[1-9]\\d*)\\.$/;\n\nfunction isScalarPrefix(raw: string): boolean {\n if (raw.startsWith('\"')) {\n for (const character of raw) {\n if (character.charCodeAt(0) < 0x20) return false;\n }\n return STRING_PREFIX.test(raw);\n }\n return (\n raw === \"-\" ||\n NUMBER_PREFIX.test(raw) ||\n FRACTION_PREFIX.test(raw) ||\n [\"true\", \"false\", \"null\"].some((literal) => literal.startsWith(raw))\n );\n}\n\nexport function parseJsonPrefix(source: string): PrefixResult {\n const scanner = createScanner(source);\n const token = () =>\n source.slice(\n scanner.getTokenOffset(),\n scanner.getTokenOffset() + scanner.getTokenLength(),\n );\n const issue = (\n status: \"incomplete\" | \"invalid\",\n message: string,\n ): PrefixResult => ({\n status,\n message,\n offset: scanner.getTokenOffset(),\n });\n function next() {\n do {\n scanner.scan();\n } while (/^[ \\t\\r\\n]+$/.test(token()));\n }\n function retain(\n result: PrefixResult,\n value: Record<string, unknown> | unknown[],\n ): PrefixResult {\n if (result.status !== \"incomplete\") return result;\n return { ...result, ...(Object.keys(value).length > 0 ? { value } : {}) };\n }\n function readScalar(): PrefixResult {\n const offset = scanner.getTokenOffset();\n const raw = source.slice(offset, offset + scanner.getTokenLength());\n let value: unknown;\n try {\n value = JSON.parse(raw);\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n return issue(\n offset + raw.length === source.length && isScalarPrefix(raw)\n ? \"incomplete\"\n : \"invalid\",\n \"Expected a complete JSON string, number, boolean, or null\",\n );\n }\n next();\n return { status: \"complete\", value };\n }\n function readValue(): PrefixResult {\n if (token() === \"\")\n return issue(\"incomplete\", \"Input ended before a JSON value\");\n if (token() === \"{\") return readObject();\n if (token() === \"[\") return readArray();\n return readScalar();\n }\n function readObject(): PrefixResult {\n const value: Record<string, unknown> = {};\n next();\n if (token() === \"}\") {\n next();\n return { status: \"complete\", value };\n }\n while (true) {\n if (token() === \"\")\n return retain(\n issue(\"incomplete\", \"Input ended before a property name or '}'\"),\n value,\n );\n if (!token().startsWith('\"'))\n return issue(\"invalid\", \"Expected a quoted property name\");\n const key = readScalar();\n if (key.status !== \"complete\") return retain(key, value);\n if (typeof key.value !== \"string\")\n throw new Error(\"JSON property scanner returned a non-string key\");\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before ':'\"), value);\n if (token() !== \":\")\n return issue(\"invalid\", \"Expected ':' after the property name\");\n next();\n const child = readValue();\n if (\"value\" in child)\n Object.defineProperty(value, key.value, {\n value: child.value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n if (child.status !== \"complete\") return retain(child, value);\n if (token() === \"}\") {\n next();\n return { status: \"complete\", value };\n }\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before '}'\"), value);\n if (token() !== \",\")\n return issue(\"invalid\", \"Expected ',' or '}' after the property value\");\n next();\n }\n }\n function readArray(): PrefixResult {\n const value: unknown[] = [];\n next();\n if (token() === \"]\") {\n next();\n return { status: \"complete\", value };\n }\n while (true) {\n const child = readValue();\n if (\"value\" in child) value.push(child.value);\n if (child.status !== \"complete\") return retain(child, value);\n if (token() === \"]\") {\n next();\n return { status: \"complete\", value };\n }\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before ']'\"), value);\n if (token() !== \",\")\n return issue(\"invalid\", \"Expected ',' or ']' after the array item\");\n next();\n }\n }\n next();\n const result = readValue();\n if (result.status === \"complete\" && token() !== \"\")\n return issue(\"invalid\", \"Unexpected content after the JSON value\");\n return result;\n}\n"],"names":["createScanner","result"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type PrefixResult = {
2
+ status: "complete";
3
+ value: unknown;
4
+ } | {
5
+ status: "incomplete" | "invalid";
6
+ message: string;
7
+ offset: number;
8
+ value?: unknown;
9
+ };
10
+ export declare function parseJsonPrefix(source: string): PrefixResult;
11
+ //# sourceMappingURL=parse-prefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-prefix.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/parse-prefix.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACtC;IACE,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAsBN,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA2H5D"}
@@ -0,0 +1,132 @@
1
+ import { createScanner } from "jsonc-parser";
2
+ const STRING_PREFIX = /^"(?:[^"\\]|\\["\\/bfnrt]|\\u[\da-fA-F]{4})*(?:\\(?:u[\da-fA-F]{0,3})?)?$/;
3
+ const NUMBER_PREFIX = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d*)?$/;
4
+ const FRACTION_PREFIX = /^-?(?:0|[1-9]\d*)\.$/;
5
+ function isScalarPrefix(raw) {
6
+ if (raw.startsWith('"')) {
7
+ for (const character of raw) {
8
+ if (character.charCodeAt(0) < 32) return false;
9
+ }
10
+ return STRING_PREFIX.test(raw);
11
+ }
12
+ return raw === "-" || NUMBER_PREFIX.test(raw) || FRACTION_PREFIX.test(raw) || ["true", "false", "null"].some((literal) => literal.startsWith(raw));
13
+ }
14
+ function parseJsonPrefix(source) {
15
+ const scanner = createScanner(source);
16
+ const token = () => source.slice(
17
+ scanner.getTokenOffset(),
18
+ scanner.getTokenOffset() + scanner.getTokenLength()
19
+ );
20
+ const issue = (status, message) => ({
21
+ status,
22
+ message,
23
+ offset: scanner.getTokenOffset()
24
+ });
25
+ function next() {
26
+ do {
27
+ scanner.scan();
28
+ } while (/^[ \t\r\n]+$/.test(token()));
29
+ }
30
+ function retain(result2, value) {
31
+ if (result2.status !== "incomplete") return result2;
32
+ return { ...result2, ...Object.keys(value).length > 0 ? { value } : {} };
33
+ }
34
+ function readScalar() {
35
+ const offset = scanner.getTokenOffset();
36
+ const raw = source.slice(offset, offset + scanner.getTokenLength());
37
+ let value;
38
+ try {
39
+ value = JSON.parse(raw);
40
+ } catch (error) {
41
+ if (!(error instanceof SyntaxError)) throw error;
42
+ return issue(
43
+ offset + raw.length === source.length && isScalarPrefix(raw) ? "incomplete" : "invalid",
44
+ "Expected a complete JSON string, number, boolean, or null"
45
+ );
46
+ }
47
+ next();
48
+ return { status: "complete", value };
49
+ }
50
+ function readValue() {
51
+ if (token() === "")
52
+ return issue("incomplete", "Input ended before a JSON value");
53
+ if (token() === "{") return readObject();
54
+ if (token() === "[") return readArray();
55
+ return readScalar();
56
+ }
57
+ function readObject() {
58
+ const value = {};
59
+ next();
60
+ if (token() === "}") {
61
+ next();
62
+ return { status: "complete", value };
63
+ }
64
+ while (true) {
65
+ if (token() === "")
66
+ return retain(
67
+ issue("incomplete", "Input ended before a property name or '}'"),
68
+ value
69
+ );
70
+ if (!token().startsWith('"'))
71
+ return issue("invalid", "Expected a quoted property name");
72
+ const key = readScalar();
73
+ if (key.status !== "complete") return retain(key, value);
74
+ if (typeof key.value !== "string")
75
+ throw new Error("JSON property scanner returned a non-string key");
76
+ if (token() === "")
77
+ return retain(issue("incomplete", "Input ended before ':'"), value);
78
+ if (token() !== ":")
79
+ return issue("invalid", "Expected ':' after the property name");
80
+ next();
81
+ const child = readValue();
82
+ if ("value" in child)
83
+ Object.defineProperty(value, key.value, {
84
+ value: child.value,
85
+ enumerable: true,
86
+ configurable: true,
87
+ writable: true
88
+ });
89
+ if (child.status !== "complete") return retain(child, value);
90
+ if (token() === "}") {
91
+ next();
92
+ return { status: "complete", value };
93
+ }
94
+ if (token() === "")
95
+ return retain(issue("incomplete", "Input ended before '}'"), value);
96
+ if (token() !== ",")
97
+ return issue("invalid", "Expected ',' or '}' after the property value");
98
+ next();
99
+ }
100
+ }
101
+ function readArray() {
102
+ const value = [];
103
+ next();
104
+ if (token() === "]") {
105
+ next();
106
+ return { status: "complete", value };
107
+ }
108
+ while (true) {
109
+ const child = readValue();
110
+ if ("value" in child) value.push(child.value);
111
+ if (child.status !== "complete") return retain(child, value);
112
+ if (token() === "]") {
113
+ next();
114
+ return { status: "complete", value };
115
+ }
116
+ if (token() === "")
117
+ return retain(issue("incomplete", "Input ended before ']'"), value);
118
+ if (token() !== ",")
119
+ return issue("invalid", "Expected ',' or ']' after the array item");
120
+ next();
121
+ }
122
+ }
123
+ next();
124
+ const result = readValue();
125
+ if (result.status === "complete" && token() !== "")
126
+ return issue("invalid", "Unexpected content after the JSON value");
127
+ return result;
128
+ }
129
+ export {
130
+ parseJsonPrefix
131
+ };
132
+ //# sourceMappingURL=parse-prefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-prefix.js","sources":["../../../src/data/json-view/parse-prefix.ts"],"sourcesContent":["import { createScanner } from \"jsonc-parser\";\n\nexport type PrefixResult =\n | { status: \"complete\"; value: unknown }\n | {\n status: \"incomplete\" | \"invalid\";\n message: string;\n offset: number;\n value?: unknown;\n };\n\nconst STRING_PREFIX =\n /^\"(?:[^\"\\\\]|\\\\[\"\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*(?:\\\\(?:u[\\da-fA-F]{0,3})?)?$/;\nconst NUMBER_PREFIX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d*)?$/;\nconst FRACTION_PREFIX = /^-?(?:0|[1-9]\\d*)\\.$/;\n\nfunction isScalarPrefix(raw: string): boolean {\n if (raw.startsWith('\"')) {\n for (const character of raw) {\n if (character.charCodeAt(0) < 0x20) return false;\n }\n return STRING_PREFIX.test(raw);\n }\n return (\n raw === \"-\" ||\n NUMBER_PREFIX.test(raw) ||\n FRACTION_PREFIX.test(raw) ||\n [\"true\", \"false\", \"null\"].some((literal) => literal.startsWith(raw))\n );\n}\n\nexport function parseJsonPrefix(source: string): PrefixResult {\n const scanner = createScanner(source);\n const token = () =>\n source.slice(\n scanner.getTokenOffset(),\n scanner.getTokenOffset() + scanner.getTokenLength(),\n );\n const issue = (\n status: \"incomplete\" | \"invalid\",\n message: string,\n ): PrefixResult => ({\n status,\n message,\n offset: scanner.getTokenOffset(),\n });\n function next() {\n do {\n scanner.scan();\n } while (/^[ \\t\\r\\n]+$/.test(token()));\n }\n function retain(\n result: PrefixResult,\n value: Record<string, unknown> | unknown[],\n ): PrefixResult {\n if (result.status !== \"incomplete\") return result;\n return { ...result, ...(Object.keys(value).length > 0 ? { value } : {}) };\n }\n function readScalar(): PrefixResult {\n const offset = scanner.getTokenOffset();\n const raw = source.slice(offset, offset + scanner.getTokenLength());\n let value: unknown;\n try {\n value = JSON.parse(raw);\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n return issue(\n offset + raw.length === source.length && isScalarPrefix(raw)\n ? \"incomplete\"\n : \"invalid\",\n \"Expected a complete JSON string, number, boolean, or null\",\n );\n }\n next();\n return { status: \"complete\", value };\n }\n function readValue(): PrefixResult {\n if (token() === \"\")\n return issue(\"incomplete\", \"Input ended before a JSON value\");\n if (token() === \"{\") return readObject();\n if (token() === \"[\") return readArray();\n return readScalar();\n }\n function readObject(): PrefixResult {\n const value: Record<string, unknown> = {};\n next();\n if (token() === \"}\") {\n next();\n return { status: \"complete\", value };\n }\n while (true) {\n if (token() === \"\")\n return retain(\n issue(\"incomplete\", \"Input ended before a property name or '}'\"),\n value,\n );\n if (!token().startsWith('\"'))\n return issue(\"invalid\", \"Expected a quoted property name\");\n const key = readScalar();\n if (key.status !== \"complete\") return retain(key, value);\n if (typeof key.value !== \"string\")\n throw new Error(\"JSON property scanner returned a non-string key\");\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before ':'\"), value);\n if (token() !== \":\")\n return issue(\"invalid\", \"Expected ':' after the property name\");\n next();\n const child = readValue();\n if (\"value\" in child)\n Object.defineProperty(value, key.value, {\n value: child.value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n if (child.status !== \"complete\") return retain(child, value);\n if (token() === \"}\") {\n next();\n return { status: \"complete\", value };\n }\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before '}'\"), value);\n if (token() !== \",\")\n return issue(\"invalid\", \"Expected ',' or '}' after the property value\");\n next();\n }\n }\n function readArray(): PrefixResult {\n const value: unknown[] = [];\n next();\n if (token() === \"]\") {\n next();\n return { status: \"complete\", value };\n }\n while (true) {\n const child = readValue();\n if (\"value\" in child) value.push(child.value);\n if (child.status !== \"complete\") return retain(child, value);\n if (token() === \"]\") {\n next();\n return { status: \"complete\", value };\n }\n if (token() === \"\")\n return retain(issue(\"incomplete\", \"Input ended before ']'\"), value);\n if (token() !== \",\")\n return issue(\"invalid\", \"Expected ',' or ']' after the array item\");\n next();\n }\n }\n next();\n const result = readValue();\n if (result.status === \"complete\" && token() !== \"\")\n return issue(\"invalid\", \"Unexpected content after the JSON value\");\n return result;\n}\n"],"names":["result"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const parsePrefix = require("./parse-prefix.cjs");
4
+ function parseJsonSource(source, inputFormat = "json") {
5
+ switch (inputFormat) {
6
+ case "json":
7
+ return parseDocument(source);
8
+ case "ndjson":
9
+ return parseRecords(source);
10
+ default:
11
+ throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);
12
+ }
13
+ }
14
+ function parseDocument(source) {
15
+ try {
16
+ return { status: "complete", value: JSON.parse(source) };
17
+ } catch (error) {
18
+ if (!(error instanceof SyntaxError)) throw error;
19
+ }
20
+ const result = parsePrefix.parseJsonPrefix(source);
21
+ if (result.status === "complete")
22
+ throw new Error(
23
+ "JSON prefix parser accepted a document rejected by JSON.parse"
24
+ );
25
+ const before = source.slice(0, result.offset).split(/\r\n|\r|\n/);
26
+ const last = before.at(-1);
27
+ if (last === void 0) throw new Error("JSON diagnostic has no source line");
28
+ return {
29
+ status: result.status,
30
+ ...result.status === "incomplete" && "value" in result ? { value: result.value } : {},
31
+ diagnostic: {
32
+ message: result.message,
33
+ line: before.length,
34
+ column: last.length + 1
35
+ }
36
+ };
37
+ }
38
+ function parseRecords(source) {
39
+ const lines = source.split(/\r\n|\n/);
40
+ const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);
41
+ const records = [];
42
+ for (const [index, line] of lines.entries()) {
43
+ if (line.trim().length === 0) continue;
44
+ const result = parseDocument(line);
45
+ if (result.status === "complete") {
46
+ records.push(result.value);
47
+ continue;
48
+ }
49
+ if (!result.diagnostic)
50
+ throw new Error("Invalid NDJSON record has no diagnostic");
51
+ const incomplete = result.status === "incomplete" && index === lastRecord;
52
+ return {
53
+ status: incomplete ? "incomplete" : "invalid",
54
+ ...records.length > 0 ? { value: records } : {},
55
+ diagnostic: { ...result.diagnostic, line: index + 1 },
56
+ ...incomplete && "value" in result ? { partialRecord: { line: index + 1, value: result.value } } : {}
57
+ };
58
+ }
59
+ return { status: "complete", value: records };
60
+ }
61
+ exports.parseJsonSource = parseJsonSource;
62
+ //# sourceMappingURL=parse-source.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.cjs","sources":["../../../src/data/json-view/parse-source.ts"],"sourcesContent":["import { parseJsonPrefix } from \"./parse-prefix\";\n\nexport type SourceDiagnostic = {\n message: string;\n line: number;\n column: number;\n};\nexport type JsonSourceResult = {\n status: \"complete\" | \"incomplete\" | \"invalid\";\n value?: unknown;\n diagnostic?: SourceDiagnostic;\n partialRecord?: { line: number; value: unknown };\n};\n\nexport function parseJsonSource(\n source: string,\n inputFormat: \"json\" | \"ndjson\" = \"json\",\n): JsonSourceResult {\n switch (inputFormat) {\n case \"json\":\n return parseDocument(source);\n case \"ndjson\":\n return parseRecords(source);\n default:\n throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);\n }\n}\n\nfunction parseDocument(source: string): JsonSourceResult {\n try {\n return { status: \"complete\", value: JSON.parse(source) };\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n }\n const result = parseJsonPrefix(source);\n if (result.status === \"complete\")\n throw new Error(\n \"JSON prefix parser accepted a document rejected by JSON.parse\",\n );\n const before = source.slice(0, result.offset).split(/\\r\\n|\\r|\\n/);\n const last = before.at(-1);\n if (last === undefined) throw new Error(\"JSON diagnostic has no source line\");\n return {\n status: result.status,\n ...(result.status === \"incomplete\" && \"value\" in result\n ? { value: result.value }\n : {}),\n diagnostic: {\n message: result.message,\n line: before.length,\n column: last.length + 1,\n },\n };\n}\n\nfunction parseRecords(source: string): JsonSourceResult {\n const lines = source.split(/\\r\\n|\\n/);\n const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);\n const records: unknown[] = [];\n for (const [index, line] of lines.entries()) {\n if (line.trim().length === 0) continue;\n const result = parseDocument(line);\n if (result.status === \"complete\") {\n records.push(result.value);\n continue;\n }\n if (!result.diagnostic)\n throw new Error(\"Invalid NDJSON record has no diagnostic\");\n const incomplete = result.status === \"incomplete\" && index === lastRecord;\n return {\n status: incomplete ? \"incomplete\" : \"invalid\",\n ...(records.length > 0 ? { value: records } : {}),\n diagnostic: { ...result.diagnostic, line: index + 1 },\n ...(incomplete && \"value\" in result\n ? { partialRecord: { line: index + 1, value: result.value } }\n : {}),\n };\n }\n return { status: \"complete\", value: records };\n}\n"],"names":["parseJsonPrefix"],"mappings":";;;AAcO,SAAS,gBACd,QACA,cAAiC,QACf;AAClB,UAAQ,aAAA;AAAA,IACN,KAAK;AACH,aAAO,cAAc,MAAM;AAAA,IAC7B,KAAK;AACH,aAAO,aAAa,MAAM;AAAA,IAC5B;AACE,YAAM,IAAI,MAAM,kCAAkC,OAAO,WAAW,CAAC,EAAE;AAAA,EAAA;AAE7E;AAEA,SAAS,cAAc,QAAkC;AACvD,MAAI;AACF,WAAO,EAAE,QAAQ,YAAY,OAAO,KAAK,MAAM,MAAM,EAAA;AAAA,EACvD,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,aAAc,OAAM;AAAA,EAC7C;AACA,QAAM,SAASA,YAAAA,gBAAgB,MAAM;AACrC,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAEJ,QAAM,SAAS,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,YAAY;AAChE,QAAM,OAAO,OAAO,GAAG,EAAE;AACzB,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,oCAAoC;AAC5E,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,GAAI,OAAO,WAAW,gBAAgB,WAAW,SAC7C,EAAE,OAAO,OAAO,MAAA,IAChB,CAAA;AAAA,IACJ,YAAY;AAAA,MACV,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,IAAA;AAAA,EACxB;AAEJ;AAEA,SAAS,aAAa,QAAkC;AACtD,QAAM,QAAQ,OAAO,MAAM,SAAS;AACpC,QAAM,aAAa,MAAM,cAAc,CAAC,SAAS,KAAK,KAAA,EAAO,SAAS,CAAC;AACvE,QAAM,UAAqB,CAAA;AAC3B,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,WAAW;AAC3C,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,OAAO,WAAW,YAAY;AAChC,cAAQ,KAAK,OAAO,KAAK;AACzB;AAAA,IACF;AACA,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,yCAAyC;AAC3D,UAAM,aAAa,OAAO,WAAW,gBAAgB,UAAU;AAC/D,WAAO;AAAA,MACL,QAAQ,aAAa,eAAe;AAAA,MACpC,GAAI,QAAQ,SAAS,IAAI,EAAE,OAAO,QAAA,IAAY,CAAA;AAAA,MAC9C,YAAY,EAAE,GAAG,OAAO,YAAY,MAAM,QAAQ,EAAA;AAAA,MAClD,GAAI,cAAc,WAAW,SACzB,EAAE,eAAe,EAAE,MAAM,QAAQ,GAAG,OAAO,OAAO,MAAA,EAAM,IACxD,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAO,EAAE,QAAQ,YAAY,OAAO,QAAA;AACtC;;"}
@@ -0,0 +1,16 @@
1
+ export type SourceDiagnostic = {
2
+ message: string;
3
+ line: number;
4
+ column: number;
5
+ };
6
+ export type JsonSourceResult = {
7
+ status: "complete" | "incomplete" | "invalid";
8
+ value?: unknown;
9
+ diagnostic?: SourceDiagnostic;
10
+ partialRecord?: {
11
+ line: number;
12
+ value: unknown;
13
+ };
14
+ };
15
+ export declare function parseJsonSource(source: string, inputFormat?: "json" | "ndjson"): JsonSourceResult;
16
+ //# sourceMappingURL=parse-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/parse-source.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAClD,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAM,GAAG,QAAiB,GACtC,gBAAgB,CASlB"}
@@ -0,0 +1,62 @@
1
+ import { parseJsonPrefix } from "./parse-prefix.js";
2
+ function parseJsonSource(source, inputFormat = "json") {
3
+ switch (inputFormat) {
4
+ case "json":
5
+ return parseDocument(source);
6
+ case "ndjson":
7
+ return parseRecords(source);
8
+ default:
9
+ throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);
10
+ }
11
+ }
12
+ function parseDocument(source) {
13
+ try {
14
+ return { status: "complete", value: JSON.parse(source) };
15
+ } catch (error) {
16
+ if (!(error instanceof SyntaxError)) throw error;
17
+ }
18
+ const result = parseJsonPrefix(source);
19
+ if (result.status === "complete")
20
+ throw new Error(
21
+ "JSON prefix parser accepted a document rejected by JSON.parse"
22
+ );
23
+ const before = source.slice(0, result.offset).split(/\r\n|\r|\n/);
24
+ const last = before.at(-1);
25
+ if (last === void 0) throw new Error("JSON diagnostic has no source line");
26
+ return {
27
+ status: result.status,
28
+ ...result.status === "incomplete" && "value" in result ? { value: result.value } : {},
29
+ diagnostic: {
30
+ message: result.message,
31
+ line: before.length,
32
+ column: last.length + 1
33
+ }
34
+ };
35
+ }
36
+ function parseRecords(source) {
37
+ const lines = source.split(/\r\n|\n/);
38
+ const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);
39
+ const records = [];
40
+ for (const [index, line] of lines.entries()) {
41
+ if (line.trim().length === 0) continue;
42
+ const result = parseDocument(line);
43
+ if (result.status === "complete") {
44
+ records.push(result.value);
45
+ continue;
46
+ }
47
+ if (!result.diagnostic)
48
+ throw new Error("Invalid NDJSON record has no diagnostic");
49
+ const incomplete = result.status === "incomplete" && index === lastRecord;
50
+ return {
51
+ status: incomplete ? "incomplete" : "invalid",
52
+ ...records.length > 0 ? { value: records } : {},
53
+ diagnostic: { ...result.diagnostic, line: index + 1 },
54
+ ...incomplete && "value" in result ? { partialRecord: { line: index + 1, value: result.value } } : {}
55
+ };
56
+ }
57
+ return { status: "complete", value: records };
58
+ }
59
+ export {
60
+ parseJsonSource
61
+ };
62
+ //# sourceMappingURL=parse-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.js","sources":["../../../src/data/json-view/parse-source.ts"],"sourcesContent":["import { parseJsonPrefix } from \"./parse-prefix\";\n\nexport type SourceDiagnostic = {\n message: string;\n line: number;\n column: number;\n};\nexport type JsonSourceResult = {\n status: \"complete\" | \"incomplete\" | \"invalid\";\n value?: unknown;\n diagnostic?: SourceDiagnostic;\n partialRecord?: { line: number; value: unknown };\n};\n\nexport function parseJsonSource(\n source: string,\n inputFormat: \"json\" | \"ndjson\" = \"json\",\n): JsonSourceResult {\n switch (inputFormat) {\n case \"json\":\n return parseDocument(source);\n case \"ndjson\":\n return parseRecords(source);\n default:\n throw new Error(`Unsupported JSON input format: ${String(inputFormat)}`);\n }\n}\n\nfunction parseDocument(source: string): JsonSourceResult {\n try {\n return { status: \"complete\", value: JSON.parse(source) };\n } catch (error) {\n if (!(error instanceof SyntaxError)) throw error;\n }\n const result = parseJsonPrefix(source);\n if (result.status === \"complete\")\n throw new Error(\n \"JSON prefix parser accepted a document rejected by JSON.parse\",\n );\n const before = source.slice(0, result.offset).split(/\\r\\n|\\r|\\n/);\n const last = before.at(-1);\n if (last === undefined) throw new Error(\"JSON diagnostic has no source line\");\n return {\n status: result.status,\n ...(result.status === \"incomplete\" && \"value\" in result\n ? { value: result.value }\n : {}),\n diagnostic: {\n message: result.message,\n line: before.length,\n column: last.length + 1,\n },\n };\n}\n\nfunction parseRecords(source: string): JsonSourceResult {\n const lines = source.split(/\\r\\n|\\n/);\n const lastRecord = lines.findLastIndex((line) => line.trim().length > 0);\n const records: unknown[] = [];\n for (const [index, line] of lines.entries()) {\n if (line.trim().length === 0) continue;\n const result = parseDocument(line);\n if (result.status === \"complete\") {\n records.push(result.value);\n continue;\n }\n if (!result.diagnostic)\n throw new Error(\"Invalid NDJSON record has no diagnostic\");\n const incomplete = result.status === \"incomplete\" && index === lastRecord;\n return {\n status: incomplete ? \"incomplete\" : \"invalid\",\n ...(records.length > 0 ? { value: records } : {}),\n diagnostic: { ...result.diagnostic, line: index + 1 },\n ...(incomplete && \"value\" in result\n ? { partialRecord: { line: index + 1, value: result.value } }\n : {}),\n };\n }\n return { status: \"complete\", value: records };\n}\n"],"names":[],"mappings":";AAcO,SAAS,gBACd,QACA,cAAiC,QACf;AAClB,UAAQ,aAAA;AAAA,IACN,KAAK;AACH,aAAO,cAAc,MAAM;AAAA,IAC7B,KAAK;AACH,aAAO,aAAa,MAAM;AAAA,IAC5B;AACE,YAAM,IAAI,MAAM,kCAAkC,OAAO,WAAW,CAAC,EAAE;AAAA,EAAA;AAE7E;AAEA,SAAS,cAAc,QAAkC;AACvD,MAAI;AACF,WAAO,EAAE,QAAQ,YAAY,OAAO,KAAK,MAAM,MAAM,EAAA;AAAA,EACvD,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,aAAc,OAAM;AAAA,EAC7C;AACA,QAAM,SAAS,gBAAgB,MAAM;AACrC,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAEJ,QAAM,SAAS,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,MAAM,YAAY;AAChE,QAAM,OAAO,OAAO,GAAG,EAAE;AACzB,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,oCAAoC;AAC5E,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,GAAI,OAAO,WAAW,gBAAgB,WAAW,SAC7C,EAAE,OAAO,OAAO,MAAA,IAChB,CAAA;AAAA,IACJ,YAAY;AAAA,MACV,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,QAAQ,KAAK,SAAS;AAAA,IAAA;AAAA,EACxB;AAEJ;AAEA,SAAS,aAAa,QAAkC;AACtD,QAAM,QAAQ,OAAO,MAAM,SAAS;AACpC,QAAM,aAAa,MAAM,cAAc,CAAC,SAAS,KAAK,KAAA,EAAO,SAAS,CAAC;AACvE,QAAM,UAAqB,CAAA;AAC3B,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,WAAW;AAC3C,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,OAAO,WAAW,YAAY;AAChC,cAAQ,KAAK,OAAO,KAAK;AACzB;AAAA,IACF;AACA,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,yCAAyC;AAC3D,UAAM,aAAa,OAAO,WAAW,gBAAgB,UAAU;AAC/D,WAAO;AAAA,MACL,QAAQ,aAAa,eAAe;AAAA,MACpC,GAAI,QAAQ,SAAS,IAAI,EAAE,OAAO,QAAA,IAAY,CAAA;AAAA,MAC9C,YAAY,EAAE,GAAG,OAAO,YAAY,MAAM,QAAQ,EAAA;AAAA,MAClD,GAAI,cAAc,WAAW,SACzB,EAAE,eAAe,EAAE,MAAM,QAAQ,GAAG,OAAO,OAAO,MAAA,EAAM,IACxD,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAO,EAAE,QAAQ,YAAY,OAAO,QAAA;AACtC;"}
@@ -0,0 +1,6 @@
1
+ export declare const largeJsonSource: string;
2
+ export declare const truncatedObjectSource = "{\n \"requestId\": \"run-0042\",\n \"service\": {\n \"name\": \"api\",\n \"metrics\": { \"ready\": true, \"requests\": 128, \"latencyMs\":";
3
+ export declare const truncatedArraySource = "{\n \"service\": \"api\",\n \"ports\": [8080, 9090, { \"name\": \"metrics\", \"port\":";
4
+ export declare const truncatedStringSource = "{\n \"service\": \"worker\",\n \"enabled\": true,\n \"message\": \"The worker was processing a record when";
5
+ export declare const ndjsonSource: string;
6
+ //# sourceMappingURL=story-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-fixtures.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/story-fixtures.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,QAwB1B,CAAC;AAEH,eAAO,MAAM,qBAAqB,uJACkG,CAAC;AACrI,eAAO,MAAM,oBAAoB,6FAC+C,CAAC;AACjF,eAAO,MAAM,qBAAqB,kHACsE,CAAC;AAEzG,eAAO,MAAM,YAAY,QAIb,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Density } from '../../hooks/use-density.js';
2
+ export type JsonViewOptions = {
3
+ /** Property name displayed before the value. */
4
+ name?: string;
5
+ /** Current nesting depth; callers usually leave this unset. */
6
+ depth?: number;
7
+ /** Depth that starts expanded by default. */
8
+ defaultOpenDepth?: number;
9
+ /** YAML is the default; JSON retains braces and quoted strings. */
10
+ format?: "yaml" | "json";
11
+ /** Override the inherited application density for this viewer. */
12
+ density?: Density;
13
+ };
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -8,7 +8,6 @@ const RuntimeBar_model = require("./RuntimeBar.model.cjs");
8
8
  const RuntimeBarLayout = require("./RuntimeBarLayout.cjs");
9
9
  const RuntimeBar_fields = require("./RuntimeBar.fields.cjs");
10
10
  const RuntimeBar_selection = require("./RuntimeBar.selection.cjs");
11
- const RuntimeBar_context = require("./RuntimeBar.context.cjs");
12
11
  const availability = require("./availability.cjs");
13
12
  const modelCapabilities = require("./model-capabilities.cjs");
14
13
  const runtimeMode = require("./runtime-mode.cjs");
@@ -16,7 +15,6 @@ const runtimeFamily = require("../../lib/runtime-family.cjs");
16
15
  function RuntimeBar({
17
16
  value,
18
17
  onChange,
19
- variant = "segmented",
20
18
  models = [],
21
19
  families = runtimeMode.SPEC_RUNTIME_FAMILIES,
22
20
  effectiveMode,
@@ -121,7 +119,7 @@ function RuntimeBar({
121
119
  })
122
120
  ] : []
123
121
  ];
124
- return /* @__PURE__ */ jsxRuntime.jsx(RuntimeBar_context.RuntimeBarVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
122
+ return /* @__PURE__ */ jsxRuntime.jsx(
125
123
  RuntimeBarLayout.RuntimeBarLayout,
126
124
  {
127
125
  ariaLabel,
@@ -138,7 +136,6 @@ function RuntimeBar({
138
136
  inheritedModelLabel,
139
137
  locked,
140
138
  showModel,
141
- variant,
142
139
  onModeChange: (modeId) => applyMode(family.id, modeId),
143
140
  onCustomModel: applyCustomModel,
144
141
  onModelSelect: applyModel,
@@ -149,7 +146,7 @@ function RuntimeBar({
149
146
  }
150
147
  }
151
148
  }
152
- ) });
149
+ );
153
150
  }
154
151
  function withoutCatalogModel(value) {
155
152
  return withOptionalRuntimeValue(
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarLayout } from \"./RuntimeBarLayout\";\nimport type { RuntimeBarActionsProps } from \"./RuntimeBarActions\";\nimport { timeoutField, budgetField, effortField } from \"./RuntimeBar.fields\";\nimport {\n modelGroupsForMode,\n runtimeModes,\n withRuntimeMode,\n} from \"./RuntimeBar.selection\";\nimport { RuntimeBarVariantContext } from \"./RuntimeBar.context\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** Fused field triggers or individually bordered controls. */\n variant?: \"combo\" | \"segmented\";\n /** Model catalog grouped by family and filtered by the selected mode. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?:\n | Pick<RuntimeBarActionsProps, \"fields\" | \"menu\" | \"menuLabel\">\n | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Self-describing runtime controls with segmented and combo presentations. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n variant = \"segmented\",\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily =\n preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.id || value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const modes = runtimeModes(families);\n const mode = modes.find((entry) => entry.id === selection.mode);\n if (!mode)\n throw new Error(\n `No available runtime mode for ${JSON.stringify(selection.mode)}`,\n );\n const groups = modelGroupsForMode({ models, families, mode: mode.id });\n const resolvedModel = runtimeModelForValue(\n groups.flatMap((group) => group.models),\n value,\n );\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = withRuntimeMode({\n value,\n models,\n families,\n mode: modeId,\n reasoningEfforts,\n });\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n const fields = [\n ...(showEffort && supportedEfforts.length > 0\n ? [\n effortField({\n value: value.effort,\n offered: reasoningEfforts,\n supported: supportedEfforts,\n onChange: applyEffort,\n }),\n ]\n : []),\n ...(actions?.fields ?? []),\n ...(showCost\n ? [\n budgetField({\n value: value.budget?.cost,\n onChange: (cost) => onChange(withBudgetLimit(value, \"cost\", cost)),\n }),\n ]\n : []),\n ...(showTimeout\n ? [\n timeoutField({\n value: value.budget?.timeout,\n onChange: (timeout) =>\n onChange(withBudgetLimit(value, \"timeout\", timeout)),\n }),\n ]\n : []),\n ];\n return (\n <RuntimeBarVariantContext.Provider value={variant}>\n <RuntimeBarLayout\n ariaLabel={ariaLabel}\n className={className}\n actions={{ ...actions, fields }}\n identity={{\n family,\n mode,\n modes,\n groups,\n selectedModel: resolvedModel,\n model: value.model,\n unavailable: selectedModelUnavailable,\n inheritedModelLabel,\n locked,\n showModel,\n variant,\n onModeChange: (modeId) => applyMode(family.id, modeId),\n onCustomModel: applyCustomModel,\n onModelSelect: applyModel,\n onModelClear: clearModel,\n onFamilySelect: (familyId) => {\n setPreference({ model: effectiveModel, family: familyId });\n onChange(withoutCatalogModel(value));\n },\n }}\n />\n </RuntimeBarVariantContext.Provider>\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","useState","runtimeModeFromModel","selectionForRuntime","familyById","runtimeModes","modelGroupsForMode","runtimeModelForValue","isSelectableModel","effortOptionsForModel","withRuntimeMode","reconcileModelCapabilities","effortField","budgetField","withBudgetLimit","timeoutField","jsx","RuntimeBarVariantContext","RuntimeBarLayout"],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeBar.cjs","sources":["../../../src/data/runtime/RuntimeBar.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { DEFAULT_REASONING_EFFORTS } from \"../chat/effort-icons\";\nimport type { ChatModel, ChatModelRuntime } from \"../chat/types\";\nimport { withBudgetLimit, type RuntimeBarBudget } from \"./RuntimeBar.limits\";\nimport { runtimeModelForValue } from \"./RuntimeBar.model\";\nimport { RuntimeBarLayout } from \"./RuntimeBarLayout\";\nimport type { RuntimeBarActionsProps } from \"./RuntimeBarActions\";\nimport { timeoutField, budgetField, effortField } from \"./RuntimeBar.fields\";\nimport {\n modelGroupsForMode,\n runtimeModes,\n withRuntimeMode,\n} from \"./RuntimeBar.selection\";\nimport { isSelectableModel } from \"./availability\";\nimport {\n effortOptionsForModel,\n reconcileModelCapabilities,\n} from \"./model-capabilities\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n familyById,\n selectionForRuntime,\n runtimeModeFromModel,\n type SpecRuntimeFamily,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarValue = ChatModelRuntime & {\n cliArgs?: Record<string, unknown>;\n /** Run limits edited by the opt-in timeout and max cost controls. */\n budget?: RuntimeBarBudget;\n};\n\nexport type RuntimeBarProps<T extends RuntimeBarValue = RuntimeBarValue> = {\n value: T;\n onChange: (value: T) => void;\n /** Model catalog grouped by family and filtered by the selected mode. */\n models?: ChatModel[] | undefined;\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode shown when the editable value inherits it from another layer. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family without persisting it. */\n effectiveModel?: string | undefined;\n /** Effort tiers offered when the catalog does not describe the model. */\n reasoningEfforts?: string[] | undefined;\n /** Locks model identity (family, mode, and model) while leaving effort editable. */\n locked?: boolean | undefined;\n /** Whether the selected runtime exposes a model argument. */\n showModel?: boolean | undefined;\n /** Whether the selected runtime exposes reasoning effort. */\n showEffort?: boolean | undefined;\n /** Opt-in control for `budget.timeout`. */\n showTimeout?: boolean | undefined;\n /** Opt-in control for `budget.cost`. */\n showCost?: boolean | undefined;\n /** Host-level settings belonging to the surrounding spec rather than this runtime row. */\n actions?:\n | Pick<RuntimeBarActionsProps, \"fields\" | \"menu\" | \"menuLabel\">\n | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n};\n\n/** Mode-first runtime controls with settings that adapt to the container width. */\nexport function RuntimeBar<T extends RuntimeBarValue>({\n value,\n onChange,\n models = [],\n families = SPEC_RUNTIME_FAMILIES,\n effectiveMode,\n effectiveModel,\n reasoningEfforts = DEFAULT_REASONING_EFFORTS,\n locked = false,\n showModel = true,\n showEffort = true,\n showTimeout = false,\n showCost = false,\n actions,\n ariaLabel = \"Runtime\",\n className,\n}: RuntimeBarProps<T>) {\n const [preference, setPreference] = useState<{\n model: string | undefined;\n family: string | undefined;\n }>({ model: effectiveModel, family: undefined });\n if (preference.model !== effectiveModel) {\n setPreference({ model: effectiveModel, family: undefined });\n }\n const preferredFamily =\n preference.model === effectiveModel ? preference.family : undefined;\n const specMode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode?.trim();\n const selection = selectionForRuntime(\n families,\n specMode,\n value.id || value.model || (preferredFamily ? undefined : effectiveModel),\n models,\n preferredFamily,\n );\n const family = familyById(families, selection.family);\n const modes = runtimeModes(families);\n const mode = modes.find((entry) => entry.id === selection.mode);\n if (!mode)\n throw new Error(\n `No available runtime mode for ${JSON.stringify(selection.mode)}`,\n );\n const groups = modelGroupsForMode({ models, families, mode: mode.id });\n const resolvedModel = runtimeModelForValue(\n groups.flatMap((group) => group.models),\n value,\n );\n const selectedModelUnavailable = Boolean(\n !resolvedModel &&\n (value.id || value.model) &&\n runtimeModelForValue(models, value, (entry) => !isSelectableModel(entry)),\n );\n const supportedEfforts = effortOptionsForModel(\n resolvedModel,\n reasoningEfforts,\n );\n // The name an Unspecified model would resolve to, so the picker can say what\n // it inherits instead of leaving the operator guessing.\n const inheritedModelLabel =\n value.model || value.id\n ? undefined\n : (runtimeModelForValue(\n models,\n effectiveModel !== undefined ? { model: effectiveModel } : {},\n isSelectableModel,\n )?.label ?? effectiveModel);\n\n const applyMode = (familyId: string, modeId: string) => {\n setPreference({ model: effectiveModel, family: familyId });\n const next = withRuntimeMode({\n value,\n models,\n families,\n mode: modeId,\n reasoningEfforts,\n });\n if (next !== value) onChange(next);\n };\n\n const applyCustomModel = (model: string) => {\n onChange(\n withOptionalRuntimeValue(withoutCatalogModel(value), \"model\", model),\n );\n };\n // A family's model catalog can serve several modes. Selecting a row must not\n // silently move the user away from the mode they chose.\n const applyModel = (model: ChatModel) => {\n const next = reconcileModelCapabilities(\n withoutCatalogModel(value),\n model,\n reasoningEfforts,\n { mode: mode.id },\n );\n onChange(next);\n };\n const clearModel = () => {\n onChange(withoutCatalogModel(value));\n };\n const applyEffort = (effort: string) =>\n onChange(withOptionalRuntimeValue(value, \"effort\", effort));\n\n const fields = [\n ...(showEffort && supportedEfforts.length > 0\n ? [\n effortField({\n value: value.effort,\n offered: reasoningEfforts,\n supported: supportedEfforts,\n onChange: applyEffort,\n }),\n ]\n : []),\n ...(actions?.fields ?? []),\n ...(showCost\n ? [\n budgetField({\n value: value.budget?.cost,\n onChange: (cost) => onChange(withBudgetLimit(value, \"cost\", cost)),\n }),\n ]\n : []),\n ...(showTimeout\n ? [\n timeoutField({\n value: value.budget?.timeout,\n onChange: (timeout) =>\n onChange(withBudgetLimit(value, \"timeout\", timeout)),\n }),\n ]\n : []),\n ];\n return (\n <RuntimeBarLayout\n ariaLabel={ariaLabel}\n className={className}\n actions={{ ...actions, fields }}\n identity={{\n family,\n mode,\n modes,\n groups,\n selectedModel: resolvedModel,\n model: value.model,\n unavailable: selectedModelUnavailable,\n inheritedModelLabel,\n locked,\n showModel,\n onModeChange: (modeId) => applyMode(family.id, modeId),\n onCustomModel: applyCustomModel,\n onModelSelect: applyModel,\n onModelClear: clearModel,\n onFamilySelect: (familyId) => {\n setPreference({ model: effectiveModel, family: familyId });\n onChange(withoutCatalogModel(value));\n },\n }}\n />\n );\n}\n\nfunction withoutCatalogModel<T extends RuntimeBarValue>(value: T): T {\n return withOptionalRuntimeValue(\n withOptionalRuntimeValue(value, \"model\", undefined),\n \"id\",\n undefined,\n );\n}\n\nfunction withOptionalRuntimeValue<T extends RuntimeBarValue>(\n value: T,\n key: keyof RuntimeBarValue,\n next: unknown,\n): T {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as T;\n}\n"],"names":["SPEC_RUNTIME_FAMILIES","DEFAULT_REASONING_EFFORTS","useState","runtimeModeFromModel","selectionForRuntime","familyById","runtimeModes","modelGroupsForMode","runtimeModelForValue","isSelectableModel","effortOptionsForModel","withRuntimeMode","reconcileModelCapabilities","effortField","budgetField","withBudgetLimit","timeoutField","jsx","RuntimeBarLayout"],"mappings":"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"}