@planetaexo/design-system 0.37.3 → 0.37.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1599 -363
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +111 -19
- package/dist/index.d.ts +111 -19
- package/dist/index.js +1583 -347
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1980,6 +1980,18 @@ interface FilterItem {
|
|
|
1980
1980
|
label: string;
|
|
1981
1981
|
/** Contagem de resultados disponíveis */
|
|
1982
1982
|
count?: number;
|
|
1983
|
+
/**
|
|
1984
|
+
* Subitens aninhados (ex.: Brazil → Pantanal, Amazon, …).
|
|
1985
|
+
* O pai vira um agregador: marcar seleciona todos os filhos;
|
|
1986
|
+
* estado checked/indeterminate é derivado das seleções dos filhos.
|
|
1987
|
+
*/
|
|
1988
|
+
children?: FilterItem[];
|
|
1989
|
+
/**
|
|
1990
|
+
* Expande o pai por padrão. Sem isso, pais começam recolhidos
|
|
1991
|
+
* (chevron à direita) e o usuário precisa clicar para revelar os filhos.
|
|
1992
|
+
* @default false
|
|
1993
|
+
*/
|
|
1994
|
+
defaultExpanded?: boolean;
|
|
1983
1995
|
}
|
|
1984
1996
|
interface FilterGroup {
|
|
1985
1997
|
id: string;
|
|
@@ -1989,7 +2001,29 @@ interface FilterGroup {
|
|
|
1989
2001
|
items: FilterItem[];
|
|
1990
2002
|
/** Abre este grupo por padrão */
|
|
1991
2003
|
defaultOpen?: boolean;
|
|
2004
|
+
/**
|
|
2005
|
+
* Escopo: id de um item dentro de `items`. Quando definido, o grupo
|
|
2006
|
+
* renderiza apenas os children desse item (não o item em si), permitindo
|
|
2007
|
+
* "afunilar" o filtro para o contexto da página atual.
|
|
2008
|
+
*
|
|
2009
|
+
* Exemplo (WordPress taxonomy): na página "Brazil" passe
|
|
2010
|
+
* `scopeItemId: "brazil"` para mostrar apenas as sub-regiões de Brazil.
|
|
2011
|
+
* Se o item não existir ou não tiver children, o grupo é automaticamente
|
|
2012
|
+
* omitido do painel.
|
|
2013
|
+
*/
|
|
2014
|
+
scopeItemId?: string;
|
|
2015
|
+
}
|
|
2016
|
+
interface FilterSortOption {
|
|
2017
|
+
id: string;
|
|
2018
|
+
label: string;
|
|
1992
2019
|
}
|
|
2020
|
+
/**
|
|
2021
|
+
* Visual style of the filter panel.
|
|
2022
|
+
* - "sidebar" — vertical accordion list (default), good for the left rail.
|
|
2023
|
+
* - "horizontal" — inline pill row of popover buttons, good for compact
|
|
2024
|
+
* category pages where the trip grid uses the full width.
|
|
2025
|
+
*/
|
|
2026
|
+
type FilterPanelVariant = "sidebar" | "horizontal";
|
|
1993
2027
|
interface FilterPanelProps {
|
|
1994
2028
|
groups: FilterGroup[];
|
|
1995
2029
|
/** Estado controlado: { groupId: string[] } */
|
|
@@ -2000,8 +2034,14 @@ interface FilterPanelProps {
|
|
|
2000
2034
|
alwaysShowClear?: boolean;
|
|
2001
2035
|
title?: string;
|
|
2002
2036
|
className?: string;
|
|
2003
|
-
|
|
2004
|
-
|
|
2037
|
+
/** Variação visual do painel. @default "sidebar" */
|
|
2038
|
+
variant?: FilterPanelVariant;
|
|
2039
|
+
/** Opções do "Sort by" popover (apenas no variant="horizontal"). */
|
|
2040
|
+
sortOptions?: FilterSortOption[];
|
|
2041
|
+
sort?: string;
|
|
2042
|
+
onSortChange?: (id: string) => void;
|
|
2043
|
+
}
|
|
2044
|
+
declare function FilterPanel({ groups, value, onChange, onClearAll, alwaysShowClear, title, className, variant, sortOptions, sort, onSortChange, }: FilterPanelProps): react_jsx_runtime.JSX.Element | null;
|
|
2005
2045
|
|
|
2006
2046
|
/**
|
|
2007
2047
|
* Configuration for any Trustpilot widget embedded in the design system.
|
|
@@ -2038,6 +2078,22 @@ interface TrustpilotWidgetConfig {
|
|
|
2038
2078
|
starColor?: string;
|
|
2039
2079
|
/** Fallback link target (e.g. "https://www.trustpilot.com/review/yourdomain.com"). */
|
|
2040
2080
|
fallbackHref?: string;
|
|
2081
|
+
/**
|
|
2082
|
+
* Average rating shown by the fallback UI (when the Trustpilot bootstrap
|
|
2083
|
+
* script can't render — typically because of ad-blockers).
|
|
2084
|
+
*/
|
|
2085
|
+
fallbackScore?: number;
|
|
2086
|
+
/** Review count shown by the fallback UI. */
|
|
2087
|
+
fallbackCount?: number;
|
|
2088
|
+
/** Short label shown next to the rating (e.g. "Excellent"). @default "Excellent" */
|
|
2089
|
+
fallbackLabel?: string;
|
|
2090
|
+
/** Layout for the fallback UI. @default auto — picked from styleHeight. */
|
|
2091
|
+
fallbackVariant?: "mini" | "card";
|
|
2092
|
+
/**
|
|
2093
|
+
* Milliseconds to wait before showing the fallback if no widget content
|
|
2094
|
+
* has been rendered by the bootstrap script. @default 3000
|
|
2095
|
+
*/
|
|
2096
|
+
fallbackDelayMs?: number;
|
|
2041
2097
|
}
|
|
2042
2098
|
/**
|
|
2043
2099
|
* Renders a Trustpilot widget div with the right data-* attributes and
|
|
@@ -2137,7 +2193,7 @@ interface MenuTripProps {
|
|
|
2137
2193
|
}
|
|
2138
2194
|
declare function MenuTrip({ sections, activeSection, onSelect, variant, bold, className, }: MenuTripProps): react_jsx_runtime.JSX.Element;
|
|
2139
2195
|
|
|
2140
|
-
type PhotoGalleryVariant = "grid" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2196
|
+
type PhotoGalleryVariant = "grid" | "gridCompact" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2141
2197
|
interface PhotoGalleryPhoto {
|
|
2142
2198
|
src: string;
|
|
2143
2199
|
alt?: string;
|
|
@@ -2240,6 +2296,11 @@ type SiteHeaderVariant = "transparent" | "white" | "dark";
|
|
|
2240
2296
|
interface SiteHeaderProps {
|
|
2241
2297
|
variant?: SiteHeaderVariant;
|
|
2242
2298
|
links?: SiteHeaderLink[];
|
|
2299
|
+
/** Logo used on transparent/dark headers (defaults to the white asset). */
|
|
2300
|
+
logoSrcLight?: string;
|
|
2301
|
+
/** Logo used on the white header (defaults to the green/brand asset). */
|
|
2302
|
+
logoSrcDark?: string;
|
|
2303
|
+
/** Backwards-compatible single-logo override — applied to both variants when set. */
|
|
2243
2304
|
logoSrc?: string;
|
|
2244
2305
|
logoAlt?: string;
|
|
2245
2306
|
languages?: SiteHeaderLanguage[];
|
|
@@ -2253,7 +2314,7 @@ interface SiteHeaderProps {
|
|
|
2253
2314
|
}
|
|
2254
2315
|
declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
|
|
2255
2316
|
declare const DEFAULT_LANGUAGES: SiteHeaderLanguage[];
|
|
2256
|
-
declare function SiteHeader({ variant, links, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2317
|
+
declare function SiteHeader({ variant, links, logoSrcLight, logoSrcDark, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2257
2318
|
|
|
2258
2319
|
declare function ThemeToggle({ className }: {
|
|
2259
2320
|
className?: string;
|
|
@@ -2261,6 +2322,13 @@ declare function ThemeToggle({ className }: {
|
|
|
2261
2322
|
|
|
2262
2323
|
type TripCardStatus = "sold-out" | "trending";
|
|
2263
2324
|
type TripCardSize = "sm" | "md" | "lg";
|
|
2325
|
+
/**
|
|
2326
|
+
* Visual style of the card.
|
|
2327
|
+
* - "overlay" — full-bleed image with dark gradient + white text on top (default).
|
|
2328
|
+
* - "editorial" — image on top, white body below with title, excerpt, nights + price.
|
|
2329
|
+
*/
|
|
2330
|
+
type TripCardVariant = "overlay" | "editorial";
|
|
2331
|
+
type TripCardDifficulty = "easy" | "moderate" | "extreme";
|
|
2264
2332
|
interface TripCardCta {
|
|
2265
2333
|
/** Texto do link (ex: "Discover this trip" ou "5 dates available") */
|
|
2266
2334
|
label: string;
|
|
@@ -2271,24 +2339,42 @@ interface TripCardProps {
|
|
|
2271
2339
|
/** URL da imagem de capa */
|
|
2272
2340
|
image: string;
|
|
2273
2341
|
imageAlt?: string;
|
|
2274
|
-
/** Badge de status
|
|
2342
|
+
/** Badge de status (ex.: trending) — usado pelo variant="overlay". */
|
|
2275
2343
|
status?: TripCardStatus;
|
|
2276
2344
|
/** Número de noites */
|
|
2277
2345
|
nights?: number;
|
|
2278
|
-
/** Período (ex: "Feb - Mar") */
|
|
2346
|
+
/** Período (ex: "Feb - Mar") — usado pelo variant="overlay". */
|
|
2279
2347
|
period?: string;
|
|
2280
2348
|
/** Título da viagem */
|
|
2281
2349
|
title: string;
|
|
2282
|
-
/** Descrição
|
|
2350
|
+
/** Descrição / excerpt curto — usado em ambos os variants. */
|
|
2283
2351
|
description?: string;
|
|
2284
|
-
/** Link/CTA de ação */
|
|
2352
|
+
/** Link/CTA de ação — usado pelo variant="overlay". */
|
|
2285
2353
|
cta?: TripCardCta;
|
|
2286
|
-
/** Preço
|
|
2354
|
+
/** Preço (ex: "from € 769"). */
|
|
2287
2355
|
price?: string;
|
|
2288
2356
|
size?: TripCardSize;
|
|
2289
2357
|
className?: string;
|
|
2358
|
+
/** Variação visual do card. @default "overlay" */
|
|
2359
|
+
variant?: TripCardVariant;
|
|
2360
|
+
/** Quando href é fornecido, o card editorial inteiro vira um link <a>. */
|
|
2361
|
+
href?: string;
|
|
2362
|
+
/** Mostra um botão de favorito (estilo Chip glass) no topo direito. */
|
|
2363
|
+
favoritable?: boolean;
|
|
2364
|
+
/** Estado controlado do favorito. */
|
|
2365
|
+
favorited?: boolean;
|
|
2366
|
+
onFavoriteToggle?: (next: boolean) => void;
|
|
2367
|
+
/** Localização/região exibida no rodapé branco (ex.: "Pantanal, Brazil"). */
|
|
2368
|
+
location?: string;
|
|
2369
|
+
/** Nível de dificuldade — renderizado com um dot colorido. */
|
|
2370
|
+
difficulty?: TripCardDifficulty;
|
|
2371
|
+
/**
|
|
2372
|
+
* Tour-type tag rendered as a chip at the top-left of the image
|
|
2373
|
+
* (ex.: "Family Adventure", "Private Trip", "Luxury").
|
|
2374
|
+
*/
|
|
2375
|
+
tag?: string;
|
|
2290
2376
|
}
|
|
2291
|
-
declare function TripCard(
|
|
2377
|
+
declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
|
|
2292
2378
|
|
|
2293
2379
|
interface TripDuration {
|
|
2294
2380
|
/** Total number of days */
|
|
@@ -2296,6 +2382,10 @@ interface TripDuration {
|
|
|
2296
2382
|
/** Number of nights — defaults to days - 1 */
|
|
2297
2383
|
nights?: number;
|
|
2298
2384
|
}
|
|
2385
|
+
interface TripHeaderChip {
|
|
2386
|
+
label: string;
|
|
2387
|
+
href?: string;
|
|
2388
|
+
}
|
|
2299
2389
|
interface TripHeaderProps {
|
|
2300
2390
|
/** Hero image array — shows a carousel when more than one image */
|
|
2301
2391
|
images: string[];
|
|
@@ -2314,6 +2404,8 @@ interface TripHeaderProps {
|
|
|
2314
2404
|
duration?: TripDuration;
|
|
2315
2405
|
/** Legacy tagline — shown only when destination/duration are not provided */
|
|
2316
2406
|
tagline?: string;
|
|
2407
|
+
/** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
|
|
2408
|
+
chips?: TripHeaderChip[];
|
|
2317
2409
|
/**
|
|
2318
2410
|
* Optional content rendered directly below the destination/duration meta
|
|
2319
2411
|
* row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
|
|
@@ -2325,7 +2417,7 @@ interface TripHeaderProps {
|
|
|
2325
2417
|
uiVariant?: "v1" | "v2";
|
|
2326
2418
|
className?: string;
|
|
2327
2419
|
}
|
|
2328
|
-
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2420
|
+
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2329
2421
|
|
|
2330
2422
|
interface TripHighlight {
|
|
2331
2423
|
label: string;
|
|
@@ -2386,7 +2478,7 @@ interface TripSectionIcons {
|
|
|
2386
2478
|
itinerary?: React.ReactNode;
|
|
2387
2479
|
whatIsIncluded?: React.ReactNode;
|
|
2388
2480
|
/** Accordion sections */
|
|
2389
|
-
|
|
2481
|
+
howToGetThere?: React.ReactNode;
|
|
2390
2482
|
meetingPoint?: React.ReactNode;
|
|
2391
2483
|
optionalExtras?: React.ReactNode;
|
|
2392
2484
|
whatToBring?: React.ReactNode;
|
|
@@ -2412,15 +2504,13 @@ interface TripPageProps {
|
|
|
2412
2504
|
label: string;
|
|
2413
2505
|
href?: string;
|
|
2414
2506
|
}>;
|
|
2507
|
+
/** Pill chips rendered under the hero meta row (e.g. related tour categories). */
|
|
2508
|
+
chips?: TripHeaderChip[];
|
|
2415
2509
|
highlights?: TripHighlight[];
|
|
2416
2510
|
infoGroups?: TripInfoGroup[];
|
|
2417
|
-
/**
|
|
2418
|
-
* Rich-text "Key info" content (WYSIWYG). When provided, replaces the
|
|
2419
|
-
* structured `infoGroups` render inside the accordion item — useful when
|
|
2420
|
-
* the source of truth is a free-form WP WYSIWYG field instead of
|
|
2421
|
-
* structured groups.
|
|
2422
|
-
*/
|
|
2423
2511
|
keyInfo?: React.ReactNode;
|
|
2512
|
+
/** Rich-text "How to get there" content (WYSIWYG) — directions, arrival info, etc. */
|
|
2513
|
+
howToGetThere?: React.ReactNode;
|
|
2424
2514
|
recommendedFor?: string;
|
|
2425
2515
|
overview?: React.ReactNode;
|
|
2426
2516
|
/** Optional list of long-form highlights rendered inside the Overview section. */
|
|
@@ -2448,6 +2538,8 @@ interface TripPageProps {
|
|
|
2448
2538
|
*/
|
|
2449
2539
|
meetingPoint?: React.ReactNode;
|
|
2450
2540
|
faqs?: TripFaq[];
|
|
2541
|
+
/** Number of FAQs shown before the "Load more" button appears. @default 5 */
|
|
2542
|
+
faqInitialCount?: number;
|
|
2451
2543
|
/**
|
|
2452
2544
|
* Per-section icon overrides for the trip details accordion. When a value
|
|
2453
2545
|
* is supplied for a section, it replaces the hardcoded lucide icon next
|
|
@@ -2492,7 +2584,7 @@ interface TripPageProps {
|
|
|
2492
2584
|
features?: Record<string, boolean>;
|
|
2493
2585
|
className?: string;
|
|
2494
2586
|
}
|
|
2495
|
-
declare function TripPage({ title, tagline, destination, duration, images, videoUrl, breadcrumb,
|
|
2587
|
+
declare function TripPage({ title, tagline, destination, duration, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, food, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, bookLabel, siteHeader, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
2496
2588
|
|
|
2497
2589
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
2498
2590
|
interface ActivityCardProps {
|
package/dist/index.d.ts
CHANGED
|
@@ -1980,6 +1980,18 @@ interface FilterItem {
|
|
|
1980
1980
|
label: string;
|
|
1981
1981
|
/** Contagem de resultados disponíveis */
|
|
1982
1982
|
count?: number;
|
|
1983
|
+
/**
|
|
1984
|
+
* Subitens aninhados (ex.: Brazil → Pantanal, Amazon, …).
|
|
1985
|
+
* O pai vira um agregador: marcar seleciona todos os filhos;
|
|
1986
|
+
* estado checked/indeterminate é derivado das seleções dos filhos.
|
|
1987
|
+
*/
|
|
1988
|
+
children?: FilterItem[];
|
|
1989
|
+
/**
|
|
1990
|
+
* Expande o pai por padrão. Sem isso, pais começam recolhidos
|
|
1991
|
+
* (chevron à direita) e o usuário precisa clicar para revelar os filhos.
|
|
1992
|
+
* @default false
|
|
1993
|
+
*/
|
|
1994
|
+
defaultExpanded?: boolean;
|
|
1983
1995
|
}
|
|
1984
1996
|
interface FilterGroup {
|
|
1985
1997
|
id: string;
|
|
@@ -1989,7 +2001,29 @@ interface FilterGroup {
|
|
|
1989
2001
|
items: FilterItem[];
|
|
1990
2002
|
/** Abre este grupo por padrão */
|
|
1991
2003
|
defaultOpen?: boolean;
|
|
2004
|
+
/**
|
|
2005
|
+
* Escopo: id de um item dentro de `items`. Quando definido, o grupo
|
|
2006
|
+
* renderiza apenas os children desse item (não o item em si), permitindo
|
|
2007
|
+
* "afunilar" o filtro para o contexto da página atual.
|
|
2008
|
+
*
|
|
2009
|
+
* Exemplo (WordPress taxonomy): na página "Brazil" passe
|
|
2010
|
+
* `scopeItemId: "brazil"` para mostrar apenas as sub-regiões de Brazil.
|
|
2011
|
+
* Se o item não existir ou não tiver children, o grupo é automaticamente
|
|
2012
|
+
* omitido do painel.
|
|
2013
|
+
*/
|
|
2014
|
+
scopeItemId?: string;
|
|
2015
|
+
}
|
|
2016
|
+
interface FilterSortOption {
|
|
2017
|
+
id: string;
|
|
2018
|
+
label: string;
|
|
1992
2019
|
}
|
|
2020
|
+
/**
|
|
2021
|
+
* Visual style of the filter panel.
|
|
2022
|
+
* - "sidebar" — vertical accordion list (default), good for the left rail.
|
|
2023
|
+
* - "horizontal" — inline pill row of popover buttons, good for compact
|
|
2024
|
+
* category pages where the trip grid uses the full width.
|
|
2025
|
+
*/
|
|
2026
|
+
type FilterPanelVariant = "sidebar" | "horizontal";
|
|
1993
2027
|
interface FilterPanelProps {
|
|
1994
2028
|
groups: FilterGroup[];
|
|
1995
2029
|
/** Estado controlado: { groupId: string[] } */
|
|
@@ -2000,8 +2034,14 @@ interface FilterPanelProps {
|
|
|
2000
2034
|
alwaysShowClear?: boolean;
|
|
2001
2035
|
title?: string;
|
|
2002
2036
|
className?: string;
|
|
2003
|
-
|
|
2004
|
-
|
|
2037
|
+
/** Variação visual do painel. @default "sidebar" */
|
|
2038
|
+
variant?: FilterPanelVariant;
|
|
2039
|
+
/** Opções do "Sort by" popover (apenas no variant="horizontal"). */
|
|
2040
|
+
sortOptions?: FilterSortOption[];
|
|
2041
|
+
sort?: string;
|
|
2042
|
+
onSortChange?: (id: string) => void;
|
|
2043
|
+
}
|
|
2044
|
+
declare function FilterPanel({ groups, value, onChange, onClearAll, alwaysShowClear, title, className, variant, sortOptions, sort, onSortChange, }: FilterPanelProps): react_jsx_runtime.JSX.Element | null;
|
|
2005
2045
|
|
|
2006
2046
|
/**
|
|
2007
2047
|
* Configuration for any Trustpilot widget embedded in the design system.
|
|
@@ -2038,6 +2078,22 @@ interface TrustpilotWidgetConfig {
|
|
|
2038
2078
|
starColor?: string;
|
|
2039
2079
|
/** Fallback link target (e.g. "https://www.trustpilot.com/review/yourdomain.com"). */
|
|
2040
2080
|
fallbackHref?: string;
|
|
2081
|
+
/**
|
|
2082
|
+
* Average rating shown by the fallback UI (when the Trustpilot bootstrap
|
|
2083
|
+
* script can't render — typically because of ad-blockers).
|
|
2084
|
+
*/
|
|
2085
|
+
fallbackScore?: number;
|
|
2086
|
+
/** Review count shown by the fallback UI. */
|
|
2087
|
+
fallbackCount?: number;
|
|
2088
|
+
/** Short label shown next to the rating (e.g. "Excellent"). @default "Excellent" */
|
|
2089
|
+
fallbackLabel?: string;
|
|
2090
|
+
/** Layout for the fallback UI. @default auto — picked from styleHeight. */
|
|
2091
|
+
fallbackVariant?: "mini" | "card";
|
|
2092
|
+
/**
|
|
2093
|
+
* Milliseconds to wait before showing the fallback if no widget content
|
|
2094
|
+
* has been rendered by the bootstrap script. @default 3000
|
|
2095
|
+
*/
|
|
2096
|
+
fallbackDelayMs?: number;
|
|
2041
2097
|
}
|
|
2042
2098
|
/**
|
|
2043
2099
|
* Renders a Trustpilot widget div with the right data-* attributes and
|
|
@@ -2137,7 +2193,7 @@ interface MenuTripProps {
|
|
|
2137
2193
|
}
|
|
2138
2194
|
declare function MenuTrip({ sections, activeSection, onSelect, variant, bold, className, }: MenuTripProps): react_jsx_runtime.JSX.Element;
|
|
2139
2195
|
|
|
2140
|
-
type PhotoGalleryVariant = "grid" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2196
|
+
type PhotoGalleryVariant = "grid" | "gridCompact" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2141
2197
|
interface PhotoGalleryPhoto {
|
|
2142
2198
|
src: string;
|
|
2143
2199
|
alt?: string;
|
|
@@ -2240,6 +2296,11 @@ type SiteHeaderVariant = "transparent" | "white" | "dark";
|
|
|
2240
2296
|
interface SiteHeaderProps {
|
|
2241
2297
|
variant?: SiteHeaderVariant;
|
|
2242
2298
|
links?: SiteHeaderLink[];
|
|
2299
|
+
/** Logo used on transparent/dark headers (defaults to the white asset). */
|
|
2300
|
+
logoSrcLight?: string;
|
|
2301
|
+
/** Logo used on the white header (defaults to the green/brand asset). */
|
|
2302
|
+
logoSrcDark?: string;
|
|
2303
|
+
/** Backwards-compatible single-logo override — applied to both variants when set. */
|
|
2243
2304
|
logoSrc?: string;
|
|
2244
2305
|
logoAlt?: string;
|
|
2245
2306
|
languages?: SiteHeaderLanguage[];
|
|
@@ -2253,7 +2314,7 @@ interface SiteHeaderProps {
|
|
|
2253
2314
|
}
|
|
2254
2315
|
declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
|
|
2255
2316
|
declare const DEFAULT_LANGUAGES: SiteHeaderLanguage[];
|
|
2256
|
-
declare function SiteHeader({ variant, links, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2317
|
+
declare function SiteHeader({ variant, links, logoSrcLight, logoSrcDark, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2257
2318
|
|
|
2258
2319
|
declare function ThemeToggle({ className }: {
|
|
2259
2320
|
className?: string;
|
|
@@ -2261,6 +2322,13 @@ declare function ThemeToggle({ className }: {
|
|
|
2261
2322
|
|
|
2262
2323
|
type TripCardStatus = "sold-out" | "trending";
|
|
2263
2324
|
type TripCardSize = "sm" | "md" | "lg";
|
|
2325
|
+
/**
|
|
2326
|
+
* Visual style of the card.
|
|
2327
|
+
* - "overlay" — full-bleed image with dark gradient + white text on top (default).
|
|
2328
|
+
* - "editorial" — image on top, white body below with title, excerpt, nights + price.
|
|
2329
|
+
*/
|
|
2330
|
+
type TripCardVariant = "overlay" | "editorial";
|
|
2331
|
+
type TripCardDifficulty = "easy" | "moderate" | "extreme";
|
|
2264
2332
|
interface TripCardCta {
|
|
2265
2333
|
/** Texto do link (ex: "Discover this trip" ou "5 dates available") */
|
|
2266
2334
|
label: string;
|
|
@@ -2271,24 +2339,42 @@ interface TripCardProps {
|
|
|
2271
2339
|
/** URL da imagem de capa */
|
|
2272
2340
|
image: string;
|
|
2273
2341
|
imageAlt?: string;
|
|
2274
|
-
/** Badge de status
|
|
2342
|
+
/** Badge de status (ex.: trending) — usado pelo variant="overlay". */
|
|
2275
2343
|
status?: TripCardStatus;
|
|
2276
2344
|
/** Número de noites */
|
|
2277
2345
|
nights?: number;
|
|
2278
|
-
/** Período (ex: "Feb - Mar") */
|
|
2346
|
+
/** Período (ex: "Feb - Mar") — usado pelo variant="overlay". */
|
|
2279
2347
|
period?: string;
|
|
2280
2348
|
/** Título da viagem */
|
|
2281
2349
|
title: string;
|
|
2282
|
-
/** Descrição
|
|
2350
|
+
/** Descrição / excerpt curto — usado em ambos os variants. */
|
|
2283
2351
|
description?: string;
|
|
2284
|
-
/** Link/CTA de ação */
|
|
2352
|
+
/** Link/CTA de ação — usado pelo variant="overlay". */
|
|
2285
2353
|
cta?: TripCardCta;
|
|
2286
|
-
/** Preço
|
|
2354
|
+
/** Preço (ex: "from € 769"). */
|
|
2287
2355
|
price?: string;
|
|
2288
2356
|
size?: TripCardSize;
|
|
2289
2357
|
className?: string;
|
|
2358
|
+
/** Variação visual do card. @default "overlay" */
|
|
2359
|
+
variant?: TripCardVariant;
|
|
2360
|
+
/** Quando href é fornecido, o card editorial inteiro vira um link <a>. */
|
|
2361
|
+
href?: string;
|
|
2362
|
+
/** Mostra um botão de favorito (estilo Chip glass) no topo direito. */
|
|
2363
|
+
favoritable?: boolean;
|
|
2364
|
+
/** Estado controlado do favorito. */
|
|
2365
|
+
favorited?: boolean;
|
|
2366
|
+
onFavoriteToggle?: (next: boolean) => void;
|
|
2367
|
+
/** Localização/região exibida no rodapé branco (ex.: "Pantanal, Brazil"). */
|
|
2368
|
+
location?: string;
|
|
2369
|
+
/** Nível de dificuldade — renderizado com um dot colorido. */
|
|
2370
|
+
difficulty?: TripCardDifficulty;
|
|
2371
|
+
/**
|
|
2372
|
+
* Tour-type tag rendered as a chip at the top-left of the image
|
|
2373
|
+
* (ex.: "Family Adventure", "Private Trip", "Luxury").
|
|
2374
|
+
*/
|
|
2375
|
+
tag?: string;
|
|
2290
2376
|
}
|
|
2291
|
-
declare function TripCard(
|
|
2377
|
+
declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
|
|
2292
2378
|
|
|
2293
2379
|
interface TripDuration {
|
|
2294
2380
|
/** Total number of days */
|
|
@@ -2296,6 +2382,10 @@ interface TripDuration {
|
|
|
2296
2382
|
/** Number of nights — defaults to days - 1 */
|
|
2297
2383
|
nights?: number;
|
|
2298
2384
|
}
|
|
2385
|
+
interface TripHeaderChip {
|
|
2386
|
+
label: string;
|
|
2387
|
+
href?: string;
|
|
2388
|
+
}
|
|
2299
2389
|
interface TripHeaderProps {
|
|
2300
2390
|
/** Hero image array — shows a carousel when more than one image */
|
|
2301
2391
|
images: string[];
|
|
@@ -2314,6 +2404,8 @@ interface TripHeaderProps {
|
|
|
2314
2404
|
duration?: TripDuration;
|
|
2315
2405
|
/** Legacy tagline — shown only when destination/duration are not provided */
|
|
2316
2406
|
tagline?: string;
|
|
2407
|
+
/** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
|
|
2408
|
+
chips?: TripHeaderChip[];
|
|
2317
2409
|
/**
|
|
2318
2410
|
* Optional content rendered directly below the destination/duration meta
|
|
2319
2411
|
* row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
|
|
@@ -2325,7 +2417,7 @@ interface TripHeaderProps {
|
|
|
2325
2417
|
uiVariant?: "v1" | "v2";
|
|
2326
2418
|
className?: string;
|
|
2327
2419
|
}
|
|
2328
|
-
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2420
|
+
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
2329
2421
|
|
|
2330
2422
|
interface TripHighlight {
|
|
2331
2423
|
label: string;
|
|
@@ -2386,7 +2478,7 @@ interface TripSectionIcons {
|
|
|
2386
2478
|
itinerary?: React.ReactNode;
|
|
2387
2479
|
whatIsIncluded?: React.ReactNode;
|
|
2388
2480
|
/** Accordion sections */
|
|
2389
|
-
|
|
2481
|
+
howToGetThere?: React.ReactNode;
|
|
2390
2482
|
meetingPoint?: React.ReactNode;
|
|
2391
2483
|
optionalExtras?: React.ReactNode;
|
|
2392
2484
|
whatToBring?: React.ReactNode;
|
|
@@ -2412,15 +2504,13 @@ interface TripPageProps {
|
|
|
2412
2504
|
label: string;
|
|
2413
2505
|
href?: string;
|
|
2414
2506
|
}>;
|
|
2507
|
+
/** Pill chips rendered under the hero meta row (e.g. related tour categories). */
|
|
2508
|
+
chips?: TripHeaderChip[];
|
|
2415
2509
|
highlights?: TripHighlight[];
|
|
2416
2510
|
infoGroups?: TripInfoGroup[];
|
|
2417
|
-
/**
|
|
2418
|
-
* Rich-text "Key info" content (WYSIWYG). When provided, replaces the
|
|
2419
|
-
* structured `infoGroups` render inside the accordion item — useful when
|
|
2420
|
-
* the source of truth is a free-form WP WYSIWYG field instead of
|
|
2421
|
-
* structured groups.
|
|
2422
|
-
*/
|
|
2423
2511
|
keyInfo?: React.ReactNode;
|
|
2512
|
+
/** Rich-text "How to get there" content (WYSIWYG) — directions, arrival info, etc. */
|
|
2513
|
+
howToGetThere?: React.ReactNode;
|
|
2424
2514
|
recommendedFor?: string;
|
|
2425
2515
|
overview?: React.ReactNode;
|
|
2426
2516
|
/** Optional list of long-form highlights rendered inside the Overview section. */
|
|
@@ -2448,6 +2538,8 @@ interface TripPageProps {
|
|
|
2448
2538
|
*/
|
|
2449
2539
|
meetingPoint?: React.ReactNode;
|
|
2450
2540
|
faqs?: TripFaq[];
|
|
2541
|
+
/** Number of FAQs shown before the "Load more" button appears. @default 5 */
|
|
2542
|
+
faqInitialCount?: number;
|
|
2451
2543
|
/**
|
|
2452
2544
|
* Per-section icon overrides for the trip details accordion. When a value
|
|
2453
2545
|
* is supplied for a section, it replaces the hardcoded lucide icon next
|
|
@@ -2492,7 +2584,7 @@ interface TripPageProps {
|
|
|
2492
2584
|
features?: Record<string, boolean>;
|
|
2493
2585
|
className?: string;
|
|
2494
2586
|
}
|
|
2495
|
-
declare function TripPage({ title, tagline, destination, duration, images, videoUrl, breadcrumb,
|
|
2587
|
+
declare function TripPage({ title, tagline, destination, duration, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, food, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, bookLabel, siteHeader, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
2496
2588
|
|
|
2497
2589
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
2498
2590
|
interface ActivityCardProps {
|