Перейти до вмісту

Svelte / SvelteKit

Svelte передає атрибути безпосередньо в DOM без шару віртуального DOM, що робить кастомні елементи природним вибором. Для SvelteKit (SSR) завантажуйте CDN всередині onMount або захищайте за допомогою перевірки browser.

Terminal window
npm install @wink/elements

SvelteKit — кореневий лейаут

Section titled “SvelteKit — кореневий лейаут”
src/routes/+layout.ts
import { browser } from '$app/environment';
import { load as loadWink } from '@wink/elements';
export function load() {
if (browser) {
loadWink({ clientId: import.meta.env.PUBLIC_WINK_CLIENT_ID });
}
}

Альтернативно, завантажуйте всередині onMount у +layout.svelte:

src/routes/+layout.svelte
<script>
import { onMount } from 'svelte';
import { load } from '@wink/elements';
onMount(() => {
load({ clientId: import.meta.env.PUBLIC_WINK_CLIENT_ID });
});
</script>
<slot />

Використання в компонентах

Section titled “Використання в компонентах”

Svelte передає всі невідомі атрибути безпосередньо в DOM, тому додаткова конфігурація не потрібна:

<script>
export let layoutId = 'YOUR_LAYOUT_ID';
</script>
<main>
<wink-content-loader layout="HOTEL" id={layoutId} />
<wink-lookup />
</main>
<script lang="ts">
import { onMount } from 'svelte';
import { load } from '@wink/elements';
let { layoutId }: { layoutId: string } = $props();
onMount(() => {
load({ clientId: import.meta.env.PUBLIC_WINK_CLIENT_ID });
});
</script>
<wink-content-loader layout="HOTEL" id={layoutId} />

SvelteKit надає браузеру лише змінні, що починаються з PUBLIC_:

.env
PUBLIC_WINK_CLIENT_ID=your-client-id
<script>
import { browser } from '$app/environment';
</script>
{#if browser}
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" />
{/if}

Чистий Svelte (Vite, без SvelteKit)

Section titled “Чистий Svelte (Vite, без SvelteKit)”
src/App.svelte
<script>
import { onMount } from 'svelte';
import { load } from '@wink/elements';
onMount(() => {
load({ clientId: import.meta.env.VITE_WINK_CLIENT_ID });
});
</script>
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" />