main.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import "./shared/styles.css";
  2. import { demoSpec } from "./spec";
  3. type Renderer = "vue" | "react" | "svelte" | "solid";
  4. const container = document.getElementById("renderer-root") as HTMLElement;
  5. let unmountCurrent: (() => void) | null = null;
  6. async function switchTo(renderer: Renderer) {
  7. unmountCurrent?.();
  8. container.innerHTML = "";
  9. if (renderer === "vue") {
  10. const mod = await import("./vue/mount.ts");
  11. mod.mount(container, renderer, demoSpec);
  12. unmountCurrent = mod.unmount;
  13. } else if (renderer === "react") {
  14. const mod = await import("./react/mount.tsx");
  15. mod.mount(container, renderer, demoSpec);
  16. unmountCurrent = mod.unmount;
  17. } else if (renderer === "svelte") {
  18. const mod = await import("./svelte/mount.ts");
  19. mod.mount(container, renderer, demoSpec);
  20. unmountCurrent = mod.unmount;
  21. } else {
  22. const mod = await import("./solid/mount.tsx");
  23. mod.mount(container, renderer, demoSpec);
  24. unmountCurrent = mod.unmount;
  25. }
  26. }
  27. // The RendererTabs component (rendered by JSON renderer) dispatches this event
  28. document.addEventListener("switch-renderer", (e: Event) => {
  29. switchTo((e as CustomEvent<string>).detail as Renderer);
  30. });
  31. // Default: Vue
  32. switchTo("vue");