@flanksource/clicky-ui 0.3.43 → 0.3.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/README.md +2 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/CodeBlock.cjs +3 -2
  16. package/dist/data/CodeBlock.cjs.map +1 -1
  17. package/dist/data/CodeBlock.d.ts +3 -1
  18. package/dist/data/CodeBlock.d.ts.map +1 -1
  19. package/dist/data/CodeBlock.js +3 -2
  20. package/dist/data/CodeBlock.js.map +1 -1
  21. package/dist/data/CodeLine.cjs +22 -0
  22. package/dist/data/CodeLine.cjs.map +1 -0
  23. package/dist/data/CodeLine.d.ts +8 -0
  24. package/dist/data/CodeLine.d.ts.map +1 -0
  25. package/dist/data/CodeLine.js +22 -0
  26. package/dist/data/CodeLine.js.map +1 -0
  27. package/dist/data/GraphDiagram.cjs +18 -6
  28. package/dist/data/GraphDiagram.cjs.map +1 -1
  29. package/dist/data/GraphDiagram.d.ts +9 -1
  30. package/dist/data/GraphDiagram.d.ts.map +1 -1
  31. package/dist/data/GraphDiagram.js +18 -6
  32. package/dist/data/GraphDiagram.js.map +1 -1
  33. package/dist/data/GraphDiagramNodes.cjs +38 -29
  34. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  35. package/dist/data/GraphDiagramNodes.d.ts +8 -2
  36. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  37. package/dist/data/GraphDiagramNodes.js +38 -29
  38. package/dist/data/GraphDiagramNodes.js.map +1 -1
  39. package/dist/data/JsonView.cjs +118 -49
  40. package/dist/data/JsonView.cjs.map +1 -1
  41. package/dist/data/JsonView.d.ts +13 -10
  42. package/dist/data/JsonView.d.ts.map +1 -1
  43. package/dist/data/JsonView.js +118 -49
  44. package/dist/data/JsonView.js.map +1 -1
  45. package/dist/data/MarkdownEditor.cjs +2 -2
  46. package/dist/data/MarkdownEditor.cjs.map +1 -1
  47. package/dist/data/MarkdownEditor.js +2 -2
  48. package/dist/data/MarkdownEditor.js.map +1 -1
  49. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  50. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  51. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  52. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  53. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  54. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  55. package/dist/data/ai/ChatButton.cjs +2 -0
  56. package/dist/data/ai/ChatButton.cjs.map +1 -1
  57. package/dist/data/ai/ChatButton.d.ts +1 -1
  58. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  59. package/dist/data/ai/ChatButton.js +2 -0
  60. package/dist/data/ai/ChatButton.js.map +1 -1
  61. package/dist/data/ai/ChatFab.cjs +5 -1
  62. package/dist/data/ai/ChatFab.cjs.map +1 -1
  63. package/dist/data/ai/ChatFab.d.ts +5 -1
  64. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  65. package/dist/data/ai/ChatFab.js +5 -1
  66. package/dist/data/ai/ChatFab.js.map +1 -1
  67. package/dist/data/ai/ChatWindow.cjs +2 -8
  68. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  69. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  70. package/dist/data/ai/ChatWindow.js +2 -8
  71. package/dist/data/ai/ChatWindow.js.map +1 -1
  72. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  73. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  74. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  75. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  76. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  77. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  78. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  79. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  80. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  81. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  82. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  83. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  84. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  85. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  86. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  87. package/dist/data/ai/SessionViewer.cjs +13 -4
  88. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  89. package/dist/data/ai/SessionViewer.d.ts +5 -1
  90. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  91. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  92. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.header.js +1 -1
  94. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  95. package/dist/data/ai/SessionViewer.js +13 -4
  96. package/dist/data/ai/SessionViewer.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  98. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  100. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  101. package/dist/data/ai/SessionViewer.model.js +2 -0
  102. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  103. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  104. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  105. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  106. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  107. package/dist/data/ai/SessionViewer.rows.js +41 -27
  108. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  109. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  110. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  111. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  112. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  113. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  114. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  115. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  116. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  117. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  118. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  119. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  120. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  121. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  122. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  123. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  125. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  127. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  128. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  129. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  130. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  131. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  132. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  133. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  134. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  135. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  136. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  137. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  138. package/dist/data/ai/SessionViewerMenu.js +18 -1
  139. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  140. package/dist/data/ai/ToolPreferences.cjs +149 -143
  141. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  142. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  143. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  144. package/dist/data/ai/ToolPreferences.js +151 -146
  145. package/dist/data/ai/ToolPreferences.js.map +1 -1
  146. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  147. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  148. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  149. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  150. package/dist/data/ai/ToolPreferences.model.js +15 -11
  151. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  152. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  153. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  154. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  155. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  156. package/dist/data/ai/ToolPreferencesList.js +2 -1
  157. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  158. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  159. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  160. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  161. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  162. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  163. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  164. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  165. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  166. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  167. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  168. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  169. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  170. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  171. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  172. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  173. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  174. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  175. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  176. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  177. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  178. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  179. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  180. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  181. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  182. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  183. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  184. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  185. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  186. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  187. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  188. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  189. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  190. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  191. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  192. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  193. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  194. package/dist/data/ai/index.d.ts +2 -2
  195. package/dist/data/ai/index.d.ts.map +1 -1
  196. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  197. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  198. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  199. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  200. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  201. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  202. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  203. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  204. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  205. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  206. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  207. package/dist/data/ai/use-session-token-sizing.js +73 -0
  208. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  209. package/dist/data/call-graph/CallGraph.cjs +250 -0
  210. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  211. package/dist/data/call-graph/CallGraph.d.ts +69 -0
  212. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  213. package/dist/data/call-graph/CallGraph.js +250 -0
  214. package/dist/data/call-graph/CallGraph.js.map +1 -0
  215. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  216. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  217. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  218. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  219. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  220. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  221. package/dist/data/call-graph/CallGraphMembers.cjs +50 -0
  222. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  223. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  224. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  225. package/dist/data/call-graph/CallGraphMembers.js +50 -0
  226. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  227. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  228. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  229. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  230. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  231. package/dist/data/call-graph/CallGraphParts.js +204 -0
  232. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  233. package/dist/data/call-graph/CallGraphToolbar.cjs +186 -0
  234. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  235. package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
  236. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  237. package/dist/data/call-graph/CallGraphToolbar.js +186 -0
  238. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  239. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  240. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  241. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  242. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  243. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  244. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  245. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  246. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  247. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  248. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  249. package/dist/data/call-graph/call-graph-labels.js +96 -0
  250. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  251. package/dist/data/call-graph/call-graph-model.cjs +161 -0
  252. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  253. package/dist/data/call-graph/call-graph-model.d.ts +102 -0
  254. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  255. package/dist/data/call-graph/call-graph-model.js +161 -0
  256. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  257. package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
  258. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  259. package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
  260. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  261. package/dist/data/call-graph/call-graph-vocabulary.js +177 -0
  262. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  263. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  264. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  265. package/dist/data/call-graph/index.d.ts +7 -0
  266. package/dist/data/call-graph/index.d.ts.map +1 -0
  267. package/dist/data/call-graph/types.cjs +5 -0
  268. package/dist/data/call-graph/types.cjs.map +1 -0
  269. package/dist/data/call-graph/types.d.ts +135 -0
  270. package/dist/data/call-graph/types.d.ts.map +1 -0
  271. package/dist/data/call-graph/types.js +5 -0
  272. package/dist/data/call-graph/types.js.map +1 -0
  273. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  274. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  275. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  276. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  277. package/dist/data/call-graph/use-call-graph.js +93 -0
  278. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  279. package/dist/data/chat/Chat.cjs +39 -15
  280. package/dist/data/chat/Chat.cjs.map +1 -1
  281. package/dist/data/chat/Chat.d.ts.map +1 -1
  282. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  283. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  284. package/dist/data/chat/Chat.fixtures.js +2 -2
  285. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  286. package/dist/data/chat/Chat.js +40 -16
  287. package/dist/data/chat/Chat.js.map +1 -1
  288. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  289. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  290. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  291. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  292. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  293. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  294. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  295. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  296. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  297. package/dist/data/chat/ContextMeter.bar.js +5 -8
  298. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  299. package/dist/data/chat/ContextMeter.cjs +18 -19
  300. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  301. package/dist/data/chat/ContextMeter.d.ts +1 -1
  302. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  303. package/dist/data/chat/ContextMeter.js +18 -19
  304. package/dist/data/chat/ContextMeter.js.map +1 -1
  305. package/dist/data/chat/Conversation.cjs +2 -1
  306. package/dist/data/chat/Conversation.cjs.map +1 -1
  307. package/dist/data/chat/Conversation.d.ts +4 -1
  308. package/dist/data/chat/Conversation.d.ts.map +1 -1
  309. package/dist/data/chat/Conversation.js +2 -1
  310. package/dist/data/chat/Conversation.js.map +1 -1
  311. package/dist/data/chat/Message.cjs +39 -12
  312. package/dist/data/chat/Message.cjs.map +1 -1
  313. package/dist/data/chat/Message.d.ts +1 -1
  314. package/dist/data/chat/Message.d.ts.map +1 -1
  315. package/dist/data/chat/Message.js +40 -13
  316. package/dist/data/chat/Message.js.map +1 -1
  317. package/dist/data/chat/ToolCall.cjs +60 -5
  318. package/dist/data/chat/ToolCall.cjs.map +1 -1
  319. package/dist/data/chat/ToolCall.d.ts +7 -2
  320. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  321. package/dist/data/chat/ToolCall.js +60 -5
  322. package/dist/data/chat/ToolCall.js.map +1 -1
  323. package/dist/data/chat/approval.cjs.map +1 -1
  324. package/dist/data/chat/approval.d.ts +2 -2
  325. package/dist/data/chat/approval.d.ts.map +1 -1
  326. package/dist/data/chat/approval.js.map +1 -1
  327. package/dist/data/chat/tool-policy.cjs +59 -2
  328. package/dist/data/chat/tool-policy.cjs.map +1 -1
  329. package/dist/data/chat/tool-policy.d.ts +9 -0
  330. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  331. package/dist/data/chat/tool-policy.js +59 -2
  332. package/dist/data/chat/tool-policy.js.map +1 -1
  333. package/dist/data/chat/types.cjs +6 -0
  334. package/dist/data/chat/types.cjs.map +1 -1
  335. package/dist/data/chat/types.d.ts +13 -4
  336. package/dist/data/chat/types.d.ts.map +1 -1
  337. package/dist/data/chat/types.js +7 -1
  338. package/dist/data/chat/types.js.map +1 -1
  339. package/dist/data/chat/usage-snapshot.cjs +11 -6
  340. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  341. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  342. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  343. package/dist/data/chat/usage-snapshot.js +11 -6
  344. package/dist/data/chat/usage-snapshot.js.map +1 -1
  345. package/dist/data/diagnostics/RenderedStackTrace.cjs +2 -1
  346. package/dist/data/diagnostics/RenderedStackTrace.cjs.map +1 -1
  347. package/dist/data/diagnostics/RenderedStackTrace.d.ts +3 -1
  348. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -1
  349. package/dist/data/diagnostics/RenderedStackTrace.js +2 -1
  350. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -1
  351. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  352. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  353. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  354. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  355. package/dist/data/graph-columns-layout.cjs +26 -10
  356. package/dist/data/graph-columns-layout.cjs.map +1 -1
  357. package/dist/data/graph-columns-layout.d.ts +8 -0
  358. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  359. package/dist/data/graph-columns-layout.js +26 -10
  360. package/dist/data/graph-columns-layout.js.map +1 -1
  361. package/dist/data/graph-diagram-model.cjs.map +1 -1
  362. package/dist/data/graph-diagram-model.d.ts +5 -0
  363. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  364. package/dist/data/graph-diagram-model.js.map +1 -1
  365. package/dist/data/graph-edge-routing.cjs +9 -3
  366. package/dist/data/graph-edge-routing.cjs.map +1 -1
  367. package/dist/data/graph-edge-routing.d.ts +2 -0
  368. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  369. package/dist/data/graph-edge-routing.js +9 -3
  370. package/dist/data/graph-edge-routing.js.map +1 -1
  371. package/dist/data/json-view/JsonSource.cjs +84 -0
  372. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  373. package/dist/data/json-view/JsonSource.d.ts +7 -0
  374. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  375. package/dist/data/json-view/JsonSource.js +84 -0
  376. package/dist/data/json-view/JsonSource.js.map +1 -0
  377. package/dist/data/json-view/parse-prefix.cjs +132 -0
  378. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  379. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  380. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  381. package/dist/data/json-view/parse-prefix.js +132 -0
  382. package/dist/data/json-view/parse-prefix.js.map +1 -0
  383. package/dist/data/json-view/parse-source.cjs +62 -0
  384. package/dist/data/json-view/parse-source.cjs.map +1 -0
  385. package/dist/data/json-view/parse-source.d.ts +16 -0
  386. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  387. package/dist/data/json-view/parse-source.js +62 -0
  388. package/dist/data/json-view/parse-source.js.map +1 -0
  389. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  390. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  391. package/dist/data/json-view/types.d.ts +14 -0
  392. package/dist/data/json-view/types.d.ts.map +1 -0
  393. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  394. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  395. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  396. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  397. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  398. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  399. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  400. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  401. package/dist/data/runtime/RuntimeBar.js +2 -5
  402. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  403. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  404. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  405. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  406. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  407. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  408. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  409. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  410. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  411. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  412. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  413. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  414. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  415. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  416. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  417. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  418. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  419. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  420. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  421. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  422. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  423. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  424. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  425. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  426. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  427. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  429. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  430. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  431. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  432. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  433. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  434. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  435. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  436. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  437. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  438. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  439. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  440. package/dist/data/use-pan-zoom.cjs +23 -10
  441. package/dist/data/use-pan-zoom.cjs.map +1 -1
  442. package/dist/data/use-pan-zoom.d.ts +16 -2
  443. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  444. package/dist/data/use-pan-zoom.js +23 -10
  445. package/dist/data/use-pan-zoom.js.map +1 -1
  446. package/dist/data/version-info.cjs +3 -3
  447. package/dist/data/version-info.js +3 -3
  448. package/dist/data.cjs +28 -2
  449. package/dist/data.cjs.map +1 -1
  450. package/dist/data.d.ts +2 -0
  451. package/dist/data.d.ts.map +1 -1
  452. package/dist/data.js +26 -0
  453. package/dist/data.js.map +1 -1
  454. package/dist/index.cjs +30 -4
  455. package/dist/index.cjs.map +1 -1
  456. package/dist/index.js +26 -0
  457. package/dist/index.js.map +1 -1
  458. package/dist/layout/Workspace.cjs +13 -4
  459. package/dist/layout/Workspace.cjs.map +1 -1
  460. package/dist/layout/Workspace.d.ts +7 -2
  461. package/dist/layout/Workspace.d.ts.map +1 -1
  462. package/dist/layout/Workspace.js +13 -4
  463. package/dist/layout/Workspace.js.map +1 -1
  464. package/dist/lib/permission-strategies.cjs +71 -11
  465. package/dist/lib/permission-strategies.cjs.map +1 -1
  466. package/dist/lib/permission-strategies.d.ts +3 -0
  467. package/dist/lib/permission-strategies.d.ts.map +1 -1
  468. package/dist/lib/permission-strategies.js +71 -11
  469. package/dist/lib/permission-strategies.js.map +1 -1
  470. package/dist/styles.css +1 -1
  471. package/package.json +5 -3
  472. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  473. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  474. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  475. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  476. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  477. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  478. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  479. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  480. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  481. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  482. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  483. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const AccordionList = require("../../components/AccordionList.cjs");
6
+ const Badge = require("../Badge.cjs");
7
+ const parseSource = require("./parse-source.cjs");
8
+ function JsonSource({
9
+ source,
10
+ inputFormat,
11
+ renderValue
12
+ }) {
13
+ const sourceId = react.useId();
14
+ const result = react.useMemo(
15
+ () => parseSource.parseJsonSource(source, inputFormat),
16
+ [source, inputFormat]
17
+ );
18
+ const label = inputFormat === "ndjson" ? "NDJSON" : "JSON";
19
+ if (result.status !== "complete" && !result.diagnostic)
20
+ throw new Error("JSON source status has no diagnostic");
21
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-2", "data-source-status": result.status, children: [
22
+ "value" in result && renderValue(result.value),
23
+ result.partialRecord && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-1", children: [
24
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground font-sans text-sm", children: [
25
+ "Line ",
26
+ result.partialRecord.line,
27
+ " (incomplete record)"
28
+ ] }),
29
+ renderValue(result.partialRecord.value)
30
+ ] }),
31
+ result.status === "incomplete" && !("value" in result) && !result.partialRecord && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-sans text-sm text-muted-foreground", children: "No completed values received." }),
32
+ /* @__PURE__ */ jsxRuntime.jsx(
33
+ AccordionList.AccordionList,
34
+ {
35
+ idPrefix: sourceId,
36
+ items: [source],
37
+ readOnly: true,
38
+ renderHeader: () => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-density-2 font-sans text-sm", children: [
39
+ "Original source",
40
+ result.diagnostic && /* @__PURE__ */ jsxRuntime.jsxs(
41
+ "span",
42
+ {
43
+ role: result.status === "invalid" ? "alert" : "status",
44
+ className: "inline-flex flex-wrap items-center gap-density-2",
45
+ children: [
46
+ /* @__PURE__ */ jsxRuntime.jsxs(
47
+ Badge.Badge,
48
+ {
49
+ variant: "status",
50
+ status: result.status === "invalid" ? "error" : "warning",
51
+ size: "xs",
52
+ clickToCopy: false,
53
+ children: [
54
+ result.status === "invalid" ? "Invalid" : "Incomplete",
55
+ " ",
56
+ label
57
+ ]
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
61
+ "Line ",
62
+ result.diagnostic.line,
63
+ ", column",
64
+ " ",
65
+ result.diagnostic.column
66
+ ] })
67
+ ]
68
+ }
69
+ )
70
+ ] }),
71
+ renderBody: ({ item }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-density-2", children: [
72
+ result.diagnostic && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "font-sans text-sm text-muted-foreground whitespace-normal", children: [
73
+ result.diagnostic.message,
74
+ ".",
75
+ result.status === "incomplete" && " Showing completed values only."
76
+ ] }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "max-h-80 overflow-auto whitespace-pre-wrap break-words font-mono text-xs", children: item })
78
+ ] })
79
+ }
80
+ )
81
+ ] });
82
+ }
83
+ exports.JsonSource = JsonSource;
84
+ //# sourceMappingURL=JsonSource.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSource.cjs","sources":["../../../src/data/json-view/JsonSource.tsx"],"sourcesContent":["import { useId, useMemo, type ReactNode } from \"react\";\nimport { AccordionList } from \"../../components/AccordionList\";\nimport { Badge } from \"../Badge\";\nimport { parseJsonSource } from \"./parse-source\";\n\nexport function JsonSource({\n source,\n inputFormat,\n renderValue,\n}: {\n source: string;\n inputFormat: \"json\" | \"ndjson\";\n renderValue: (value: unknown) => ReactNode;\n}) {\n const sourceId = useId();\n const result = useMemo(\n () => parseJsonSource(source, inputFormat),\n [source, inputFormat],\n );\n const label = inputFormat === \"ndjson\" ? \"NDJSON\" : \"JSON\";\n if (result.status !== \"complete\" && !result.diagnostic)\n throw new Error(\"JSON source status has no diagnostic\");\n return (\n <div className=\"space-y-density-2\" data-source-status={result.status}>\n {\"value\" in result && renderValue(result.value)}\n {result.partialRecord && (\n <div className=\"space-y-density-1\">\n <div className=\"text-muted-foreground font-sans text-sm\">\n Line {result.partialRecord.line} (incomplete record)\n </div>\n {renderValue(result.partialRecord.value)}\n </div>\n )}\n {result.status === \"incomplete\" &&\n !(\"value\" in result) &&\n !result.partialRecord && (\n <div className=\"font-sans text-sm text-muted-foreground\">\n No completed values received.\n </div>\n )}\n <AccordionList\n idPrefix={sourceId}\n items={[source]}\n readOnly\n renderHeader={() => (\n <span className=\"flex min-w-0 flex-wrap items-center gap-density-2 font-sans text-sm\">\n Original source\n {result.diagnostic && (\n <span\n role={result.status === \"invalid\" ? \"alert\" : \"status\"}\n className=\"inline-flex flex-wrap items-center gap-density-2\"\n >\n <Badge\n variant=\"status\"\n status={result.status === \"invalid\" ? \"error\" : \"warning\"}\n size=\"xs\"\n clickToCopy={false}\n >\n {result.status === \"invalid\" ? \"Invalid\" : \"Incomplete\"}{\" \"}\n {label}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n Line {result.diagnostic.line}, column{\" \"}\n {result.diagnostic.column}\n </span>\n </span>\n )}\n </span>\n )}\n renderBody={({ item }) => (\n <div className=\"space-y-density-2\">\n {result.diagnostic && (\n <p className=\"font-sans text-sm text-muted-foreground whitespace-normal\">\n {result.diagnostic.message}.\n {result.status === \"incomplete\" &&\n \" Showing completed values only.\"}\n </p>\n )}\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap break-words font-mono text-xs\">\n {item}\n </pre>\n </div>\n )}\n />\n </div>\n );\n}\n"],"names":["useId","useMemo","parseJsonSource","jsxs","jsx","AccordionList","Badge"],"mappings":";;;;;;;AAKO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,WAAWA,MAAAA,MAAA;AACjB,QAAM,SAASC,MAAAA;AAAAA,IACb,MAAMC,YAAAA,gBAAgB,QAAQ,WAAW;AAAA,IACzC,CAAC,QAAQ,WAAW;AAAA,EAAA;AAEtB,QAAM,QAAQ,gBAAgB,WAAW,WAAW;AACpD,MAAI,OAAO,WAAW,cAAc,CAAC,OAAO;AAC1C,UAAM,IAAI,MAAM,sCAAsC;AACxD,yCACG,OAAA,EAAI,WAAU,qBAAoB,sBAAoB,OAAO,QAC3D,UAAA;AAAA,IAAA,WAAW,UAAU,YAAY,OAAO,KAAK;AAAA,IAC7C,OAAO,iBACNC,gCAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA;AAAA,QAAA;AAAA,QACjD,OAAO,cAAc;AAAA,QAAK;AAAA,MAAA,GAClC;AAAA,MACC,YAAY,OAAO,cAAc,KAAK;AAAA,IAAA,GACzC;AAAA,IAED,OAAO,WAAW,gBACjB,EAAE,WAAW,WACb,CAAC,OAAO,iBACNC,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,iCAEzD;AAAA,IAEJA,2BAAAA;AAAAA,MAACC,cAAAA;AAAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,OAAO,CAAC,MAAM;AAAA,QACd,UAAQ;AAAA,QACR,cAAc,MACZF,2BAAAA,KAAC,QAAA,EAAK,WAAU,uEAAsE,UAAA;AAAA,UAAA;AAAA,UAEnF,OAAO,cACNA,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,OAAO,WAAW,YAAY,UAAU;AAAA,cAC9C,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAAA,2BAAAA;AAAAA,kBAACG,MAAAA;AAAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,QAAQ,OAAO,WAAW,YAAY,UAAU;AAAA,oBAChD,MAAK;AAAA,oBACL,aAAa;AAAA,oBAEZ,UAAA;AAAA,sBAAA,OAAO,WAAW,YAAY,YAAY;AAAA,sBAAc;AAAA,sBACxD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEHH,2BAAAA,KAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA;AAAA,kBAAA;AAAA,kBACxC,OAAO,WAAW;AAAA,kBAAK;AAAA,kBAAS;AAAA,kBACrC,OAAO,WAAW;AAAA,gBAAA,EAAA,CACrB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,QAEF,YAAY,CAAC,EAAE,WACbA,2BAAAA,KAAC,OAAA,EAAI,WAAU,qBACZ,UAAA;AAAA,UAAA,OAAO,cACNA,gCAAC,KAAA,EAAE,WAAU,6DACV,UAAA;AAAA,YAAA,OAAO,WAAW;AAAA,YAAQ;AAAA,YAC1B,OAAO,WAAW,gBACjB;AAAA,UAAA,GACJ;AAAA,UAEFC,2BAAAA,IAAC,OAAA,EAAI,WAAU,4EACZ,UAAA,KAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ;;"}
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function JsonSource({ source, inputFormat, renderValue, }: {
3
+ source: string;
4
+ inputFormat: "json" | "ndjson";
5
+ renderValue: (value: unknown) => ReactNode;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=JsonSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSource.d.ts","sourceRoot":"","sources":["../../../src/data/json-view/JsonSource.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvD,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,WAAW,EACX,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;CAC5C,+BAyEA"}
@@ -0,0 +1,84 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useId, useMemo } from "react";
3
+ import { AccordionList } from "../../components/AccordionList.js";
4
+ import { Badge } from "../Badge.js";
5
+ import { parseJsonSource } from "./parse-source.js";
6
+ function JsonSource({
7
+ source,
8
+ inputFormat,
9
+ renderValue
10
+ }) {
11
+ const sourceId = useId();
12
+ const result = useMemo(
13
+ () => parseJsonSource(source, inputFormat),
14
+ [source, inputFormat]
15
+ );
16
+ const label = inputFormat === "ndjson" ? "NDJSON" : "JSON";
17
+ if (result.status !== "complete" && !result.diagnostic)
18
+ throw new Error("JSON source status has no diagnostic");
19
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-density-2", "data-source-status": result.status, children: [
20
+ "value" in result && renderValue(result.value),
21
+ result.partialRecord && /* @__PURE__ */ jsxs("div", { className: "space-y-density-1", children: [
22
+ /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground font-sans text-sm", children: [
23
+ "Line ",
24
+ result.partialRecord.line,
25
+ " (incomplete record)"
26
+ ] }),
27
+ renderValue(result.partialRecord.value)
28
+ ] }),
29
+ result.status === "incomplete" && !("value" in result) && !result.partialRecord && /* @__PURE__ */ jsx("div", { className: "font-sans text-sm text-muted-foreground", children: "No completed values received." }),
30
+ /* @__PURE__ */ jsx(
31
+ AccordionList,
32
+ {
33
+ idPrefix: sourceId,
34
+ items: [source],
35
+ readOnly: true,
36
+ renderHeader: () => /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-wrap items-center gap-density-2 font-sans text-sm", children: [
37
+ "Original source",
38
+ result.diagnostic && /* @__PURE__ */ jsxs(
39
+ "span",
40
+ {
41
+ role: result.status === "invalid" ? "alert" : "status",
42
+ className: "inline-flex flex-wrap items-center gap-density-2",
43
+ children: [
44
+ /* @__PURE__ */ jsxs(
45
+ Badge,
46
+ {
47
+ variant: "status",
48
+ status: result.status === "invalid" ? "error" : "warning",
49
+ size: "xs",
50
+ clickToCopy: false,
51
+ children: [
52
+ result.status === "invalid" ? "Invalid" : "Incomplete",
53
+ " ",
54
+ label
55
+ ]
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
59
+ "Line ",
60
+ result.diagnostic.line,
61
+ ", column",
62
+ " ",
63
+ result.diagnostic.column
64
+ ] })
65
+ ]
66
+ }
67
+ )
68
+ ] }),
69
+ renderBody: ({ item }) => /* @__PURE__ */ jsxs("div", { className: "space-y-density-2", children: [
70
+ result.diagnostic && /* @__PURE__ */ jsxs("p", { className: "font-sans text-sm text-muted-foreground whitespace-normal", children: [
71
+ result.diagnostic.message,
72
+ ".",
73
+ result.status === "incomplete" && " Showing completed values only."
74
+ ] }),
75
+ /* @__PURE__ */ jsx("pre", { className: "max-h-80 overflow-auto whitespace-pre-wrap break-words font-mono text-xs", children: item })
76
+ ] })
77
+ }
78
+ )
79
+ ] });
80
+ }
81
+ export {
82
+ JsonSource
83
+ };
84
+ //# sourceMappingURL=JsonSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSource.js","sources":["../../../src/data/json-view/JsonSource.tsx"],"sourcesContent":["import { useId, useMemo, type ReactNode } from \"react\";\nimport { AccordionList } from \"../../components/AccordionList\";\nimport { Badge } from \"../Badge\";\nimport { parseJsonSource } from \"./parse-source\";\n\nexport function JsonSource({\n source,\n inputFormat,\n renderValue,\n}: {\n source: string;\n inputFormat: \"json\" | \"ndjson\";\n renderValue: (value: unknown) => ReactNode;\n}) {\n const sourceId = useId();\n const result = useMemo(\n () => parseJsonSource(source, inputFormat),\n [source, inputFormat],\n );\n const label = inputFormat === \"ndjson\" ? \"NDJSON\" : \"JSON\";\n if (result.status !== \"complete\" && !result.diagnostic)\n throw new Error(\"JSON source status has no diagnostic\");\n return (\n <div className=\"space-y-density-2\" data-source-status={result.status}>\n {\"value\" in result && renderValue(result.value)}\n {result.partialRecord && (\n <div className=\"space-y-density-1\">\n <div className=\"text-muted-foreground font-sans text-sm\">\n Line {result.partialRecord.line} (incomplete record)\n </div>\n {renderValue(result.partialRecord.value)}\n </div>\n )}\n {result.status === \"incomplete\" &&\n !(\"value\" in result) &&\n !result.partialRecord && (\n <div className=\"font-sans text-sm text-muted-foreground\">\n No completed values received.\n </div>\n )}\n <AccordionList\n idPrefix={sourceId}\n items={[source]}\n readOnly\n renderHeader={() => (\n <span className=\"flex min-w-0 flex-wrap items-center gap-density-2 font-sans text-sm\">\n Original source\n {result.diagnostic && (\n <span\n role={result.status === \"invalid\" ? \"alert\" : \"status\"}\n className=\"inline-flex flex-wrap items-center gap-density-2\"\n >\n <Badge\n variant=\"status\"\n status={result.status === \"invalid\" ? \"error\" : \"warning\"}\n size=\"xs\"\n clickToCopy={false}\n >\n {result.status === \"invalid\" ? \"Invalid\" : \"Incomplete\"}{\" \"}\n {label}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n Line {result.diagnostic.line}, column{\" \"}\n {result.diagnostic.column}\n </span>\n </span>\n )}\n </span>\n )}\n renderBody={({ item }) => (\n <div className=\"space-y-density-2\">\n {result.diagnostic && (\n <p className=\"font-sans text-sm text-muted-foreground whitespace-normal\">\n {result.diagnostic.message}.\n {result.status === \"incomplete\" &&\n \" Showing completed values only.\"}\n </p>\n )}\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap break-words font-mono text-xs\">\n {item}\n </pre>\n </div>\n )}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAKO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,WAAW,MAAA;AACjB,QAAM,SAAS;AAAA,IACb,MAAM,gBAAgB,QAAQ,WAAW;AAAA,IACzC,CAAC,QAAQ,WAAW;AAAA,EAAA;AAEtB,QAAM,QAAQ,gBAAgB,WAAW,WAAW;AACpD,MAAI,OAAO,WAAW,cAAc,CAAC,OAAO;AAC1C,UAAM,IAAI,MAAM,sCAAsC;AACxD,8BACG,OAAA,EAAI,WAAU,qBAAoB,sBAAoB,OAAO,QAC3D,UAAA;AAAA,IAAA,WAAW,UAAU,YAAY,OAAO,KAAK;AAAA,IAC7C,OAAO,iBACN,qBAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA;AAAA,QAAA;AAAA,QACjD,OAAO,cAAc;AAAA,QAAK;AAAA,MAAA,GAClC;AAAA,MACC,YAAY,OAAO,cAAc,KAAK;AAAA,IAAA,GACzC;AAAA,IAED,OAAO,WAAW,gBACjB,EAAE,WAAW,WACb,CAAC,OAAO,iBACN,oBAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,iCAEzD;AAAA,IAEJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,OAAO,CAAC,MAAM;AAAA,QACd,UAAQ;AAAA,QACR,cAAc,MACZ,qBAAC,QAAA,EAAK,WAAU,uEAAsE,UAAA;AAAA,UAAA;AAAA,UAEnF,OAAO,cACN;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,OAAO,WAAW,YAAY,UAAU;AAAA,cAC9C,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,QAAQ,OAAO,WAAW,YAAY,UAAU;AAAA,oBAChD,MAAK;AAAA,oBACL,aAAa;AAAA,oBAEZ,UAAA;AAAA,sBAAA,OAAO,WAAW,YAAY,YAAY;AAAA,sBAAc;AAAA,sBACxD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,qBAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA;AAAA,kBAAA;AAAA,kBACxC,OAAO,WAAW;AAAA,kBAAK;AAAA,kBAAS;AAAA,kBACrC,OAAO,WAAW;AAAA,gBAAA,EAAA,CACrB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,QAEF,YAAY,CAAC,EAAE,WACb,qBAAC,OAAA,EAAI,WAAU,qBACZ,UAAA;AAAA,UAAA,OAAO,cACN,qBAAC,KAAA,EAAE,WAAU,6DACV,UAAA;AAAA,YAAA,OAAO,WAAW;AAAA,YAAQ;AAAA,YAC1B,OAAO,WAAW,gBACjB;AAAA,UAAA,GACJ;AAAA,UAEF,oBAAC,OAAA,EAAI,WAAU,4EACZ,UAAA,KAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ;"}
@@ -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"}