@flanksource/clicky-ui 0.3.44 → 0.3.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { GraphLayoutGroupBox, GroupMemberWindow } from './graph-columns-layout.js';
2
+ import { GraphLayoutPosition } from './graph-layout.js';
3
+ /** Window starts, in rows, by group box id. A box without one starts at its first member. */
4
+ export type WindowStarts = Readonly<Record<string, number>>;
5
+ /** The start kept between the first row and the last full window. */
6
+ export declare function clampWindowStart(memberWindow: GroupMemberWindow, start: number): number;
7
+ /** The start that brings member `id` into view, moving no further than needed; unchanged for a shown member or a stranger. */
8
+ export declare function revealWindowStart(memberWindow: GroupMemberWindow, start: number, id: string): number;
9
+ /** The starts after revealing `id` in the windowed box holding it: the same object when nothing moves. */
10
+ export declare function revealMember(boxes: readonly GraphLayoutGroupBox[], starts: WindowStarts, id: string | undefined): WindowStarts;
11
+ export interface WindowedPositions {
12
+ positions: Record<string, GraphLayoutPosition>;
13
+ /** Members scrolled out of view: not drawn, their edges attached at the window's edge. */
14
+ hidden: Set<string>;
15
+ }
16
+ /**
17
+ * Where each node is drawn once windows scroll: a shown member moves up by the rows scrolled past, a
18
+ * member above the window sits on its top edge and one below on its bottom edge, so its edges still
19
+ * reach the group. Every other node keeps its layout position.
20
+ */
21
+ export declare function windowedPositions(positions: Readonly<Record<string, GraphLayoutPosition>>, boxes: readonly GraphLayoutGroupBox[], starts: WindowStarts): WindowedPositions;
22
+ /** The rows shown, counted from one, as the footer says them. */
23
+ export declare function windowRows(memberWindow: GroupMemberWindow, start: number): {
24
+ first: number;
25
+ last: number;
26
+ total: number;
27
+ };
28
+ /** Whole rows of wheel travel, `rowPx` each, the remainder carried to the next event so small deltas add up. */
29
+ export declare function wheelRows(carry: number, deltaPx: number, rowPx: number): {
30
+ rows: number;
31
+ carry: number;
32
+ };
33
+ //# sourceMappingURL=graph-group-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-group-window.d.ts","sourceRoot":"","sources":["../../src/data/graph-group-window.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,6FAA6F;AAC7F,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,8HAA8H;AAC9H,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAMpG;AAED,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAO9H;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/C,0FAA0F;IAC1F,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EACxD,KAAK,EAAE,SAAS,mBAAmB,EAAE,EACrC,MAAM,EAAE,YAAY,GACnB,iBAAiB,CAoBnB;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAGzH;AAED,gHAAgH;AAChH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAIxG"}
@@ -0,0 +1,60 @@
1
+ function clampWindowStart(memberWindow, start) {
2
+ return Math.min(Math.max(0, memberWindow.members.length - memberWindow.rows), Math.max(0, Math.round(start)));
3
+ }
4
+ function revealWindowStart(memberWindow, start, id) {
5
+ const index = memberWindow.members.indexOf(id);
6
+ const current = clampWindowStart(memberWindow, start);
7
+ if (index < 0) return current;
8
+ if (index < current) return index;
9
+ return index >= current + memberWindow.rows ? clampWindowStart(memberWindow, index - memberWindow.rows + 1) : current;
10
+ }
11
+ function revealMember(boxes, starts, id) {
12
+ if (id === void 0) return starts;
13
+ const box = boxes.find((candidate) => {
14
+ var _a;
15
+ return (_a = candidate.window) == null ? void 0 : _a.members.includes(id);
16
+ });
17
+ if (!(box == null ? void 0 : box.window)) return starts;
18
+ const current = starts[box.id] ?? 0;
19
+ const next = revealWindowStart(box.window, current, id);
20
+ return next === clampWindowStart(box.window, current) ? starts : { ...starts, [box.id]: next };
21
+ }
22
+ function windowedPositions(positions, boxes, starts) {
23
+ const moved = { ...positions };
24
+ const hidden = /* @__PURE__ */ new Set();
25
+ for (const box of boxes) {
26
+ const memberWindow = box.window;
27
+ if (!memberWindow) continue;
28
+ const start = clampWindowStart(memberWindow, starts[box.id] ?? 0);
29
+ const shift = memberWindow.tops[start] ?? 0;
30
+ memberWindow.members.forEach((id, index) => {
31
+ const at = positions[id];
32
+ if (!at) throw new Error(`GraphDiagram: windowed member "${id}" of "${box.id}" has no layout position`);
33
+ if (index < start || index >= start + memberWindow.rows) {
34
+ hidden.add(id);
35
+ moved[id] = { x: at.x, y: index < start ? memberWindow.top : memberWindow.top + memberWindow.height };
36
+ } else {
37
+ moved[id] = { x: at.x, y: at.y - shift };
38
+ }
39
+ });
40
+ }
41
+ return { positions: moved, hidden };
42
+ }
43
+ function windowRows(memberWindow, start) {
44
+ const first = clampWindowStart(memberWindow, start);
45
+ return { first: first + 1, last: Math.min(memberWindow.members.length, first + memberWindow.rows), total: memberWindow.members.length };
46
+ }
47
+ function wheelRows(carry, deltaPx, rowPx) {
48
+ const total = carry + deltaPx;
49
+ const rows = Math.trunc(total / rowPx);
50
+ return { rows, carry: total - rows * rowPx };
51
+ }
52
+ export {
53
+ clampWindowStart,
54
+ revealMember,
55
+ revealWindowStart,
56
+ wheelRows,
57
+ windowRows,
58
+ windowedPositions
59
+ };
60
+ //# sourceMappingURL=graph-group-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-group-window.js","sources":["../../src/data/graph-group-window.ts"],"sourcesContent":["// Scrolling the members of a windowed group (see `GroupMemberWindow`): which rows show, where shown\n// members are drawn, and where the edges of hidden ones attach. Pure math, no React.\n\nimport type { GraphLayoutGroupBox, GroupMemberWindow } from \"./graph-columns-layout\";\nimport type { GraphLayoutPosition } from \"./graph-layout\";\n\n/** Window starts, in rows, by group box id. A box without one starts at its first member. */\nexport type WindowStarts = Readonly<Record<string, number>>;\n\n/** The start kept between the first row and the last full window. */\nexport function clampWindowStart(memberWindow: GroupMemberWindow, start: number): number {\n return Math.min(Math.max(0, memberWindow.members.length - memberWindow.rows), Math.max(0, Math.round(start)));\n}\n\n/** The start that brings member `id` into view, moving no further than needed; unchanged for a shown member or a stranger. */\nexport function revealWindowStart(memberWindow: GroupMemberWindow, start: number, id: string): number {\n const index = memberWindow.members.indexOf(id);\n const current = clampWindowStart(memberWindow, start);\n if (index < 0) return current;\n if (index < current) return index;\n return index >= current + memberWindow.rows ? clampWindowStart(memberWindow, index - memberWindow.rows + 1) : current;\n}\n\n/** The starts after revealing `id` in the windowed box holding it: the same object when nothing moves. */\nexport function revealMember(boxes: readonly GraphLayoutGroupBox[], starts: WindowStarts, id: string | undefined): WindowStarts {\n if (id === undefined) return starts;\n const box = boxes.find((candidate) => candidate.window?.members.includes(id));\n if (!box?.window) return starts;\n const current = starts[box.id] ?? 0;\n const next = revealWindowStart(box.window, current, id);\n return next === clampWindowStart(box.window, current) ? starts : { ...starts, [box.id]: next };\n}\n\nexport interface WindowedPositions {\n positions: Record<string, GraphLayoutPosition>;\n /** Members scrolled out of view: not drawn, their edges attached at the window's edge. */\n hidden: Set<string>;\n}\n\n/**\n * Where each node is drawn once windows scroll: a shown member moves up by the rows scrolled past, a\n * member above the window sits on its top edge and one below on its bottom edge, so its edges still\n * reach the group. Every other node keeps its layout position.\n */\nexport function windowedPositions(\n positions: Readonly<Record<string, GraphLayoutPosition>>,\n boxes: readonly GraphLayoutGroupBox[],\n starts: WindowStarts,\n): WindowedPositions {\n const moved: Record<string, GraphLayoutPosition> = { ...positions };\n const hidden = new Set<string>();\n for (const box of boxes) {\n const memberWindow = box.window;\n if (!memberWindow) continue;\n const start = clampWindowStart(memberWindow, starts[box.id] ?? 0);\n const shift = memberWindow.tops[start] ?? 0;\n memberWindow.members.forEach((id, index) => {\n const at = positions[id];\n if (!at) throw new Error(`GraphDiagram: windowed member \"${id}\" of \"${box.id}\" has no layout position`);\n if (index < start || index >= start + memberWindow.rows) {\n hidden.add(id);\n moved[id] = { x: at.x, y: index < start ? memberWindow.top : memberWindow.top + memberWindow.height };\n } else {\n moved[id] = { x: at.x, y: at.y - shift };\n }\n });\n }\n return { positions: moved, hidden };\n}\n\n/** The rows shown, counted from one, as the footer says them. */\nexport function windowRows(memberWindow: GroupMemberWindow, start: number): { first: number; last: number; total: number } {\n const first = clampWindowStart(memberWindow, start);\n return { first: first + 1, last: Math.min(memberWindow.members.length, first + memberWindow.rows), total: memberWindow.members.length };\n}\n\n/** Whole rows of wheel travel, `rowPx` each, the remainder carried to the next event so small deltas add up. */\nexport function wheelRows(carry: number, deltaPx: number, rowPx: number): { rows: number; carry: number } {\n const total = carry + deltaPx;\n const rows = Math.trunc(total / rowPx);\n return { rows, carry: total - rows * rowPx };\n}\n"],"names":[],"mappings":"AAUO,SAAS,iBAAiB,cAAiC,OAAuB;AACvF,SAAO,KAAK,IAAI,KAAK,IAAI,GAAG,aAAa,QAAQ,SAAS,aAAa,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC9G;AAGO,SAAS,kBAAkB,cAAiC,OAAe,IAAoB;AACpG,QAAM,QAAQ,aAAa,QAAQ,QAAQ,EAAE;AAC7C,QAAM,UAAU,iBAAiB,cAAc,KAAK;AACpD,MAAI,QAAQ,EAAG,QAAO;AACtB,MAAI,QAAQ,QAAS,QAAO;AAC5B,SAAO,SAAS,UAAU,aAAa,OAAO,iBAAiB,cAAc,QAAQ,aAAa,OAAO,CAAC,IAAI;AAChH;AAGO,SAAS,aAAa,OAAuC,QAAsB,IAAsC;AAC9H,MAAI,OAAO,OAAW,QAAO;AAC7B,QAAM,MAAM,MAAM,KAAK,CAAC,cAAA;AAhBnB;AAgBiC,2BAAU,WAAV,mBAAkB,QAAQ,SAAS;AAAA,GAAG;AAC5E,MAAI,EAAC,2BAAK,QAAQ,QAAO;AACzB,QAAM,UAAU,OAAO,IAAI,EAAE,KAAK;AAClC,QAAM,OAAO,kBAAkB,IAAI,QAAQ,SAAS,EAAE;AACtD,SAAO,SAAS,iBAAiB,IAAI,QAAQ,OAAO,IAAI,SAAS,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,KAAA;AAC1F;AAaO,SAAS,kBACd,WACA,OACA,QACmB;AACnB,QAAM,QAA6C,EAAE,GAAG,UAAA;AACxD,QAAM,6BAAa,IAAA;AACnB,aAAW,OAAO,OAAO;AACvB,UAAM,eAAe,IAAI;AACzB,QAAI,CAAC,aAAc;AACnB,UAAM,QAAQ,iBAAiB,cAAc,OAAO,IAAI,EAAE,KAAK,CAAC;AAChE,UAAM,QAAQ,aAAa,KAAK,KAAK,KAAK;AAC1C,iBAAa,QAAQ,QAAQ,CAAC,IAAI,UAAU;AAC1C,YAAM,KAAK,UAAU,EAAE;AACvB,UAAI,CAAC,GAAI,OAAM,IAAI,MAAM,kCAAkC,EAAE,SAAS,IAAI,EAAE,0BAA0B;AACtG,UAAI,QAAQ,SAAS,SAAS,QAAQ,aAAa,MAAM;AACvD,eAAO,IAAI,EAAE;AACb,cAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,QAAQ,aAAa,MAAM,aAAa,MAAM,aAAa,OAAA;AAAA,MAC/F,OAAO;AACL,cAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAA;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,EAAE,WAAW,OAAO,OAAA;AAC7B;AAGO,SAAS,WAAW,cAAiC,OAA+D;AACzH,QAAM,QAAQ,iBAAiB,cAAc,KAAK;AAClD,SAAO,EAAE,OAAO,QAAQ,GAAG,MAAM,KAAK,IAAI,aAAa,QAAQ,QAAQ,QAAQ,aAAa,IAAI,GAAG,OAAO,aAAa,QAAQ,OAAA;AACjI;AAGO,SAAS,UAAU,OAAe,SAAiB,OAAgD;AACxG,QAAM,QAAQ,QAAQ;AACtB,QAAM,OAAO,KAAK,MAAM,QAAQ,KAAK;AACrC,SAAO,EAAE,MAAM,OAAO,QAAQ,OAAO,MAAA;AACvC;"}
@@ -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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"}