@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.
- package/LICENSE.txt +93 -0
- package/NOTICE.txt +17329 -0
- package/README.md +64 -0
- package/THIRD_PARTY_LICENSES.md +404 -0
- package/bin/isomer-studio.js +10 -0
- package/dist/app/assets/codicon-5T574S7B.ttf +0 -0
- package/dist/app/assets/editor.worker.js +11 -0
- package/dist/app/assets/esbuild.wasm +0 -0
- package/dist/app/assets/json.worker.js +47 -0
- package/dist/app/assets/slack.css +1 -0
- package/dist/app/assets/studio.css +11 -0
- package/dist/app/assets/ts.worker.js +37029 -0
- package/dist/app/index.html +16 -0
- package/dist/apps/app_host.d.ts +8 -0
- package/dist/apps/app_host.d.ts.map +1 -0
- package/dist/apps/app_host.js +73 -0
- package/dist/apps/app_host.js.map +1 -0
- package/dist/browser/dev_host.d.ts +5 -0
- package/dist/browser/dev_host.d.ts.map +1 -0
- package/dist/browser/dev_host.js +46 -0
- package/dist/browser/dev_host.js.map +1 -0
- package/dist/browser/mount.d.ts +16 -0
- package/dist/browser/mount.d.ts.map +1 -0
- package/dist/browser/mount.js +37 -0
- package/dist/browser/mount.js.map +1 -0
- package/dist/browser/static_host.d.ts +5 -0
- package/dist/browser/static_host.d.ts.map +1 -0
- package/dist/browser/static_host.js +55 -0
- package/dist/browser/static_host.js.map +1 -0
- package/dist/chrome/accent.d.ts +14 -0
- package/dist/chrome/accent.d.ts.map +1 -0
- package/dist/chrome/accent.js +31 -0
- package/dist/chrome/accent.js.map +1 -0
- package/dist/chrome/app_pages.d.ts +13 -0
- package/dist/chrome/app_pages.d.ts.map +1 -0
- package/dist/chrome/app_pages.js +33 -0
- package/dist/chrome/app_pages.js.map +1 -0
- package/dist/chrome/color_mode.d.ts +10 -0
- package/dist/chrome/color_mode.d.ts.map +1 -0
- package/dist/chrome/color_mode.js +45 -0
- package/dist/chrome/color_mode.js.map +1 -0
- package/dist/chrome/dev_tint.d.ts +7 -0
- package/dist/chrome/dev_tint.d.ts.map +1 -0
- package/dist/chrome/dev_tint.js +31 -0
- package/dist/chrome/dev_tint.js.map +1 -0
- package/dist/chrome/header.d.ts +20 -0
- package/dist/chrome/header.d.ts.map +1 -0
- package/dist/chrome/header.js +124 -0
- package/dist/chrome/header.js.map +1 -0
- package/dist/chrome/icon_data_uri.d.ts +12 -0
- package/dist/chrome/icon_data_uri.d.ts.map +1 -0
- package/dist/chrome/icon_data_uri.js +21 -0
- package/dist/chrome/icon_data_uri.js.map +1 -0
- package/dist/chrome/isomer_mark.d.ts +17 -0
- package/dist/chrome/isomer_mark.d.ts.map +1 -0
- package/dist/chrome/isomer_mark.js +46 -0
- package/dist/chrome/isomer_mark.js.map +1 -0
- package/dist/chrome/nav.d.ts +22 -0
- package/dist/chrome/nav.d.ts.map +1 -0
- package/dist/chrome/nav.js +306 -0
- package/dist/chrome/nav.js.map +1 -0
- package/dist/chrome/nav_groups.d.ts +6 -0
- package/dist/chrome/nav_groups.d.ts.map +1 -0
- package/dist/chrome/nav_groups.js +48 -0
- package/dist/chrome/nav_groups.js.map +1 -0
- package/dist/chrome/nav_sections.d.ts +29 -0
- package/dist/chrome/nav_sections.d.ts.map +1 -0
- package/dist/chrome/nav_sections.js +55 -0
- package/dist/chrome/nav_sections.js.map +1 -0
- package/dist/chrome/oklch.d.ts +10 -0
- package/dist/chrome/oklch.d.ts.map +1 -0
- package/dist/chrome/oklch.js +61 -0
- package/dist/chrome/oklch.js.map +1 -0
- package/dist/chrome/primitive_glyph.d.ts +14 -0
- package/dist/chrome/primitive_glyph.d.ts.map +1 -0
- package/dist/chrome/primitive_glyph.js +48 -0
- package/dist/chrome/primitive_glyph.js.map +1 -0
- package/dist/chrome/primitive_heading.d.ts +14 -0
- package/dist/chrome/primitive_heading.d.ts.map +1 -0
- package/dist/chrome/primitive_heading.js +32 -0
- package/dist/chrome/primitive_heading.js.map +1 -0
- package/dist/chrome/primitive_peek.d.ts +8 -0
- package/dist/chrome/primitive_peek.d.ts.map +1 -0
- package/dist/chrome/primitive_peek.js +51 -0
- package/dist/chrome/primitive_peek.js.map +1 -0
- package/dist/chrome/primitive_search.d.ts +9 -0
- package/dist/chrome/primitive_search.d.ts.map +1 -0
- package/dist/chrome/primitive_search.js +93 -0
- package/dist/chrome/primitive_search.js.map +1 -0
- package/dist/chrome/route.d.ts +48 -0
- package/dist/chrome/route.d.ts.map +1 -0
- package/dist/chrome/route.js +136 -0
- package/dist/chrome/route.js.map +1 -0
- package/dist/cli/args.d.ts +39 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +171 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/run.d.ts +15 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +113 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +22 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +118 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -0
- package/dist/dev/code_editor.d.ts +10 -0
- package/dist/dev/code_editor.d.ts.map +1 -0
- package/dist/dev/code_editor.js +22 -0
- package/dist/dev/code_editor.js.map +1 -0
- package/dist/dev/dev_view.d.ts +9 -0
- package/dist/dev/dev_view.d.ts.map +1 -0
- package/dist/dev/dev_view.js +65 -0
- package/dist/dev/dev_view.js.map +1 -0
- package/dist/dev/editor_panel.d.ts +17 -0
- package/dist/dev/editor_panel.d.ts.map +1 -0
- package/dist/dev/editor_panel.js +51 -0
- package/dist/dev/editor_panel.js.map +1 -0
- package/dist/dev/monaco_editor.d.ts +15 -0
- package/dist/dev/monaco_editor.d.ts.map +1 -0
- package/dist/dev/monaco_editor.js +159 -0
- package/dist/dev/monaco_editor.js.map +1 -0
- package/dist/dev/preview_panel.d.ts +10 -0
- package/dist/dev/preview_panel.d.ts.map +1 -0
- package/dist/dev/preview_panel.js +45 -0
- package/dist/dev/preview_panel.js.map +1 -0
- package/dist/dev/prop_reference.d.ts +9 -0
- package/dist/dev/prop_reference.d.ts.map +1 -0
- package/dist/dev/prop_reference.js +134 -0
- package/dist/dev/prop_reference.js.map +1 -0
- package/dist/dev/tsx_language.d.ts +10 -0
- package/dist/dev/tsx_language.d.ts.map +1 -0
- package/dist/dev/tsx_language.js +283 -0
- package/dist/dev/tsx_language.js.map +1 -0
- package/dist/dev/use_editor.d.ts +23 -0
- package/dist/dev/use_editor.d.ts.map +1 -0
- package/dist/dev/use_editor.js +124 -0
- package/dist/dev/use_editor.js.map +1 -0
- package/dist/docs/docs_view.d.ts +10 -0
- package/dist/docs/docs_view.d.ts.map +1 -0
- package/dist/docs/docs_view.js +80 -0
- package/dist/docs/docs_view.js.map +1 -0
- package/dist/docs/example_source.d.ts +7 -0
- package/dist/docs/example_source.d.ts.map +1 -0
- package/dist/docs/example_source.js +56 -0
- package/dist/docs/example_source.js.map +1 -0
- package/dist/docs/examples_panel.d.ts +10 -0
- package/dist/docs/examples_panel.d.ts.map +1 -0
- package/dist/docs/examples_panel.js +51 -0
- package/dist/docs/examples_panel.js.map +1 -0
- package/dist/docs/gallery_view.d.ts +9 -0
- package/dist/docs/gallery_view.d.ts.map +1 -0
- package/dist/docs/gallery_view.js +98 -0
- package/dist/docs/gallery_view.js.map +1 -0
- package/dist/docs/inline_code.d.ts +11 -0
- package/dist/docs/inline_code.d.ts.map +1 -0
- package/dist/docs/inline_code.js +24 -0
- package/dist/docs/inline_code.js.map +1 -0
- package/dist/docs/on_this_page.d.ts +17 -0
- package/dist/docs/on_this_page.d.ts.map +1 -0
- package/dist/docs/on_this_page.js +77 -0
- package/dist/docs/on_this_page.js.map +1 -0
- package/dist/docs/props_table.d.ts +14 -0
- package/dist/docs/props_table.d.ts.map +1 -0
- package/dist/docs/props_table.js +34 -0
- package/dist/docs/props_table.js.map +1 -0
- package/dist/home/apps_section.d.ts +6 -0
- package/dist/home/apps_section.d.ts.map +1 -0
- package/dist/home/apps_section.js +44 -0
- package/dist/home/apps_section.js.map +1 -0
- package/dist/home/featured_strip.d.ts +12 -0
- package/dist/home/featured_strip.d.ts.map +1 -0
- package/dist/home/featured_strip.js +176 -0
- package/dist/home/featured_strip.js.map +1 -0
- package/dist/home/home_view.d.ts +11 -0
- package/dist/home/home_view.d.ts.map +1 -0
- package/dist/home/home_view.js +261 -0
- package/dist/home/home_view.js.map +1 -0
- package/dist/home/links.d.ts +8 -0
- package/dist/home/links.d.ts.map +1 -0
- package/dist/home/links.js +14 -0
- package/dist/home/links.js.map +1 -0
- package/dist/home/loaded_panel.d.ts +6 -0
- package/dist/home/loaded_panel.d.ts.map +1 -0
- package/dist/home/loaded_panel.js +116 -0
- package/dist/home/loaded_panel.js.map +1 -0
- package/dist/home/surface_chart.d.ts +6 -0
- package/dist/home/surface_chart.d.ts.map +1 -0
- package/dist/home/surface_chart.js +263 -0
- package/dist/home/surface_chart.js.map +1 -0
- package/dist/home/tokens.d.ts +49 -0
- package/dist/home/tokens.d.ts.map +1 -0
- package/dist/home/tokens.js +171 -0
- package/dist/home/tokens.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/model/app_problems.d.ts +4 -0
- package/dist/model/app_problems.d.ts.map +1 -0
- package/dist/model/app_problems.js +90 -0
- package/dist/model/app_problems.js.map +1 -0
- package/dist/model/authoring_types.d.ts +23 -0
- package/dist/model/authoring_types.d.ts.map +1 -0
- package/dist/model/authoring_types.js +35 -0
- package/dist/model/authoring_types.js.map +1 -0
- package/dist/model/compile_jsx.d.ts +19 -0
- package/dist/model/compile_jsx.d.ts.map +1 -0
- package/dist/model/compile_jsx.js +55 -0
- package/dist/model/compile_jsx.js.map +1 -0
- package/dist/model/compose_example.d.ts +9 -0
- package/dist/model/compose_example.d.ts.map +1 -0
- package/dist/model/compose_example.js +24 -0
- package/dist/model/compose_example.js.map +1 -0
- package/dist/model/composition_key.d.ts +6 -0
- package/dist/model/composition_key.d.ts.map +1 -0
- package/dist/model/composition_key.js +26 -0
- package/dist/model/composition_key.js.map +1 -0
- package/dist/model/describe_runtime.d.ts +33 -0
- package/dist/model/describe_runtime.d.ts.map +1 -0
- package/dist/model/describe_runtime.js +77 -0
- package/dist/model/describe_runtime.js.map +1 -0
- package/dist/model/featured.d.ts +11 -0
- package/dist/model/featured.d.ts.map +1 -0
- package/dist/model/featured.js +70 -0
- package/dist/model/featured.js.map +1 -0
- package/dist/model/jsx_transform.d.ts +10 -0
- package/dist/model/jsx_transform.d.ts.map +1 -0
- package/dist/model/jsx_transform.js +31 -0
- package/dist/model/jsx_transform.js.map +1 -0
- package/dist/model/png_manifest.d.ts +23 -0
- package/dist/model/png_manifest.d.ts.map +1 -0
- package/dist/model/png_manifest.js +26 -0
- package/dist/model/png_manifest.js.map +1 -0
- package/dist/model/read_examples.d.ts +12 -0
- package/dist/model/read_examples.d.ts.map +1 -0
- package/dist/model/read_examples.js +43 -0
- package/dist/model/read_examples.js.map +1 -0
- package/dist/model/search.d.ts +4 -0
- package/dist/model/search.d.ts.map +1 -0
- package/dist/model/search.js +29 -0
- package/dist/model/search.js.map +1 -0
- package/dist/model/sha256.d.ts +3 -0
- package/dist/model/sha256.d.ts.map +1 -0
- package/dist/model/sha256.js +72 -0
- package/dist/model/sha256.js.map +1 -0
- package/dist/model/slack_limits.d.ts +9 -0
- package/dist/model/slack_limits.d.ts.map +1 -0
- package/dist/model/slack_limits.js +213 -0
- package/dist/model/slack_limits.js.map +1 -0
- package/dist/node/app_bundle.d.ts +45 -0
- package/dist/node/app_bundle.d.ts.map +1 -0
- package/dist/node/app_bundle.js +212 -0
- package/dist/node/app_bundle.js.map +1 -0
- package/dist/node/build_site.d.ts +28 -0
- package/dist/node/build_site.d.ts.map +1 -0
- package/dist/node/build_site.js +90 -0
- package/dist/node/build_site.js.map +1 -0
- package/dist/node/check.d.ts +40 -0
- package/dist/node/check.d.ts.map +1 -0
- package/dist/node/check.js +162 -0
- package/dist/node/check.js.map +1 -0
- package/dist/node/dev_bundle.d.ts +21 -0
- package/dist/node/dev_bundle.d.ts.map +1 -0
- package/dist/node/dev_bundle.js +121 -0
- package/dist/node/dev_bundle.js.map +1 -0
- package/dist/node/dev_server.d.ts +16 -0
- package/dist/node/dev_server.d.ts.map +1 -0
- package/dist/node/dev_server.js +291 -0
- package/dist/node/dev_server.js.map +1 -0
- package/dist/node/init_config.d.ts +30 -0
- package/dist/node/init_config.d.ts.map +1 -0
- package/dist/node/init_config.js +158 -0
- package/dist/node/init_config.js.map +1 -0
- package/dist/node/load_config.d.ts +34 -0
- package/dist/node/load_config.d.ts.map +1 -0
- package/dist/node/load_config.js +246 -0
- package/dist/node/load_config.js.map +1 -0
- package/dist/node/project_resolution.d.ts +17 -0
- package/dist/node/project_resolution.d.ts.map +1 -0
- package/dist/node/project_resolution.js +66 -0
- package/dist/node/project_resolution.js.map +1 -0
- package/dist/node/rasterize.d.ts +23 -0
- package/dist/node/rasterize.d.ts.map +1 -0
- package/dist/node/rasterize.js +79 -0
- package/dist/node/rasterize.js.map +1 -0
- package/dist/node/report.d.ts +8 -0
- package/dist/node/report.d.ts.map +1 -0
- package/dist/node/report.js +57 -0
- package/dist/node/report.js.map +1 -0
- package/dist/node/resolve_hooks.d.ts +16 -0
- package/dist/node/resolve_hooks.d.ts.map +1 -0
- package/dist/node/resolve_hooks.js +104 -0
- package/dist/node/resolve_hooks.js.map +1 -0
- package/dist/studio.d.ts +4 -0
- package/dist/studio.d.ts.map +1 -0
- package/dist/studio.js +188 -0
- package/dist/studio.js.map +1 -0
- package/dist/studio_context.d.ts +27 -0
- package/dist/studio_context.d.ts.map +1 -0
- package/dist/studio_context.js +17 -0
- package/dist/studio_context.js.map +1 -0
- package/dist/surfaces/adopt_stylesheet.d.ts +7 -0
- package/dist/surfaces/adopt_stylesheet.d.ts.map +1 -0
- package/dist/surfaces/adopt_stylesheet.js +64 -0
- package/dist/surfaces/adopt_stylesheet.js.map +1 -0
- package/dist/surfaces/app_preview.d.ts +4 -0
- package/dist/surfaces/app_preview.d.ts.map +1 -0
- package/dist/surfaces/app_preview.js +28 -0
- package/dist/surfaces/app_preview.js.map +1 -0
- package/dist/surfaces/app_surface.d.ts +9 -0
- package/dist/surfaces/app_surface.d.ts.map +1 -0
- package/dist/surfaces/app_surface.js +27 -0
- package/dist/surfaces/app_surface.js.map +1 -0
- package/dist/surfaces/applicable_enhancements.d.ts +4 -0
- package/dist/surfaces/applicable_enhancements.d.ts.map +1 -0
- package/dist/surfaces/applicable_enhancements.js +16 -0
- package/dist/surfaces/applicable_enhancements.js.map +1 -0
- package/dist/surfaces/enhancement_select.d.ts +10 -0
- package/dist/surfaces/enhancement_select.d.ts.map +1 -0
- package/dist/surfaces/enhancement_select.js +28 -0
- package/dist/surfaces/enhancement_select.js.map +1 -0
- package/dist/surfaces/example_picker.d.ts +11 -0
- package/dist/surfaces/example_picker.d.ts.map +1 -0
- package/dist/surfaces/example_picker.js +44 -0
- package/dist/surfaces/example_picker.js.map +1 -0
- package/dist/surfaces/format_source.d.ts +4 -0
- package/dist/surfaces/format_source.d.ts.map +1 -0
- package/dist/surfaces/format_source.js +30 -0
- package/dist/surfaces/format_source.js.map +1 -0
- package/dist/surfaces/html_surface.d.ts +14 -0
- package/dist/surfaces/html_surface.d.ts.map +1 -0
- package/dist/surfaces/html_surface.js +122 -0
- package/dist/surfaces/html_surface.js.map +1 -0
- package/dist/surfaces/png_surface.d.ts +13 -0
- package/dist/surfaces/png_surface.d.ts.map +1 -0
- package/dist/surfaces/png_surface.js +68 -0
- package/dist/surfaces/png_surface.js.map +1 -0
- package/dist/surfaces/react_surface.d.ts +11 -0
- package/dist/surfaces/react_surface.d.ts.map +1 -0
- package/dist/surfaces/react_surface.js +55 -0
- package/dist/surfaces/react_surface.js.map +1 -0
- package/dist/surfaces/render_output.d.ts +31 -0
- package/dist/surfaces/render_output.d.ts.map +1 -0
- package/dist/surfaces/render_output.js +119 -0
- package/dist/surfaces/render_output.js.map +1 -0
- package/dist/surfaces/scaled_preview.d.ts +17 -0
- package/dist/surfaces/scaled_preview.d.ts.map +1 -0
- package/dist/surfaces/scaled_preview.js +74 -0
- package/dist/surfaces/scaled_preview.js.map +1 -0
- package/dist/surfaces/shadow_root.d.ts +8 -0
- package/dist/surfaces/shadow_root.d.ts.map +1 -0
- package/dist/surfaces/shadow_root.js +41 -0
- package/dist/surfaces/shadow_root.js.map +1 -0
- package/dist/surfaces/slack_surface.d.ts +12 -0
- package/dist/surfaces/slack_surface.d.ts.map +1 -0
- package/dist/surfaces/slack_surface.js +27 -0
- package/dist/surfaces/slack_surface.js.map +1 -0
- package/dist/surfaces/snapshot_surface.d.ts +6 -0
- package/dist/surfaces/snapshot_surface.d.ts.map +1 -0
- package/dist/surfaces/snapshot_surface.js +5 -0
- package/dist/surfaces/snapshot_surface.js.map +1 -0
- package/dist/surfaces/surface_board.d.ts +19 -0
- package/dist/surfaces/surface_board.d.ts.map +1 -0
- package/dist/surfaces/surface_board.js +128 -0
- package/dist/surfaces/surface_board.js.map +1 -0
- package/dist/surfaces/surface_frame.d.ts +8 -0
- package/dist/surfaces/surface_frame.d.ts.map +1 -0
- package/dist/surfaces/surface_frame.js +4 -0
- package/dist/surfaces/surface_frame.js.map +1 -0
- package/dist/surfaces/surface_logos.d.ts +9 -0
- package/dist/surfaces/surface_logos.d.ts.map +1 -0
- package/dist/surfaces/surface_logos.js +21 -0
- package/dist/surfaces/surface_logos.js.map +1 -0
- package/dist/surfaces/surface_preview.d.ts +32 -0
- package/dist/surfaces/surface_preview.d.ts.map +1 -0
- package/dist/surfaces/surface_preview.js +66 -0
- package/dist/surfaces/surface_preview.js.map +1 -0
- package/dist/surfaces/surface_select.d.ts +34 -0
- package/dist/surfaces/surface_select.d.ts.map +1 -0
- package/dist/surfaces/surface_select.js +119 -0
- package/dist/surfaces/surface_select.js.map +1 -0
- package/dist/surfaces/text_surfaces.d.ts +14 -0
- package/dist/surfaces/text_surfaces.d.ts.map +1 -0
- package/dist/surfaces/text_surfaces.js +31 -0
- package/dist/surfaces/text_surfaces.js.map +1 -0
- package/dist/surfaces/zoom_select.d.ts +9 -0
- package/dist/surfaces/zoom_select.d.ts.map +1 -0
- package/dist/surfaces/zoom_select.js +32 -0
- package/dist/surfaces/zoom_select.js.map +1 -0
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/docs/ci.md +55 -0
- package/docs/commands.md +167 -0
- package/docs/config.md +192 -0
- package/docs/images/home.png +0 -0
- package/docs/images/reference.png +0 -0
- package/docs/images/workbench.png +0 -0
- package/docs/index.md +96 -0
- package/docs/toc.yml +10 -0
- package/package.json +89 -5
|
@@ -0,0 +1,104 @@
|
|
|
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 { readFileSync } from 'node:fs';
|
|
8
|
+
import { createRequire } from 'node:module';
|
|
9
|
+
import { isAbsolute, join } from 'node:path';
|
|
10
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
11
|
+
import { isStudioSpecifier, sharedResolveDir } from './project_resolution.js';
|
|
12
|
+
const parentIn = (dir) => pathToFileURL(join(dir, 'package.json')).href;
|
|
13
|
+
/** Where to resolve `specifier` from, in order; every parent but the last is passed over when it finds nothing. */
|
|
14
|
+
export const parentsFor = (specifier, parentURL, { projectDir, studioDir }) => {
|
|
15
|
+
const importer = parentURL?.startsWith('file:')
|
|
16
|
+
? fileURLToPath(parentURL)
|
|
17
|
+
: undefined;
|
|
18
|
+
const shared = sharedResolveDir(specifier, importer, projectDir);
|
|
19
|
+
return [
|
|
20
|
+
...(shared === undefined ? [] : [parentIn(shared)]),
|
|
21
|
+
parentURL,
|
|
22
|
+
...(isStudioSpecifier(specifier) ? [parentIn(studioDir)] : []),
|
|
23
|
+
];
|
|
24
|
+
};
|
|
25
|
+
/** The Studio's own `import` entry, which `require` cannot resolve from its ESM-only `exports` but can load. */
|
|
26
|
+
const studioEntry = (studioDir) => {
|
|
27
|
+
const { exports } = JSON.parse(readFileSync(join(studioDir, 'package.json'), 'utf8'));
|
|
28
|
+
return pathToFileURL(join(studioDir, exports['.'].import)).href;
|
|
29
|
+
};
|
|
30
|
+
const isNotFound = (error) => error instanceof Error &&
|
|
31
|
+
'code' in error &&
|
|
32
|
+
(error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND');
|
|
33
|
+
/** For `module.registerHooks`, which also sees `require`. */
|
|
34
|
+
export const resolveSync = (data) => (specifier, context, nextResolve) => {
|
|
35
|
+
const isRequire = context.conditions.includes('require');
|
|
36
|
+
// Its `exports` are `import` only, so a `require` of it, installed or not, takes the running Studio.
|
|
37
|
+
if (isRequire && specifier === '@elastic/isomer-studio') {
|
|
38
|
+
return { url: studioEntry(data.studioDir), shortCircuit: true };
|
|
39
|
+
}
|
|
40
|
+
// `require` resolves from the requiring module whatever `parentURL` says, so another parent resolves here.
|
|
41
|
+
const resolveFrom = (parentURL) => parentURL === context.parentURL || parentURL === undefined || !isRequire
|
|
42
|
+
? nextResolve(specifier, { ...context, parentURL })
|
|
43
|
+
: {
|
|
44
|
+
url: pathToFileURL(createRequire(parentURL).resolve(specifier))
|
|
45
|
+
.href,
|
|
46
|
+
shortCircuit: true,
|
|
47
|
+
};
|
|
48
|
+
const attempt = ([parentURL, ...rest]) => {
|
|
49
|
+
try {
|
|
50
|
+
return resolveFrom(parentURL);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (!rest.length || !isNotFound(error)) {
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
return attempt(rest);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return attempt(parentsFor(specifier, context.parentURL, data));
|
|
60
|
+
};
|
|
61
|
+
/** Applies {@link resolveSync} to `require` on a Node without `registerHooks`, wrapping the resolver as `tsx` does. */
|
|
62
|
+
export const patchRequire = (hooksData) => {
|
|
63
|
+
const loader = createRequire(import.meta.url)('node:module');
|
|
64
|
+
const original = loader._resolveFilename;
|
|
65
|
+
const resolveRequire = resolveSync(hooksData);
|
|
66
|
+
loader._resolveFilename = function (request, parent, ...rest) {
|
|
67
|
+
const { url } = resolveRequire(request, {
|
|
68
|
+
conditions: ['require', 'node'],
|
|
69
|
+
importAttributes: {},
|
|
70
|
+
parentURL: parent?.filename
|
|
71
|
+
? pathToFileURL(parent.filename).href
|
|
72
|
+
: undefined,
|
|
73
|
+
}, (specifier) => {
|
|
74
|
+
const resolved = original.call(this, specifier, parent, ...rest);
|
|
75
|
+
return {
|
|
76
|
+
url: isAbsolute(resolved) ? pathToFileURL(resolved).href : resolved,
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
return url.startsWith('file:') ? fileURLToPath(url) : url;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
let data;
|
|
83
|
+
/** For `module.register`, on a Node without `registerHooks`. */
|
|
84
|
+
export const initialize = (given) => {
|
|
85
|
+
data = given;
|
|
86
|
+
};
|
|
87
|
+
export const resolve = async (specifier, context, nextResolve) => {
|
|
88
|
+
if (data === undefined) {
|
|
89
|
+
return nextResolve(specifier, context);
|
|
90
|
+
}
|
|
91
|
+
const attempt = async ([parentURL, ...rest]) => {
|
|
92
|
+
try {
|
|
93
|
+
return await nextResolve(specifier, { ...context, parentURL });
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (!rest.length || !isNotFound(error)) {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
return attempt(rest);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return attempt(parentsFor(specifier, context.parentURL, data));
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=resolve_hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve_hooks.js","sourceRoot":"","sources":["../../src/node/resolve_hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQ3E,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE,CACvC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AAEhD,mHAAmH;AACnH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAiB,EACjB,SAA6B,EAC7B,EAAE,UAAU,EAAE,SAAS,EAAoB,EACnB,EAAE;IAC1B,MAAM,QAAQ,GAAG,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC;QAC7C,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACjE,OAAO;QACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,SAAS;QACT,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC,CAAC;AAEF,gHAAgH;AAChH,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAU,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACV,CAAC;IAC9C,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE,CAC7C,KAAK,YAAY,KAAK;IACtB,MAAM,IAAI,KAAK;IACf,CAAC,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;AAE/E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,IAAsB,EAAmB,EAAE,CAC5C,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACzD,qGAAqG;IACrG,IAAI,SAAS,IAAI,SAAS,KAAK,wBAAwB,EAAE,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IACD,2GAA2G;IAC3G,MAAM,WAAW,GAAG,CAAC,SAA6B,EAAmB,EAAE,CACrE,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS;QACtE,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;QACnD,CAAC,CAAC;YACE,GAAG,EAAE,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;iBAC5D,IAAI;YACP,YAAY,EAAE,IAAI;SACnB,CAAC;IACR,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,CAEjC,EAAmB,EAAE;QACtB,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAYJ,uHAAuH;AACvH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAA2B,EAAQ,EAAE;IAChE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3C,aAAa,CACI,CAAC;IACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACzC,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,CAAC,gBAAgB,GAAG,UAAU,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;QAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,CAC5B,OAAO,EACP;YACE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;YAC/B,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,MAAM,EAAE,QAAQ;gBACzB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI;gBACrC,CAAC,CAAC,SAAS;SACd,EACD,CAAC,SAAS,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;YACjE,OAAO;gBACL,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;aACpE,CAAC;QACJ,CAAC,CACF,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,IAAI,IAAkC,CAAC;AAEvC,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAqC,CAAC,KAAK,EAAE,EAAE;IACpE,IAAI,GAAG,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC5E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAEvC,EAA4B,EAAE;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC","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 { readFileSync } from 'node:fs';\nimport type {\n InitializeHook,\n ResolveFnOutput,\n ResolveHook,\n ResolveHookSync,\n} from 'node:module';\nimport { createRequire } from 'node:module';\nimport { isAbsolute, join } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport { isStudioSpecifier, sharedResolveDir } from './project_resolution';\n\n/** Node module hooks applying `sharedResolveDir` and the Studio fallback to every `import` and `require`. */\nexport interface ResolveHooksData {\n projectDir: string;\n studioDir: string;\n}\n\nconst parentIn = (dir: string): string =>\n pathToFileURL(join(dir, 'package.json')).href;\n\n/** Where to resolve `specifier` from, in order; every parent but the last is passed over when it finds nothing. */\nexport const parentsFor = (\n specifier: string,\n parentURL: string | undefined,\n { projectDir, studioDir }: ResolveHooksData\n): (string | undefined)[] => {\n const importer = parentURL?.startsWith('file:')\n ? fileURLToPath(parentURL)\n : undefined;\n const shared = sharedResolveDir(specifier, importer, projectDir);\n return [\n ...(shared === undefined ? [] : [parentIn(shared)]),\n parentURL,\n ...(isStudioSpecifier(specifier) ? [parentIn(studioDir)] : []),\n ];\n};\n\n/** The Studio's own `import` entry, which `require` cannot resolve from its ESM-only `exports` but can load. */\nconst studioEntry = (studioDir: string): string => {\n const { exports } = JSON.parse(\n readFileSync(join(studioDir, 'package.json'), 'utf8')\n ) as { exports: { '.': { import: string } } };\n return pathToFileURL(join(studioDir, exports['.'].import)).href;\n};\n\nconst isNotFound = (error: unknown): boolean =>\n error instanceof Error &&\n 'code' in error &&\n (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND');\n\n/** For `module.registerHooks`, which also sees `require`. */\nexport const resolveSync =\n (data: ResolveHooksData): ResolveHookSync =>\n (specifier, context, nextResolve) => {\n const isRequire = context.conditions.includes('require');\n // Its `exports` are `import` only, so a `require` of it, installed or not, takes the running Studio.\n if (isRequire && specifier === '@elastic/isomer-studio') {\n return { url: studioEntry(data.studioDir), shortCircuit: true };\n }\n // `require` resolves from the requiring module whatever `parentURL` says, so another parent resolves here.\n const resolveFrom = (parentURL: string | undefined): ResolveFnOutput =>\n parentURL === context.parentURL || parentURL === undefined || !isRequire\n ? nextResolve(specifier, { ...context, parentURL })\n : {\n url: pathToFileURL(createRequire(parentURL).resolve(specifier))\n .href,\n shortCircuit: true,\n };\n const attempt = ([parentURL, ...rest]: (\n string | undefined\n )[]): ResolveFnOutput => {\n try {\n return resolveFrom(parentURL);\n } catch (error) {\n if (!rest.length || !isNotFound(error)) {\n throw error;\n }\n return attempt(rest);\n }\n };\n return attempt(parentsFor(specifier, context.parentURL, data));\n };\n\n/** Node's CommonJS resolver, which `module.register` hooks never see. */\ninterface CommonJsLoader {\n _resolveFilename: (\n this: unknown,\n request: string,\n parent: { filename?: string | null } | undefined,\n ...rest: unknown[]\n ) => string;\n}\n\n/** Applies {@link resolveSync} to `require` on a Node without `registerHooks`, wrapping the resolver as `tsx` does. */\nexport const patchRequire = (hooksData: ResolveHooksData): void => {\n const loader = createRequire(import.meta.url)(\n 'node:module'\n ) as CommonJsLoader;\n const original = loader._resolveFilename;\n const resolveRequire = resolveSync(hooksData);\n loader._resolveFilename = function (request, parent, ...rest) {\n const { url } = resolveRequire(\n request,\n {\n conditions: ['require', 'node'],\n importAttributes: {},\n parentURL: parent?.filename\n ? pathToFileURL(parent.filename).href\n : undefined,\n },\n (specifier) => {\n const resolved = original.call(this, specifier, parent, ...rest);\n return {\n url: isAbsolute(resolved) ? pathToFileURL(resolved).href : resolved,\n };\n }\n );\n return url.startsWith('file:') ? fileURLToPath(url) : url;\n };\n};\n\nlet data: ResolveHooksData | undefined;\n\n/** For `module.register`, on a Node without `registerHooks`. */\nexport const initialize: InitializeHook<ResolveHooksData> = (given) => {\n data = given;\n};\n\nexport const resolve: ResolveHook = async (specifier, context, nextResolve) => {\n if (data === undefined) {\n return nextResolve(specifier, context);\n }\n const attempt = async ([parentURL, ...rest]: (\n string | undefined\n )[]): Promise<ResolveFnOutput> => {\n try {\n return await nextResolve(specifier, { ...context, parentURL });\n } catch (error) {\n if (!rest.length || !isNotFound(error)) {\n throw error;\n }\n return attempt(rest);\n }\n };\n return attempt(parentsFor(specifier, context.parentURL, data));\n};\n"]}
|
package/dist/studio.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IsomerStudioProps } from './types.js';
|
|
2
|
+
/** A home, dev and docs shell for an Isomer runtime, built only from what the runtime reports. */
|
|
3
|
+
export declare const IsomerStudio: (props: IsomerStudioProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=studio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../src/studio.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAwUjD,kGAAkG;AAClG,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,qDAYpD,CAAC"}
|
package/dist/studio.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, 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 { useCallback, useEffect, useMemo, useState } from 'react';
|
|
9
|
+
import { EuiCallOut, EuiProvider, EuiThemeProvider, useEuiTheme, } from '@elastic/eui';
|
|
10
|
+
import { css } from '@emotion/react';
|
|
11
|
+
import { AppHost } from './apps/app_host.js';
|
|
12
|
+
import { useAccent } from './chrome/accent.js';
|
|
13
|
+
import { useColorMode } from './chrome/color_mode.js';
|
|
14
|
+
import { DEV_TINT } from './chrome/dev_tint.js';
|
|
15
|
+
import { StudioHeader } from './chrome/header.js';
|
|
16
|
+
import { NAV_WIDTH, StudioNav } from './chrome/nav.js';
|
|
17
|
+
import { GALLERY, isAppRoute, isHomeRoute, useStudioRoute, } from './chrome/route.js';
|
|
18
|
+
import { DevView } from './dev/dev_view.js';
|
|
19
|
+
import { DocsView } from './docs/docs_view.js';
|
|
20
|
+
import { GalleryView } from './docs/gallery_view.js';
|
|
21
|
+
import { HomeView } from './home/home_view.js';
|
|
22
|
+
import { homeBackground } from './home/tokens.js';
|
|
23
|
+
import { createShim } from './model/compile_jsx.js';
|
|
24
|
+
import { composeExample, composeOf } from './model/compose_example.js';
|
|
25
|
+
import { describeRuntime } from './model/describe_runtime.js';
|
|
26
|
+
import { StudioContextProvider, useStudio } from './studio_context.js';
|
|
27
|
+
import { reactContextOf } from './surfaces/adopt_stylesheet.js';
|
|
28
|
+
const darkWrapper = {
|
|
29
|
+
css: css `
|
|
30
|
+
display: contents;
|
|
31
|
+
`,
|
|
32
|
+
};
|
|
33
|
+
const NO_TINT = {};
|
|
34
|
+
const NO_APPS = [];
|
|
35
|
+
const fill = css `
|
|
36
|
+
height: 100%;
|
|
37
|
+
`;
|
|
38
|
+
const docsBackground = css `
|
|
39
|
+
background-color: #0b2347;
|
|
40
|
+
background-image:
|
|
41
|
+
radial-gradient(circle at 0% 0%, rgba(27, 169, 245, 0.3), transparent 24%),
|
|
42
|
+
radial-gradient(
|
|
43
|
+
circle at 4% 100%,
|
|
44
|
+
rgba(240, 78, 152, 0.2),
|
|
45
|
+
transparent 22%
|
|
46
|
+
),
|
|
47
|
+
radial-gradient(circle at 40% 0%, rgba(0, 191, 179, 0.14), transparent 18%);
|
|
48
|
+
`;
|
|
49
|
+
const devBackground = css `
|
|
50
|
+
background-color: #0b3a2c;
|
|
51
|
+
background-image:
|
|
52
|
+
radial-gradient(circle at 0% 0%, rgba(0, 191, 179, 0.3), transparent 24%),
|
|
53
|
+
radial-gradient(
|
|
54
|
+
circle at 4% 100%,
|
|
55
|
+
rgba(254, 197, 20, 0.2),
|
|
56
|
+
transparent 22%
|
|
57
|
+
),
|
|
58
|
+
radial-gradient(circle at 40% 0%, rgba(27, 169, 245, 0.14), transparent 18%);
|
|
59
|
+
`;
|
|
60
|
+
const compactNavQuery = () => typeof window === 'undefined'
|
|
61
|
+
? undefined
|
|
62
|
+
: window.matchMedia(`(max-width: ${NAV_WIDTH.compactAt}px)`);
|
|
63
|
+
const BACKGROUNDS = {
|
|
64
|
+
dev: devBackground,
|
|
65
|
+
docs: docsBackground,
|
|
66
|
+
home: homeBackground,
|
|
67
|
+
};
|
|
68
|
+
const Layout = ({ title = 'Isomer Studio', router, configProblems = [], colorMode, onColorModeChange, }) => {
|
|
69
|
+
const { location, route, navigate, openApp, goHome } = router;
|
|
70
|
+
const { euiTheme } = useEuiTheme();
|
|
71
|
+
const { apps, featured, docs: { primitives }, } = useStudio();
|
|
72
|
+
const home = isHomeRoute(location);
|
|
73
|
+
const app = isAppRoute(location)
|
|
74
|
+
? apps.find(({ id }) => id === location.app)
|
|
75
|
+
: undefined;
|
|
76
|
+
const { page } = route;
|
|
77
|
+
const mode = app || home ? undefined : route.mode;
|
|
78
|
+
const look = home ? 'home' : (mode ?? 'docs');
|
|
79
|
+
const accent = useAccent(look === 'home' ? 'docs' : look);
|
|
80
|
+
const [isCompactNav, setCompactNav] = useState(() => compactNavQuery()?.matches ?? false);
|
|
81
|
+
const [isNavOpen, setNavOpen] = useState(() => !isCompactNav);
|
|
82
|
+
const [devRoute, setDevRoute] = useState(mode === 'dev' ? route : undefined);
|
|
83
|
+
if (mode === 'dev' && devRoute !== route) {
|
|
84
|
+
setDevRoute(route);
|
|
85
|
+
}
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
const query = compactNavQuery();
|
|
88
|
+
if (!query) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const update = () => {
|
|
92
|
+
setCompactNav(query.matches);
|
|
93
|
+
setNavOpen(!query.matches);
|
|
94
|
+
};
|
|
95
|
+
update();
|
|
96
|
+
query.addEventListener('change', update);
|
|
97
|
+
return () => query.removeEventListener('change', update);
|
|
98
|
+
}, []);
|
|
99
|
+
const shell = css `
|
|
100
|
+
height: 100vh;
|
|
101
|
+
display: flex;
|
|
102
|
+
flex-direction: column;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
color: ${euiTheme.colors.textParagraph};
|
|
105
|
+
${BACKGROUNDS[look]};
|
|
106
|
+
`;
|
|
107
|
+
const body = css `
|
|
108
|
+
flex: 1;
|
|
109
|
+
min-height: 0;
|
|
110
|
+
display: grid;
|
|
111
|
+
position: relative;
|
|
112
|
+
grid-template-columns: ${isCompactNav
|
|
113
|
+
? NAV_WIDTH.closed
|
|
114
|
+
: isNavOpen
|
|
115
|
+
? NAV_WIDTH.open
|
|
116
|
+
: NAV_WIDTH.closed}px minmax(0, 1fr);
|
|
117
|
+
transition: grid-template-columns ${euiTheme.animation.normal}
|
|
118
|
+
${euiTheme.animation.resistance};
|
|
119
|
+
`;
|
|
120
|
+
const main = css `
|
|
121
|
+
grid-column: 2;
|
|
122
|
+
min-height: 0;
|
|
123
|
+
margin: 0 ${euiTheme.size.m} ${euiTheme.size.m} 0;
|
|
124
|
+
/* Contain absolute descendants (EUI screen-reader text) so they cannot overflow the shell. */
|
|
125
|
+
position: relative;
|
|
126
|
+
overflow: auto;
|
|
127
|
+
border-radius: ${euiTheme.border.radius.frame};
|
|
128
|
+
background: ${euiTheme.colors.backgroundBasePlain};
|
|
129
|
+
`;
|
|
130
|
+
const onSelectPrimitive = useCallback((type) => navigate({ page: type, example: 0 }), [navigate]);
|
|
131
|
+
return (_jsxs("div", { css: shell, children: [_jsx(EuiThemeProvider, { colorMode: "dark", wrapperProps: darkWrapper, children: _jsx(StudioHeader, { title,
|
|
132
|
+
mode,
|
|
133
|
+
home,
|
|
134
|
+
appTitle: app?.title,
|
|
135
|
+
colorMode,
|
|
136
|
+
onColorModeChange,
|
|
137
|
+
onSelectPrimitive, onModeChange: (next) => navigate({ mode: next }), onHome: goHome }) }), home ? (_jsx(EuiThemeProvider, { colorMode: "dark", wrapperProps: darkWrapper, children: _jsx(HomeView, { title, featured, configProblems, router: { route, navigate } }) })) : (_jsxs("div", { css: body, children: [_jsx(EuiThemeProvider, { colorMode: "dark", wrapperProps: darkWrapper, children: _jsx(StudioNav, { page, mode: route.mode, app: app?.id, appPath: isAppRoute(location) ? location.path : undefined, isOpen: isNavOpen, isCompact: isCompactNav, onToggle: () => setNavOpen((open) => !open), onSelect: (next) => navigate(next === GALLERY
|
|
138
|
+
? { mode: 'docs', page: GALLERY }
|
|
139
|
+
: { page: next, example: 0 }), onSelectApp: openApp }) }), _jsxs("main", { css: main, children: [configProblems.length ? (_jsx(EuiCallOut, { announceOnMount: true, color: "danger", iconType: "error", title: "The config is invalid; the Studio keeps the last valid one", children: _jsx("ul", { children: configProblems.map((problem) => (_jsx("li", { children: problem }, problem))) }) })) : null, app && isAppRoute(location) ? (_jsx(AppHost, { path: location.path, app, openApp }, app.id)) : null, !primitives.length ? null : (_jsxs(_Fragment, { children: [devRoute ? (_jsx("div", { hidden: mode !== 'dev', css: fill, children: _jsx(DevView, { route: devRoute, stacked: isCompactNav, navigate }) })) : null, mode !== 'docs' ? null : page === GALLERY ? (_jsx(GalleryView, { group: route.group })) : (_jsx(DocsView, { route, navigate, accent }))] }))] })] }))] }));
|
|
140
|
+
};
|
|
141
|
+
const Studio = ({ title, runtime, apps = NO_APPS, featured, createReactContext: configReactContext, stylesheet, compose: configCompose, previewExample, transformJsx, rasterizePng, renderPdf, configProblems, theme, colorMode, onColorModeChange, }) => {
|
|
142
|
+
const docs = useMemo(() => describeRuntime(runtime), [runtime]);
|
|
143
|
+
const shim = useMemo(() => createShim(runtime.primitives), [runtime]);
|
|
144
|
+
const schemaFor = useCallback((type) => runtime.primitives.find((definition) => definition.type === type)?.schema, [runtime]);
|
|
145
|
+
const appIds = useMemo(() => apps.map(({ id }) => id), [apps]);
|
|
146
|
+
const router = useStudioRoute(docs, appIds);
|
|
147
|
+
const composeNodes = useMemo(() => composeOf({ compose: configCompose, previewExample }), [configCompose, previewExample]);
|
|
148
|
+
const compose = useCallback((nodes) => composeExample(composeNodes, nodes, theme), [composeNodes, theme]);
|
|
149
|
+
const createReactContext = useMemo(() => reactContextOf({ createReactContext: configReactContext, stylesheet }), [configReactContext, stylesheet]);
|
|
150
|
+
const value = useMemo(() => ({
|
|
151
|
+
runtime,
|
|
152
|
+
apps,
|
|
153
|
+
featured,
|
|
154
|
+
docs,
|
|
155
|
+
shim,
|
|
156
|
+
schemaFor,
|
|
157
|
+
theme,
|
|
158
|
+
compose,
|
|
159
|
+
createReactContext,
|
|
160
|
+
transformJsx,
|
|
161
|
+
rasterizePng,
|
|
162
|
+
renderPdf,
|
|
163
|
+
}), [
|
|
164
|
+
runtime,
|
|
165
|
+
apps,
|
|
166
|
+
featured,
|
|
167
|
+
docs,
|
|
168
|
+
shim,
|
|
169
|
+
schemaFor,
|
|
170
|
+
theme,
|
|
171
|
+
compose,
|
|
172
|
+
createReactContext,
|
|
173
|
+
transformJsx,
|
|
174
|
+
rasterizePng,
|
|
175
|
+
renderPdf,
|
|
176
|
+
]);
|
|
177
|
+
const { location } = router;
|
|
178
|
+
const tinted = !isAppRoute(location) &&
|
|
179
|
+
!isHomeRoute(location) &&
|
|
180
|
+
router.route.mode === 'dev';
|
|
181
|
+
return (_jsx(StudioContextProvider, { value, children: _jsx(EuiThemeProvider, { modify: tinted ? DEV_TINT : NO_TINT, wrapperProps: darkWrapper, children: _jsx(Layout, { title, router, configProblems, colorMode, onColorModeChange }) }) }));
|
|
182
|
+
};
|
|
183
|
+
/** A home, dev and docs shell for an Isomer runtime, built only from what the runtime reports. */
|
|
184
|
+
export const IsomerStudio = (props) => {
|
|
185
|
+
const { preference: colorMode, theme, setPreference: onColorModeChange, } = useColorMode();
|
|
186
|
+
return (_jsx(EuiProvider, { colorMode: theme, children: _jsx(Studio, { ...props, theme, colorMode, onColorModeChange }) }));
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=studio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.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, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n EuiCallOut,\n EuiProvider,\n EuiThemeProvider,\n useEuiTheme,\n} from '@elastic/eui';\nimport type { PrimitiveNode } from '@elastic/isomer-sdk';\nimport { css } from '@emotion/react';\n\nimport { AppHost } from './apps/app_host';\nimport { useAccent } from './chrome/accent';\nimport type { ColorModePreference } from './chrome/color_mode';\nimport { useColorMode } from './chrome/color_mode';\nimport { DEV_TINT } from './chrome/dev_tint';\nimport { StudioHeader } from './chrome/header';\nimport { NAV_WIDTH, StudioNav } from './chrome/nav';\nimport type { StudioRouter } from './chrome/route';\nimport {\n GALLERY,\n isAppRoute,\n isHomeRoute,\n useStudioRoute,\n} from './chrome/route';\nimport type { StudioApp } from './config';\nimport { DevView } from './dev/dev_view';\nimport { DocsView } from './docs/docs_view';\nimport { GalleryView } from './docs/gallery_view';\nimport { HomeView } from './home/home_view';\nimport { homeBackground } from './home/tokens';\nimport { createShim } from './model/compile_jsx';\nimport { composeExample, composeOf } from './model/compose_example';\nimport { describeRuntime } from './model/describe_runtime';\nimport type { StudioContextValue, StudioTheme } from './studio_context';\nimport { StudioContextProvider, useStudio } from './studio_context';\nimport { reactContextOf } from './surfaces/adopt_stylesheet';\nimport type { IsomerStudioProps } from './types';\n\nconst darkWrapper = {\n css: css`\n display: contents;\n `,\n};\n\nconst NO_TINT = {};\n\nconst NO_APPS: readonly StudioApp[] = [];\n\nconst fill = css`\n height: 100%;\n`;\n\nconst docsBackground = css`\n background-color: #0b2347;\n background-image:\n radial-gradient(circle at 0% 0%, rgba(27, 169, 245, 0.3), transparent 24%),\n radial-gradient(\n circle at 4% 100%,\n rgba(240, 78, 152, 0.2),\n transparent 22%\n ),\n radial-gradient(circle at 40% 0%, rgba(0, 191, 179, 0.14), transparent 18%);\n`;\nconst devBackground = css`\n background-color: #0b3a2c;\n background-image:\n radial-gradient(circle at 0% 0%, rgba(0, 191, 179, 0.3), transparent 24%),\n radial-gradient(\n circle at 4% 100%,\n rgba(254, 197, 20, 0.2),\n transparent 22%\n ),\n radial-gradient(circle at 40% 0%, rgba(27, 169, 245, 0.14), transparent 18%);\n`;\n\ntype Look = 'dev' | 'docs' | 'home';\n\nconst compactNavQuery = () =>\n typeof window === 'undefined'\n ? undefined\n : window.matchMedia(`(max-width: ${NAV_WIDTH.compactAt}px)`);\n\nconst BACKGROUNDS = {\n dev: devBackground,\n docs: docsBackground,\n home: homeBackground,\n} as const;\n\nconst Layout = ({\n title = 'Isomer Studio',\n router,\n configProblems = [],\n colorMode,\n onColorModeChange,\n}: {\n title?: string | undefined;\n router: StudioRouter;\n configProblems?: readonly string[] | undefined;\n colorMode: ColorModePreference;\n onColorModeChange: (colorMode: ColorModePreference) => void;\n}) => {\n const { location, route, navigate, openApp, goHome } = router;\n const { euiTheme } = useEuiTheme();\n const {\n apps,\n featured,\n docs: { primitives },\n } = useStudio();\n const home = isHomeRoute(location);\n const app = isAppRoute(location)\n ? apps.find(({ id }) => id === location.app)\n : undefined;\n const { page } = route;\n const mode = app || home ? undefined : route.mode;\n const look: Look = home ? 'home' : (mode ?? 'docs');\n const accent = useAccent(look === 'home' ? 'docs' : look);\n const [isCompactNav, setCompactNav] = useState(\n () => compactNavQuery()?.matches ?? false\n );\n const [isNavOpen, setNavOpen] = useState(() => !isCompactNav);\n const [devRoute, setDevRoute] = useState(mode === 'dev' ? route : undefined);\n if (mode === 'dev' && devRoute !== route) {\n setDevRoute(route);\n }\n\n useEffect(() => {\n const query = compactNavQuery();\n if (!query) {\n return;\n }\n const update = () => {\n setCompactNav(query.matches);\n setNavOpen(!query.matches);\n };\n update();\n query.addEventListener('change', update);\n return () => query.removeEventListener('change', update);\n }, []);\n\n const shell = css`\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n color: ${euiTheme.colors.textParagraph};\n ${BACKGROUNDS[look]};\n `;\n const body = css`\n flex: 1;\n min-height: 0;\n display: grid;\n position: relative;\n grid-template-columns: ${\n isCompactNav\n ? NAV_WIDTH.closed\n : isNavOpen\n ? NAV_WIDTH.open\n : NAV_WIDTH.closed\n }px minmax(0, 1fr);\n transition: grid-template-columns ${euiTheme.animation.normal}\n ${euiTheme.animation.resistance};\n `;\n const main = css`\n grid-column: 2;\n min-height: 0;\n margin: 0 ${euiTheme.size.m} ${euiTheme.size.m} 0;\n /* Contain absolute descendants (EUI screen-reader text) so they cannot overflow the shell. */\n position: relative;\n overflow: auto;\n border-radius: ${euiTheme.border.radius.frame};\n background: ${euiTheme.colors.backgroundBasePlain};\n `;\n\n const onSelectPrimitive = useCallback(\n (type: string) => navigate({ page: type, example: 0 }),\n [navigate]\n );\n\n return (\n <div css={shell}>\n <EuiThemeProvider colorMode=\"dark\" wrapperProps={darkWrapper}>\n <StudioHeader\n {...{\n title,\n mode,\n home,\n appTitle: app?.title,\n colorMode,\n onColorModeChange,\n onSelectPrimitive,\n }}\n onModeChange={(next) => navigate({ mode: next })}\n onHome={goHome}\n />\n </EuiThemeProvider>\n {home ? (\n <EuiThemeProvider colorMode=\"dark\" wrapperProps={darkWrapper}>\n <HomeView\n {...{ title, featured, configProblems }}\n router={{ route, navigate }}\n />\n </EuiThemeProvider>\n ) : (\n <div css={body}>\n <EuiThemeProvider colorMode=\"dark\" wrapperProps={darkWrapper}>\n <StudioNav\n {...{ page }}\n mode={route.mode}\n app={app?.id}\n appPath={isAppRoute(location) ? location.path : undefined}\n isOpen={isNavOpen}\n isCompact={isCompactNav}\n onToggle={() => setNavOpen((open) => !open)}\n onSelect={(next) =>\n navigate(\n next === GALLERY\n ? { mode: 'docs', page: GALLERY }\n : { page: next, example: 0 }\n )\n }\n onSelectApp={openApp}\n />\n </EuiThemeProvider>\n <main css={main}>\n {configProblems.length ? (\n <EuiCallOut\n announceOnMount\n color=\"danger\"\n iconType=\"error\"\n title=\"The config is invalid; the Studio keeps the last valid one\">\n <ul>\n {configProblems.map((problem) => (\n <li key={problem}>{problem}</li>\n ))}\n </ul>\n </EuiCallOut>\n ) : null}\n {app && isAppRoute(location) ? (\n <AppHost\n key={app.id}\n path={location.path}\n {...{ app, openApp }}\n />\n ) : null}\n {!primitives.length ? null : (\n <>\n {devRoute ? (\n <div hidden={mode !== 'dev'} css={fill}>\n <DevView\n route={devRoute}\n stacked={isCompactNav}\n {...{ navigate }}\n />\n </div>\n ) : null}\n {mode !== 'docs' ? null : page === GALLERY ? (\n <GalleryView group={route.group} />\n ) : (\n <DocsView {...{ route, navigate, accent }} />\n )}\n </>\n )}\n </main>\n </div>\n )}\n </div>\n );\n};\n\nconst Studio = ({\n title,\n runtime,\n apps = NO_APPS,\n featured,\n createReactContext: configReactContext,\n stylesheet,\n compose: configCompose,\n previewExample,\n transformJsx,\n rasterizePng,\n renderPdf,\n configProblems,\n theme,\n colorMode,\n onColorModeChange,\n}: IsomerStudioProps & {\n theme: StudioTheme;\n colorMode: ColorModePreference;\n onColorModeChange: (colorMode: ColorModePreference) => void;\n}) => {\n const docs = useMemo(() => describeRuntime(runtime), [runtime]);\n const shim = useMemo(() => createShim(runtime.primitives), [runtime]);\n const schemaFor = useCallback(\n (type: string) =>\n runtime.primitives.find((definition) => definition.type === type)?.schema,\n [runtime]\n );\n const appIds = useMemo(() => apps.map(({ id }) => id), [apps]);\n const router = useStudioRoute(docs, appIds);\n const composeNodes = useMemo(\n () => composeOf({ compose: configCompose, previewExample }),\n [configCompose, previewExample]\n );\n const compose = useCallback(\n (nodes: readonly PrimitiveNode[]) =>\n composeExample(composeNodes, nodes, theme),\n [composeNodes, theme]\n );\n const createReactContext = useMemo(\n () =>\n reactContextOf({ createReactContext: configReactContext, stylesheet }),\n [configReactContext, stylesheet]\n );\n\n const value = useMemo(\n (): StudioContextValue => ({\n runtime,\n apps,\n featured,\n docs,\n shim,\n schemaFor,\n theme,\n compose,\n createReactContext,\n transformJsx,\n rasterizePng,\n renderPdf,\n }),\n [\n runtime,\n apps,\n featured,\n docs,\n shim,\n schemaFor,\n theme,\n compose,\n createReactContext,\n transformJsx,\n rasterizePng,\n renderPdf,\n ]\n );\n\n const { location } = router;\n const tinted =\n !isAppRoute(location) &&\n !isHomeRoute(location) &&\n router.route.mode === 'dev';\n\n return (\n <StudioContextProvider {...{ value }}>\n <EuiThemeProvider\n modify={tinted ? DEV_TINT : NO_TINT}\n wrapperProps={darkWrapper}>\n <Layout\n {...{ title, router, configProblems, colorMode, onColorModeChange }}\n />\n </EuiThemeProvider>\n </StudioContextProvider>\n );\n};\n\n/** A home, dev and docs shell for an Isomer runtime, built only from what the runtime reports. */\nexport const IsomerStudio = (props: IsomerStudioProps) => {\n const {\n preference: colorMode,\n theme,\n setPreference: onColorModeChange,\n } = useColorMode();\n\n return (\n <EuiProvider colorMode={theme}>\n <Studio {...props} {...{ theme, colorMode, onColorModeChange }} />\n </EuiProvider>\n );\n};\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PrimitiveNode, StyledRenderContext } from '@elastic/isomer-sdk';
|
|
2
|
+
import type { Composition } from '@elastic/isomer-sdk';
|
|
3
|
+
import type { JsxShim } from '@elastic/isomer-sdk/author';
|
|
4
|
+
import type { ZodType } from 'zod';
|
|
5
|
+
import type { StudioApp, StudioRuntime, StudioTheme } from './config.js';
|
|
6
|
+
import type { RuntimeDocs } from './model/describe_runtime.js';
|
|
7
|
+
import type { JsxTransform, RasterizePng, RenderPdf } from './types.js';
|
|
8
|
+
export type { StudioTheme } from './config.js';
|
|
9
|
+
export interface StudioContextValue {
|
|
10
|
+
runtime: StudioRuntime;
|
|
11
|
+
apps: readonly StudioApp[];
|
|
12
|
+
/** The config's `featured`, or undefined to draw at random on Home. */
|
|
13
|
+
featured?: readonly string[] | undefined;
|
|
14
|
+
docs: RuntimeDocs;
|
|
15
|
+
shim: JsxShim;
|
|
16
|
+
schemaFor: (type: string) => ZodType | undefined;
|
|
17
|
+
theme: StudioTheme;
|
|
18
|
+
/** Wraps nodes in the pack's composition for the current theme, through `composeExample`. */
|
|
19
|
+
compose: (nodes: readonly PrimitiveNode[]) => Composition;
|
|
20
|
+
createReactContext?: ((root: ShadowRoot) => StyledRenderContext) | undefined;
|
|
21
|
+
transformJsx?: JsxTransform | undefined;
|
|
22
|
+
rasterizePng?: RasterizePng | undefined;
|
|
23
|
+
renderPdf?: RenderPdf | undefined;
|
|
24
|
+
}
|
|
25
|
+
export declare const StudioContextProvider: import("react").Provider<StudioContextValue | undefined>;
|
|
26
|
+
export declare const useStudio: () => StudioContextValue;
|
|
27
|
+
//# sourceMappingURL=studio_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio_context.d.ts","sourceRoot":"","sources":["../src/studio_context.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAErE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACjD,KAAK,EAAE,WAAW,CAAC;IACnB,6FAA6F;IAC7F,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,KAAK,WAAW,CAAC;IAC1D,kBAAkB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,mBAAmB,CAAC,GAAG,SAAS,CAAC;IAC7E,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC;AAID,eAAO,MAAM,qBAAqB,0DAAyB,CAAC;AAE5D,eAAO,MAAM,SAAS,QAAO,kBAM5B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 { createContext, useContext } from 'react';
|
|
8
|
+
const StudioContext = createContext(undefined);
|
|
9
|
+
export const StudioContextProvider = StudioContext.Provider;
|
|
10
|
+
export const useStudio = () => {
|
|
11
|
+
const value = useContext(StudioContext);
|
|
12
|
+
if (!value) {
|
|
13
|
+
throw new Error('useStudio must be used inside IsomerStudio.');
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=studio_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio_context.js","sourceRoot":"","sources":["../src/studio_context.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA6BlD,MAAM,aAAa,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC,QAAQ,CAAC;AAE5D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAuB,EAAE;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC","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 { createContext, useContext } from 'react';\nimport type { PrimitiveNode, StyledRenderContext } from '@elastic/isomer-sdk';\nimport type { Composition } from '@elastic/isomer-sdk';\nimport type { JsxShim } from '@elastic/isomer-sdk/author';\nimport type { ZodType } from 'zod';\n\nimport type { StudioApp, StudioRuntime, StudioTheme } from './config';\nimport type { RuntimeDocs } from './model/describe_runtime';\nimport type { JsxTransform, RasterizePng, RenderPdf } from './types';\n\nexport type { StudioTheme } from './config';\n\nexport interface StudioContextValue {\n runtime: StudioRuntime;\n apps: readonly StudioApp[];\n /** The config's `featured`, or undefined to draw at random on Home. */\n featured?: readonly string[] | undefined;\n docs: RuntimeDocs;\n shim: JsxShim;\n schemaFor: (type: string) => ZodType | undefined;\n theme: StudioTheme;\n /** Wraps nodes in the pack's composition for the current theme, through `composeExample`. */\n compose: (nodes: readonly PrimitiveNode[]) => Composition;\n createReactContext?: ((root: ShadowRoot) => StyledRenderContext) | undefined;\n transformJsx?: JsxTransform | undefined;\n rasterizePng?: RasterizePng | undefined;\n renderPdf?: RenderPdf | undefined;\n}\n\nconst StudioContext = createContext<StudioContextValue | undefined>(undefined);\n\nexport const StudioContextProvider = StudioContext.Provider;\n\nexport const useStudio = (): StudioContextValue => {\n const value = useContext(StudioContext);\n if (!value) {\n throw new Error('useStudio must be used inside IsomerStudio.');\n }\n return value;\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StyledRenderContext } from '@elastic/isomer-sdk';
|
|
2
|
+
import type { StudioConfig } from '../config.js';
|
|
3
|
+
/** Parses `css` once per document and adopts that sheet onto `root`. */
|
|
4
|
+
export declare const adoptStylesheet: (root: ShadowRoot, css: string) => void;
|
|
5
|
+
/** The config's `createReactContext`, adopting `stylesheet` first; with only a stylesheet, the context is empty. */
|
|
6
|
+
export declare const reactContextOf: ({ createReactContext, stylesheet, }: Pick<StudioConfig, "createReactContext" | "stylesheet">) => ((root: ShadowRoot) => StyledRenderContext) | undefined;
|
|
7
|
+
//# sourceMappingURL=adopt_stylesheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt_stylesheet.d.ts","sourceRoot":"","sources":["../../src/surfaces/adopt_stylesheet.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAiD9C,wEAAwE;AACxE,eAAO,MAAM,eAAe,GAAI,MAAM,UAAU,EAAE,KAAK,MAAM,KAAG,IAU/D,CAAC;AAEF,oHAAoH;AACpH,eAAO,MAAM,cAAc,GAAI,qCAG5B,IAAI,CAAC,YAAY,EAAE,oBAAoB,GAAG,YAAY,CAAC,KACxD,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,mBAAmB,CAAC,GAAG,SAU/C,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
const sheetsByDocument = new WeakMap();
|
|
8
|
+
const sheetConstructor = (root) => {
|
|
9
|
+
const Sheet = root.ownerDocument.defaultView?.CSSStyleSheet;
|
|
10
|
+
if (typeof Sheet !== 'function' ||
|
|
11
|
+
typeof Sheet.prototype.replaceSync !== 'function' ||
|
|
12
|
+
!Array.isArray(root.adoptedStyleSheets)) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return Sheet;
|
|
16
|
+
};
|
|
17
|
+
const appendStyleElement = (root, css) => {
|
|
18
|
+
const present = [...root.querySelectorAll('style')].some((style) => style.textContent === css);
|
|
19
|
+
if (present) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const style = root.ownerDocument.createElement('style');
|
|
23
|
+
style.textContent = css;
|
|
24
|
+
root.append(style);
|
|
25
|
+
};
|
|
26
|
+
const sharedSheet = (document, Sheet, css) => {
|
|
27
|
+
let sheets = sheetsByDocument.get(document);
|
|
28
|
+
if (!sheets) {
|
|
29
|
+
sheets = new Map();
|
|
30
|
+
sheetsByDocument.set(document, sheets);
|
|
31
|
+
}
|
|
32
|
+
let sheet = sheets.get(css);
|
|
33
|
+
if (!sheet) {
|
|
34
|
+
sheet = new Sheet();
|
|
35
|
+
sheet.replaceSync(css);
|
|
36
|
+
sheets.set(css, sheet);
|
|
37
|
+
}
|
|
38
|
+
return sheet;
|
|
39
|
+
};
|
|
40
|
+
/** Parses `css` once per document and adopts that sheet onto `root`. */
|
|
41
|
+
export const adoptStylesheet = (root, css) => {
|
|
42
|
+
const Sheet = sheetConstructor(root);
|
|
43
|
+
if (!Sheet) {
|
|
44
|
+
appendStyleElement(root, css);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const sheet = sharedSheet(root.ownerDocument, Sheet, css);
|
|
48
|
+
if (!root.adoptedStyleSheets.includes(sheet)) {
|
|
49
|
+
root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** The config's `createReactContext`, adopting `stylesheet` first; with only a stylesheet, the context is empty. */
|
|
53
|
+
export const reactContextOf = ({ createReactContext, stylesheet, }) => {
|
|
54
|
+
if (!stylesheet) {
|
|
55
|
+
return createReactContext;
|
|
56
|
+
}
|
|
57
|
+
let css;
|
|
58
|
+
return (root) => {
|
|
59
|
+
css ??= stylesheet();
|
|
60
|
+
adoptStylesheet(root, css);
|
|
61
|
+
return createReactContext?.(root) ?? {};
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=adopt_stylesheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt_stylesheet.js","sourceRoot":"","sources":["../../src/surfaces/adopt_stylesheet.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 { StyledRenderContext } from '@elastic/isomer-sdk';\n\nimport type { StudioConfig } from '../config';\n\nconst sheetsByDocument = new WeakMap<Document, Map<string, CSSStyleSheet>>();\n\nconst sheetConstructor = (\n root: ShadowRoot\n): typeof CSSStyleSheet | undefined => {\n const Sheet = root.ownerDocument.defaultView?.CSSStyleSheet;\n if (\n typeof Sheet !== 'function' ||\n typeof Sheet.prototype.replaceSync !== 'function' ||\n !Array.isArray(root.adoptedStyleSheets)\n ) {\n return undefined;\n }\n return Sheet;\n};\n\nconst appendStyleElement = (root: ShadowRoot, css: string): void => {\n const present = [...root.querySelectorAll('style')].some(\n (style) => style.textContent === css\n );\n if (present) {\n return;\n }\n const style = root.ownerDocument.createElement('style');\n style.textContent = css;\n root.append(style);\n};\n\nconst sharedSheet = (\n document: Document,\n Sheet: typeof CSSStyleSheet,\n css: string\n): CSSStyleSheet => {\n let sheets = sheetsByDocument.get(document);\n if (!sheets) {\n sheets = new Map();\n sheetsByDocument.set(document, sheets);\n }\n let sheet = sheets.get(css);\n if (!sheet) {\n sheet = new Sheet();\n sheet.replaceSync(css);\n sheets.set(css, sheet);\n }\n return sheet;\n};\n\n/** Parses `css` once per document and adopts that sheet onto `root`. */\nexport const adoptStylesheet = (root: ShadowRoot, css: string): void => {\n const Sheet = sheetConstructor(root);\n if (!Sheet) {\n appendStyleElement(root, css);\n return;\n }\n const sheet = sharedSheet(root.ownerDocument, Sheet, css);\n if (!root.adoptedStyleSheets.includes(sheet)) {\n root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];\n }\n};\n\n/** The config's `createReactContext`, adopting `stylesheet` first; with only a stylesheet, the context is empty. */\nexport const reactContextOf = ({\n createReactContext,\n stylesheet,\n}: Pick<StudioConfig, 'createReactContext' | 'stylesheet'>):\n ((root: ShadowRoot) => StyledRenderContext) | undefined => {\n if (!stylesheet) {\n return createReactContext;\n }\n let css: string | undefined;\n return (root) => {\n css ??= stylesheet();\n adoptStylesheet(root, css);\n return createReactContext?.(root) ?? {};\n };\n};\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { StudioPreviewProps } from '../config.js';
|
|
2
|
+
/** The `Preview` an app receives: the React surface at the Studio's theme, read from context so its identity never changes. */
|
|
3
|
+
export declare const AppPreview: ({ nodes, composition: given, zoom, maxHeight, heading, enhancements, onCommit, }: StudioPreviewProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=app_preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_preview.d.ts","sourceRoot":"","sources":["../../src/surfaces/app_preview.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAQpD,+HAA+H;AAC/H,eAAO,MAAM,UAAU,GAAI,kFAQxB,kBAAkB,qDAiCpB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } 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 { EuiCallOut } from '@elastic/eui';
|
|
10
|
+
import { useStudio } from '../studio_context.js';
|
|
11
|
+
import { ReactSurface } from './react_surface.js';
|
|
12
|
+
import { ScaledPreview } from './scaled_preview.js';
|
|
13
|
+
/** The `Preview` an app receives: the React surface at the Studio's theme, read from context so its identity never changes. */
|
|
14
|
+
export const AppPreview = ({ nodes, composition: given, zoom, maxHeight, heading, enhancements, onCommit, }) => {
|
|
15
|
+
const { compose } = useStudio();
|
|
16
|
+
const composed = useMemo(() => {
|
|
17
|
+
try {
|
|
18
|
+
return { composition: given ?? compose(nodes ?? []) };
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return { error };
|
|
22
|
+
}
|
|
23
|
+
}, [given, nodes, compose]);
|
|
24
|
+
return 'error' in composed ? (_jsx(EuiCallOut, { announceOnMount: true, size: "s", color: "danger", iconType: "error", title: "The config's compose threw", text: _jsx("p", { children: composed.error instanceof Error
|
|
25
|
+
? composed.error.message
|
|
26
|
+
: String(composed.error) }) })) : (_jsx(ScaledPreview, { zoom, maxHeight, children: _jsx(ReactSurface, { composition: composed.composition, heading, enhancements, onCommit }) }));
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=app_preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_preview.js","sourceRoot":"","sources":["../../src/surfaces/app_preview.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,+HAA+H;AAC/H,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,KAAK,EACL,WAAW,EAAE,KAAK,EAClB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,QAAQ,GACW,EAAE,EAAE;IACvB,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAa,EAAE;QACtC,IAAI,CAAC;YACH,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5B,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC3B,KAAC,UAAU,IACT,eAAe,QACf,IAAI,EAAC,GAAG,EACR,KAAK,EAAC,QAAQ,EACd,QAAQ,EAAC,OAAO,EAChB,KAAK,EAAC,4BAA4B,EAClC,IAAI,EACF,sBACG,QAAQ,CAAC,KAAK,YAAY,KAAK;gBAC9B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO;gBACxB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GACxB,GAEN,CACH,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IAAO,IAAI,EAAE,SAAS,YAClC,KAAC,YAAY,IACX,WAAW,EAAE,QAAQ,CAAC,WAAW,EAC3B,OAAO,EAAE,YAAY,EAAE,QAAQ,GACrC,GACY,CACjB,CAAC;AACJ,CAAC,CAAC","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 { EuiCallOut } from '@elastic/eui';\nimport type { Composition } from '@elastic/isomer-sdk';\n\nimport type { StudioPreviewProps } from '../config';\nimport { useStudio } from '../studio_context';\n\nimport { ReactSurface } from './react_surface';\nimport { ScaledPreview } from './scaled_preview';\n\ntype Composed = { composition: Composition } | { error: unknown };\n\n/** The `Preview` an app receives: the React surface at the Studio's theme, read from context so its identity never changes. */\nexport const AppPreview = ({\n nodes,\n composition: given,\n zoom,\n maxHeight,\n heading,\n enhancements,\n onCommit,\n}: StudioPreviewProps) => {\n const { compose } = useStudio();\n const composed = useMemo((): Composed => {\n try {\n return { composition: given ?? compose(nodes ?? []) };\n } catch (error) {\n return { error };\n }\n }, [given, nodes, compose]);\n\n return 'error' in composed ? (\n <EuiCallOut\n announceOnMount\n size=\"s\"\n color=\"danger\"\n iconType=\"error\"\n title=\"The config's compose threw\"\n text={\n <p>\n {composed.error instanceof Error\n ? composed.error.message\n : String(composed.error)}\n </p>\n }\n />\n ) : (\n <ScaledPreview {...{ zoom, maxHeight }}>\n <ReactSurface\n composition={composed.composition}\n {...{ heading, enhancements, onCommit }}\n />\n </ScaledPreview>\n );\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StudioAppSurface, StudioRuntime, StudioSurfaceProps } from '../config.js';
|
|
2
|
+
/** The surfaces {@link AppSurface} can show, in the Studio's order, with `png` after `snapshot` when the host rasterizes. */
|
|
3
|
+
export declare const appSurfaces: (runtime: Pick<StudioRuntime, "surfaces">, hasPng: boolean) => {
|
|
4
|
+
id: StudioAppSurface;
|
|
5
|
+
label: string;
|
|
6
|
+
}[];
|
|
7
|
+
/** The `Surface` an app receives, read from context so its identity never changes. */
|
|
8
|
+
export declare const AppSurface: ({ composition, surface, view, zoom, heading, }: StudioSurfaceProps) => import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=app_surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_surface.d.ts","sourceRoot":"","sources":["../../src/surfaces/app_surface.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAOnB,6HAA6H;AAC7H,eAAO,MAAM,WAAW,GACtB,SAAS,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EACxC,QAAQ,OAAO,KACd;IAAE,EAAE,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAGzC,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,UAAU,GAAI,gDAMxB,kBAAkB,4DAgBpB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx } 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 { runtimeSurfaces, SURFACE_LABELS } from '../model/describe_runtime.js';
|
|
10
|
+
import { useStudio } from '../studio_context.js';
|
|
11
|
+
import { PngSurface } from './png_surface.js';
|
|
12
|
+
import { SurfacePreview } from './surface_preview.js';
|
|
13
|
+
/** The surfaces {@link AppSurface} can show, in the Studio's order, with `png` after `snapshot` when the host rasterizes. */
|
|
14
|
+
export const appSurfaces = (runtime, hasPng) => [
|
|
15
|
+
...runtimeSurfaces(runtime).map((id) => ({ id, label: SURFACE_LABELS[id] })),
|
|
16
|
+
...(hasPng ? [{ id: 'png', label: 'PNG' }] : []),
|
|
17
|
+
];
|
|
18
|
+
/** The `Surface` an app receives, read from context so its identity never changes. */
|
|
19
|
+
export const AppSurface = ({ composition, surface, view = 'render', zoom = 'fit', heading, }) => {
|
|
20
|
+
const { runtime, rasterizePng } = useStudio();
|
|
21
|
+
const validation = useMemo(() => runtime.validate(composition), [runtime, composition]);
|
|
22
|
+
if (surface === 'png') {
|
|
23
|
+
return rasterizePng ? (_jsx(PngSurface, { composition, rasterizePng, zoom })) : null;
|
|
24
|
+
}
|
|
25
|
+
return (_jsx(SurfacePreview, { surface, composition, validation, view, zoom, heading }));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=app_surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_surface.js","sourceRoot":"","sources":["../../src/surfaces/app_surface.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,6HAA6H;AAC7H,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAAwC,EACxC,MAAe,EAC4B,EAAE,CAAC;IAC9C,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAc,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1D,CAAC;AAEF,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,WAAW,EACX,OAAO,EACP,IAAI,GAAG,QAAQ,EACf,IAAI,GAAG,KAAK,EACZ,OAAO,GACY,EAAE,EAAE;IACvB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;IACF,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,CAAC,CAAC,CACpB,KAAC,UAAU,IAAO,WAAW,EAAE,YAAY,EAAE,IAAI,GAAM,CACxD,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IACD,OAAO,CACL,KAAC,cAAc,IACP,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAC3D,CACH,CAAC;AACJ,CAAC,CAAC","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';\n\nimport type {\n StudioAppSurface,\n StudioRuntime,\n StudioSurfaceProps,\n} from '../config';\nimport { runtimeSurfaces, SURFACE_LABELS } from '../model/describe_runtime';\nimport { useStudio } from '../studio_context';\n\nimport { PngSurface } from './png_surface';\nimport { SurfacePreview } from './surface_preview';\n\n/** The surfaces {@link AppSurface} can show, in the Studio's order, with `png` after `snapshot` when the host rasterizes. */\nexport const appSurfaces = (\n runtime: Pick<StudioRuntime, 'surfaces'>,\n hasPng: boolean\n): { id: StudioAppSurface; label: string }[] => [\n ...runtimeSurfaces(runtime).map((id) => ({ id, label: SURFACE_LABELS[id] })),\n ...(hasPng ? [{ id: 'png' as const, label: 'PNG' }] : []),\n];\n\n/** The `Surface` an app receives, read from context so its identity never changes. */\nexport const AppSurface = ({\n composition,\n surface,\n view = 'render',\n zoom = 'fit',\n heading,\n}: StudioSurfaceProps) => {\n const { runtime, rasterizePng } = useStudio();\n const validation = useMemo(\n () => runtime.validate(composition),\n [runtime, composition]\n );\n if (surface === 'png') {\n return rasterizePng ? (\n <PngSurface {...{ composition, rasterizePng, zoom }} />\n ) : null;\n }\n return (\n <SurfacePreview\n {...{ surface, composition, validation, view, zoom, heading }}\n />\n );\n};\n"]}
|