Headless CMS
Wink webkomponenter er framework-agnostiske brugerdefinerede HTML-elementer. Hvis din headless CMS gengiver HTML — uanset om det er gennem Next.js, Nuxt, Astro, SvelteKit eller et andet framework — kan du integrere Wink-komponenter uden nogen særlig integration.
Den tre-trins integration
Sektion kaldt “Den tre-trins integration”Enhver Wink-integration, uanset platform, følger de samme tre trin.
1. Inkluder stylesheet
Sektion kaldt “1. Inkluder stylesheet”Tilføj dette til dit dokuments <head> (eller tilsvarende globale layout):
<link rel="stylesheet" href="https://elements.wink.travel/styles.css">2. Inkluder JavaScript
Sektion kaldt “2. Inkluder JavaScript”Tilføj dette før din afsluttende </body>-tag (eller i dit layouts scriptsektion):
<script src="https://elements.wink.travel/elements.js" type="module" defer></script>3. Tilføj applikationsloaderen
Sektion kaldt “3. Tilføj applikationsloaderen”Placer dette én gang per side, hvor som helst i body (typisk i din globale layout footer):
<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>Framework-eksempler
Sektion kaldt “Framework-eksempler”Next.js (App Router)
Sektion kaldt “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> );}Nuxt 3
Sektion kaldt “Nuxt 3”<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
Sektion kaldt “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>Placering af komponenter i indhold
Sektion kaldt “Placering af komponenter i indhold”I din CMS’s rich text eller brugerdefinerede felttyper, indlejres komponent-tags direkte i HTML-outputtet:
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID"></wink-content-loader>For Contentful, Strapi, Sanity eller lignende headless platforme, brug et Rich Text-felt eller en Custom Block, der gengiver rå HTML, og indsæt komponent-tagget der.
npm-pakke
Sektion kaldt “npm-pakke”For TypeScript-projekter tilbyder @wink/elements pakken:
- En
load()funktion, der programmatisk injicerer CDN-scripts - Fuld TypeScript typedeklaration for alle komponentattributter
npm install @wink/elementsimport { load } from '@wink/elements';
// Kald én gang ved app-opstartload({ clientId: 'YOUR_CLIENT_ID' });Tilgængelige komponenter
Sektion kaldt “Tilgængelige komponenter”| Komponent | HTML-tag | Formål |
|---|---|---|
| Content loader | <wink-content-loader> | Vis hotelkort, grids, kort |
| Lookup | <wink-lookup> | Søgefelt til destinationer |
| Search button | <wink-search-button> | Åbn rejseplanvælger |
| Account button | <wink-account-button> | Log ind / brugermenu |
| Itinerary button | <wink-itinerary-button> | Vis aktuel rejseplan |
| Itinerary picker | <wink-itinerary-picker> | Fuld rejseplansformular |
| Shopping cart | <wink-shopping-cart-button> | Oversigt over indkøbskurv |
Se Web Components for den fulde attributreference.