@langchain/macaw-components 1.0.0-beta.0

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 (566) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/_chunks/ErrorState-CmPX01HV.js +13361 -0
  4. package/dist/_chunks/ErrorState-CmPX01HV.js.map +1 -0
  5. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js +80 -0
  6. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js.map +1 -0
  7. package/dist/base.css +305 -0
  8. package/dist/catalog.json +1675 -0
  9. package/dist/components/Avatar/Avatar.d.ts +28 -0
  10. package/dist/components/Avatar/Avatar.js +47 -0
  11. package/dist/components/Avatar/Avatar.js.map +1 -0
  12. package/dist/components/Avatar/index.d.ts +2 -0
  13. package/dist/components/Avatar/index.js +2 -0
  14. package/dist/components/Badge/Badge.d.ts +25 -0
  15. package/dist/components/Badge/Badge.js +82 -0
  16. package/dist/components/Badge/Badge.js.map +1 -0
  17. package/dist/components/Badge/index.d.ts +2 -0
  18. package/dist/components/Badge/index.js +2 -0
  19. package/dist/components/Banner/Banner.d.ts +15 -0
  20. package/dist/components/Banner/Banner.js +102 -0
  21. package/dist/components/Banner/Banner.js.map +1 -0
  22. package/dist/components/Banner/index.d.ts +2 -0
  23. package/dist/components/Banner/index.js +2 -0
  24. package/dist/components/BarChart/AnimatedBar.d.ts +20 -0
  25. package/dist/components/BarChart/AnimatedBar.js +65 -0
  26. package/dist/components/BarChart/AnimatedBar.js.map +1 -0
  27. package/dist/components/BarChart/BarChart.d.ts +25 -0
  28. package/dist/components/BarChart/BarChart.js +248 -0
  29. package/dist/components/BarChart/BarChart.js.map +1 -0
  30. package/dist/components/BarChart/BarChart.types.d.ts +239 -0
  31. package/dist/components/BarChart/BarChart.types.js +0 -0
  32. package/dist/components/BarChart/BarChart.utils.d.ts +51 -0
  33. package/dist/components/BarChart/BarChart.utils.js +215 -0
  34. package/dist/components/BarChart/BarChart.utils.js.map +1 -0
  35. package/dist/components/BarChart/BarChartAxes.d.ts +22 -0
  36. package/dist/components/BarChart/BarChartAxes.js +144 -0
  37. package/dist/components/BarChart/BarChartAxes.js.map +1 -0
  38. package/dist/components/BarChart/BarChartGuides.d.ts +22 -0
  39. package/dist/components/BarChart/BarChartGuides.js +83 -0
  40. package/dist/components/BarChart/BarChartGuides.js.map +1 -0
  41. package/dist/components/BarChart/BarChartPlot.d.ts +40 -0
  42. package/dist/components/BarChart/BarChartPlot.js +262 -0
  43. package/dist/components/BarChart/BarChartPlot.js.map +1 -0
  44. package/dist/components/BarChart/constants.d.ts +21 -0
  45. package/dist/components/BarChart/constants.js +26 -0
  46. package/dist/components/BarChart/constants.js.map +1 -0
  47. package/dist/components/BarChart/index.d.ts +3 -0
  48. package/dist/components/BarChart/index.js +3 -0
  49. package/dist/components/Button/Button.d.ts +36 -0
  50. package/dist/components/Button/Button.js +99 -0
  51. package/dist/components/Button/Button.js.map +1 -0
  52. package/dist/components/Button/constants.d.ts +26 -0
  53. package/dist/components/Button/constants.js +31 -0
  54. package/dist/components/Button/constants.js.map +1 -0
  55. package/dist/components/Button/index.d.ts +2 -0
  56. package/dist/components/Button/index.js +2 -0
  57. package/dist/components/ButtonGroup/ButtonGroup.d.ts +30 -0
  58. package/dist/components/ButtonGroup/ButtonGroup.js +26 -0
  59. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
  60. package/dist/components/ButtonGroup/index.d.ts +2 -0
  61. package/dist/components/ButtonGroup/index.js +2 -0
  62. package/dist/components/Card/Card.d.ts +10 -0
  63. package/dist/components/Card/Card.js +23 -0
  64. package/dist/components/Card/Card.js.map +1 -0
  65. package/dist/components/Card/index.d.ts +2 -0
  66. package/dist/components/Card/index.js +2 -0
  67. package/dist/components/ChartCard/ChartCard.d.ts +53 -0
  68. package/dist/components/ChartCard/ChartCard.js +172 -0
  69. package/dist/components/ChartCard/ChartCard.js.map +1 -0
  70. package/dist/components/ChartCard/ChartCardSkeleton.d.ts +7 -0
  71. package/dist/components/ChartCard/ChartCardSkeleton.js +61 -0
  72. package/dist/components/ChartCard/ChartCardSkeleton.js.map +1 -0
  73. package/dist/components/ChartCard/index.d.ts +4 -0
  74. package/dist/components/ChartCard/index.js +3 -0
  75. package/dist/components/ChartLegend/ChartLegend.d.ts +19 -0
  76. package/dist/components/ChartLegend/ChartLegend.js +195 -0
  77. package/dist/components/ChartLegend/ChartLegend.js.map +1 -0
  78. package/dist/components/ChartLegend/ChartLegendItemRenderer.d.ts +14 -0
  79. package/dist/components/ChartLegend/ChartLegendItemRenderer.js +90 -0
  80. package/dist/components/ChartLegend/ChartLegendItemRenderer.js.map +1 -0
  81. package/dist/components/ChartLegend/index.d.ts +3 -0
  82. package/dist/components/ChartLegend/index.js +3 -0
  83. package/dist/components/ChartLegend/useChartLegendActiveItem.d.ts +7 -0
  84. package/dist/components/ChartLegend/useChartLegendActiveItem.js +35 -0
  85. package/dist/components/ChartLegend/useChartLegendActiveItem.js.map +1 -0
  86. package/dist/components/ChartLegend/utils.d.ts +20 -0
  87. package/dist/components/ChartLegend/utils.js +33 -0
  88. package/dist/components/ChartLegend/utils.js.map +1 -0
  89. package/dist/components/ChartTooltip/ChartTooltip.d.ts +23 -0
  90. package/dist/components/ChartTooltip/ChartTooltip.js +83 -0
  91. package/dist/components/ChartTooltip/ChartTooltip.js.map +1 -0
  92. package/dist/components/ChartTooltip/index.d.ts +2 -0
  93. package/dist/components/ChartTooltip/index.js +2 -0
  94. package/dist/components/Checkbox/Checkbox.d.ts +58 -0
  95. package/dist/components/Checkbox/Checkbox.js +50 -0
  96. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  97. package/dist/components/Checkbox/constants.d.ts +28 -0
  98. package/dist/components/Checkbox/constants.js +57 -0
  99. package/dist/components/Checkbox/constants.js.map +1 -0
  100. package/dist/components/Checkbox/getCheckedState.d.ts +6 -0
  101. package/dist/components/Checkbox/getCheckedState.js +14 -0
  102. package/dist/components/Checkbox/getCheckedState.js.map +1 -0
  103. package/dist/components/Checkbox/index.d.ts +3 -0
  104. package/dist/components/Checkbox/index.js +3 -0
  105. package/dist/components/CircularProgress/CircularProgress.d.ts +54 -0
  106. package/dist/components/CircularProgress/CircularProgress.js +85 -0
  107. package/dist/components/CircularProgress/CircularProgress.js.map +1 -0
  108. package/dist/components/CircularProgress/index.d.ts +2 -0
  109. package/dist/components/CircularProgress/index.js +2 -0
  110. package/dist/components/Code/Code.utils.d.ts +24 -0
  111. package/dist/components/Code/Code.utils.js +160 -0
  112. package/dist/components/Code/Code.utils.js.map +1 -0
  113. package/dist/components/Code/CodeLite.d.ts +19 -0
  114. package/dist/components/Code/CodeLite.js +146 -0
  115. package/dist/components/Code/CodeLite.js.map +1 -0
  116. package/dist/components/Code/CodeLite.utils.d.ts +24 -0
  117. package/dist/components/Code/CodeLite.utils.js +273 -0
  118. package/dist/components/Code/CodeLite.utils.js.map +1 -0
  119. package/dist/components/Code/ImageReplacerExtension.d.ts +9 -0
  120. package/dist/components/Code/ImageReplacerExtension.js +227 -0
  121. package/dist/components/Code/ImageReplacerExtension.js.map +1 -0
  122. package/dist/components/Code/JsonHighlighterExtension.d.ts +4 -0
  123. package/dist/components/Code/JsonHighlighterExtension.js +172 -0
  124. package/dist/components/Code/JsonHighlighterExtension.js.map +1 -0
  125. package/dist/components/Code/constants.d.ts +6 -0
  126. package/dist/components/Code/constants.js +11 -0
  127. package/dist/components/Code/constants.js.map +1 -0
  128. package/dist/components/Code/index.d.ts +30 -0
  129. package/dist/components/Code/index.js +140 -0
  130. package/dist/components/Code/index.js.map +1 -0
  131. package/dist/components/Code/languages/json.d.ts +1 -0
  132. package/dist/components/Code/languages/json.js +7 -0
  133. package/dist/components/Code/languages/json.js.map +1 -0
  134. package/dist/components/Code/languages/languages.d.ts +7 -0
  135. package/dist/components/Code/languages/languages.js +12 -0
  136. package/dist/components/Code/languages/languages.js.map +1 -0
  137. package/dist/components/Code/languages/python.d.ts +1 -0
  138. package/dist/components/Code/languages/python.js +7 -0
  139. package/dist/components/Code/languages/python.js.map +1 -0
  140. package/dist/components/Code/languages/shell.d.ts +7 -0
  141. package/dist/components/Code/languages/shell.js +241 -0
  142. package/dist/components/Code/languages/shell.js.map +1 -0
  143. package/dist/components/Code/languages/typescript.d.ts +1 -0
  144. package/dist/components/Code/languages/typescript.js +7 -0
  145. package/dist/components/Code/languages/typescript.js.map +1 -0
  146. package/dist/components/Code/languages/yaml.d.ts +2 -0
  147. package/dist/components/Code/languages/yaml.js +44 -0
  148. package/dist/components/Code/languages/yaml.js.map +1 -0
  149. package/dist/components/Code/types.d.ts +8 -0
  150. package/dist/components/Code/types.js +0 -0
  151. package/dist/components/Code/utils.d.ts +4 -0
  152. package/dist/components/Code/utils.js +27 -0
  153. package/dist/components/Code/utils.js.map +1 -0
  154. package/dist/components/Command/Command.d.ts +78 -0
  155. package/dist/components/Command/Command.js +78 -0
  156. package/dist/components/Command/Command.js.map +1 -0
  157. package/dist/components/Command/CommandMenu.d.ts +65 -0
  158. package/dist/components/Command/CommandMenu.js +101 -0
  159. package/dist/components/Command/CommandMenu.js.map +1 -0
  160. package/dist/components/Command/index.d.ts +4 -0
  161. package/dist/components/Command/index.js +3 -0
  162. package/dist/components/ContextMenu/ContextMenu.d.ts +9 -0
  163. package/dist/components/ContextMenu/ContextMenu.js +43 -0
  164. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  165. package/dist/components/ContextMenu/index.d.ts +1 -0
  166. package/dist/components/ContextMenu/index.js +2 -0
  167. package/dist/components/CopyButton/CopyButton.d.ts +24 -0
  168. package/dist/components/CopyButton/CopyButton.js +121 -0
  169. package/dist/components/CopyButton/CopyButton.js.map +1 -0
  170. package/dist/components/CopyButton/copyToClipboard.d.ts +1 -0
  171. package/dist/components/CopyButton/copyToClipboard.js +29 -0
  172. package/dist/components/CopyButton/copyToClipboard.js.map +1 -0
  173. package/dist/components/CopyButton/index.d.ts +4 -0
  174. package/dist/components/CopyButton/index.js +4 -0
  175. package/dist/components/CopyButton/useCopy.d.ts +10 -0
  176. package/dist/components/CopyButton/useCopy.js +46 -0
  177. package/dist/components/CopyButton/useCopy.js.map +1 -0
  178. package/dist/components/Dialog/index.d.ts +49 -0
  179. package/dist/components/Dialog/index.js +130 -0
  180. package/dist/components/Dialog/index.js.map +1 -0
  181. package/dist/components/Divider/Divider.d.ts +9 -0
  182. package/dist/components/Divider/Divider.js +27 -0
  183. package/dist/components/Divider/Divider.js.map +1 -0
  184. package/dist/components/Divider/index.d.ts +2 -0
  185. package/dist/components/Divider/index.js +2 -0
  186. package/dist/components/DonutChart/DonutChart.d.ts +101 -0
  187. package/dist/components/DonutChart/DonutChart.js +197 -0
  188. package/dist/components/DonutChart/DonutChart.js.map +1 -0
  189. package/dist/components/DonutChart/DonutChart.utils.d.ts +38 -0
  190. package/dist/components/DonutChart/DonutChart.utils.js +93 -0
  191. package/dist/components/DonutChart/DonutChart.utils.js.map +1 -0
  192. package/dist/components/DonutChart/constants.d.ts +7 -0
  193. package/dist/components/DonutChart/constants.js +12 -0
  194. package/dist/components/DonutChart/constants.js.map +1 -0
  195. package/dist/components/DonutChart/index.d.ts +4 -0
  196. package/dist/components/DonutChart/index.js +4 -0
  197. package/dist/components/DropdownMenu/DropdownMenu.d.ts +24 -0
  198. package/dist/components/DropdownMenu/DropdownMenu.js +149 -0
  199. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  200. package/dist/components/DropdownMenu/index.d.ts +1 -0
  201. package/dist/components/DropdownMenu/index.js +2 -0
  202. package/dist/components/EmptyState/EmptyState.d.ts +26 -0
  203. package/dist/components/EmptyState/EmptyState.js +85 -0
  204. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  205. package/dist/components/EmptyState/index.d.ts +2 -0
  206. package/dist/components/EmptyState/index.js +2 -0
  207. package/dist/components/ErrorBoundary.d.ts +35 -0
  208. package/dist/components/ErrorBoundary.js +41 -0
  209. package/dist/components/ErrorBoundary.js.map +1 -0
  210. package/dist/components/ErrorMessage/ErrorMessage.d.ts +17 -0
  211. package/dist/components/ErrorMessage/ErrorMessage.js +146 -0
  212. package/dist/components/ErrorMessage/ErrorMessage.js.map +1 -0
  213. package/dist/components/ErrorMessage/index.d.ts +2 -0
  214. package/dist/components/ErrorMessage/index.js +2 -0
  215. package/dist/components/ErrorState/ErrorState.d.ts +23 -0
  216. package/dist/components/ErrorState/ErrorState.js +2 -0
  217. package/dist/components/ErrorState/index.d.ts +2 -0
  218. package/dist/components/ErrorState/index.js +2 -0
  219. package/dist/components/GroupedTabs/GroupedTabs.d.ts +31 -0
  220. package/dist/components/GroupedTabs/GroupedTabs.js +92 -0
  221. package/dist/components/GroupedTabs/GroupedTabs.js.map +1 -0
  222. package/dist/components/GroupedTabs/index.d.ts +2 -0
  223. package/dist/components/GroupedTabs/index.js +2 -0
  224. package/dist/components/HoverCard.d.ts +4 -0
  225. package/dist/components/HoverCard.js +34 -0
  226. package/dist/components/HoverCard.js.map +1 -0
  227. package/dist/components/Icon/Icon.d.ts +25 -0
  228. package/dist/components/Icon/Icon.js +57 -0
  229. package/dist/components/Icon/Icon.js.map +1 -0
  230. package/dist/components/Icon/index.d.ts +2 -0
  231. package/dist/components/Icon/index.js +2 -0
  232. package/dist/components/IconButton/IconButton.d.ts +35 -0
  233. package/dist/components/IconButton/IconButton.js +73 -0
  234. package/dist/components/IconButton/IconButton.js.map +1 -0
  235. package/dist/components/IconButton/index.d.ts +2 -0
  236. package/dist/components/IconButton/index.js +2 -0
  237. package/dist/components/Input/Input.d.ts +72 -0
  238. package/dist/components/Input/Input.js +221 -0
  239. package/dist/components/Input/Input.js.map +1 -0
  240. package/dist/components/Input/index.d.ts +2 -0
  241. package/dist/components/Input/index.js +2 -0
  242. package/dist/components/Input/inputStyles.d.ts +28 -0
  243. package/dist/components/Input/inputStyles.js +45 -0
  244. package/dist/components/Input/inputStyles.js.map +1 -0
  245. package/dist/components/Kbd/Kbd.d.ts +15 -0
  246. package/dist/components/Kbd/Kbd.js +30 -0
  247. package/dist/components/Kbd/Kbd.js.map +1 -0
  248. package/dist/components/Kbd/index.d.ts +2 -0
  249. package/dist/components/Kbd/index.js +2 -0
  250. package/dist/components/LineChart/LineChart.d.ts +8 -0
  251. package/dist/components/LineChart/LineChart.js +194 -0
  252. package/dist/components/LineChart/LineChart.js.map +1 -0
  253. package/dist/components/LineChart/LineChart.types.d.ts +138 -0
  254. package/dist/components/LineChart/LineChart.types.js +0 -0
  255. package/dist/components/LineChart/LineChart.utils.d.ts +29 -0
  256. package/dist/components/LineChart/LineChart.utils.js +123 -0
  257. package/dist/components/LineChart/LineChart.utils.js.map +1 -0
  258. package/dist/components/LineChart/LineChartPlot.d.ts +43 -0
  259. package/dist/components/LineChart/LineChartPlot.js +306 -0
  260. package/dist/components/LineChart/LineChartPlot.js.map +1 -0
  261. package/dist/components/LineChart/constants.d.ts +3 -0
  262. package/dist/components/LineChart/constants.js +8 -0
  263. package/dist/components/LineChart/constants.js.map +1 -0
  264. package/dist/components/LineChart/index.d.ts +2 -0
  265. package/dist/components/LineChart/index.js +2 -0
  266. package/dist/components/LinearProgress/LinearProgress.d.ts +16 -0
  267. package/dist/components/LinearProgress/LinearProgress.js +42 -0
  268. package/dist/components/LinearProgress/LinearProgress.js.map +1 -0
  269. package/dist/components/LinearProgress/index.d.ts +2 -0
  270. package/dist/components/LinearProgress/index.js +2 -0
  271. package/dist/components/Link/Link.d.ts +30 -0
  272. package/dist/components/Link/Link.js +51 -0
  273. package/dist/components/Link/Link.js.map +1 -0
  274. package/dist/components/Link/index.d.ts +2 -0
  275. package/dist/components/Link/index.js +2 -0
  276. package/dist/components/Logo/index.d.ts +17 -0
  277. package/dist/components/Logo/index.js +705 -0
  278. package/dist/components/Logo/index.js.map +1 -0
  279. package/dist/components/MetricChart/MetricChart.d.ts +9 -0
  280. package/dist/components/MetricChart/MetricChart.js +42 -0
  281. package/dist/components/MetricChart/MetricChart.js.map +1 -0
  282. package/dist/components/MetricChart/formatters.d.ts +18 -0
  283. package/dist/components/MetricChart/formatters.js +34 -0
  284. package/dist/components/MetricChart/formatters.js.map +1 -0
  285. package/dist/components/MetricChart/index.d.ts +4 -0
  286. package/dist/components/MetricChart/index.js +3 -0
  287. package/dist/components/Pane/Pane.d.ts +29 -0
  288. package/dist/components/Pane/Pane.js +171 -0
  289. package/dist/components/Pane/Pane.js.map +1 -0
  290. package/dist/components/Pane/Pane.utils.d.ts +10 -0
  291. package/dist/components/Pane/Pane.utils.js +7 -0
  292. package/dist/components/Pane/Pane.utils.js.map +1 -0
  293. package/dist/components/Pane/index.d.ts +3 -0
  294. package/dist/components/Pane/index.js +3 -0
  295. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.d.ts +9 -0
  296. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js +76 -0
  297. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js.map +1 -0
  298. package/dist/components/PlainTextEditor/index.d.ts +18 -0
  299. package/dist/components/PlainTextEditor/index.js +71 -0
  300. package/dist/components/PlainTextEditor/index.js.map +1 -0
  301. package/dist/components/Popover/Popover.d.ts +13 -0
  302. package/dist/components/Popover/Popover.js +48 -0
  303. package/dist/components/Popover/Popover.js.map +1 -0
  304. package/dist/components/Popover/constants.d.ts +1 -0
  305. package/dist/components/Popover/constants.js +6 -0
  306. package/dist/components/Popover/constants.js.map +1 -0
  307. package/dist/components/Popover/index.d.ts +1 -0
  308. package/dist/components/Popover/index.js +2 -0
  309. package/dist/components/PortalSlot.d.ts +11 -0
  310. package/dist/components/PortalSlot.js +41 -0
  311. package/dist/components/PortalSlot.js.map +1 -0
  312. package/dist/components/ProgressBar/ProgressBar.d.ts +38 -0
  313. package/dist/components/ProgressBar/ProgressBar.js +82 -0
  314. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  315. package/dist/components/ProgressBar/index.d.ts +2 -0
  316. package/dist/components/ProgressBar/index.js +2 -0
  317. package/dist/components/RadioButton/RadioButton.d.ts +62 -0
  318. package/dist/components/RadioButton/RadioButton.js +38 -0
  319. package/dist/components/RadioButton/RadioButton.js.map +1 -0
  320. package/dist/components/RadioButton/constants.d.ts +30 -0
  321. package/dist/components/RadioButton/constants.js +55 -0
  322. package/dist/components/RadioButton/constants.js.map +1 -0
  323. package/dist/components/RadioButton/index.d.ts +2 -0
  324. package/dist/components/RadioButton/index.js +2 -0
  325. package/dist/components/RadioCard/RadioCard.d.ts +26 -0
  326. package/dist/components/RadioCard/RadioCard.js +43 -0
  327. package/dist/components/RadioCard/RadioCard.js.map +1 -0
  328. package/dist/components/RadioCard/index.d.ts +2 -0
  329. package/dist/components/RadioCard/index.js +2 -0
  330. package/dist/components/RadioGroup/RadioGroup.d.ts +5 -0
  331. package/dist/components/RadioGroup/RadioGroup.js +17 -0
  332. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  333. package/dist/components/RadioGroup/RadioGroupItem.d.ts +5 -0
  334. package/dist/components/RadioGroup/RadioGroupItem.js +22 -0
  335. package/dist/components/RadioGroup/RadioGroupItem.js.map +1 -0
  336. package/dist/components/RadioGroup/index.d.ts +4 -0
  337. package/dist/components/RadioGroup/index.js +3 -0
  338. package/dist/components/Select/Select.d.ts +84 -0
  339. package/dist/components/Select/Select.js +120 -0
  340. package/dist/components/Select/Select.js.map +1 -0
  341. package/dist/components/Select/SelectPrimitive.d.ts +17 -0
  342. package/dist/components/Select/SelectPrimitive.js +126 -0
  343. package/dist/components/Select/SelectPrimitive.js.map +1 -0
  344. package/dist/components/Select/index.d.ts +4 -0
  345. package/dist/components/Select/index.js +3 -0
  346. package/dist/components/Skeleton/Skeleton.d.ts +13 -0
  347. package/dist/components/Skeleton/Skeleton.js +25 -0
  348. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  349. package/dist/components/Skeleton/index.d.ts +1 -0
  350. package/dist/components/Skeleton/index.js +2 -0
  351. package/dist/components/Slider/Slider.d.ts +33 -0
  352. package/dist/components/Slider/Slider.js +64 -0
  353. package/dist/components/Slider/Slider.js.map +1 -0
  354. package/dist/components/Slider/index.d.ts +2 -0
  355. package/dist/components/Slider/index.js +2 -0
  356. package/dist/components/SparkLineChart/SparkLineChart.d.ts +14 -0
  357. package/dist/components/SparkLineChart/SparkLineChart.js +112 -0
  358. package/dist/components/SparkLineChart/SparkLineChart.js.map +1 -0
  359. package/dist/components/SparkLineChart/index.d.ts +2 -0
  360. package/dist/components/SparkLineChart/index.js +2 -0
  361. package/dist/components/Spinner/Spinner.d.ts +12 -0
  362. package/dist/components/Spinner/Spinner.js +33 -0
  363. package/dist/components/Spinner/Spinner.js.map +1 -0
  364. package/dist/components/Spinner/index.d.ts +1 -0
  365. package/dist/components/Spinner/index.js +2 -0
  366. package/dist/components/SplitViewPane/SplitViewPane.d.ts +41 -0
  367. package/dist/components/SplitViewPane/SplitViewPane.js +314 -0
  368. package/dist/components/SplitViewPane/SplitViewPane.js.map +1 -0
  369. package/dist/components/SplitViewPane/SplitViewPaneHeader.d.ts +22 -0
  370. package/dist/components/SplitViewPane/SplitViewPaneHeader.js +105 -0
  371. package/dist/components/SplitViewPane/SplitViewPaneHeader.js.map +1 -0
  372. package/dist/components/SplitViewPane/index.d.ts +2 -0
  373. package/dist/components/SplitViewPane/index.js +3 -0
  374. package/dist/components/SplitViewPane/openPaneRegistry.d.ts +2 -0
  375. package/dist/components/SplitViewPane/openPaneRegistry.js +49 -0
  376. package/dist/components/SplitViewPane/openPaneRegistry.js.map +1 -0
  377. package/dist/components/Switch/Switch.d.ts +35 -0
  378. package/dist/components/Switch/Switch.js +65 -0
  379. package/dist/components/Switch/Switch.js.map +1 -0
  380. package/dist/components/Switch/index.d.ts +2 -0
  381. package/dist/components/Switch/index.js +2 -0
  382. package/dist/components/Tabs/index.d.ts +27 -0
  383. package/dist/components/Tabs/index.js +45 -0
  384. package/dist/components/Tabs/index.js.map +1 -0
  385. package/dist/components/Text/Text.d.ts +13 -0
  386. package/dist/components/Text/Text.js +58 -0
  387. package/dist/components/Text/Text.js.map +1 -0
  388. package/dist/components/Text/index.d.ts +2 -0
  389. package/dist/components/Text/index.js +2 -0
  390. package/dist/components/TextVirtualizer.d.ts +8 -0
  391. package/dist/components/TextVirtualizer.js +53 -0
  392. package/dist/components/TextVirtualizer.js.map +1 -0
  393. package/dist/components/TextWithLinks.d.ts +6 -0
  394. package/dist/components/TextWithLinks.js +61 -0
  395. package/dist/components/TextWithLinks.js.map +1 -0
  396. package/dist/components/Textarea/Textarea.d.ts +47 -0
  397. package/dist/components/Textarea/Textarea.js +150 -0
  398. package/dist/components/Textarea/Textarea.js.map +1 -0
  399. package/dist/components/Textarea/index.d.ts +2 -0
  400. package/dist/components/Textarea/index.js +2 -0
  401. package/dist/components/ThinkingState/LoadingIndicator.d.ts +19 -0
  402. package/dist/components/ThinkingState/LoadingIndicator.js +2 -0
  403. package/dist/components/ThinkingState/NOTICE +25 -0
  404. package/dist/components/ThinkingState/ThinkingState.d.ts +21 -0
  405. package/dist/components/ThinkingState/ThinkingState.js +42 -0
  406. package/dist/components/ThinkingState/ThinkingState.js.map +1 -0
  407. package/dist/components/ThinkingState/ThinkingStateTimer.d.ts +9 -0
  408. package/dist/components/ThinkingState/ThinkingStateTimer.js +43 -0
  409. package/dist/components/ThinkingState/ThinkingStateTimer.js.map +1 -0
  410. package/dist/components/ThinkingState/index.d.ts +4 -0
  411. package/dist/components/ThinkingState/index.js +3 -0
  412. package/dist/components/Toast/ToastContext.d.ts +5 -0
  413. package/dist/components/Toast/ToastContext.js +9 -0
  414. package/dist/components/Toast/ToastContext.js.map +1 -0
  415. package/dist/components/Toast/index.d.ts +13 -0
  416. package/dist/components/Toast/index.js +166 -0
  417. package/dist/components/Toast/index.js.map +1 -0
  418. package/dist/components/Toast/useToast.d.ts +3 -0
  419. package/dist/components/Toast/useToast.js +11 -0
  420. package/dist/components/Toast/useToast.js.map +1 -0
  421. package/dist/components/Tooltip/Tooltip.d.ts +19 -0
  422. package/dist/components/Tooltip/Tooltip.js +57 -0
  423. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  424. package/dist/components/Tooltip/index.d.ts +3 -0
  425. package/dist/components/Tooltip/index.js +3 -0
  426. package/dist/components/TopList/TopList.d.ts +3 -0
  427. package/dist/components/TopList/TopList.js +186 -0
  428. package/dist/components/TopList/TopList.js.map +1 -0
  429. package/dist/components/TopList/TopList.types.d.ts +34 -0
  430. package/dist/components/TopList/TopList.types.js +0 -0
  431. package/dist/components/TopList/TopList.utils.d.ts +3 -0
  432. package/dist/components/TopList/TopList.utils.js +16 -0
  433. package/dist/components/TopList/TopList.utils.js.map +1 -0
  434. package/dist/components/TopList/index.d.ts +2 -0
  435. package/dist/components/TopList/index.js +2 -0
  436. package/dist/components/Typeahead/Typeahead.d.ts +5 -0
  437. package/dist/components/Typeahead/Typeahead.js +305 -0
  438. package/dist/components/Typeahead/Typeahead.js.map +1 -0
  439. package/dist/components/Typeahead/Typeahead.types.d.ts +99 -0
  440. package/dist/components/Typeahead/Typeahead.types.js +0 -0
  441. package/dist/components/Typeahead/Typeahead.utils.d.ts +25 -0
  442. package/dist/components/Typeahead/Typeahead.utils.js +73 -0
  443. package/dist/components/Typeahead/Typeahead.utils.js.map +1 -0
  444. package/dist/components/Typeahead/TypeaheadParts.d.ts +25 -0
  445. package/dist/components/Typeahead/TypeaheadParts.js +109 -0
  446. package/dist/components/Typeahead/TypeaheadParts.js.map +1 -0
  447. package/dist/components/Typeahead/TypeaheadView.d.ts +81 -0
  448. package/dist/components/Typeahead/TypeaheadView.js +228 -0
  449. package/dist/components/Typeahead/TypeaheadView.js.map +1 -0
  450. package/dist/components/Typeahead/index.d.ts +2 -0
  451. package/dist/components/Typeahead/index.js +2 -0
  452. package/dist/components/Typeahead/useTypeaheadDomSync.d.ts +15 -0
  453. package/dist/components/Typeahead/useTypeaheadDomSync.js +43 -0
  454. package/dist/components/Typeahead/useTypeaheadDomSync.js.map +1 -0
  455. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.d.ts +11 -0
  456. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js +32 -0
  457. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js.map +1 -0
  458. package/dist/components/UnsavedChangesDialog.d.ts +14 -0
  459. package/dist/components/UnsavedChangesDialog.js +67 -0
  460. package/dist/components/UnsavedChangesDialog.js.map +1 -0
  461. package/dist/components/index.d.ts +58 -0
  462. package/dist/components/index.js +35 -0
  463. package/dist/components.css +102 -0
  464. package/dist/contexts/ErrorReporterContext.d.ts +6 -0
  465. package/dist/contexts/ErrorReporterContext.js +7 -0
  466. package/dist/contexts/ErrorReporterContext.js.map +1 -0
  467. package/dist/hooks/AppThemeProvider.d.ts +8 -0
  468. package/dist/hooks/AppThemeProvider.js +52 -0
  469. package/dist/hooks/AppThemeProvider.js.map +1 -0
  470. package/dist/hooks/useColorScheme.d.ts +20 -0
  471. package/dist/hooks/useColorScheme.js +50 -0
  472. package/dist/hooks/useColorScheme.js.map +1 -0
  473. package/dist/icons/LongTailPhosphorIcons.d.ts +51 -0
  474. package/dist/icons/LongTailPhosphorIcons.js +102 -0
  475. package/dist/icons/LongTailPhosphorIcons.js.map +1 -0
  476. package/dist/icons/PaddedPhosphorIcons.d.ts +17 -0
  477. package/dist/icons/PaddedPhosphorIcons.js +55 -0
  478. package/dist/icons/PaddedPhosphorIcons.js.map +1 -0
  479. package/dist/icons/WeightedPhosphorIcons.d.ts +45 -0
  480. package/dist/icons/WeightedPhosphorIcons.js +96 -0
  481. package/dist/icons/WeightedPhosphorIcons.js.map +1 -0
  482. package/dist/icons/index.d.ts +2 -0
  483. package/dist/icons/index.js +4 -0
  484. package/dist/index.d.ts +1 -0
  485. package/dist/index.js +36 -0
  486. package/dist/styles.css +10 -0
  487. package/dist/utilities.css +2 -0
  488. package/dist/utils/VirtuosoCustomScrollParentContext/index.d.ts +7 -0
  489. package/dist/utils/VirtuosoCustomScrollParentContext/index.js +15 -0
  490. package/dist/utils/VirtuosoCustomScrollParentContext/index.js.map +1 -0
  491. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.d.ts +4 -0
  492. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js +10 -0
  493. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js.map +1 -0
  494. package/dist/utils/ZIndexContext.d.ts +5 -0
  495. package/dist/utils/ZIndexContext.js +13 -0
  496. package/dist/utils/ZIndexContext.js.map +1 -0
  497. package/dist/utils/animation.d.ts +37 -0
  498. package/dist/utils/animation.js +42 -0
  499. package/dist/utils/animation.js.map +1 -0
  500. package/dist/utils/chartAxisLayout.d.ts +6 -0
  501. package/dist/utils/chartAxisLayout.js +8 -0
  502. package/dist/utils/chartAxisLayout.js.map +1 -0
  503. package/dist/utils/chartColors.d.ts +38 -0
  504. package/dist/utils/chartColors.js +78 -0
  505. package/dist/utils/chartColors.js.map +1 -0
  506. package/dist/utils/chartConstants.d.ts +10 -0
  507. package/dist/utils/chartConstants.js +15 -0
  508. package/dist/utils/chartConstants.js.map +1 -0
  509. package/dist/utils/chartValues.d.ts +2 -0
  510. package/dist/utils/chartValues.js +36 -0
  511. package/dist/utils/chartValues.js.map +1 -0
  512. package/dist/utils/clamp.d.ts +2 -0
  513. package/dist/utils/clamp.js +7 -0
  514. package/dist/utils/clamp.js.map +1 -0
  515. package/dist/utils/cn.d.ts +2 -0
  516. package/dist/utils/cn.js +191 -0
  517. package/dist/utils/cn.js.map +1 -0
  518. package/dist/utils/componentSizes.d.ts +104 -0
  519. package/dist/utils/componentSizes.js +104 -0
  520. package/dist/utils/componentSizes.js.map +1 -0
  521. package/dist/utils/controlIconSizes.d.ts +10 -0
  522. package/dist/utils/controlIconSizes.js +32 -0
  523. package/dist/utils/controlIconSizes.js.map +1 -0
  524. package/dist/utils/csp-nonce.d.ts +11 -0
  525. package/dist/utils/csp-nonce.js +17 -0
  526. package/dist/utils/csp-nonce.js.map +1 -0
  527. package/dist/utils/get-closest-scroll-parent.d.ts +1 -0
  528. package/dist/utils/get-closest-scroll-parent.js +16 -0
  529. package/dist/utils/get-closest-scroll-parent.js.map +1 -0
  530. package/dist/utils/get-color-by-string.d.ts +1 -0
  531. package/dist/utils/get-color-by-string.js +10 -0
  532. package/dist/utils/get-color-by-string.js.map +1 -0
  533. package/dist/utils/getYAxisLeftMargin.d.ts +10 -0
  534. package/dist/utils/getYAxisLeftMargin.js +20 -0
  535. package/dist/utils/getYAxisLeftMargin.js.map +1 -0
  536. package/dist/utils/icon-types.d.ts +8 -0
  537. package/dist/utils/icon-types.js +0 -0
  538. package/dist/utils/lazy-codemirror-loader.d.ts +70 -0
  539. package/dist/utils/lazy-codemirror-loader.js +79 -0
  540. package/dist/utils/lazy-codemirror-loader.js.map +1 -0
  541. package/dist/utils/merge-refs.d.ts +2 -0
  542. package/dist/utils/merge-refs.js +13 -0
  543. package/dist/utils/merge-refs.js.map +1 -0
  544. package/dist/utils/parseTextLinks.d.ts +7 -0
  545. package/dist/utils/parseTextLinks.js +46 -0
  546. package/dist/utils/parseTextLinks.js.map +1 -0
  547. package/dist/utils/prettify-error-payload.d.ts +7 -0
  548. package/dist/utils/prettify-error-payload.js +188 -0
  549. package/dist/utils/prettify-error-payload.js.map +1 -0
  550. package/dist/utils/spacing.d.ts +30 -0
  551. package/dist/utils/spacing.js +34 -0
  552. package/dist/utils/spacing.js.map +1 -0
  553. package/dist/utils/useCodeMirror.d.ts +7 -0
  554. package/dist/utils/useCodeMirror.js +28 -0
  555. package/dist/utils/useCodeMirror.js.map +1 -0
  556. package/dist/utils/useZIndex.d.ts +52 -0
  557. package/dist/utils/useZIndex.js +62 -0
  558. package/dist/utils/useZIndex.js.map +1 -0
  559. package/dist/utils/zIndices.d.ts +42 -0
  560. package/dist/utils/zIndices.js +46 -0
  561. package/dist/utils/zIndices.js.map +1 -0
  562. package/docs/DESIGN.md +134 -0
  563. package/docs/STYLES.md +568 -0
  564. package/package.json +619 -0
  565. package/tailwind.preset.cjs +738 -0
  566. package/tailwind.preset.d.cts +5 -0
@@ -0,0 +1,227 @@
1
+ import { getMimeTypeFromDataUrl, isValidUrl } from "./utils.js";
2
+ //#region packages/components/src/components/Code/ImageReplacerExtension.ts
3
+ function getImageReplacerExtensions(cm) {
4
+ const { StateEffect, StateField, Decoration, EditorView, ViewPlugin, WidgetType: WidgetTypeBase, syntaxTree } = cm;
5
+ class DataUrlWidget extends WidgetTypeBase {
6
+ src;
7
+ mimeType;
8
+ constructor(src, mimeType) {
9
+ super();
10
+ this.src = src;
11
+ this.mimeType = mimeType;
12
+ }
13
+ toDOM() {
14
+ if (this.mimeType.startsWith("image/")) {
15
+ const img = document.createElement("img");
16
+ img.src = this.src;
17
+ img.style.maxWidth = "100%";
18
+ return img;
19
+ }
20
+ if (this.mimeType === "application/pdf") {
21
+ const iframe = document.createElement("iframe");
22
+ iframe.src = this.src;
23
+ iframe.style.width = "100%";
24
+ iframe.style.maxWidth = "100%";
25
+ iframe.style.height = "480px";
26
+ iframe.style.border = "0";
27
+ return iframe;
28
+ }
29
+ if (this.mimeType.startsWith("audio/")) {
30
+ const audio = document.createElement("audio");
31
+ audio.controls = true;
32
+ audio.style.width = "100%";
33
+ const source = document.createElement("source");
34
+ source.src = this.src;
35
+ source.type = this.mimeType;
36
+ audio.appendChild(source);
37
+ return audio;
38
+ }
39
+ const fallback = document.createElement("span");
40
+ fallback.textContent = this.src;
41
+ return fallback;
42
+ }
43
+ }
44
+ class UrlImageWidget extends WidgetTypeBase {
45
+ params;
46
+ constructor(params) {
47
+ super();
48
+ this.params = params;
49
+ }
50
+ positionTooltip(parent, tooltip) {
51
+ const rect = parent.getBoundingClientRect();
52
+ const parentRect = parent.offsetParent?.getBoundingClientRect() || {
53
+ left: 0,
54
+ right: window.innerWidth
55
+ };
56
+ if (rect.left - parentRect.left > parentRect.right - rect.right) {
57
+ tooltip.style.left = "100%";
58
+ tooltip.style.transform = "translateX(-100%)";
59
+ tooltip.style.right = "";
60
+ } else {
61
+ tooltip.style.right = "100%";
62
+ tooltip.style.transform = "translateX(100%)";
63
+ tooltip.style.left = "";
64
+ }
65
+ tooltip.style.bottom = "100%";
66
+ }
67
+ createTooltipElement() {
68
+ const tooltip = document.createElement("div");
69
+ tooltip.textContent = "Click to render image";
70
+ tooltip.style.position = "absolute";
71
+ tooltip.style.backgroundColor = "black";
72
+ tooltip.style.color = "white";
73
+ tooltip.style.padding = "5px";
74
+ tooltip.style.zIndex = "201";
75
+ tooltip.style.whiteSpace = "nowrap";
76
+ tooltip.style.visibility = "hidden";
77
+ tooltip.style.display = "block";
78
+ tooltip.style.fontFamily = "\"Inter\", -apple-system, \"system-ui\", \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"";
79
+ tooltip.style.borderRadius = "8px";
80
+ return tooltip;
81
+ }
82
+ createIconElement() {
83
+ const imageIconElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
84
+ imageIconElement.setAttribute("width", "24");
85
+ imageIconElement.setAttribute("height", "24");
86
+ imageIconElement.setAttribute("viewBox", "0 0 24 24");
87
+ imageIconElement.setAttribute("fill", "none");
88
+ const pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path");
89
+ pathElement.setAttribute("d", "M21 19V5C21 3.9 20.1 3 19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19ZM19 19H5V5H19V19ZM8.5 13.5L11 17L14.5 12.5L18 17H6L8.5 13.5Z");
90
+ pathElement.setAttribute("fill", "currentColor");
91
+ imageIconElement.appendChild(pathElement);
92
+ imageIconElement.style.display = "inline";
93
+ const tooltip = this.createTooltipElement();
94
+ const iconContainer = document.createElement("span");
95
+ iconContainer.appendChild(imageIconElement);
96
+ iconContainer.appendChild(tooltip);
97
+ iconContainer.style.cursor = "pointer";
98
+ iconContainer.style.position = "relative";
99
+ iconContainer.onmouseover = () => {
100
+ this.positionTooltip(iconContainer, tooltip);
101
+ tooltip.style.visibility = "visible";
102
+ };
103
+ iconContainer.onmouseout = () => {
104
+ tooltip.style.visibility = "hidden";
105
+ };
106
+ return iconContainer;
107
+ }
108
+ createImageElement() {
109
+ const imgElement = document.createElement("img");
110
+ imgElement.src = this.params.src;
111
+ imgElement.style.maxWidth = "100%";
112
+ imgElement.style.display = this.params.isOpen ? "block" : "none";
113
+ imgElement.style.cursor = "pointer";
114
+ imgElement.referrerPolicy = "no-referrer";
115
+ imgElement.onclick = (e) => {
116
+ e.preventDefault();
117
+ e.stopPropagation();
118
+ const imageEl = e.target;
119
+ if (imageEl.style.display === "none") {
120
+ imageEl.style.display = "block";
121
+ this.params.setOpen(true, this.params.position);
122
+ } else {
123
+ imageEl.style.display = "none";
124
+ this.params.setOpen(false, this.params.position);
125
+ }
126
+ };
127
+ return imgElement;
128
+ }
129
+ toDOM() {
130
+ const container = document.createElement("span");
131
+ container.className = "cm-image-widget";
132
+ const iconContainer = this.createIconElement();
133
+ const imgElement = this.createImageElement();
134
+ iconContainer.onclick = (e) => {
135
+ e.preventDefault();
136
+ e.stopPropagation();
137
+ this.toggleImage(container);
138
+ };
139
+ container.appendChild(iconContainer);
140
+ container.appendChild(imgElement);
141
+ return container;
142
+ }
143
+ toggleImage(container) {
144
+ const imgElement = container.querySelector("img");
145
+ if (imgElement) {
146
+ if (imgElement.style.display === "none") {
147
+ imgElement.style.display = "block";
148
+ this.params.setOpen(true, this.params.position);
149
+ } else {
150
+ imgElement.style.display = "none";
151
+ this.params.setOpen(false, this.params.position);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ const updateDecorationState = StateEffect.define();
157
+ const decorationStateField = StateField.define({
158
+ create() {
159
+ return /* @__PURE__ */ new Map();
160
+ },
161
+ update(map, tr) {
162
+ for (const effect of tr.effects) if (effect.is(updateDecorationState)) map.set(effect.value.id, effect.value.state);
163
+ return map;
164
+ }
165
+ });
166
+ function images(view) {
167
+ const widgets = [];
168
+ const state = view.state.field(decorationStateField);
169
+ for (const { from, to } of view.visibleRanges) syntaxTree(view.state).iterate({
170
+ from,
171
+ to,
172
+ enter: (node) => {
173
+ if (node.name === "String" || node.name === "Literal") {
174
+ const start = node.name === "Literal" ? node.from : node.from + 1;
175
+ const end = node.name === "Literal" ? node.to : node.to - 1;
176
+ const text = view.state.doc.sliceString(start, end);
177
+ const mimeType = getMimeTypeFromDataUrl(text);
178
+ if (mimeType != null && (mimeType.startsWith("image/") || mimeType === "application/pdf" || mimeType.startsWith("audio/"))) {
179
+ const deco = Decoration.replace({
180
+ widget: new DataUrlWidget(text, mimeType),
181
+ inclusive: true
182
+ });
183
+ widgets.push(deco.range(node.from, node.to));
184
+ } else if (isValidUrl(text)) {
185
+ const deco = Decoration.widget({
186
+ widget: new UrlImageWidget({
187
+ src: text,
188
+ isOpen: state.get(`${node.to}`),
189
+ setOpen: (newState, nodePosition) => {
190
+ view.dispatch({ effects: updateDecorationState.of({
191
+ id: `${nodePosition}`,
192
+ state: newState
193
+ }) });
194
+ },
195
+ position: node.to
196
+ }),
197
+ inclusive: true
198
+ });
199
+ widgets.push(deco.range(node.to));
200
+ }
201
+ }
202
+ }
203
+ });
204
+ return Decoration.set(widgets);
205
+ }
206
+ return {
207
+ decorationStateField,
208
+ imageReplacerPlugin: ViewPlugin.fromClass(class {
209
+ decorations;
210
+ constructor(view) {
211
+ this.decorations = images(view);
212
+ }
213
+ update(update) {
214
+ if (update.docChanged || update.viewportChanged || syntaxTree(update.startState) !== syntaxTree(update.state)) this.decorations = images(update.view);
215
+ }
216
+ }, {
217
+ decorations: (v) => v.decorations,
218
+ provide: (plugin) => EditorView.atomicRanges.of((view) => {
219
+ return view.plugin(plugin)?.decorations || Decoration.none;
220
+ })
221
+ })
222
+ };
223
+ }
224
+ //#endregion
225
+ export { getImageReplacerExtensions };
226
+
227
+ //# sourceMappingURL=ImageReplacerExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageReplacerExtension.js","names":[],"sources":["../../../src/components/Code/ImageReplacerExtension.ts"],"sourcesContent":["import type { Range } from '@codemirror/state';\nimport type {\n Decoration,\n DecorationSet,\n EditorView,\n ViewUpdate,\n} from '@codemirror/view';\n\nimport type { CMBundle } from '../../utils/lazy-codemirror-loader';\nimport { getMimeTypeFromDataUrl, isValidUrl } from './utils';\n\nexport function getImageReplacerExtensions(cm: CMBundle) {\n const {\n StateEffect,\n StateField,\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType: WidgetTypeBase,\n syntaxTree,\n } = cm;\n\n class DataUrlWidget extends WidgetTypeBase {\n constructor(\n private src: string,\n private mimeType: string\n ) {\n super();\n }\n\n toDOM() {\n if (this.mimeType.startsWith('image/')) {\n const img = document.createElement('img');\n img.src = this.src;\n img.style.maxWidth = '100%';\n return img;\n }\n\n if (this.mimeType === 'application/pdf') {\n const iframe = document.createElement('iframe');\n iframe.src = this.src;\n iframe.style.width = '100%';\n iframe.style.maxWidth = '100%';\n iframe.style.height = '480px';\n iframe.style.border = '0';\n return iframe;\n }\n\n if (this.mimeType.startsWith('audio/')) {\n const audio = document.createElement('audio');\n audio.controls = true;\n audio.style.width = '100%';\n\n const source = document.createElement('source');\n source.src = this.src;\n source.type = this.mimeType;\n audio.appendChild(source);\n return audio;\n }\n\n const fallback = document.createElement('span');\n fallback.textContent = this.src;\n return fallback;\n }\n }\n\n class UrlImageWidget extends WidgetTypeBase {\n constructor(\n private params: {\n src: string;\n isOpen: boolean;\n setOpen: (newState: boolean, nodePosition: number) => void;\n position: number;\n }\n ) {\n super();\n }\n\n positionTooltip(parent: HTMLElement, tooltip: HTMLElement) {\n const rect = parent.getBoundingClientRect();\n const parentRect = parent.offsetParent?.getBoundingClientRect() || {\n left: 0,\n right: window.innerWidth,\n };\n\n const leftSpace = rect.left - parentRect.left;\n const rightSpace = parentRect.right - rect.right;\n\n if (leftSpace > rightSpace) {\n tooltip.style.left = '100%';\n tooltip.style.transform = 'translateX(-100%)';\n tooltip.style.right = '';\n } else {\n tooltip.style.right = '100%';\n tooltip.style.transform = 'translateX(100%)';\n tooltip.style.left = '';\n }\n\n tooltip.style.bottom = '100%';\n }\n\n createTooltipElement() {\n const tooltip = document.createElement('div');\n tooltip.textContent = 'Click to render image';\n tooltip.style.position = 'absolute';\n tooltip.style.backgroundColor = 'black';\n tooltip.style.color = 'white';\n tooltip.style.padding = '5px';\n tooltip.style.zIndex = '201';\n tooltip.style.whiteSpace = 'nowrap';\n tooltip.style.visibility = 'hidden';\n tooltip.style.display = 'block';\n tooltip.style.fontFamily =\n '\"Inter\", -apple-system, \"system-ui\", \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n tooltip.style.borderRadius = '8px';\n return tooltip;\n }\n\n createIconElement() {\n const imageIconElement = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'svg'\n );\n imageIconElement.setAttribute('width', '24');\n imageIconElement.setAttribute('height', '24');\n imageIconElement.setAttribute('viewBox', '0 0 24 24');\n imageIconElement.setAttribute('fill', 'none');\n\n const pathElement = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n pathElement.setAttribute(\n 'd',\n 'M21 19V5C21 3.9 20.1 3 19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19ZM19 19H5V5H19V19ZM8.5 13.5L11 17L14.5 12.5L18 17H6L8.5 13.5Z'\n );\n pathElement.setAttribute('fill', 'currentColor');\n imageIconElement.appendChild(pathElement);\n imageIconElement.style.display = 'inline';\n\n const tooltip = this.createTooltipElement();\n\n const iconContainer = document.createElement('span');\n iconContainer.appendChild(imageIconElement);\n iconContainer.appendChild(tooltip);\n iconContainer.style.cursor = 'pointer';\n iconContainer.style.position = 'relative';\n\n iconContainer.onmouseover = () => {\n this.positionTooltip(iconContainer, tooltip);\n tooltip.style.visibility = 'visible';\n };\n iconContainer.onmouseout = () => {\n tooltip.style.visibility = 'hidden';\n };\n return iconContainer;\n }\n\n createImageElement() {\n const imgElement = document.createElement('img');\n imgElement.src = this.params.src;\n imgElement.style.maxWidth = '100%';\n imgElement.style.display = this.params.isOpen ? 'block' : 'none';\n imgElement.style.cursor = 'pointer';\n imgElement.referrerPolicy = 'no-referrer';\n\n imgElement.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n const imageEl = e.target as HTMLImageElement;\n if (imageEl.style.display === 'none') {\n imageEl.style.display = 'block';\n this.params.setOpen(true, this.params.position);\n } else {\n imageEl.style.display = 'none';\n this.params.setOpen(false, this.params.position);\n }\n };\n return imgElement;\n }\n\n toDOM() {\n const container = document.createElement('span');\n container.className = 'cm-image-widget';\n\n const iconContainer = this.createIconElement();\n const imgElement = this.createImageElement();\n iconContainer.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.toggleImage(container);\n };\n\n container.appendChild(iconContainer);\n container.appendChild(imgElement);\n return container;\n }\n\n toggleImage(container: HTMLElement) {\n const imgElement = container.querySelector('img');\n if (imgElement) {\n if (imgElement.style.display === 'none') {\n imgElement.style.display = 'block';\n this.params.setOpen(true, this.params.position);\n } else {\n imgElement.style.display = 'none';\n this.params.setOpen(false, this.params.position);\n }\n }\n }\n }\n\n const updateDecorationState = StateEffect.define<{\n id: string;\n state: boolean;\n }>();\n\n const decorationStateField = StateField.define({\n create() {\n return new Map();\n },\n update(map, tr) {\n for (const effect of tr.effects) {\n if (effect.is(updateDecorationState)) {\n map.set(effect.value.id, effect.value.state);\n }\n }\n return map;\n },\n });\n\n function images(view: EditorView) {\n const widgets: Range<Decoration>[] = [];\n const state = view.state.field(decorationStateField);\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from,\n to,\n enter: (node) => {\n if (node.name === 'String' || node.name === 'Literal') {\n const start = node.name === 'Literal' ? node.from : node.from + 1;\n const end = node.name === 'Literal' ? node.to : node.to - 1;\n const text = view.state.doc.sliceString(start, end);\n const mimeType = getMimeTypeFromDataUrl(text);\n const shouldRenderDataUrl =\n mimeType != null &&\n (mimeType.startsWith('image/') ||\n mimeType === 'application/pdf' ||\n mimeType.startsWith('audio/'));\n\n if (shouldRenderDataUrl) {\n const deco = Decoration.replace({\n widget: new DataUrlWidget(text, mimeType),\n inclusive: true,\n });\n widgets.push(deco.range(node.from, node.to));\n } else if (isValidUrl(text)) {\n const deco = Decoration.widget({\n widget: new UrlImageWidget({\n src: text,\n isOpen: state.get(`${node.to}`),\n setOpen: (newState: boolean, nodePosition: number) => {\n view.dispatch({\n effects: updateDecorationState.of({\n id: `${nodePosition}`,\n state: newState,\n }),\n });\n },\n position: node.to,\n }),\n inclusive: true,\n });\n widgets.push(deco.range(node.to));\n }\n }\n },\n });\n }\n return Decoration.set(widgets);\n }\n\n const imageReplacerPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = images(view);\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = images(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n provide: (plugin) =>\n EditorView.atomicRanges.of((view) => {\n return view.plugin(plugin)?.decorations || Decoration.none;\n }),\n }\n );\n\n return { decorationStateField, imageReplacerPlugin };\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Extension } from '@codemirror/state';
2
+ import type { CMBundle } from '../../utils/lazy-codemirror-loader.js';
3
+ /** Highlights JSON values referenced by variable mappings. */
4
+ export declare function createJsonHighlighterExtension(cm: CMBundle, variableMapping: Record<string, string | null>, dataType: 'input' | 'output' | 'referenceOutput', activeVariable: string | null): Extension;
@@ -0,0 +1,172 @@
1
+ //#region packages/components/src/components/Code/JsonHighlighterExtension.ts
2
+ /** Highlights JSON values referenced by variable mappings. */
3
+ function createJsonHighlighterExtension(cm, variableMapping, dataType, activeVariable) {
4
+ const { Decoration, ViewPlugin, syntaxTree } = cm;
5
+ return ViewPlugin.fromClass(class {
6
+ decorations;
7
+ constructor(view) {
8
+ this.decorations = this.getDecorations(view);
9
+ }
10
+ getDecorations(view) {
11
+ const relevantMappings = Object.entries(variableMapping).filter(([, path]) => path === dataType || path?.startsWith(`${dataType}.`));
12
+ if (relevantMappings.length === 0) return Decoration.none;
13
+ const ranges = [];
14
+ for (const [variableName, path] of relevantMappings) {
15
+ if (!path) continue;
16
+ const highlightClass = activeVariable === variableName ? "bg-yellow-200 dark:bg-yellow-800" : "bg-green-100 dark:bg-green-950";
17
+ if (path === dataType) {
18
+ this.addDecoration(ranges, 0, view.state.doc.length, highlightClass);
19
+ continue;
20
+ }
21
+ const actualPath = path.substring(dataType.length + 1);
22
+ const pathSegments = this.parseJsonPath(actualPath);
23
+ this.findMatchingNodes(view, pathSegments, ranges, highlightClass);
24
+ }
25
+ return Decoration.set(ranges.map(({ from, to, decoration }) => Decoration.mark({ class: decoration.spec.class }).range(from, to)));
26
+ }
27
+ /** Parses property, array-index, and wildcard path segments. */
28
+ parseJsonPath(path) {
29
+ const segments = [];
30
+ let currentSegment = "";
31
+ let inBracket = false;
32
+ for (let i = 0; i < path.length; i++) {
33
+ const char = path[i];
34
+ if (char === "." && !inBracket) {
35
+ if (currentSegment) {
36
+ segments.push({
37
+ type: "property",
38
+ value: currentSegment
39
+ });
40
+ currentSegment = "";
41
+ }
42
+ } else if (char === "[") {
43
+ if (currentSegment) {
44
+ segments.push({
45
+ type: "property",
46
+ value: currentSegment
47
+ });
48
+ currentSegment = "";
49
+ }
50
+ inBracket = true;
51
+ } else if (char === "]" && inBracket) {
52
+ if (currentSegment) {
53
+ if (currentSegment === "*") segments.push({
54
+ type: "wildcard",
55
+ value: "*"
56
+ });
57
+ else {
58
+ const index = parseInt(currentSegment, 10);
59
+ segments.push({
60
+ type: "index",
61
+ value: isNaN(index) ? currentSegment : index
62
+ });
63
+ }
64
+ currentSegment = "";
65
+ }
66
+ inBracket = false;
67
+ } else currentSegment += char;
68
+ }
69
+ if (currentSegment) {
70
+ const numericIndex = parseInt(currentSegment, 10);
71
+ if (currentSegment === "*") segments.push({
72
+ type: "wildcard",
73
+ value: "*"
74
+ });
75
+ else if (!isNaN(numericIndex) && numericIndex.toString() === currentSegment) segments.push({
76
+ type: "index",
77
+ value: numericIndex
78
+ });
79
+ else segments.push({
80
+ type: "property",
81
+ value: currentSegment
82
+ });
83
+ }
84
+ return segments;
85
+ }
86
+ findMatchingNodes(view, pathSegments, ranges, highlightClass, currentDepth = 0, parentFrom = 0, parentTo = view.state.doc.length) {
87
+ const currentSegment = pathSegments[currentDepth];
88
+ if (!currentSegment) return;
89
+ syntaxTree(view.state).iterate({
90
+ from: parentFrom,
91
+ to: parentTo,
92
+ enter: (node) => {
93
+ if (currentSegment.type === "property" && node.name === "Property") {
94
+ const { keyNode, valueNode } = this.extractPropertyNodes(node);
95
+ if (!keyNode) return;
96
+ if (this.extractKeyName(view, keyNode) !== currentSegment.value) return;
97
+ if (currentDepth === pathSegments.length - 1 && valueNode) this.addDecoration(ranges, valueNode.from, valueNode.to, highlightClass);
98
+ else if (currentDepth < pathSegments.length - 1 && valueNode) {
99
+ if (valueNode.name === "Object" || valueNode.name === "Array") this.findMatchingNodes(view, pathSegments, ranges, highlightClass, currentDepth + 1, valueNode.from, valueNode.to);
100
+ }
101
+ } else if ((currentSegment.type === "index" || currentSegment.type === "wildcard") && node.name === "Array") {
102
+ const elements = this.extractArrayElements(node);
103
+ if (currentSegment.type === "index") {
104
+ const targetIndex = currentSegment.value;
105
+ const resolvedIndex = targetIndex >= 0 ? targetIndex : elements.length + targetIndex;
106
+ if (resolvedIndex < 0 || resolvedIndex >= elements.length) return;
107
+ const targetElement = elements[resolvedIndex];
108
+ if (currentDepth === pathSegments.length - 1) this.addDecoration(ranges, targetElement.from, targetElement.to, highlightClass);
109
+ else if (currentDepth < pathSegments.length - 1) this.findMatchingNodes(view, pathSegments, ranges, highlightClass, currentDepth + 1, targetElement.from, targetElement.to);
110
+ } else if (currentSegment.type === "wildcard") elements.forEach((element) => {
111
+ if (currentDepth === pathSegments.length - 1) this.addDecoration(ranges, element.from, element.to, highlightClass);
112
+ else if (currentDepth < pathSegments.length - 1) this.findMatchingNodes(view, pathSegments, ranges, highlightClass, currentDepth + 1, element.from, element.to);
113
+ });
114
+ }
115
+ }
116
+ });
117
+ }
118
+ extractArrayElements(arrayNode) {
119
+ const elements = [];
120
+ const cursor = arrayNode.node.cursor();
121
+ if (cursor.firstChild()) {
122
+ if (cursor.nextSibling()) do
123
+ if (cursor.name === "Expression" || cursor.name === "Number" || cursor.name === "String" || cursor.name === "True" || cursor.name === "False" || cursor.name === "Null" || cursor.name === "Array" || cursor.name === "Object") elements.push({
124
+ from: cursor.from,
125
+ to: cursor.to,
126
+ name: cursor.name
127
+ });
128
+ while (cursor.nextSibling());
129
+ }
130
+ return elements;
131
+ }
132
+ extractPropertyNodes(node) {
133
+ let keyNode;
134
+ let valueNode;
135
+ const cursor = node.node.cursor();
136
+ if (cursor.firstChild()) do
137
+ if (cursor.name === "PropertyName") keyNode = {
138
+ from: cursor.from,
139
+ to: cursor.to,
140
+ name: cursor.name
141
+ };
142
+ else if (cursor.name === "Expression" || cursor.name === "Number" || cursor.name === "String" || cursor.name === "True" || cursor.name === "False" || cursor.name === "Null" || cursor.name === "Array" || cursor.name === "Object") valueNode = {
143
+ from: cursor.from,
144
+ to: cursor.to,
145
+ name: cursor.name
146
+ };
147
+ while (cursor.nextSibling());
148
+ return {
149
+ keyNode,
150
+ valueNode
151
+ };
152
+ }
153
+ extractKeyName(view, keyNode) {
154
+ return view.state.doc.sliceString(keyNode.from, keyNode.to).replace(/^["'](.*)["']$/, "$1");
155
+ }
156
+ addDecoration(ranges, from, to, highlightClass) {
157
+ const decoration = Decoration.mark({ class: highlightClass });
158
+ ranges.push({
159
+ from,
160
+ to,
161
+ decoration
162
+ });
163
+ }
164
+ update(update) {
165
+ if (update.docChanged || update.viewportChanged) this.decorations = this.getDecorations(update.view);
166
+ }
167
+ }, { decorations: (v) => v.decorations });
168
+ }
169
+ //#endregion
170
+ export { createJsonHighlighterExtension };
171
+
172
+ //# sourceMappingURL=JsonHighlighterExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonHighlighterExtension.js","names":[],"sources":["../../../src/components/Code/JsonHighlighterExtension.ts"],"sourcesContent":["import type { Extension } from '@codemirror/state';\nimport type {\n Decoration,\n DecorationSet,\n EditorView,\n ViewUpdate,\n} from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\n\nimport type { CMBundle } from '../../utils/lazy-codemirror-loader';\n\ntype NodeInfo = { from: number; to: number; name: string };\ntype DecoratedRange = { from: number; to: number; decoration: Decoration };\n\ntype PathSegment = {\n type: 'property' | 'index' | 'wildcard';\n value: string | number;\n};\n\n/** Highlights JSON values referenced by variable mappings. */\nexport function createJsonHighlighterExtension(\n cm: CMBundle,\n variableMapping: Record<string, string | null>,\n dataType: 'input' | 'output' | 'referenceOutput',\n activeVariable: string | null\n): Extension {\n const { Decoration, ViewPlugin, syntaxTree } = cm;\n return ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.getDecorations(view);\n }\n\n getDecorations(view: EditorView): DecorationSet {\n // Match the full data type or a path nested beneath it.\n const relevantMappings = Object.entries(variableMapping).filter(\n ([, path]) => path === dataType || path?.startsWith(`${dataType}.`)\n );\n\n if (relevantMappings.length === 0) {\n return Decoration.none;\n }\n\n const ranges: DecoratedRange[] = [];\n\n for (const [variableName, path] of relevantMappings) {\n if (!path) continue;\n\n const isActiveVariable = activeVariable === variableName;\n\n const highlightClass = isActiveVariable\n ? 'bg-yellow-200 dark:bg-yellow-800'\n : 'bg-green-100 dark:bg-green-950';\n\n if (path === dataType) {\n this.addDecoration(\n ranges,\n 0,\n view.state.doc.length,\n highlightClass\n );\n continue;\n }\n\n // Strip the data type and separator from the stored path.\n const actualPath = path.substring(dataType.length + 1);\n const pathSegments = this.parseJsonPath(actualPath);\n\n this.findMatchingNodes(view, pathSegments, ranges, highlightClass);\n }\n\n return Decoration.set(\n ranges.map(({ from, to, decoration }) =>\n Decoration.mark({\n class: decoration.spec.class as string,\n }).range(from, to)\n )\n );\n }\n\n /** Parses property, array-index, and wildcard path segments. */\n parseJsonPath(path: string): PathSegment[] {\n const segments: PathSegment[] = [];\n let currentSegment = '';\n let inBracket = false;\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n\n if (char === '.' && !inBracket) {\n if (currentSegment) {\n segments.push({ type: 'property', value: currentSegment });\n currentSegment = '';\n }\n } else if (char === '[') {\n if (currentSegment) {\n segments.push({ type: 'property', value: currentSegment });\n currentSegment = '';\n }\n inBracket = true;\n } else if (char === ']' && inBracket) {\n if (currentSegment) {\n if (currentSegment === '*') {\n segments.push({ type: 'wildcard', value: '*' });\n } else {\n const index = parseInt(currentSegment, 10);\n segments.push({\n type: 'index',\n value: isNaN(index) ? currentSegment : index,\n });\n }\n currentSegment = '';\n }\n inBracket = false;\n } else {\n currentSegment += char;\n }\n }\n\n if (currentSegment) {\n const numericIndex = parseInt(currentSegment, 10);\n if (currentSegment === '*') {\n segments.push({ type: 'wildcard', value: '*' });\n } else if (\n !isNaN(numericIndex) &&\n numericIndex.toString() === currentSegment\n ) {\n segments.push({ type: 'index', value: numericIndex });\n } else {\n segments.push({ type: 'property', value: currentSegment });\n }\n }\n\n return segments;\n }\n\n findMatchingNodes(\n view: EditorView,\n pathSegments: PathSegment[],\n ranges: DecoratedRange[],\n highlightClass: string,\n currentDepth = 0,\n parentFrom = 0,\n parentTo = view.state.doc.length\n ): void {\n const currentSegment = pathSegments[currentDepth];\n if (!currentSegment) return;\n\n const tree = syntaxTree(view.state);\n\n tree.iterate({\n from: parentFrom,\n to: parentTo,\n enter: (node) => {\n if (\n currentSegment.type === 'property' &&\n node.name === 'Property'\n ) {\n const { keyNode, valueNode } = this.extractPropertyNodes(node);\n\n if (!keyNode) return;\n\n const keyName = this.extractKeyName(view, keyNode);\n\n if (keyName !== currentSegment.value) return;\n\n if (currentDepth === pathSegments.length - 1 && valueNode) {\n this.addDecoration(\n ranges,\n valueNode.from,\n valueNode.to,\n highlightClass\n );\n } else if (currentDepth < pathSegments.length - 1 && valueNode) {\n if (valueNode.name === 'Object' || valueNode.name === 'Array') {\n this.findMatchingNodes(\n view,\n pathSegments,\n ranges,\n highlightClass,\n currentDepth + 1,\n valueNode.from,\n valueNode.to\n );\n }\n }\n } else if (\n (currentSegment.type === 'index' ||\n currentSegment.type === 'wildcard') &&\n node.name === 'Array'\n ) {\n const elements = this.extractArrayElements(node);\n if (currentSegment.type === 'index') {\n const targetIndex = currentSegment.value as number;\n\n // Negative indices address elements from the end of the array.\n const resolvedIndex =\n targetIndex >= 0\n ? targetIndex\n : elements.length + targetIndex;\n\n if (resolvedIndex < 0 || resolvedIndex >= elements.length) {\n return;\n }\n\n const targetElement = elements[resolvedIndex];\n\n if (currentDepth === pathSegments.length - 1) {\n this.addDecoration(\n ranges,\n targetElement.from,\n targetElement.to,\n highlightClass\n );\n } else if (currentDepth < pathSegments.length - 1) {\n this.findMatchingNodes(\n view,\n pathSegments,\n ranges,\n highlightClass,\n currentDepth + 1,\n targetElement.from,\n targetElement.to\n );\n }\n } else if (currentSegment.type === 'wildcard') {\n elements.forEach((element) => {\n if (currentDepth === pathSegments.length - 1) {\n this.addDecoration(\n ranges,\n element.from,\n element.to,\n highlightClass\n );\n } else if (currentDepth < pathSegments.length - 1) {\n this.findMatchingNodes(\n view,\n pathSegments,\n ranges,\n highlightClass,\n currentDepth + 1,\n element.from,\n element.to\n );\n }\n });\n }\n }\n },\n });\n }\n\n private extractArrayElements(arrayNode: SyntaxNodeRef): NodeInfo[] {\n const elements: NodeInfo[] = [];\n\n const cursor = arrayNode.node.cursor();\n\n if (cursor.firstChild()) {\n if (cursor.nextSibling()) {\n do {\n if (\n cursor.name === 'Expression' ||\n cursor.name === 'Number' ||\n cursor.name === 'String' ||\n cursor.name === 'True' ||\n cursor.name === 'False' ||\n cursor.name === 'Null' ||\n cursor.name === 'Array' ||\n cursor.name === 'Object'\n ) {\n elements.push({\n from: cursor.from,\n to: cursor.to,\n name: cursor.name,\n });\n }\n } while (cursor.nextSibling());\n }\n }\n\n return elements;\n }\n\n private extractPropertyNodes(node: SyntaxNodeRef): {\n keyNode?: NodeInfo;\n valueNode?: NodeInfo;\n } {\n let keyNode: NodeInfo | undefined;\n let valueNode: NodeInfo | undefined;\n\n const cursor = node.node.cursor();\n if (cursor.firstChild()) {\n do {\n if (cursor.name === 'PropertyName') {\n keyNode = {\n from: cursor.from,\n to: cursor.to,\n name: cursor.name,\n };\n } else if (\n cursor.name === 'Expression' ||\n cursor.name === 'Number' ||\n cursor.name === 'String' ||\n cursor.name === 'True' ||\n cursor.name === 'False' ||\n cursor.name === 'Null' ||\n cursor.name === 'Array' ||\n cursor.name === 'Object'\n ) {\n valueNode = {\n from: cursor.from,\n to: cursor.to,\n name: cursor.name,\n };\n }\n } while (cursor.nextSibling());\n }\n\n return { keyNode, valueNode };\n }\n\n private extractKeyName(view: EditorView, keyNode: NodeInfo): string {\n const keyText = view.state.doc.sliceString(keyNode.from, keyNode.to);\n return keyText.replace(/^[\"'](.*)[\"']$/, '$1');\n }\n\n private addDecoration(\n ranges: DecoratedRange[],\n from: number,\n to: number,\n highlightClass: string\n ): void {\n const decoration = Decoration.mark({\n class: highlightClass,\n });\n\n ranges.push({\n from,\n to,\n decoration,\n });\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.getDecorations(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n }\n );\n}\n"],"mappings":";;AAoBA,SAAgB,+BACd,IACA,iBACA,UACA,gBACW;CACX,MAAM,EAAE,YAAY,YAAY,eAAe;CAC/C,OAAO,WAAW,UAChB,MAAM;EACJ;EAEA,YAAY,MAAkB;GAC5B,KAAK,cAAc,KAAK,eAAe,IAAI;EAC7C;EAEA,eAAe,MAAiC;GAE9C,MAAM,mBAAmB,OAAO,QAAQ,eAAe,CAAC,CAAC,QACtD,GAAG,UAAU,SAAS,YAAY,MAAM,WAAW,GAAG,SAAS,EAAE,CACpE;GAEA,IAAI,iBAAiB,WAAW,GAC9B,OAAO,WAAW;GAGpB,MAAM,SAA2B,CAAC;GAElC,KAAK,MAAM,CAAC,cAAc,SAAS,kBAAkB;IACnD,IAAI,CAAC,MAAM;IAIX,MAAM,iBAFmB,mBAAmB,eAGxC,qCACA;IAEJ,IAAI,SAAS,UAAU;KACrB,KAAK,cACH,QACA,GACA,KAAK,MAAM,IAAI,QACf,cACF;KACA;IACF;IAGA,MAAM,aAAa,KAAK,UAAU,SAAS,SAAS,CAAC;IACrD,MAAM,eAAe,KAAK,cAAc,UAAU;IAElD,KAAK,kBAAkB,MAAM,cAAc,QAAQ,cAAc;GACnE;GAEA,OAAO,WAAW,IAChB,OAAO,KAAK,EAAE,MAAM,IAAI,iBACtB,WAAW,KAAK,EACd,OAAO,WAAW,KAAK,MACzB,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CACnB,CACF;EACF;;EAGA,cAAc,MAA6B;GACzC,MAAM,WAA0B,CAAC;GACjC,IAAI,iBAAiB;GACrB,IAAI,YAAY;GAEhB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;IACpC,MAAM,OAAO,KAAK;IAElB,IAAI,SAAS,OAAO,CAAC,WACf;SAAA,gBAAgB;MAClB,SAAS,KAAK;OAAE,MAAM;OAAY,OAAO;MAAe,CAAC;MACzD,iBAAiB;KACnB;WACK,IAAI,SAAS,KAAK;KACvB,IAAI,gBAAgB;MAClB,SAAS,KAAK;OAAE,MAAM;OAAY,OAAO;MAAe,CAAC;MACzD,iBAAiB;KACnB;KACA,YAAY;IACd,OAAO,IAAI,SAAS,OAAO,WAAW;KACpC,IAAI,gBAAgB;MAClB,IAAI,mBAAmB,KACrB,SAAS,KAAK;OAAE,MAAM;OAAY,OAAO;MAAI,CAAC;WACzC;OACL,MAAM,QAAQ,SAAS,gBAAgB,EAAE;OACzC,SAAS,KAAK;QACZ,MAAM;QACN,OAAO,MAAM,KAAK,IAAI,iBAAiB;OACzC,CAAC;MACH;MACA,iBAAiB;KACnB;KACA,YAAY;IACd,OACE,kBAAkB;GAEtB;GAEA,IAAI,gBAAgB;IAClB,MAAM,eAAe,SAAS,gBAAgB,EAAE;IAChD,IAAI,mBAAmB,KACrB,SAAS,KAAK;KAAE,MAAM;KAAY,OAAO;IAAI,CAAC;SACzC,IACL,CAAC,MAAM,YAAY,KACnB,aAAa,SAAS,MAAM,gBAE5B,SAAS,KAAK;KAAE,MAAM;KAAS,OAAO;IAAa,CAAC;SAEpD,SAAS,KAAK;KAAE,MAAM;KAAY,OAAO;IAAe,CAAC;GAE7D;GAEA,OAAO;EACT;EAEA,kBACE,MACA,cACA,QACA,gBACA,eAAe,GACf,aAAa,GACb,WAAW,KAAK,MAAM,IAAI,QACpB;GACN,MAAM,iBAAiB,aAAa;GACpC,IAAI,CAAC,gBAAgB;GAIrB,WAFwB,KAAK,KAE7B,CAAA,CAAK,QAAQ;IACX,MAAM;IACN,IAAI;IACJ,QAAQ,SAAS;KACf,IACE,eAAe,SAAS,cACxB,KAAK,SAAS,YACd;MACA,MAAM,EAAE,SAAS,cAAc,KAAK,qBAAqB,IAAI;MAE7D,IAAI,CAAC,SAAS;MAId,IAFgB,KAAK,eAAe,MAAM,OAEtC,MAAY,eAAe,OAAO;MAEtC,IAAI,iBAAiB,aAAa,SAAS,KAAK,WAC9C,KAAK,cACH,QACA,UAAU,MACV,UAAU,IACV,cACF;WACK,IAAI,eAAe,aAAa,SAAS,KAAK,WAC/C;WAAA,UAAU,SAAS,YAAY,UAAU,SAAS,SACpD,KAAK,kBACH,MACA,cACA,QACA,gBACA,eAAe,GACf,UAAU,MACV,UAAU,EACZ;MAAA;KAGN,OAAO,KACJ,eAAe,SAAS,WACvB,eAAe,SAAS,eAC1B,KAAK,SAAS,SACd;MACA,MAAM,WAAW,KAAK,qBAAqB,IAAI;MAC/C,IAAI,eAAe,SAAS,SAAS;OACnC,MAAM,cAAc,eAAe;OAGnC,MAAM,gBACJ,eAAe,IACX,cACA,SAAS,SAAS;OAExB,IAAI,gBAAgB,KAAK,iBAAiB,SAAS,QACjD;OAGF,MAAM,gBAAgB,SAAS;OAE/B,IAAI,iBAAiB,aAAa,SAAS,GACzC,KAAK,cACH,QACA,cAAc,MACd,cAAc,IACd,cACF;YACK,IAAI,eAAe,aAAa,SAAS,GAC9C,KAAK,kBACH,MACA,cACA,QACA,gBACA,eAAe,GACf,cAAc,MACd,cAAc,EAChB;MAEJ,OAAO,IAAI,eAAe,SAAS,YACjC,SAAS,SAAS,YAAY;OAC5B,IAAI,iBAAiB,aAAa,SAAS,GACzC,KAAK,cACH,QACA,QAAQ,MACR,QAAQ,IACR,cACF;YACK,IAAI,eAAe,aAAa,SAAS,GAC9C,KAAK,kBACH,MACA,cACA,QACA,gBACA,eAAe,GACf,QAAQ,MACR,QAAQ,EACV;MAEJ,CAAC;KAEL;IACF;GACF,CAAC;EACH;EAEA,qBAA6B,WAAsC;GACjE,MAAM,WAAuB,CAAC;GAE9B,MAAM,SAAS,UAAU,KAAK,OAAO;GAErC,IAAI,OAAO,WAAW,GAChB;QAAA,OAAO,YAAY,GACrB;KACE,IACE,OAAO,SAAS,gBAChB,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,UAEhB,SAAS,KAAK;MACZ,MAAM,OAAO;MACb,IAAI,OAAO;MACX,MAAM,OAAO;KACf,CAAC;WAEI,OAAO,YAAY;GAAA;GAIhC,OAAO;EACT;EAEA,qBAA6B,MAG3B;GACA,IAAI;GACJ,IAAI;GAEJ,MAAM,SAAS,KAAK,KAAK,OAAO;GAChC,IAAI,OAAO,WAAW,GACpB;IACE,IAAI,OAAO,SAAS,gBAClB,UAAU;KACR,MAAM,OAAO;KACb,IAAI,OAAO;KACX,MAAM,OAAO;IACf;SACK,IACL,OAAO,SAAS,gBAChB,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,UAEhB,YAAY;KACV,MAAM,OAAO;KACb,IAAI,OAAO;KACX,MAAM,OAAO;IACf;UAEK,OAAO,YAAY;GAG9B,OAAO;IAAE;IAAS;GAAU;EAC9B;EAEA,eAAuB,MAAkB,SAA2B;GAElE,OADgB,KAAK,MAAM,IAAI,YAAY,QAAQ,MAAM,QAAQ,EAC1D,CAAA,CAAQ,QAAQ,kBAAkB,IAAI;EAC/C;EAEA,cACE,QACA,MACA,IACA,gBACM;GACN,MAAM,aAAa,WAAW,KAAK,EACjC,OAAO,eACT,CAAC;GAED,OAAO,KAAK;IACV;IACA;IACA;GACF,CAAC;EACH;EAEA,OAAO,QAAoB;GACzB,IAAI,OAAO,cAAc,OAAO,iBAC9B,KAAK,cAAc,KAAK,eAAe,OAAO,IAAI;EAEtD;CACF,GACA,EACE,cAAc,MAAM,EAAE,YACxB,CACF;AACF"}
@@ -0,0 +1,6 @@
1
+ export declare const MAX_CODE_LENGTH = 5000;
2
+ export declare const MAX_LINE_LENGTH = 1000;
3
+ export declare const MAX_TEXT_LENGTH = 20000;
4
+ export declare const MAX_CODE_HEIGHT = 450;
5
+ export declare const ROW_WIDTH = 80;
6
+ export declare const ROW_HEIGHT = 20;
@@ -0,0 +1,11 @@
1
+ //#region packages/components/src/components/Code/constants.tsx
2
+ var MAX_CODE_LENGTH = 5e3;
3
+ var MAX_LINE_LENGTH = 1e3;
4
+ var MAX_TEXT_LENGTH = 2e4;
5
+ var MAX_CODE_HEIGHT = 450;
6
+ var ROW_WIDTH = 80;
7
+ var ROW_HEIGHT = 20;
8
+ //#endregion
9
+ export { MAX_CODE_HEIGHT, MAX_CODE_LENGTH, MAX_LINE_LENGTH, MAX_TEXT_LENGTH, ROW_HEIGHT, ROW_WIDTH };
10
+
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/Code/constants.tsx"],"sourcesContent":["export const MAX_CODE_LENGTH = 5_000;\nexport const MAX_LINE_LENGTH = 1_000;\nexport const MAX_TEXT_LENGTH = 20_000;\n\nexport const MAX_CODE_HEIGHT = 450;\n\nexport const ROW_WIDTH = 80;\nexport const ROW_HEIGHT = 20;\n"],"mappings":";AAAA,IAAa,kBAAkB;AAC/B,IAAa,kBAAkB;AAC/B,IAAa,kBAAkB;AAE/B,IAAa,kBAAkB;AAE/B,IAAa,YAAY;AACzB,IAAa,aAAa"}
@@ -0,0 +1,30 @@
1
+ import type { Extension } from '@codemirror/state';
2
+ import type { EditorView } from '@codemirror/view';
3
+ import type { CodeLanguageType } from './types.js';
4
+ /** Props for the syntax-highlighted CodeMirror block. */
5
+ export interface CodeProps {
6
+ language: CodeLanguageType;
7
+ extensions?: Extension[];
8
+ value: string | undefined;
9
+ onChange?: (code: string) => void;
10
+ readOnly?: boolean;
11
+ autoFocus?: boolean;
12
+ height?: string;
13
+ maxHeight?: string;
14
+ omitMaxHeight?: boolean;
15
+ width?: string;
16
+ fontSize?: string;
17
+ placeholder?: string;
18
+ showCopyButton?: boolean;
19
+ testId?: string;
20
+ variant?: 'plain' | 'full';
21
+ onCreateEditor?: (view: EditorView) => void;
22
+ converterExtensions?: Extension[];
23
+ }
24
+ /**
25
+ * Renders syntax-highlighted code with optional editing and copy support.
26
+ *
27
+ * Import directly from `@langchain/macaw-components/Code` so the CodeMirror
28
+ * dependency is only loaded by surfaces that use it.
29
+ */
30
+ export declare const Code: ({ value, readOnly, onChange, autoFocus, placeholder, language, extensions, converterExtensions, height, maxHeight, omitMaxHeight, width, fontSize, onCreateEditor, variant, testId, showCopyButton, }: CodeProps) => import("react").JSX.Element | null;