Headless CMS
Os web components da Wink são elementos HTML personalizados independentes de framework. Se o seu headless CMS renderiza HTML — seja por meio do Next.js, Nuxt, Astro, SvelteKit ou qualquer outro framework — você pode incorporar os componentes Wink sem qualquer integração especial.
A incorporação em três passos
Seção intitulada “A incorporação em três passos”Toda integração Wink, independentemente da plataforma, segue os mesmos três passos.
1. Inclua a folha de estilos
Seção intitulada “1. Inclua a folha de estilos”Adicione isto ao <head> do seu documento (ou equivalente no layout global):
<link rel="stylesheet" href="https://elements.wink.travel/styles.css">2. Inclua o JavaScript
Seção intitulada “2. Inclua o JavaScript”Adicione isto antes da tag de fechamento </body> (ou na seção de script do seu layout):
<script src="https://elements.wink.travel/elements.js" type="module" defer></script>3. Adicione o carregador da aplicação
Seção intitulada “3. Adicione o carregador da aplicação”Coloque isto uma vez por página, em qualquer lugar do corpo (normalmente no rodapé do seu layout global):
<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>Exemplos de frameworks
Seção intitulada “Exemplos de frameworks”Next.js (App Router)
Seção intitulada “Next.js (App Router)”export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <head> <link rel="stylesheet" href="https://elements.wink.travel/styles.css" /> </head> <body> {children} <script src="https://elements.wink.travel/elements.js" type="module" defer /> <wink-app-loader client-id="YOUR_CLIENT_ID" /> </body> </html> );}<template> <div> <slot /> <wink-app-loader client-id="YOUR_CLIENT_ID" /> </div></template>
<script setup>useHead({ link: [{ rel: 'stylesheet', href: 'https://elements.wink.travel/styles.css' }], script: [{ src: 'https://elements.wink.travel/elements.js', type: 'module', defer: true }],})</script><html lang="en"> <head> <link rel="stylesheet" href="https://elements.wink.travel/styles.css" /> </head> <body> <slot /> <script src="https://elements.wink.travel/elements.js" type="module" is:inline></script> <wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader> </body></html>SvelteKit
Seção intitulada “SvelteKit”<svelte:head> <link rel="stylesheet" href="https://elements.wink.travel/styles.css" /></svelte:head>
<slot /><wink-app-loader client-id="YOUR_CLIENT_ID" />
<script> import { onMount } from 'svelte'; onMount(async () => { await import('https://elements.wink.travel/elements.js'); });</script>Colocando componentes no conteúdo
Seção intitulada “Colocando componentes no conteúdo”No texto rico ou tipos de campo personalizados do seu CMS, incorpore as tags dos componentes diretamente no HTML gerado:
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID"></wink-content-loader>Para Contentful, Strapi, Sanity ou plataformas headless similares, use um campo Rich Text ou um Custom Block que renderize HTML bruto, e cole a tag do componente ali.
Pacote npm
Seção intitulada “Pacote npm”Para projetos TypeScript, o pacote @wink/elements oferece:
- Uma função
load()que injeta os scripts do CDN programaticamente - Declarações completas de tipos TypeScript para todos os atributos dos componentes
npm install @wink/elementsimport { load } from '@wink/elements';
// Chame uma vez na inicialização do appload({ clientId: 'YOUR_CLIENT_ID' });Componentes disponíveis
Seção intitulada “Componentes disponíveis”| Componente | Tag HTML | Propósito |
|---|---|---|
| Content loader | <wink-content-loader> | Exibir cards de hotéis, grades, mapas |
| Lookup | <wink-lookup> | Barra de busca para destinos |
| Search button | <wink-search-button> | Abrir seletor de itinerário |
| Account button | <wink-account-button> | Entrar / menu do usuário |
| Itinerary button | <wink-itinerary-button> | Mostrar itinerário atual |
| Itinerary picker | <wink-itinerary-picker> | Formulário completo de itinerário |
| Shopping cart | <wink-shopping-cart-button> | Botão resumo do carrinho |
Veja Web Components para a referência completa de atributos.