Nuxt 3
Nuxt 3 renderiza páginas no servidor por padrão. Scripts CDN e elementos personalizados devem ser carregados apenas no lado do cliente. Um plugin cliente Nuxt é o local mais limpo para fazer isso.
@wink/elements npm package Instale e carregue o pacote CDN com tipos TypeScript.
Instalar
Seção intitulada “Instalar”npm install @wink/elementsCrie um plugin cliente
Seção intitulada “Crie um plugin cliente”O sufixo .client.ts indica ao Nuxt para executar este plugin apenas no navegador:
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => { load({ clientId: useRuntimeConfig().public.winkClientId });});Configure a variável de tempo de execução
Seção intitulada “Configure a variável de tempo de execução”export default defineNuxtConfig({ runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});Adicione ao .env:
NUXT_PUBLIC_WINK_CLIENT_ID=seu-client-idConfigure o Vue para elementos personalizados
Seção intitulada “Configure o Vue para elementos personalizados”Adicione a opção do compilador isCustomElement para que o Vue não exiba avisos sobre tags desconhecidas <wink-*>:
export default defineNuxtConfig({ vue: { compilerOptions: { isCustomElement: (tag) => tag.startsWith('wink-'), }, }, runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});Uso em templates
Seção intitulada “Uso em templates”Envolva os componentes Wink em <ClientOnly> para evitar incompatibilidades de hidratação SSR:
<template> <main> <ClientOnly> <wink-content-loader layout="HOTEL" :id="layoutId" /> </ClientOnly> </main></template>
<script setup lang="ts">const layoutId = 'YOUR_LAYOUT_ID';</script>Tipos TypeScript
Seção intitulada “Tipos TypeScript”Estenda o HTMLElementTagNameMap global (igual ao Vue 3) para obter autocompletar de atributos. Veja a página de integração Vue 3 para o arquivo de declaração completo.