@elastic/isomer-studio 0.0.0 → 0.4.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 (406) hide show
  1. package/LICENSE.txt +93 -0
  2. package/NOTICE.txt +17329 -0
  3. package/README.md +64 -0
  4. package/THIRD_PARTY_LICENSES.md +404 -0
  5. package/bin/isomer-studio.js +10 -0
  6. package/dist/app/assets/codicon-5T574S7B.ttf +0 -0
  7. package/dist/app/assets/editor.worker.js +11 -0
  8. package/dist/app/assets/esbuild.wasm +0 -0
  9. package/dist/app/assets/json.worker.js +47 -0
  10. package/dist/app/assets/slack.css +1 -0
  11. package/dist/app/assets/studio.css +11 -0
  12. package/dist/app/assets/ts.worker.js +37029 -0
  13. package/dist/app/index.html +16 -0
  14. package/dist/apps/app_host.d.ts +8 -0
  15. package/dist/apps/app_host.d.ts.map +1 -0
  16. package/dist/apps/app_host.js +73 -0
  17. package/dist/apps/app_host.js.map +1 -0
  18. package/dist/browser/dev_host.d.ts +5 -0
  19. package/dist/browser/dev_host.d.ts.map +1 -0
  20. package/dist/browser/dev_host.js +46 -0
  21. package/dist/browser/dev_host.js.map +1 -0
  22. package/dist/browser/mount.d.ts +16 -0
  23. package/dist/browser/mount.d.ts.map +1 -0
  24. package/dist/browser/mount.js +37 -0
  25. package/dist/browser/mount.js.map +1 -0
  26. package/dist/browser/static_host.d.ts +5 -0
  27. package/dist/browser/static_host.d.ts.map +1 -0
  28. package/dist/browser/static_host.js +55 -0
  29. package/dist/browser/static_host.js.map +1 -0
  30. package/dist/chrome/accent.d.ts +14 -0
  31. package/dist/chrome/accent.d.ts.map +1 -0
  32. package/dist/chrome/accent.js +31 -0
  33. package/dist/chrome/accent.js.map +1 -0
  34. package/dist/chrome/app_pages.d.ts +13 -0
  35. package/dist/chrome/app_pages.d.ts.map +1 -0
  36. package/dist/chrome/app_pages.js +33 -0
  37. package/dist/chrome/app_pages.js.map +1 -0
  38. package/dist/chrome/color_mode.d.ts +10 -0
  39. package/dist/chrome/color_mode.d.ts.map +1 -0
  40. package/dist/chrome/color_mode.js +45 -0
  41. package/dist/chrome/color_mode.js.map +1 -0
  42. package/dist/chrome/dev_tint.d.ts +7 -0
  43. package/dist/chrome/dev_tint.d.ts.map +1 -0
  44. package/dist/chrome/dev_tint.js +31 -0
  45. package/dist/chrome/dev_tint.js.map +1 -0
  46. package/dist/chrome/header.d.ts +20 -0
  47. package/dist/chrome/header.d.ts.map +1 -0
  48. package/dist/chrome/header.js +124 -0
  49. package/dist/chrome/header.js.map +1 -0
  50. package/dist/chrome/icon_data_uri.d.ts +12 -0
  51. package/dist/chrome/icon_data_uri.d.ts.map +1 -0
  52. package/dist/chrome/icon_data_uri.js +21 -0
  53. package/dist/chrome/icon_data_uri.js.map +1 -0
  54. package/dist/chrome/isomer_mark.d.ts +17 -0
  55. package/dist/chrome/isomer_mark.d.ts.map +1 -0
  56. package/dist/chrome/isomer_mark.js +46 -0
  57. package/dist/chrome/isomer_mark.js.map +1 -0
  58. package/dist/chrome/nav.d.ts +22 -0
  59. package/dist/chrome/nav.d.ts.map +1 -0
  60. package/dist/chrome/nav.js +306 -0
  61. package/dist/chrome/nav.js.map +1 -0
  62. package/dist/chrome/nav_groups.d.ts +6 -0
  63. package/dist/chrome/nav_groups.d.ts.map +1 -0
  64. package/dist/chrome/nav_groups.js +48 -0
  65. package/dist/chrome/nav_groups.js.map +1 -0
  66. package/dist/chrome/nav_sections.d.ts +29 -0
  67. package/dist/chrome/nav_sections.d.ts.map +1 -0
  68. package/dist/chrome/nav_sections.js +55 -0
  69. package/dist/chrome/nav_sections.js.map +1 -0
  70. package/dist/chrome/oklch.d.ts +10 -0
  71. package/dist/chrome/oklch.d.ts.map +1 -0
  72. package/dist/chrome/oklch.js +61 -0
  73. package/dist/chrome/oklch.js.map +1 -0
  74. package/dist/chrome/primitive_glyph.d.ts +14 -0
  75. package/dist/chrome/primitive_glyph.d.ts.map +1 -0
  76. package/dist/chrome/primitive_glyph.js +48 -0
  77. package/dist/chrome/primitive_glyph.js.map +1 -0
  78. package/dist/chrome/primitive_heading.d.ts +14 -0
  79. package/dist/chrome/primitive_heading.d.ts.map +1 -0
  80. package/dist/chrome/primitive_heading.js +32 -0
  81. package/dist/chrome/primitive_heading.js.map +1 -0
  82. package/dist/chrome/primitive_peek.d.ts +8 -0
  83. package/dist/chrome/primitive_peek.d.ts.map +1 -0
  84. package/dist/chrome/primitive_peek.js +51 -0
  85. package/dist/chrome/primitive_peek.js.map +1 -0
  86. package/dist/chrome/primitive_search.d.ts +9 -0
  87. package/dist/chrome/primitive_search.d.ts.map +1 -0
  88. package/dist/chrome/primitive_search.js +93 -0
  89. package/dist/chrome/primitive_search.js.map +1 -0
  90. package/dist/chrome/route.d.ts +48 -0
  91. package/dist/chrome/route.d.ts.map +1 -0
  92. package/dist/chrome/route.js +136 -0
  93. package/dist/chrome/route.js.map +1 -0
  94. package/dist/cli/args.d.ts +39 -0
  95. package/dist/cli/args.d.ts.map +1 -0
  96. package/dist/cli/args.js +171 -0
  97. package/dist/cli/args.js.map +1 -0
  98. package/dist/cli/run.d.ts +15 -0
  99. package/dist/cli/run.d.ts.map +1 -0
  100. package/dist/cli/run.js +113 -0
  101. package/dist/cli/run.js.map +1 -0
  102. package/dist/cli.d.ts +2 -0
  103. package/dist/cli.d.ts.map +1 -0
  104. package/dist/cli.js +22 -0
  105. package/dist/cli.js.map +1 -0
  106. package/dist/config.d.ts +118 -0
  107. package/dist/config.d.ts.map +1 -0
  108. package/dist/config.js +11 -0
  109. package/dist/config.js.map +1 -0
  110. package/dist/dev/code_editor.d.ts +10 -0
  111. package/dist/dev/code_editor.d.ts.map +1 -0
  112. package/dist/dev/code_editor.js +22 -0
  113. package/dist/dev/code_editor.js.map +1 -0
  114. package/dist/dev/dev_view.d.ts +9 -0
  115. package/dist/dev/dev_view.d.ts.map +1 -0
  116. package/dist/dev/dev_view.js +65 -0
  117. package/dist/dev/dev_view.js.map +1 -0
  118. package/dist/dev/editor_panel.d.ts +17 -0
  119. package/dist/dev/editor_panel.d.ts.map +1 -0
  120. package/dist/dev/editor_panel.js +51 -0
  121. package/dist/dev/editor_panel.js.map +1 -0
  122. package/dist/dev/monaco_editor.d.ts +15 -0
  123. package/dist/dev/monaco_editor.d.ts.map +1 -0
  124. package/dist/dev/monaco_editor.js +159 -0
  125. package/dist/dev/monaco_editor.js.map +1 -0
  126. package/dist/dev/preview_panel.d.ts +10 -0
  127. package/dist/dev/preview_panel.d.ts.map +1 -0
  128. package/dist/dev/preview_panel.js +45 -0
  129. package/dist/dev/preview_panel.js.map +1 -0
  130. package/dist/dev/prop_reference.d.ts +9 -0
  131. package/dist/dev/prop_reference.d.ts.map +1 -0
  132. package/dist/dev/prop_reference.js +134 -0
  133. package/dist/dev/prop_reference.js.map +1 -0
  134. package/dist/dev/tsx_language.d.ts +10 -0
  135. package/dist/dev/tsx_language.d.ts.map +1 -0
  136. package/dist/dev/tsx_language.js +283 -0
  137. package/dist/dev/tsx_language.js.map +1 -0
  138. package/dist/dev/use_editor.d.ts +23 -0
  139. package/dist/dev/use_editor.d.ts.map +1 -0
  140. package/dist/dev/use_editor.js +124 -0
  141. package/dist/dev/use_editor.js.map +1 -0
  142. package/dist/docs/docs_view.d.ts +10 -0
  143. package/dist/docs/docs_view.d.ts.map +1 -0
  144. package/dist/docs/docs_view.js +80 -0
  145. package/dist/docs/docs_view.js.map +1 -0
  146. package/dist/docs/example_source.d.ts +7 -0
  147. package/dist/docs/example_source.d.ts.map +1 -0
  148. package/dist/docs/example_source.js +56 -0
  149. package/dist/docs/example_source.js.map +1 -0
  150. package/dist/docs/examples_panel.d.ts +10 -0
  151. package/dist/docs/examples_panel.d.ts.map +1 -0
  152. package/dist/docs/examples_panel.js +51 -0
  153. package/dist/docs/examples_panel.js.map +1 -0
  154. package/dist/docs/gallery_view.d.ts +9 -0
  155. package/dist/docs/gallery_view.d.ts.map +1 -0
  156. package/dist/docs/gallery_view.js +98 -0
  157. package/dist/docs/gallery_view.js.map +1 -0
  158. package/dist/docs/inline_code.d.ts +11 -0
  159. package/dist/docs/inline_code.d.ts.map +1 -0
  160. package/dist/docs/inline_code.js +24 -0
  161. package/dist/docs/inline_code.js.map +1 -0
  162. package/dist/docs/on_this_page.d.ts +17 -0
  163. package/dist/docs/on_this_page.d.ts.map +1 -0
  164. package/dist/docs/on_this_page.js +77 -0
  165. package/dist/docs/on_this_page.js.map +1 -0
  166. package/dist/docs/props_table.d.ts +14 -0
  167. package/dist/docs/props_table.d.ts.map +1 -0
  168. package/dist/docs/props_table.js +34 -0
  169. package/dist/docs/props_table.js.map +1 -0
  170. package/dist/home/apps_section.d.ts +6 -0
  171. package/dist/home/apps_section.d.ts.map +1 -0
  172. package/dist/home/apps_section.js +44 -0
  173. package/dist/home/apps_section.js.map +1 -0
  174. package/dist/home/featured_strip.d.ts +12 -0
  175. package/dist/home/featured_strip.d.ts.map +1 -0
  176. package/dist/home/featured_strip.js +176 -0
  177. package/dist/home/featured_strip.js.map +1 -0
  178. package/dist/home/home_view.d.ts +11 -0
  179. package/dist/home/home_view.d.ts.map +1 -0
  180. package/dist/home/home_view.js +261 -0
  181. package/dist/home/home_view.js.map +1 -0
  182. package/dist/home/links.d.ts +8 -0
  183. package/dist/home/links.d.ts.map +1 -0
  184. package/dist/home/links.js +14 -0
  185. package/dist/home/links.js.map +1 -0
  186. package/dist/home/loaded_panel.d.ts +6 -0
  187. package/dist/home/loaded_panel.d.ts.map +1 -0
  188. package/dist/home/loaded_panel.js +116 -0
  189. package/dist/home/loaded_panel.js.map +1 -0
  190. package/dist/home/surface_chart.d.ts +6 -0
  191. package/dist/home/surface_chart.d.ts.map +1 -0
  192. package/dist/home/surface_chart.js +263 -0
  193. package/dist/home/surface_chart.js.map +1 -0
  194. package/dist/home/tokens.d.ts +49 -0
  195. package/dist/home/tokens.d.ts.map +1 -0
  196. package/dist/home/tokens.js +171 -0
  197. package/dist/home/tokens.js.map +1 -0
  198. package/dist/index.d.ts +6 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +9 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/model/app_problems.d.ts +4 -0
  203. package/dist/model/app_problems.d.ts.map +1 -0
  204. package/dist/model/app_problems.js +90 -0
  205. package/dist/model/app_problems.js.map +1 -0
  206. package/dist/model/authoring_types.d.ts +23 -0
  207. package/dist/model/authoring_types.d.ts.map +1 -0
  208. package/dist/model/authoring_types.js +35 -0
  209. package/dist/model/authoring_types.js.map +1 -0
  210. package/dist/model/compile_jsx.d.ts +19 -0
  211. package/dist/model/compile_jsx.d.ts.map +1 -0
  212. package/dist/model/compile_jsx.js +55 -0
  213. package/dist/model/compile_jsx.js.map +1 -0
  214. package/dist/model/compose_example.d.ts +9 -0
  215. package/dist/model/compose_example.d.ts.map +1 -0
  216. package/dist/model/compose_example.js +24 -0
  217. package/dist/model/compose_example.js.map +1 -0
  218. package/dist/model/composition_key.d.ts +6 -0
  219. package/dist/model/composition_key.d.ts.map +1 -0
  220. package/dist/model/composition_key.js +26 -0
  221. package/dist/model/composition_key.js.map +1 -0
  222. package/dist/model/describe_runtime.d.ts +33 -0
  223. package/dist/model/describe_runtime.d.ts.map +1 -0
  224. package/dist/model/describe_runtime.js +77 -0
  225. package/dist/model/describe_runtime.js.map +1 -0
  226. package/dist/model/featured.d.ts +11 -0
  227. package/dist/model/featured.d.ts.map +1 -0
  228. package/dist/model/featured.js +70 -0
  229. package/dist/model/featured.js.map +1 -0
  230. package/dist/model/jsx_transform.d.ts +10 -0
  231. package/dist/model/jsx_transform.d.ts.map +1 -0
  232. package/dist/model/jsx_transform.js +31 -0
  233. package/dist/model/jsx_transform.js.map +1 -0
  234. package/dist/model/png_manifest.d.ts +23 -0
  235. package/dist/model/png_manifest.d.ts.map +1 -0
  236. package/dist/model/png_manifest.js +26 -0
  237. package/dist/model/png_manifest.js.map +1 -0
  238. package/dist/model/read_examples.d.ts +12 -0
  239. package/dist/model/read_examples.d.ts.map +1 -0
  240. package/dist/model/read_examples.js +43 -0
  241. package/dist/model/read_examples.js.map +1 -0
  242. package/dist/model/search.d.ts +4 -0
  243. package/dist/model/search.d.ts.map +1 -0
  244. package/dist/model/search.js +29 -0
  245. package/dist/model/search.js.map +1 -0
  246. package/dist/model/sha256.d.ts +3 -0
  247. package/dist/model/sha256.d.ts.map +1 -0
  248. package/dist/model/sha256.js +72 -0
  249. package/dist/model/sha256.js.map +1 -0
  250. package/dist/model/slack_limits.d.ts +9 -0
  251. package/dist/model/slack_limits.d.ts.map +1 -0
  252. package/dist/model/slack_limits.js +213 -0
  253. package/dist/model/slack_limits.js.map +1 -0
  254. package/dist/node/app_bundle.d.ts +45 -0
  255. package/dist/node/app_bundle.d.ts.map +1 -0
  256. package/dist/node/app_bundle.js +212 -0
  257. package/dist/node/app_bundle.js.map +1 -0
  258. package/dist/node/build_site.d.ts +28 -0
  259. package/dist/node/build_site.d.ts.map +1 -0
  260. package/dist/node/build_site.js +90 -0
  261. package/dist/node/build_site.js.map +1 -0
  262. package/dist/node/check.d.ts +40 -0
  263. package/dist/node/check.d.ts.map +1 -0
  264. package/dist/node/check.js +162 -0
  265. package/dist/node/check.js.map +1 -0
  266. package/dist/node/dev_bundle.d.ts +21 -0
  267. package/dist/node/dev_bundle.d.ts.map +1 -0
  268. package/dist/node/dev_bundle.js +121 -0
  269. package/dist/node/dev_bundle.js.map +1 -0
  270. package/dist/node/dev_server.d.ts +16 -0
  271. package/dist/node/dev_server.d.ts.map +1 -0
  272. package/dist/node/dev_server.js +291 -0
  273. package/dist/node/dev_server.js.map +1 -0
  274. package/dist/node/init_config.d.ts +30 -0
  275. package/dist/node/init_config.d.ts.map +1 -0
  276. package/dist/node/init_config.js +158 -0
  277. package/dist/node/init_config.js.map +1 -0
  278. package/dist/node/load_config.d.ts +34 -0
  279. package/dist/node/load_config.d.ts.map +1 -0
  280. package/dist/node/load_config.js +246 -0
  281. package/dist/node/load_config.js.map +1 -0
  282. package/dist/node/project_resolution.d.ts +17 -0
  283. package/dist/node/project_resolution.d.ts.map +1 -0
  284. package/dist/node/project_resolution.js +66 -0
  285. package/dist/node/project_resolution.js.map +1 -0
  286. package/dist/node/rasterize.d.ts +23 -0
  287. package/dist/node/rasterize.d.ts.map +1 -0
  288. package/dist/node/rasterize.js +79 -0
  289. package/dist/node/rasterize.js.map +1 -0
  290. package/dist/node/report.d.ts +8 -0
  291. package/dist/node/report.d.ts.map +1 -0
  292. package/dist/node/report.js +57 -0
  293. package/dist/node/report.js.map +1 -0
  294. package/dist/node/resolve_hooks.d.ts +16 -0
  295. package/dist/node/resolve_hooks.d.ts.map +1 -0
  296. package/dist/node/resolve_hooks.js +104 -0
  297. package/dist/node/resolve_hooks.js.map +1 -0
  298. package/dist/studio.d.ts +4 -0
  299. package/dist/studio.d.ts.map +1 -0
  300. package/dist/studio.js +188 -0
  301. package/dist/studio.js.map +1 -0
  302. package/dist/studio_context.d.ts +27 -0
  303. package/dist/studio_context.d.ts.map +1 -0
  304. package/dist/studio_context.js +17 -0
  305. package/dist/studio_context.js.map +1 -0
  306. package/dist/surfaces/adopt_stylesheet.d.ts +7 -0
  307. package/dist/surfaces/adopt_stylesheet.d.ts.map +1 -0
  308. package/dist/surfaces/adopt_stylesheet.js +64 -0
  309. package/dist/surfaces/adopt_stylesheet.js.map +1 -0
  310. package/dist/surfaces/app_preview.d.ts +4 -0
  311. package/dist/surfaces/app_preview.d.ts.map +1 -0
  312. package/dist/surfaces/app_preview.js +28 -0
  313. package/dist/surfaces/app_preview.js.map +1 -0
  314. package/dist/surfaces/app_surface.d.ts +9 -0
  315. package/dist/surfaces/app_surface.d.ts.map +1 -0
  316. package/dist/surfaces/app_surface.js +27 -0
  317. package/dist/surfaces/app_surface.js.map +1 -0
  318. package/dist/surfaces/applicable_enhancements.d.ts +4 -0
  319. package/dist/surfaces/applicable_enhancements.d.ts.map +1 -0
  320. package/dist/surfaces/applicable_enhancements.js +16 -0
  321. package/dist/surfaces/applicable_enhancements.js.map +1 -0
  322. package/dist/surfaces/enhancement_select.d.ts +10 -0
  323. package/dist/surfaces/enhancement_select.d.ts.map +1 -0
  324. package/dist/surfaces/enhancement_select.js +28 -0
  325. package/dist/surfaces/enhancement_select.js.map +1 -0
  326. package/dist/surfaces/example_picker.d.ts +11 -0
  327. package/dist/surfaces/example_picker.d.ts.map +1 -0
  328. package/dist/surfaces/example_picker.js +44 -0
  329. package/dist/surfaces/example_picker.js.map +1 -0
  330. package/dist/surfaces/format_source.d.ts +4 -0
  331. package/dist/surfaces/format_source.d.ts.map +1 -0
  332. package/dist/surfaces/format_source.js +30 -0
  333. package/dist/surfaces/format_source.js.map +1 -0
  334. package/dist/surfaces/html_surface.d.ts +14 -0
  335. package/dist/surfaces/html_surface.d.ts.map +1 -0
  336. package/dist/surfaces/html_surface.js +122 -0
  337. package/dist/surfaces/html_surface.js.map +1 -0
  338. package/dist/surfaces/png_surface.d.ts +13 -0
  339. package/dist/surfaces/png_surface.d.ts.map +1 -0
  340. package/dist/surfaces/png_surface.js +68 -0
  341. package/dist/surfaces/png_surface.js.map +1 -0
  342. package/dist/surfaces/react_surface.d.ts +11 -0
  343. package/dist/surfaces/react_surface.d.ts.map +1 -0
  344. package/dist/surfaces/react_surface.js +55 -0
  345. package/dist/surfaces/react_surface.js.map +1 -0
  346. package/dist/surfaces/render_output.d.ts +31 -0
  347. package/dist/surfaces/render_output.d.ts.map +1 -0
  348. package/dist/surfaces/render_output.js +119 -0
  349. package/dist/surfaces/render_output.js.map +1 -0
  350. package/dist/surfaces/scaled_preview.d.ts +17 -0
  351. package/dist/surfaces/scaled_preview.d.ts.map +1 -0
  352. package/dist/surfaces/scaled_preview.js +74 -0
  353. package/dist/surfaces/scaled_preview.js.map +1 -0
  354. package/dist/surfaces/shadow_root.d.ts +8 -0
  355. package/dist/surfaces/shadow_root.d.ts.map +1 -0
  356. package/dist/surfaces/shadow_root.js +41 -0
  357. package/dist/surfaces/shadow_root.js.map +1 -0
  358. package/dist/surfaces/slack_surface.d.ts +12 -0
  359. package/dist/surfaces/slack_surface.d.ts.map +1 -0
  360. package/dist/surfaces/slack_surface.js +27 -0
  361. package/dist/surfaces/slack_surface.js.map +1 -0
  362. package/dist/surfaces/snapshot_surface.d.ts +6 -0
  363. package/dist/surfaces/snapshot_surface.d.ts.map +1 -0
  364. package/dist/surfaces/snapshot_surface.js +5 -0
  365. package/dist/surfaces/snapshot_surface.js.map +1 -0
  366. package/dist/surfaces/surface_board.d.ts +19 -0
  367. package/dist/surfaces/surface_board.d.ts.map +1 -0
  368. package/dist/surfaces/surface_board.js +128 -0
  369. package/dist/surfaces/surface_board.js.map +1 -0
  370. package/dist/surfaces/surface_frame.d.ts +8 -0
  371. package/dist/surfaces/surface_frame.d.ts.map +1 -0
  372. package/dist/surfaces/surface_frame.js +4 -0
  373. package/dist/surfaces/surface_frame.js.map +1 -0
  374. package/dist/surfaces/surface_logos.d.ts +9 -0
  375. package/dist/surfaces/surface_logos.d.ts.map +1 -0
  376. package/dist/surfaces/surface_logos.js +21 -0
  377. package/dist/surfaces/surface_logos.js.map +1 -0
  378. package/dist/surfaces/surface_preview.d.ts +32 -0
  379. package/dist/surfaces/surface_preview.d.ts.map +1 -0
  380. package/dist/surfaces/surface_preview.js +66 -0
  381. package/dist/surfaces/surface_preview.js.map +1 -0
  382. package/dist/surfaces/surface_select.d.ts +34 -0
  383. package/dist/surfaces/surface_select.d.ts.map +1 -0
  384. package/dist/surfaces/surface_select.js +119 -0
  385. package/dist/surfaces/surface_select.js.map +1 -0
  386. package/dist/surfaces/text_surfaces.d.ts +14 -0
  387. package/dist/surfaces/text_surfaces.d.ts.map +1 -0
  388. package/dist/surfaces/text_surfaces.js +31 -0
  389. package/dist/surfaces/text_surfaces.js.map +1 -0
  390. package/dist/surfaces/zoom_select.d.ts +9 -0
  391. package/dist/surfaces/zoom_select.d.ts.map +1 -0
  392. package/dist/surfaces/zoom_select.js +32 -0
  393. package/dist/surfaces/zoom_select.js.map +1 -0
  394. package/dist/types.d.ts +32 -0
  395. package/dist/types.d.ts.map +1 -0
  396. package/dist/types.js +9 -0
  397. package/dist/types.js.map +1 -0
  398. package/docs/ci.md +55 -0
  399. package/docs/commands.md +167 -0
  400. package/docs/config.md +192 -0
  401. package/docs/images/home.png +0 -0
  402. package/docs/images/reference.png +0 -0
  403. package/docs/images/workbench.png +0 -0
  404. package/docs/index.md +96 -0
  405. package/docs/toc.yml +10 -0
  406. package/package.json +89 -5
@@ -0,0 +1,283 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { editor, languages } from 'monaco-editor/esm/vs/editor/editor.api';
8
+ const TAG_NAME = /[A-Za-z_$][\w$.:-]*/;
9
+ const KEYWORDS = [
10
+ 'as',
11
+ 'async',
12
+ 'await',
13
+ 'break',
14
+ 'case',
15
+ 'catch',
16
+ 'const',
17
+ 'continue',
18
+ 'default',
19
+ 'delete',
20
+ 'do',
21
+ 'else',
22
+ 'export',
23
+ 'extends',
24
+ 'false',
25
+ 'finally',
26
+ 'for',
27
+ 'from',
28
+ 'function',
29
+ 'if',
30
+ 'import',
31
+ 'in',
32
+ 'instanceof',
33
+ 'let',
34
+ 'new',
35
+ 'null',
36
+ 'of',
37
+ 'return',
38
+ 'satisfies',
39
+ 'switch',
40
+ 'this',
41
+ 'throw',
42
+ 'true',
43
+ 'try',
44
+ 'typeof',
45
+ 'undefined',
46
+ 'var',
47
+ 'void',
48
+ 'while',
49
+ 'yield',
50
+ ];
51
+ const configuration = {
52
+ comments: { lineComment: '//', blockComment: ['/*', '*/'] },
53
+ brackets: [
54
+ ['{', '}'],
55
+ ['[', ']'],
56
+ ['(', ')'],
57
+ ],
58
+ autoClosingPairs: [
59
+ { open: '{', close: '}' },
60
+ { open: '[', close: ']' },
61
+ { open: '(', close: ')' },
62
+ { open: '"', close: '"', notIn: ['string'] },
63
+ { open: "'", close: "'", notIn: ['string', 'comment'] },
64
+ { open: '`', close: '`', notIn: ['string', 'comment'] },
65
+ ],
66
+ };
67
+ /** A JS expression tokenizer that also reads JSX elements, which Monaco's own TypeScript one does not. */
68
+ const tokens = {
69
+ defaultToken: 'invalid',
70
+ tokenPostfix: '.tsx',
71
+ keywords: KEYWORDS,
72
+ escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4})/,
73
+ digits: /\d+(_+\d+)*/,
74
+ tokenizer: {
75
+ root: [{ include: 'expression' }],
76
+ expression: [
77
+ [
78
+ /#?[a-z_$][\w$]*/,
79
+ { cases: { '@keywords': 'keyword', '@default': 'identifier' } },
80
+ ],
81
+ [/[A-Z][\w$]*/, 'type.identifier'],
82
+ { include: '@whitespace' },
83
+ [/<>/, 'delimiter.bracket', '@jsxChildren'],
84
+ [/<(?=[A-Za-z_$])/, 'delimiter.bracket', '@jsxTagName'],
85
+ [/[{}()[\]]/, '@brackets'],
86
+ [/[<>=!~?:&|+\-*/^%@]+/, 'delimiter'],
87
+ [/0[xX][\da-fA-F]+n?/, 'number.hex'],
88
+ [/(@digits)\.(@digits)([eE][-+]?(@digits))?/, 'number.float'],
89
+ [/(@digits)[eE]([-+]?(@digits))?/, 'number.float'],
90
+ [/(@digits)n?/, 'number'],
91
+ [/[;,.]/, 'delimiter'],
92
+ [/"/, 'string', '@stringDouble'],
93
+ [/'/, 'string', '@stringSingle'],
94
+ [/`/, 'string', '@stringBacktick'],
95
+ ],
96
+ whitespace: [
97
+ [/[ \t\r\n]+/, ''],
98
+ [/\/\*/, 'comment', '@comment'],
99
+ [/\/\/.*$/, 'comment'],
100
+ ],
101
+ comment: [
102
+ [/[^/*]+/, 'comment'],
103
+ [/\*\//, 'comment', '@pop'],
104
+ [/[/*]/, 'comment'],
105
+ ],
106
+ stringDouble: [
107
+ [/[^\\"]+/, 'string'],
108
+ [/@escapes/, 'string.escape'],
109
+ [/\\./, 'string.escape.invalid'],
110
+ [/"/, 'string', '@pop'],
111
+ ],
112
+ stringSingle: [
113
+ [/[^\\']+/, 'string'],
114
+ [/@escapes/, 'string.escape'],
115
+ [/\\./, 'string.escape.invalid'],
116
+ [/'/, 'string', '@pop'],
117
+ ],
118
+ stringBacktick: [
119
+ [/\$\{/, 'delimiter.bracket', '@braces'],
120
+ [/[^\\`$]+/, 'string'],
121
+ [/@escapes/, 'string.escape'],
122
+ [/\\./, 'string.escape.invalid'],
123
+ [/`/, 'string', '@pop'],
124
+ ],
125
+ braces: [
126
+ [/\{/, 'delimiter.bracket', '@braces'],
127
+ [/\}/, 'delimiter.bracket', '@pop'],
128
+ { include: 'expression' },
129
+ ],
130
+ // After `<`: the element name, then the attributes.
131
+ jsxTagName: [
132
+ [TAG_NAME, { token: 'type.identifier', switchTo: '@jsxAttributes' }],
133
+ ],
134
+ jsxAttributes: [
135
+ { include: '@whitespace' },
136
+ [/\/>/, 'delimiter.bracket', '@pop'],
137
+ [/>/, { token: 'delimiter.bracket', switchTo: '@jsxChildren' }],
138
+ [/\{/, 'delimiter.bracket', '@braces'],
139
+ [/[A-Za-z_$][\w$:-]*/, 'attribute.name'],
140
+ [/=/, 'delimiter'],
141
+ [/"/, 'string', '@jsxStringDouble'],
142
+ [/'/, 'string', '@jsxStringSingle'],
143
+ ],
144
+ jsxStringDouble: [
145
+ [/[^"]+/, 'string'],
146
+ [/"/, 'string', '@pop'],
147
+ ],
148
+ jsxStringSingle: [
149
+ [/[^']+/, 'string'],
150
+ [/'/, 'string', '@pop'],
151
+ ],
152
+ jsxChildren: [
153
+ [/<\//, { token: 'delimiter.bracket', switchTo: '@jsxClosingTag' }],
154
+ [/<>/, 'delimiter.bracket', '@jsxChildren'],
155
+ [/<(?=[A-Za-z_$])/, 'delimiter.bracket', '@jsxTagName'],
156
+ [/\{/, 'delimiter.bracket', '@braces'],
157
+ [/[^<{]+/, ''],
158
+ ],
159
+ jsxClosingTag: [
160
+ [/[ \t\r\n]+/, ''],
161
+ [TAG_NAME, 'type.identifier'],
162
+ [/>/, 'delimiter.bracket', '@pop'],
163
+ ],
164
+ },
165
+ };
166
+ const JSX_BRACKET = /<>|<\/|\/>|\$\{|[<>{}]/g;
167
+ const jsxFrame = (text) => {
168
+ const stack = [];
169
+ const lines = text.split(/\r\n|\r|\n/);
170
+ editor.tokenize(text, 'typescript').forEach((row, index) => {
171
+ const line = lines[index] ?? '';
172
+ row.forEach(({ offset, type }, position) => {
173
+ if (!type.startsWith('delimiter.bracket')) {
174
+ return;
175
+ }
176
+ const lexeme = line.slice(offset, row[position + 1]?.offset);
177
+ for (const [bracket] of lexeme.matchAll(JSX_BRACKET)) {
178
+ const top = stack.length - 1;
179
+ switch (bracket) {
180
+ case '<>':
181
+ stack.push('children');
182
+ break;
183
+ case '<':
184
+ stack.push('tag');
185
+ break;
186
+ case '</':
187
+ if (stack[top] === 'children') {
188
+ stack[top] = 'closing';
189
+ }
190
+ break;
191
+ case '/>':
192
+ if (stack[top] === 'tag') {
193
+ stack.pop();
194
+ }
195
+ break;
196
+ case '>':
197
+ if (stack[top] === 'tag') {
198
+ stack[top] = 'children';
199
+ }
200
+ else if (stack[top] === 'closing') {
201
+ stack.pop();
202
+ }
203
+ break;
204
+ case '}':
205
+ if (stack[top] === 'braces') {
206
+ stack.pop();
207
+ }
208
+ break;
209
+ default:
210
+ stack.push('braces');
211
+ }
212
+ }
213
+ });
214
+ });
215
+ return stack[stack.length - 1];
216
+ };
217
+ /** Whether `text` ends where an element's children go. Reads the brackets {@link tokens} marks. */
218
+ export const endsInJsxChildren = (text) => jsxFrame(text) === 'children';
219
+ /** A `<` or `<Name` already typed. The bare `<` is not a bracket until a name follows. */
220
+ const PENDING_TAG = /<([A-Za-z_$][\w$]*)?$/;
221
+ const offersComponents = (text) => {
222
+ const frame = jsxFrame(text);
223
+ if (frame === 'children') {
224
+ return true;
225
+ }
226
+ const pending = PENDING_TAG.exec(text);
227
+ return frame === 'tag' && pending?.[1] !== undefined;
228
+ };
229
+ /** Replaces a `<` already before the cursor, so the inserted opener does not double it. */
230
+ const completionRange = (text, position, word) => {
231
+ const pending = PENDING_TAG.exec(text);
232
+ const { lineNumber, column } = position;
233
+ return {
234
+ pending,
235
+ range: {
236
+ startLineNumber: lineNumber,
237
+ endLineNumber: lineNumber,
238
+ startColumn: pending ? column - pending[0].length : word.startColumn,
239
+ endColumn: pending ? column : word.endColumn,
240
+ },
241
+ };
242
+ };
243
+ /** Offers `components` as tag openers in element children, or over a tag name already started, on an explicit invoke. */
244
+ export const componentCompletionProvider = (components) => ({
245
+ provideCompletionItems: (model, position, { triggerKind }) => {
246
+ const { lineNumber, column } = position;
247
+ const text = model.getValueInRange({
248
+ startLineNumber: 1,
249
+ startColumn: 1,
250
+ endLineNumber: lineNumber,
251
+ endColumn: column,
252
+ });
253
+ if (triggerKind !== languages.CompletionTriggerKind.Invoke ||
254
+ !offersComponents(text)) {
255
+ return { suggestions: [] };
256
+ }
257
+ const { pending, range } = completionRange(text, position, model.getWordUntilPosition(position));
258
+ return {
259
+ suggestions: components.map((name) => ({
260
+ label: name,
261
+ kind: languages.CompletionItemKind.Class,
262
+ insertText: `<${name} `,
263
+ // Monaco filters on the replaced text, which includes the typed `<`.
264
+ ...(pending ? { filterText: `<${name}` } : {}),
265
+ range,
266
+ command: { id: 'editor.action.triggerSuggest', title: '' },
267
+ })),
268
+ };
269
+ },
270
+ });
271
+ export const registerComponentCompletions = (components) => languages.registerCompletionItemProvider('typescript', componentCompletionProvider(components));
272
+ /** Replaces the `typescript` language's tokenizer, so every TypeScript model reads JSX. */
273
+ export const registerTsx = () => {
274
+ languages.register({
275
+ id: 'typescript',
276
+ extensions: ['.ts', '.tsx'],
277
+ aliases: ['TypeScript', 'ts', 'typescript'],
278
+ mimetypes: ['text/typescript'],
279
+ });
280
+ languages.setLanguageConfiguration('typescript', configuration);
281
+ languages.setMonarchTokensProvider('typescript', tokens);
282
+ };
283
+ //# sourceMappingURL=tsx_language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsx_language.js","sourceRoot":"","sources":["../../src/dev/tsx_language.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type { IDisposable } from 'monaco-editor/esm/vs/editor/editor.api';\nimport { editor, languages } from 'monaco-editor/esm/vs/editor/editor.api';\n\nconst TAG_NAME = /[A-Za-z_$][\\w$.:-]*/;\n\nconst KEYWORDS = [\n 'as',\n 'async',\n 'await',\n 'break',\n 'case',\n 'catch',\n 'const',\n 'continue',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'export',\n 'extends',\n 'false',\n 'finally',\n 'for',\n 'from',\n 'function',\n 'if',\n 'import',\n 'in',\n 'instanceof',\n 'let',\n 'new',\n 'null',\n 'of',\n 'return',\n 'satisfies',\n 'switch',\n 'this',\n 'throw',\n 'true',\n 'try',\n 'typeof',\n 'undefined',\n 'var',\n 'void',\n 'while',\n 'yield',\n];\n\nconst configuration: languages.LanguageConfiguration = {\n comments: { lineComment: '//', blockComment: ['/*', '*/'] },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n { open: '`', close: '`', notIn: ['string', 'comment'] },\n ],\n};\n\n/** A JS expression tokenizer that also reads JSX elements, which Monaco's own TypeScript one does not. */\nconst tokens: languages.IMonarchLanguage = {\n defaultToken: 'invalid',\n tokenPostfix: '.tsx',\n keywords: KEYWORDS,\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4})/,\n digits: /\\d+(_+\\d+)*/,\n tokenizer: {\n root: [{ include: 'expression' }],\n expression: [\n [\n /#?[a-z_$][\\w$]*/,\n { cases: { '@keywords': 'keyword', '@default': 'identifier' } },\n ],\n [/[A-Z][\\w$]*/, 'type.identifier'],\n { include: '@whitespace' },\n [/<>/, 'delimiter.bracket', '@jsxChildren'],\n [/<(?=[A-Za-z_$])/, 'delimiter.bracket', '@jsxTagName'],\n [/[{}()[\\]]/, '@brackets'],\n [/[<>=!~?:&|+\\-*/^%@]+/, 'delimiter'],\n [/0[xX][\\da-fA-F]+n?/, 'number.hex'],\n [/(@digits)\\.(@digits)([eE][-+]?(@digits))?/, 'number.float'],\n [/(@digits)[eE]([-+]?(@digits))?/, 'number.float'],\n [/(@digits)n?/, 'number'],\n [/[;,.]/, 'delimiter'],\n [/\"/, 'string', '@stringDouble'],\n [/'/, 'string', '@stringSingle'],\n [/`/, 'string', '@stringBacktick'],\n ],\n whitespace: [\n [/[ \\t\\r\\n]+/, ''],\n [/\\/\\*/, 'comment', '@comment'],\n [/\\/\\/.*$/, 'comment'],\n ],\n comment: [\n [/[^/*]+/, 'comment'],\n [/\\*\\//, 'comment', '@pop'],\n [/[/*]/, 'comment'],\n ],\n stringDouble: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n stringSingle: [\n [/[^\\\\']+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, 'string', '@pop'],\n ],\n stringBacktick: [\n [/\\$\\{/, 'delimiter.bracket', '@braces'],\n [/[^\\\\`$]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, 'string', '@pop'],\n ],\n braces: [\n [/\\{/, 'delimiter.bracket', '@braces'],\n [/\\}/, 'delimiter.bracket', '@pop'],\n { include: 'expression' },\n ],\n // After `<`: the element name, then the attributes.\n jsxTagName: [\n [TAG_NAME, { token: 'type.identifier', switchTo: '@jsxAttributes' }],\n ],\n jsxAttributes: [\n { include: '@whitespace' },\n [/\\/>/, 'delimiter.bracket', '@pop'],\n [/>/, { token: 'delimiter.bracket', switchTo: '@jsxChildren' }],\n [/\\{/, 'delimiter.bracket', '@braces'],\n [/[A-Za-z_$][\\w$:-]*/, 'attribute.name'],\n [/=/, 'delimiter'],\n [/\"/, 'string', '@jsxStringDouble'],\n [/'/, 'string', '@jsxStringSingle'],\n ],\n jsxStringDouble: [\n [/[^\"]+/, 'string'],\n [/\"/, 'string', '@pop'],\n ],\n jsxStringSingle: [\n [/[^']+/, 'string'],\n [/'/, 'string', '@pop'],\n ],\n jsxChildren: [\n [/<\\//, { token: 'delimiter.bracket', switchTo: '@jsxClosingTag' }],\n [/<>/, 'delimiter.bracket', '@jsxChildren'],\n [/<(?=[A-Za-z_$])/, 'delimiter.bracket', '@jsxTagName'],\n [/\\{/, 'delimiter.bracket', '@braces'],\n [/[^<{]+/, ''],\n ],\n jsxClosingTag: [\n [/[ \\t\\r\\n]+/, ''],\n [TAG_NAME, 'type.identifier'],\n [/>/, 'delimiter.bracket', '@pop'],\n ],\n },\n};\n\ntype Frame = 'tag' | 'children' | 'closing' | 'braces';\n\nconst JSX_BRACKET = /<>|<\\/|\\/>|\\$\\{|[<>{}]/g;\n\nconst jsxFrame = (text: string): Frame | undefined => {\n const stack: Frame[] = [];\n const lines = text.split(/\\r\\n|\\r|\\n/);\n editor.tokenize(text, 'typescript').forEach((row, index) => {\n const line = lines[index] ?? '';\n row.forEach(({ offset, type }, position) => {\n if (!type.startsWith('delimiter.bracket')) {\n return;\n }\n const lexeme = line.slice(offset, row[position + 1]?.offset);\n for (const [bracket] of lexeme.matchAll(JSX_BRACKET)) {\n const top = stack.length - 1;\n switch (bracket) {\n case '<>':\n stack.push('children');\n break;\n case '<':\n stack.push('tag');\n break;\n case '</':\n if (stack[top] === 'children') {\n stack[top] = 'closing';\n }\n break;\n case '/>':\n if (stack[top] === 'tag') {\n stack.pop();\n }\n break;\n case '>':\n if (stack[top] === 'tag') {\n stack[top] = 'children';\n } else if (stack[top] === 'closing') {\n stack.pop();\n }\n break;\n case '}':\n if (stack[top] === 'braces') {\n stack.pop();\n }\n break;\n default:\n stack.push('braces');\n }\n }\n });\n });\n return stack[stack.length - 1];\n};\n\n/** Whether `text` ends where an element's children go. Reads the brackets {@link tokens} marks. */\nexport const endsInJsxChildren = (text: string): boolean =>\n jsxFrame(text) === 'children';\n\n/** A `<` or `<Name` already typed. The bare `<` is not a bracket until a name follows. */\nconst PENDING_TAG = /<([A-Za-z_$][\\w$]*)?$/;\n\nconst offersComponents = (text: string): boolean => {\n const frame = jsxFrame(text);\n if (frame === 'children') {\n return true;\n }\n const pending = PENDING_TAG.exec(text);\n return frame === 'tag' && pending?.[1] !== undefined;\n};\n\n/** Replaces a `<` already before the cursor, so the inserted opener does not double it. */\nconst completionRange = (\n text: string,\n position: { lineNumber: number; column: number },\n word: { startColumn: number; endColumn: number }\n) => {\n const pending = PENDING_TAG.exec(text);\n const { lineNumber, column } = position;\n return {\n pending,\n range: {\n startLineNumber: lineNumber,\n endLineNumber: lineNumber,\n startColumn: pending ? column - pending[0].length : word.startColumn,\n endColumn: pending ? column : word.endColumn,\n },\n };\n};\n\n/** Offers `components` as tag openers in element children, or over a tag name already started, on an explicit invoke. */\nexport const componentCompletionProvider = (\n components: readonly string[]\n): languages.CompletionItemProvider => ({\n provideCompletionItems: (model, position, { triggerKind }) => {\n const { lineNumber, column } = position;\n const text = model.getValueInRange({\n startLineNumber: 1,\n startColumn: 1,\n endLineNumber: lineNumber,\n endColumn: column,\n });\n if (\n triggerKind !== languages.CompletionTriggerKind.Invoke ||\n !offersComponents(text)\n ) {\n return { suggestions: [] };\n }\n const { pending, range } = completionRange(\n text,\n position,\n model.getWordUntilPosition(position)\n );\n return {\n suggestions: components.map((name) => ({\n label: name,\n kind: languages.CompletionItemKind.Class,\n insertText: `<${name} `,\n // Monaco filters on the replaced text, which includes the typed `<`.\n ...(pending ? { filterText: `<${name}` } : {}),\n range,\n command: { id: 'editor.action.triggerSuggest', title: '' },\n })),\n };\n },\n});\n\nexport const registerComponentCompletions = (\n components: readonly string[]\n): IDisposable =>\n languages.registerCompletionItemProvider(\n 'typescript',\n componentCompletionProvider(components)\n );\n\n/** Replaces the `typescript` language's tokenizer, so every TypeScript model reads JSX. */\nexport const registerTsx = () => {\n languages.register({\n id: 'typescript',\n extensions: ['.ts', '.tsx'],\n aliases: ['TypeScript', 'ts', 'typescript'],\n mimetypes: ['text/typescript'],\n });\n languages.setLanguageConfiguration('typescript', configuration);\n languages.setMonarchTokensProvider('typescript', tokens);\n};\n"]}
@@ -0,0 +1,23 @@
1
+ import type { CheckedValidationResult, Composition, PrimitiveNode } from '@elastic/isomer-sdk';
2
+ export type EditorFormat = 'jsx' | 'json';
3
+ /** A JSON node or array of nodes as a composition body. */
4
+ export declare const parseBodyJson: (source: string) => PrimitiveNode[];
5
+ export interface EditorState {
6
+ format: EditorFormat;
7
+ setFormat: (format: EditorFormat) => void;
8
+ source: string;
9
+ setSource: (source: string) => void;
10
+ nodes: PrimitiveNode[];
11
+ /** Applies a quick edit to the draft's nodes and reprints the source, unless the draft doesn't parse or compose. */
12
+ editNodes: (edit: (nodes: PrimitiveNode[]) => PrimitiveNode[]) => void;
13
+ parseError?: string | undefined;
14
+ isParsing: boolean;
15
+ composition: Composition;
16
+ validation: CheckedValidationResult;
17
+ }
18
+ /**
19
+ * The editable body for one example: its source in either format, parsed nodes, and their
20
+ * validation. Remount the caller to start over from another example.
21
+ */
22
+ export declare const useEditor: (initial: PrimitiveNode) => EditorState;
23
+ //# sourceMappingURL=use_editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_editor.d.ts","sourceRoot":"","sources":["../../src/dev/use_editor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,aAAa,EACd,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAW1C,2DAA2D;AAC3D,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,aAAa,EAS3D,CAAC;AAKF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,oHAAoH;IACpH,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,uBAAuB,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,aAAa,KAAG,WA0IlD,CAAC"}
@@ -0,0 +1,124 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { useCallback, useMemo, useRef, useState } from 'react';
8
+ import { printCompositionJsx } from '@elastic/isomer-sdk/author';
9
+ import { compileCompositionJsx } from '../model/compile_jsx.js';
10
+ import { useStudio } from '../studio_context.js';
11
+ const PARSE_DELAY = 250;
12
+ const isNode = (value) => typeof value === 'object' &&
13
+ value !== null &&
14
+ !Array.isArray(value) &&
15
+ 'type' in value &&
16
+ typeof value.type === 'string';
17
+ /** A JSON node or array of nodes as a composition body. */
18
+ export const parseBodyJson = (source) => {
19
+ const value = JSON.parse(source);
20
+ const nodes = Array.isArray(value) ? value : [value];
21
+ if (!nodes.length || !nodes.every(isNode)) {
22
+ throw new Error('Expected a node, or an array of nodes, each with a string `type`.');
23
+ }
24
+ return nodes.filter(isNode);
25
+ };
26
+ const errorMessage = (error) => error instanceof Error ? error.message : String(error);
27
+ /**
28
+ * The editable body for one example: its source in either format, parsed nodes, and their
29
+ * validation. Remount the caller to start over from another example.
30
+ */
31
+ export const useEditor = (initial) => {
32
+ const { runtime, shim, schemaFor, compose, transformJsx } = useStudio();
33
+ const print = useCallback((body, as) => as === 'jsx'
34
+ ? printCompositionJsx(body, { schemaFor, shim })
35
+ : JSON.stringify(body.length === 1 ? body[0] : body, null, 2), [schemaFor, shim]);
36
+ const [format, setFormatState] = useState(transformJsx ? 'jsx' : 'json');
37
+ const [nodes, setNodesState] = useState([initial]);
38
+ const [source, setSourceState] = useState(() => print([initial], format));
39
+ const [parseError, setParseError] = useState();
40
+ const [isParsing, setParsing] = useState(false);
41
+ const pending = useRef(0);
42
+ const reset = useCallback((body, as) => {
43
+ pending.current += 1;
44
+ setNodesState(body);
45
+ setSourceState(print(body, as));
46
+ setParseError(undefined);
47
+ setParsing(false);
48
+ }, [print]);
49
+ const parseSource = useCallback(async (text, as) => {
50
+ const parsed = as === 'jsx' && transformJsx
51
+ ? await compileCompositionJsx(text, shim, transformJsx)
52
+ : parseBodyJson(text);
53
+ compose(parsed);
54
+ return parsed;
55
+ }, [compose, shim, transformJsx]);
56
+ const parse = useCallback(async (token, text, onParsed) => {
57
+ try {
58
+ const parsed = await parseSource(text, format);
59
+ if (token === pending.current) {
60
+ onParsed(parsed);
61
+ }
62
+ }
63
+ catch (error) {
64
+ if (token === pending.current) {
65
+ setParseError(errorMessage(error));
66
+ setParsing(false);
67
+ }
68
+ }
69
+ }, [format, parseSource]);
70
+ /** Runs `then` on the nodes the current draft parses to, or reports why it doesn't parse. */
71
+ const withDraft = useCallback((then) => {
72
+ if (!isParsing && !parseError) {
73
+ then(nodes);
74
+ return;
75
+ }
76
+ void parse(++pending.current, source, then);
77
+ }, [isParsing, nodes, parse, parseError, source]);
78
+ const setFormat = useCallback((next) => withDraft((body) => {
79
+ setFormatState(next);
80
+ reset(body, next);
81
+ }), [reset, withDraft]);
82
+ const editNodes = useCallback((edit) => withDraft((body) => {
83
+ const next = edit(body);
84
+ try {
85
+ compose(next);
86
+ }
87
+ catch (error) {
88
+ setParseError(errorMessage(error));
89
+ setParsing(false);
90
+ return;
91
+ }
92
+ reset(next, format);
93
+ }), [compose, format, reset, withDraft]);
94
+ const setSource = useCallback((next) => {
95
+ setSourceState(next);
96
+ setParsing(true);
97
+ const token = ++pending.current;
98
+ setTimeout(() => {
99
+ if (token !== pending.current) {
100
+ return;
101
+ }
102
+ void parse(token, next, (parsed) => {
103
+ setNodesState(parsed);
104
+ setParseError(undefined);
105
+ setParsing(false);
106
+ });
107
+ }, PARSE_DELAY);
108
+ }, [parse]);
109
+ const composition = useMemo(() => compose(nodes), [compose, nodes]);
110
+ const validation = useMemo(() => runtime.validate(composition), [runtime, composition]);
111
+ return {
112
+ format,
113
+ setFormat,
114
+ source,
115
+ setSource,
116
+ nodes,
117
+ editNodes,
118
+ parseError,
119
+ isParsing,
120
+ composition,
121
+ validation,
122
+ };
123
+ };
124
+ //# sourceMappingURL=use_editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_editor.js","sourceRoot":"","sources":["../../src/dev/use_editor.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport type {\n CheckedValidationResult,\n Composition,\n PrimitiveNode,\n} from '@elastic/isomer-sdk';\nimport { printCompositionJsx } from '@elastic/isomer-sdk/author';\n\nimport { compileCompositionJsx } from '../model/compile_jsx';\nimport { useStudio } from '../studio_context';\n\nexport type EditorFormat = 'jsx' | 'json';\n\nconst PARSE_DELAY = 250;\n\nconst isNode = (value: unknown): value is PrimitiveNode =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n 'type' in value &&\n typeof value.type === 'string';\n\n/** A JSON node or array of nodes as a composition body. */\nexport const parseBodyJson = (source: string): PrimitiveNode[] => {\n const value: unknown = JSON.parse(source);\n const nodes: unknown[] = Array.isArray(value) ? value : [value];\n if (!nodes.length || !nodes.every(isNode)) {\n throw new Error(\n 'Expected a node, or an array of nodes, each with a string `type`.'\n );\n }\n return nodes.filter(isNode);\n};\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\n\nexport interface EditorState {\n format: EditorFormat;\n setFormat: (format: EditorFormat) => void;\n source: string;\n setSource: (source: string) => void;\n nodes: PrimitiveNode[];\n /** Applies a quick edit to the draft's nodes and reprints the source, unless the draft doesn't parse or compose. */\n editNodes: (edit: (nodes: PrimitiveNode[]) => PrimitiveNode[]) => void;\n parseError?: string | undefined;\n isParsing: boolean;\n composition: Composition;\n validation: CheckedValidationResult;\n}\n\n/**\n * The editable body for one example: its source in either format, parsed nodes, and their\n * validation. Remount the caller to start over from another example.\n */\nexport const useEditor = (initial: PrimitiveNode): EditorState => {\n const { runtime, shim, schemaFor, compose, transformJsx } = useStudio();\n const print = useCallback(\n (body: readonly PrimitiveNode[], as: EditorFormat) =>\n as === 'jsx'\n ? printCompositionJsx(body, { schemaFor, shim })\n : JSON.stringify(body.length === 1 ? body[0] : body, null, 2),\n [schemaFor, shim]\n );\n\n const [format, setFormatState] = useState<EditorFormat>(\n transformJsx ? 'jsx' : 'json'\n );\n const [nodes, setNodesState] = useState<PrimitiveNode[]>([initial]);\n const [source, setSourceState] = useState(() => print([initial], format));\n const [parseError, setParseError] = useState<string>();\n const [isParsing, setParsing] = useState(false);\n const pending = useRef(0);\n\n const reset = useCallback(\n (body: PrimitiveNode[], as: EditorFormat) => {\n pending.current += 1;\n setNodesState(body);\n setSourceState(print(body, as));\n setParseError(undefined);\n setParsing(false);\n },\n [print]\n );\n\n const parseSource = useCallback(\n async (text: string, as: EditorFormat): Promise<PrimitiveNode[]> => {\n const parsed =\n as === 'jsx' && transformJsx\n ? await compileCompositionJsx(text, shim, transformJsx)\n : parseBodyJson(text);\n compose(parsed);\n return parsed;\n },\n [compose, shim, transformJsx]\n );\n\n const parse = useCallback(\n async (\n token: number,\n text: string,\n onParsed: (parsed: PrimitiveNode[]) => void\n ) => {\n try {\n const parsed = await parseSource(text, format);\n if (token === pending.current) {\n onParsed(parsed);\n }\n } catch (error) {\n if (token === pending.current) {\n setParseError(errorMessage(error));\n setParsing(false);\n }\n }\n },\n [format, parseSource]\n );\n\n /** Runs `then` on the nodes the current draft parses to, or reports why it doesn't parse. */\n const withDraft = useCallback(\n (then: (body: PrimitiveNode[]) => void) => {\n if (!isParsing && !parseError) {\n then(nodes);\n return;\n }\n void parse(++pending.current, source, then);\n },\n [isParsing, nodes, parse, parseError, source]\n );\n\n const setFormat = useCallback(\n (next: EditorFormat) =>\n withDraft((body) => {\n setFormatState(next);\n reset(body, next);\n }),\n [reset, withDraft]\n );\n\n const editNodes = useCallback(\n (edit: (body: PrimitiveNode[]) => PrimitiveNode[]) =>\n withDraft((body) => {\n const next = edit(body);\n try {\n compose(next);\n } catch (error) {\n setParseError(errorMessage(error));\n setParsing(false);\n return;\n }\n reset(next, format);\n }),\n [compose, format, reset, withDraft]\n );\n\n const setSource = useCallback(\n (next: string) => {\n setSourceState(next);\n setParsing(true);\n const token = ++pending.current;\n\n setTimeout(() => {\n if (token !== pending.current) {\n return;\n }\n void parse(token, next, (parsed) => {\n setNodesState(parsed);\n setParseError(undefined);\n setParsing(false);\n });\n }, PARSE_DELAY);\n },\n [parse]\n );\n\n const composition = useMemo(() => compose(nodes), [compose, nodes]);\n const validation = useMemo(\n () => runtime.validate(composition),\n [runtime, composition]\n );\n\n return {\n format,\n setFormat,\n source,\n setSource,\n nodes,\n editNodes,\n parseError,\n isParsing,\n composition,\n validation,\n };\n};\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Accent } from '../chrome/accent.js';
2
+ import type { StudioRoute } from '../chrome/route.js';
3
+ export interface DocsViewProps {
4
+ route: StudioRoute;
5
+ navigate: (next: Partial<StudioRoute>) => void;
6
+ accent: Accent;
7
+ }
8
+ /** The reference page for one primitive. */
9
+ export declare const DocsView: ({ route: { page, example }, navigate, accent, }: DocsViewProps) => import("@emotion/react/jsx-runtime").JSX.Element | null;
10
+ //# sourceMappingURL=docs_view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs_view.d.ts","sourceRoot":"","sources":["../../src/docs/docs_view.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA4FnD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,GAAI,iDAItB,aAAa,4DA2Ff,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ /*
3
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4
+ * or more contributor license agreements. Licensed under the Elastic License
5
+ * 2.0; you may not use this file except in compliance with the Elastic License
6
+ * 2.0.
7
+ */
8
+ import { useMemo } from 'react';
9
+ import { EuiPanel, EuiText, EuiTitle, useEuiTheme } from '@elastic/eui';
10
+ import { css } from '@emotion/react';
11
+ import { PrimitiveHeading } from '../chrome/primitive_heading.js';
12
+ import { formatRoute } from '../chrome/route.js';
13
+ import { useStudio } from '../studio_context.js';
14
+ import { ExamplesPanel } from './examples_panel.js';
15
+ import { InlineCode } from './inline_code.js';
16
+ import { CONTENT_BASIS, OnThisPage, PAGE_WIDTH, TOC_GAP, useActiveEntry, } from './on_this_page.js';
17
+ import { PropsTable } from './props_table.js';
18
+ const SECTIONS = [
19
+ { id: 'examples', title: 'Examples' },
20
+ { id: 'guidance', title: 'Guidance' },
21
+ { id: 'props', title: 'Props' },
22
+ ];
23
+ const sectionId = (id) => `isomer-studio-${id}`;
24
+ const TOC_ENTRIES = SECTIONS.map(({ id, title }) => ({
25
+ id: sectionId(id),
26
+ title,
27
+ }));
28
+ const TOC_IDS = TOC_ENTRIES.map(({ id }) => id);
29
+ const Section = ({ id, children, }) => {
30
+ const { euiTheme } = useEuiTheme();
31
+ const { title } = SECTIONS.find((section) => section.id === id) ?? {
32
+ title: id,
33
+ };
34
+ return (_jsxs("section", { id: sectionId(id), "aria-label": title, css: css `
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: ${euiTheme.size.m};
38
+ scroll-margin-top: ${euiTheme.size.l};
39
+ `, children: [_jsx(EuiTitle, { size: "s", children: _jsx("h2", { children: title }) }), children] }));
40
+ };
41
+ const Guidance = ({ title, items, color, names, }) => (_jsxs(EuiPanel, { color: color, hasShadow: false, paddingSize: "m", children: [_jsx(EuiText, { size: "xs", color: color, children: _jsx("strong", { children: title }) }), _jsx(EuiText, { size: "s", children: items.length ? (_jsx("ul", { children: items.map((item) => (_jsx("li", { children: _jsx(InlineCode, { text: item, names }) }, item))) })) : (_jsx("p", { children: "No guidance has been added for this primitive yet." })) })] }));
42
+ /** The reference page for one primitive. */
43
+ export const DocsView = ({ route: { page, example }, navigate, accent, }) => {
44
+ const { euiTheme } = useEuiTheme();
45
+ const { docs: { primitives }, } = useStudio();
46
+ const [active, setActive] = useActiveEntry(TOC_IDS, page);
47
+ const names = useMemo(() => primitives.map(({ type }) => type), [primitives]);
48
+ const doc = primitives.find(({ type }) => type === page);
49
+ if (!doc) {
50
+ return null;
51
+ }
52
+ const { type, useWhen, avoidWhen, props } = doc;
53
+ return (_jsxs("div", { css: css `
54
+ display: flex;
55
+ flex-wrap: wrap;
56
+ align-items: flex-start;
57
+ gap: ${TOC_GAP}px;
58
+ max-width: ${PAGE_WIDTH}px;
59
+ margin-inline: auto;
60
+ padding: ${euiTheme.size.xl} ${euiTheme.size.xxl} ${euiTheme.size.xxxxl};
61
+ `, children: [_jsx(OnThisPage, { entries: TOC_ENTRIES, active, onSelect: setActive }), _jsxs("div", { css: css `
62
+ flex: 1 1 ${CONTENT_BASIS}px;
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: ${euiTheme.size.xl};
66
+ min-width: 0;
67
+ `, children: [_jsxs("div", { css: css `
68
+ display: flex;
69
+ flex-direction: column;
70
+ gap: ${euiTheme.size.s};
71
+ `, children: [_jsx(PrimitiveHeading, { doc }), _jsx(EuiText, { size: "s", color: "subdued", css: css `
72
+ max-inline-size: 72ch;
73
+ `, children: _jsx("p", { children: "Explore the example to see the primitive in context; its guidance and props explain when and how to use it." }) })] }), _jsx(Section, { id: "examples", children: _jsx(ExamplesPanel, { doc, example, onExampleChange: (next) => navigate({ example: next }), devHref: formatRoute({ mode: 'dev', page, example }) }, type) }), _jsx(Section, { id: "guidance", children: _jsxs("div", { css: css `
74
+ display: grid;
75
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
76
+ align-items: start;
77
+ gap: ${euiTheme.size.l};
78
+ `, children: [_jsx(Guidance, { title: "Use when", items: useWhen, color: "success", names }), _jsx(Guidance, { title: "Avoid when", items: avoidWhen, color: "danger", names })] }) }), _jsx(Section, { id: "props", children: _jsx(PropsTable, { props, accent, names }) })] })] }));
79
+ };
80
+ //# sourceMappingURL=docs_view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs_view.js","sourceRoot":"","sources":["../../src/docs/docs_view.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport React, { useMemo } from 'react';\nimport { EuiPanel, EuiText, EuiTitle, useEuiTheme } from '@elastic/eui';\nimport { css } from '@emotion/react';\n\nimport type { Accent } from '../chrome/accent';\nimport { PrimitiveHeading } from '../chrome/primitive_heading';\nimport type { StudioRoute } from '../chrome/route';\nimport { formatRoute } from '../chrome/route';\nimport { useStudio } from '../studio_context';\n\nimport { ExamplesPanel } from './examples_panel';\nimport { InlineCode } from './inline_code';\nimport {\n CONTENT_BASIS,\n OnThisPage,\n PAGE_WIDTH,\n TOC_GAP,\n useActiveEntry,\n} from './on_this_page';\nimport { PropsTable } from './props_table';\n\nconst SECTIONS = [\n { id: 'examples', title: 'Examples' },\n { id: 'guidance', title: 'Guidance' },\n { id: 'props', title: 'Props' },\n] as const;\n\ntype SectionId = (typeof SECTIONS)[number]['id'];\n\nconst sectionId = (id: SectionId) => `isomer-studio-${id}`;\n\nconst TOC_ENTRIES = SECTIONS.map(({ id, title }) => ({\n id: sectionId(id),\n title,\n}));\n\nconst TOC_IDS = TOC_ENTRIES.map(({ id }) => id);\n\nconst Section = ({\n id,\n children,\n}: {\n id: SectionId;\n children: React.ReactNode;\n}) => {\n const { euiTheme } = useEuiTheme();\n const { title } = SECTIONS.find((section) => section.id === id) ?? {\n title: id,\n };\n return (\n <section\n id={sectionId(id)}\n aria-label={title}\n css={css`\n display: flex;\n flex-direction: column;\n gap: ${euiTheme.size.m};\n scroll-margin-top: ${euiTheme.size.l};\n `}>\n <EuiTitle size=\"s\">\n <h2>{title}</h2>\n </EuiTitle>\n {children}\n </section>\n );\n};\n\nconst Guidance = ({\n title,\n items,\n color,\n names,\n}: {\n title: string;\n items: string[];\n color: 'success' | 'danger';\n names: readonly string[];\n}) => (\n <EuiPanel color={color} hasShadow={false} paddingSize=\"m\">\n <EuiText size=\"xs\" color={color}>\n <strong>{title}</strong>\n </EuiText>\n <EuiText size=\"s\">\n {items.length ? (\n <ul>\n {items.map((item) => (\n <li key={item}>\n <InlineCode text={item} {...{ names }} />\n </li>\n ))}\n </ul>\n ) : (\n <p>No guidance has been added for this primitive yet.</p>\n )}\n </EuiText>\n </EuiPanel>\n);\n\nexport interface DocsViewProps {\n route: StudioRoute;\n navigate: (next: Partial<StudioRoute>) => void;\n accent: Accent;\n}\n\n/** The reference page for one primitive. */\nexport const DocsView = ({\n route: { page, example },\n navigate,\n accent,\n}: DocsViewProps) => {\n const { euiTheme } = useEuiTheme();\n const {\n docs: { primitives },\n } = useStudio();\n const [active, setActive] = useActiveEntry(TOC_IDS, page);\n const names = useMemo(() => primitives.map(({ type }) => type), [primitives]);\n const doc = primitives.find(({ type }) => type === page);\n if (!doc) {\n return null;\n }\n const { type, useWhen, avoidWhen, props } = doc;\n\n return (\n <div\n css={css`\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: ${TOC_GAP}px;\n max-width: ${PAGE_WIDTH}px;\n margin-inline: auto;\n padding: ${euiTheme.size.xl} ${euiTheme.size.xxl} ${euiTheme.size.xxxxl};\n `}>\n <OnThisPage entries={TOC_ENTRIES} {...{ active }} onSelect={setActive} />\n <div\n css={css`\n flex: 1 1 ${CONTENT_BASIS}px;\n display: flex;\n flex-direction: column;\n gap: ${euiTheme.size.xl};\n min-width: 0;\n `}>\n <div\n css={css`\n display: flex;\n flex-direction: column;\n gap: ${euiTheme.size.s};\n `}>\n <PrimitiveHeading {...{ doc }} />\n <EuiText\n size=\"s\"\n color=\"subdued\"\n css={css`\n max-inline-size: 72ch;\n `}>\n <p>\n Explore the example to see the primitive in context; its guidance\n and props explain when and how to use it.\n </p>\n </EuiText>\n </div>\n\n <Section id=\"examples\">\n <ExamplesPanel\n key={type}\n {...{ doc, example }}\n onExampleChange={(next) => navigate({ example: next })}\n devHref={formatRoute({ mode: 'dev', page, example })}\n />\n </Section>\n\n <Section id=\"guidance\">\n <div\n css={css`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n align-items: start;\n gap: ${euiTheme.size.l};\n `}>\n <Guidance\n title=\"Use when\"\n items={useWhen}\n color=\"success\"\n {...{ names }}\n />\n <Guidance\n title=\"Avoid when\"\n items={avoidWhen}\n color=\"danger\"\n {...{ names }}\n />\n </div>\n </Section>\n\n <Section id=\"props\">\n <PropsTable {...{ props, accent, names }} />\n </Section>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import type { PrimitiveNode } from '@elastic/isomer-sdk';
2
+ /** The example node as JSX or JSON. */
3
+ export declare const ExampleSource: ({ node, isOpen, }: {
4
+ node: PrimitiveNode;
5
+ isOpen: boolean;
6
+ }) => import("@emotion/react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=example_source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example_source.d.ts","sourceRoot":"","sources":["../../src/docs/example_source.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA6GzD,uCAAuC;AACvC,eAAO,MAAM,aAAa,GAAI,mBAG3B;IACD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,qDAWA,CAAC"}