Svelte / SvelteKit
Svelte передаёт атрибуты напрямую в DOM без слоя виртуального DOM, что делает кастомные элементы естественным выбором. Для SvelteKit (SSR) загружайте CDN внутри onMount или используйте проверку browser.
@wink/elements npm package Установите и загрузите CDN-бандл с типами TypeScript.
Установка
Заголовок раздела «Установка»npm install @wink/elementsSvelteKit — корневой layout
Заголовок раздела «SvelteKit — корневой layout»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:
<script> import { onMount } from 'svelte'; import { load } from '@wink/elements';
onMount(() => { load({ clientId: import.meta.env.PUBLIC_WINK_CLIENT_ID }); });</script>
<slot />Использование в компонентах
Заголовок раздела «Использование в компонентах»Svelte передаёт все неизвестные атрибуты напрямую в DOM, поэтому дополнительная настройка не требуется:
<script> export let layoutId = 'YOUR_LAYOUT_ID';</script>
<main> <wink-content-loader layout="HOTEL" id={layoutId} /> <wink-lookup /></main>Svelte 5 (синтаксис runes)
Заголовок раздела «Svelte 5 (синтаксис runes)»<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_:
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)
Заголовок раздела «Чистый Svelte (Vite, без SvelteKit)»<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" />