Skip to main content

Svelte

The JS/TS SDK can be used directly in Svelte components without the need for any wrappers.

Installation​

Please refer to the SDK installation section.

Usage​

This is an example of using the LiveCodes JS SDK in a Svelte component:

Component.svelte
<script>
import { onMount } from 'svelte';
import { createPlayground } from 'livecodes';

// Embed Options
const options = {
params: {
html: '<h1>Hello World!</h1>',
css: 'h1 {color: blue;}',
js: 'console.log("Hello, Svelte!")',
console: 'open',
},
};

let container;
let playground = $state(null);
onMount(() => {
createPlayground(container, options).then((p) => {
playground = p; // now the SDK is available
});
// cleanup when the component is destroyed
return () => playground?.destroy();
});
</script>

<div bind:this="{container}"></div>

Embed options, SDK methods and TypeScript types are available as described in the JS/TS SDK documentations.

Alternatively, the SDK function createPlayground can be used as an action.

Example:

Component.svelte
<script>
import { createPlayground } from 'livecodes';
let options = {
// embed options
};
</script>

<div use:createPlayground="{options}"></div>

However, it is recommended to cleanup when the node is unmounted, like that:

Component.svelte
<script>
import { createPlayground } from 'livecodes';
let options = {
// embed options
};

const livecodes = (node, opts) => {
let playground = $state(null);
const ready = new Promise(async (res) => {
playground = await createPlayground(node, opts);
res();
});
return { destroy: () => ready.then(() => playground?.destroy()) };
};
</script>

<div use:livecodes="{options}"></div>

Demo​

show code
import { createPlayground } from 'livecodes';

const options = {
"params": {
"svelte": "<script>\n import { onMount } from 'svelte';\n import { createPlayground } from 'livecodes';\n\n // Embed Options\n const options = {\n params: {\n html: '<h1>Hello World!</h1>',\n css: 'h1 {color: blue;}',\n js: 'console.log(\"Hello, Svelte!\")',\n console: 'open',\n },\n };\n\n let container;\n let playground = $state(null);\n onMount(() => {\n createPlayground(container, options).then((p) => {\n playground = p; // now the SDK is available\n });\n // cleanup when the component is destroyed\n return () => playground?.destroy();\n });\n</script>\n\n<div bind:this=\"{container}\"></div>\n"
}
};
createPlayground('#container', options);