carbon-components-svelte/docs/src/routes/components/[slug].svelte
2020-07-23 19:38:09 -07:00

66 lines
1.1 KiB
Svelte

<script context="module">
export async function preload({ params }) {
const res = await this.fetch(`components/${params.slug}.json`);
const data = await res.json();
if (res.status === 200) {
return { data };
} else {
this.error(res.status, data.message);
}
}
</script>
<script>
export let data = {};
import { onMount, getContext } from "svelte";
const ctx = getContext("navigation");
let component = undefined;
onMount(async () => {
ctx.setTail(data);
try {
component = await import(`../examples/${data.title}.svelte`);
} catch (e) {
console.error(e);
}
return () => {
ctx.setTail(undefined);
};
});
</script>
<style>
.preview {
margin-left: -1rem;
margin-right: -1rem;
padding: 1rem;
white-space: nowrap;
overflow-x: auto;
}
:global(.preview > div) {
margin-bottom: 1rem;
}
h1 {
margin-top: 0.5rem;
margin-bottom: 1rem;
}
</style>
<svelte:head>
<title>{data.title}</title>
</svelte:head>
<h1>{data.title}</h1>
<div class="preview">
{#if component}
<svelte:component this={component.default} />
{/if}
</div>