@planetaexo/design-system 0.37.2 → 0.37.4
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 -366
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +119 -20
- package/dist/index.d.ts +119 -20
- package/dist/index.js +1583 -350
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -268,6 +268,13 @@ interface OfferProps {
|
|
|
268
268
|
confirmedState?: OfferConfirmedState;
|
|
269
269
|
/** When true, opcionais (checkbox + stepper) ficam read-only. Usado em estado expirado. */
|
|
270
270
|
interactionsDisabled?: boolean;
|
|
271
|
+
/**
|
|
272
|
+
* Quando true, "Book now" abre o BookingWizard interno (demo). Em produção
|
|
273
|
+
* (host com checkout próprio via `checkoutSlot`) deixe `false` para que o
|
|
274
|
+
* fallback do wizard interno nunca renderize — evita regressões em que
|
|
275
|
+
* fechar o `checkoutSlot` no host expõe um stepper demo com schema antigo.
|
|
276
|
+
*/
|
|
277
|
+
internalDemoCheckout?: boolean;
|
|
271
278
|
className?: string;
|
|
272
279
|
}
|
|
273
280
|
interface BookingShellProps {
|
|
@@ -358,7 +365,7 @@ declare function TransferDetailsBlock({ label, items, className, }: TransferDeta
|
|
|
358
365
|
declare function OfferAdventureCard({ adventure }: {
|
|
359
366
|
adventure: OfferAdventureItem;
|
|
360
367
|
}): react_jsx_runtime.JSX.Element;
|
|
361
|
-
declare function Offer({ logo, logoAlt, title, subtitle, adventures, subtotal, total, depositInfo, agent, onContinue, continueLabel, externalBookingFlow, checkoutSlot, summaryNotesSlot, summaryDiscountLine, continueDisabled, labels, confirmedState, interactionsDisabled, className, }: OfferProps): react_jsx_runtime.JSX.Element;
|
|
368
|
+
declare function Offer({ logo, logoAlt, title, subtitle, adventures, subtotal, total, depositInfo, agent, onContinue, continueLabel, externalBookingFlow, checkoutSlot, summaryNotesSlot, summaryDiscountLine, continueDisabled, labels, confirmedState, interactionsDisabled, internalDemoCheckout, className, }: OfferProps): react_jsx_runtime.JSX.Element;
|
|
362
369
|
|
|
363
370
|
type BookingStatus = "pending" | "confirmed" | "cancelled" | "completed" | "pendingRegistration" | "pendingPayment" | "pendingPaymentOverdue" | "complete";
|
|
364
371
|
interface BookingTraveller {
|
|
@@ -1973,6 +1980,18 @@ interface FilterItem {
|
|
|
1973
1980
|
label: string;
|
|
1974
1981
|
/** Contagem de resultados disponíveis */
|
|
1975
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;
|
|
1976
1995
|
}
|
|
1977
1996
|
interface FilterGroup {
|
|
1978
1997
|
id: string;
|
|
@@ -1982,7 +2001,29 @@ interface FilterGroup {
|
|
|
1982
2001
|
items: FilterItem[];
|
|
1983
2002
|
/** Abre este grupo por padrão */
|
|
1984
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;
|
|
1985
2015
|
}
|
|
2016
|
+
interface FilterSortOption {
|
|
2017
|
+
id: string;
|
|
2018
|
+
label: string;
|
|
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";
|
|
1986
2027
|
interface FilterPanelProps {
|
|
1987
2028
|
groups: FilterGroup[];
|
|
1988
2029
|
/** Estado controlado: { groupId: string[] } */
|
|
@@ -1993,8 +2034,14 @@ interface FilterPanelProps {
|
|
|
1993
2034
|
alwaysShowClear?: boolean;
|
|
1994
2035
|
title?: string;
|
|
1995
2036
|
className?: string;
|
|
1996
|
-
|
|
1997
|
-
|
|
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;
|
|
1998
2045
|
|
|
1999
2046
|
/**
|
|
2000
2047
|
* Configuration for any Trustpilot widget embedded in the design system.
|
|
@@ -2031,6 +2078,22 @@ interface TrustpilotWidgetConfig {
|
|
|
2031
2078
|
starColor?: string;
|
|
2032
2079
|
/** Fallback link target (e.g. "https://www.trustpilot.com/review/yourdomain.com"). */
|
|
2033
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;
|
|
2034
2097
|
}
|
|
2035
2098
|
/**
|
|
2036
2099
|
* Renders a Trustpilot widget div with the right data-* attributes and
|
|
@@ -2130,7 +2193,7 @@ interface MenuTripProps {
|
|
|
2130
2193
|
}
|
|
2131
2194
|
declare function MenuTrip({ sections, activeSection, onSelect, variant, bold, className, }: MenuTripProps): react_jsx_runtime.JSX.Element;
|
|
2132
2195
|
|
|
2133
|
-
type PhotoGalleryVariant = "grid" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2196
|
+
type PhotoGalleryVariant = "grid" | "gridCompact" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2134
2197
|
interface PhotoGalleryPhoto {
|
|
2135
2198
|
src: string;
|
|
2136
2199
|
alt?: string;
|
|
@@ -2233,6 +2296,11 @@ type SiteHeaderVariant = "transparent" | "white" | "dark";
|
|
|
2233
2296
|
interface SiteHeaderProps {
|
|
2234
2297
|
variant?: SiteHeaderVariant;
|
|
2235
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. */
|
|
2236
2304
|
logoSrc?: string;
|
|
2237
2305
|
logoAlt?: string;
|
|
2238
2306
|
languages?: SiteHeaderLanguage[];
|
|
@@ -2246,7 +2314,7 @@ interface SiteHeaderProps {
|
|
|
2246
2314
|
}
|
|
2247
2315
|
declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
|
|
2248
2316
|
declare const DEFAULT_LANGUAGES: SiteHeaderLanguage[];
|
|
2249
|
-
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;
|
|
2250
2318
|
|
|
2251
2319
|
declare function ThemeToggle({ className }: {
|
|
2252
2320
|
className?: string;
|
|
@@ -2254,6 +2322,13 @@ declare function ThemeToggle({ className }: {
|
|
|
2254
2322
|
|
|
2255
2323
|
type TripCardStatus = "sold-out" | "trending";
|
|
2256
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";
|
|
2257
2332
|
interface TripCardCta {
|
|
2258
2333
|
/** Texto do link (ex: "Discover this trip" ou "5 dates available") */
|
|
2259
2334
|
label: string;
|
|
@@ -2264,24 +2339,42 @@ interface TripCardProps {
|
|
|
2264
2339
|
/** URL da imagem de capa */
|
|
2265
2340
|
image: string;
|
|
2266
2341
|
imageAlt?: string;
|
|
2267
|
-
/** Badge de status
|
|
2342
|
+
/** Badge de status (ex.: trending) — usado pelo variant="overlay". */
|
|
2268
2343
|
status?: TripCardStatus;
|
|
2269
2344
|
/** Número de noites */
|
|
2270
2345
|
nights?: number;
|
|
2271
|
-
/** Período (ex: "Feb - Mar") */
|
|
2346
|
+
/** Período (ex: "Feb - Mar") — usado pelo variant="overlay". */
|
|
2272
2347
|
period?: string;
|
|
2273
2348
|
/** Título da viagem */
|
|
2274
2349
|
title: string;
|
|
2275
|
-
/** Descrição
|
|
2350
|
+
/** Descrição / excerpt curto — usado em ambos os variants. */
|
|
2276
2351
|
description?: string;
|
|
2277
|
-
/** Link/CTA de ação */
|
|
2352
|
+
/** Link/CTA de ação — usado pelo variant="overlay". */
|
|
2278
2353
|
cta?: TripCardCta;
|
|
2279
|
-
/** Preço
|
|
2354
|
+
/** Preço (ex: "from € 769"). */
|
|
2280
2355
|
price?: string;
|
|
2281
2356
|
size?: TripCardSize;
|
|
2282
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;
|
|
2283
2376
|
}
|
|
2284
|
-
declare function TripCard(
|
|
2377
|
+
declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
|
|
2285
2378
|
|
|
2286
2379
|
interface TripDuration {
|
|
2287
2380
|
/** Total number of days */
|
|
@@ -2289,6 +2382,10 @@ interface TripDuration {
|
|
|
2289
2382
|
/** Number of nights — defaults to days - 1 */
|
|
2290
2383
|
nights?: number;
|
|
2291
2384
|
}
|
|
2385
|
+
interface TripHeaderChip {
|
|
2386
|
+
label: string;
|
|
2387
|
+
href?: string;
|
|
2388
|
+
}
|
|
2292
2389
|
interface TripHeaderProps {
|
|
2293
2390
|
/** Hero image array — shows a carousel when more than one image */
|
|
2294
2391
|
images: string[];
|
|
@@ -2307,6 +2404,8 @@ interface TripHeaderProps {
|
|
|
2307
2404
|
duration?: TripDuration;
|
|
2308
2405
|
/** Legacy tagline — shown only when destination/duration are not provided */
|
|
2309
2406
|
tagline?: string;
|
|
2407
|
+
/** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
|
|
2408
|
+
chips?: TripHeaderChip[];
|
|
2310
2409
|
/**
|
|
2311
2410
|
* Optional content rendered directly below the destination/duration meta
|
|
2312
2411
|
* row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
|
|
@@ -2318,7 +2417,7 @@ interface TripHeaderProps {
|
|
|
2318
2417
|
uiVariant?: "v1" | "v2";
|
|
2319
2418
|
className?: string;
|
|
2320
2419
|
}
|
|
2321
|
-
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;
|
|
2322
2421
|
|
|
2323
2422
|
interface TripHighlight {
|
|
2324
2423
|
label: string;
|
|
@@ -2379,7 +2478,7 @@ interface TripSectionIcons {
|
|
|
2379
2478
|
itinerary?: React.ReactNode;
|
|
2380
2479
|
whatIsIncluded?: React.ReactNode;
|
|
2381
2480
|
/** Accordion sections */
|
|
2382
|
-
|
|
2481
|
+
howToGetThere?: React.ReactNode;
|
|
2383
2482
|
meetingPoint?: React.ReactNode;
|
|
2384
2483
|
optionalExtras?: React.ReactNode;
|
|
2385
2484
|
whatToBring?: React.ReactNode;
|
|
@@ -2405,15 +2504,13 @@ interface TripPageProps {
|
|
|
2405
2504
|
label: string;
|
|
2406
2505
|
href?: string;
|
|
2407
2506
|
}>;
|
|
2507
|
+
/** Pill chips rendered under the hero meta row (e.g. related tour categories). */
|
|
2508
|
+
chips?: TripHeaderChip[];
|
|
2408
2509
|
highlights?: TripHighlight[];
|
|
2409
2510
|
infoGroups?: TripInfoGroup[];
|
|
2410
|
-
/**
|
|
2411
|
-
* Rich-text "Key info" content (WYSIWYG). When provided, replaces the
|
|
2412
|
-
* structured `infoGroups` render inside the accordion item — useful when
|
|
2413
|
-
* the source of truth is a free-form WP WYSIWYG field instead of
|
|
2414
|
-
* structured groups.
|
|
2415
|
-
*/
|
|
2416
2511
|
keyInfo?: React.ReactNode;
|
|
2512
|
+
/** Rich-text "How to get there" content (WYSIWYG) — directions, arrival info, etc. */
|
|
2513
|
+
howToGetThere?: React.ReactNode;
|
|
2417
2514
|
recommendedFor?: string;
|
|
2418
2515
|
overview?: React.ReactNode;
|
|
2419
2516
|
/** Optional list of long-form highlights rendered inside the Overview section. */
|
|
@@ -2441,6 +2538,8 @@ interface TripPageProps {
|
|
|
2441
2538
|
*/
|
|
2442
2539
|
meetingPoint?: React.ReactNode;
|
|
2443
2540
|
faqs?: TripFaq[];
|
|
2541
|
+
/** Number of FAQs shown before the "Load more" button appears. @default 5 */
|
|
2542
|
+
faqInitialCount?: number;
|
|
2444
2543
|
/**
|
|
2445
2544
|
* Per-section icon overrides for the trip details accordion. When a value
|
|
2446
2545
|
* is supplied for a section, it replaces the hardcoded lucide icon next
|
|
@@ -2485,7 +2584,7 @@ interface TripPageProps {
|
|
|
2485
2584
|
features?: Record<string, boolean>;
|
|
2486
2585
|
className?: string;
|
|
2487
2586
|
}
|
|
2488
|
-
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;
|
|
2489
2588
|
|
|
2490
2589
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
2491
2590
|
interface ActivityCardProps {
|
package/dist/index.d.ts
CHANGED
|
@@ -268,6 +268,13 @@ interface OfferProps {
|
|
|
268
268
|
confirmedState?: OfferConfirmedState;
|
|
269
269
|
/** When true, opcionais (checkbox + stepper) ficam read-only. Usado em estado expirado. */
|
|
270
270
|
interactionsDisabled?: boolean;
|
|
271
|
+
/**
|
|
272
|
+
* Quando true, "Book now" abre o BookingWizard interno (demo). Em produção
|
|
273
|
+
* (host com checkout próprio via `checkoutSlot`) deixe `false` para que o
|
|
274
|
+
* fallback do wizard interno nunca renderize — evita regressões em que
|
|
275
|
+
* fechar o `checkoutSlot` no host expõe um stepper demo com schema antigo.
|
|
276
|
+
*/
|
|
277
|
+
internalDemoCheckout?: boolean;
|
|
271
278
|
className?: string;
|
|
272
279
|
}
|
|
273
280
|
interface BookingShellProps {
|
|
@@ -358,7 +365,7 @@ declare function TransferDetailsBlock({ label, items, className, }: TransferDeta
|
|
|
358
365
|
declare function OfferAdventureCard({ adventure }: {
|
|
359
366
|
adventure: OfferAdventureItem;
|
|
360
367
|
}): react_jsx_runtime.JSX.Element;
|
|
361
|
-
declare function Offer({ logo, logoAlt, title, subtitle, adventures, subtotal, total, depositInfo, agent, onContinue, continueLabel, externalBookingFlow, checkoutSlot, summaryNotesSlot, summaryDiscountLine, continueDisabled, labels, confirmedState, interactionsDisabled, className, }: OfferProps): react_jsx_runtime.JSX.Element;
|
|
368
|
+
declare function Offer({ logo, logoAlt, title, subtitle, adventures, subtotal, total, depositInfo, agent, onContinue, continueLabel, externalBookingFlow, checkoutSlot, summaryNotesSlot, summaryDiscountLine, continueDisabled, labels, confirmedState, interactionsDisabled, internalDemoCheckout, className, }: OfferProps): react_jsx_runtime.JSX.Element;
|
|
362
369
|
|
|
363
370
|
type BookingStatus = "pending" | "confirmed" | "cancelled" | "completed" | "pendingRegistration" | "pendingPayment" | "pendingPaymentOverdue" | "complete";
|
|
364
371
|
interface BookingTraveller {
|
|
@@ -1973,6 +1980,18 @@ interface FilterItem {
|
|
|
1973
1980
|
label: string;
|
|
1974
1981
|
/** Contagem de resultados disponíveis */
|
|
1975
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;
|
|
1976
1995
|
}
|
|
1977
1996
|
interface FilterGroup {
|
|
1978
1997
|
id: string;
|
|
@@ -1982,7 +2001,29 @@ interface FilterGroup {
|
|
|
1982
2001
|
items: FilterItem[];
|
|
1983
2002
|
/** Abre este grupo por padrão */
|
|
1984
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;
|
|
1985
2015
|
}
|
|
2016
|
+
interface FilterSortOption {
|
|
2017
|
+
id: string;
|
|
2018
|
+
label: string;
|
|
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";
|
|
1986
2027
|
interface FilterPanelProps {
|
|
1987
2028
|
groups: FilterGroup[];
|
|
1988
2029
|
/** Estado controlado: { groupId: string[] } */
|
|
@@ -1993,8 +2034,14 @@ interface FilterPanelProps {
|
|
|
1993
2034
|
alwaysShowClear?: boolean;
|
|
1994
2035
|
title?: string;
|
|
1995
2036
|
className?: string;
|
|
1996
|
-
|
|
1997
|
-
|
|
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;
|
|
1998
2045
|
|
|
1999
2046
|
/**
|
|
2000
2047
|
* Configuration for any Trustpilot widget embedded in the design system.
|
|
@@ -2031,6 +2078,22 @@ interface TrustpilotWidgetConfig {
|
|
|
2031
2078
|
starColor?: string;
|
|
2032
2079
|
/** Fallback link target (e.g. "https://www.trustpilot.com/review/yourdomain.com"). */
|
|
2033
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;
|
|
2034
2097
|
}
|
|
2035
2098
|
/**
|
|
2036
2099
|
* Renders a Trustpilot widget div with the right data-* attributes and
|
|
@@ -2130,7 +2193,7 @@ interface MenuTripProps {
|
|
|
2130
2193
|
}
|
|
2131
2194
|
declare function MenuTrip({ sections, activeSection, onSelect, variant, bold, className, }: MenuTripProps): react_jsx_runtime.JSX.Element;
|
|
2132
2195
|
|
|
2133
|
-
type PhotoGalleryVariant = "grid" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2196
|
+
type PhotoGalleryVariant = "grid" | "gridCompact" | "masonry" | "filmstrip" | "featured" | "carousel" | "fullBleed";
|
|
2134
2197
|
interface PhotoGalleryPhoto {
|
|
2135
2198
|
src: string;
|
|
2136
2199
|
alt?: string;
|
|
@@ -2233,6 +2296,11 @@ type SiteHeaderVariant = "transparent" | "white" | "dark";
|
|
|
2233
2296
|
interface SiteHeaderProps {
|
|
2234
2297
|
variant?: SiteHeaderVariant;
|
|
2235
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. */
|
|
2236
2304
|
logoSrc?: string;
|
|
2237
2305
|
logoAlt?: string;
|
|
2238
2306
|
languages?: SiteHeaderLanguage[];
|
|
@@ -2246,7 +2314,7 @@ interface SiteHeaderProps {
|
|
|
2246
2314
|
}
|
|
2247
2315
|
declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
|
|
2248
2316
|
declare const DEFAULT_LANGUAGES: SiteHeaderLanguage[];
|
|
2249
|
-
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;
|
|
2250
2318
|
|
|
2251
2319
|
declare function ThemeToggle({ className }: {
|
|
2252
2320
|
className?: string;
|
|
@@ -2254,6 +2322,13 @@ declare function ThemeToggle({ className }: {
|
|
|
2254
2322
|
|
|
2255
2323
|
type TripCardStatus = "sold-out" | "trending";
|
|
2256
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";
|
|
2257
2332
|
interface TripCardCta {
|
|
2258
2333
|
/** Texto do link (ex: "Discover this trip" ou "5 dates available") */
|
|
2259
2334
|
label: string;
|
|
@@ -2264,24 +2339,42 @@ interface TripCardProps {
|
|
|
2264
2339
|
/** URL da imagem de capa */
|
|
2265
2340
|
image: string;
|
|
2266
2341
|
imageAlt?: string;
|
|
2267
|
-
/** Badge de status
|
|
2342
|
+
/** Badge de status (ex.: trending) — usado pelo variant="overlay". */
|
|
2268
2343
|
status?: TripCardStatus;
|
|
2269
2344
|
/** Número de noites */
|
|
2270
2345
|
nights?: number;
|
|
2271
|
-
/** Período (ex: "Feb - Mar") */
|
|
2346
|
+
/** Período (ex: "Feb - Mar") — usado pelo variant="overlay". */
|
|
2272
2347
|
period?: string;
|
|
2273
2348
|
/** Título da viagem */
|
|
2274
2349
|
title: string;
|
|
2275
|
-
/** Descrição
|
|
2350
|
+
/** Descrição / excerpt curto — usado em ambos os variants. */
|
|
2276
2351
|
description?: string;
|
|
2277
|
-
/** Link/CTA de ação */
|
|
2352
|
+
/** Link/CTA de ação — usado pelo variant="overlay". */
|
|
2278
2353
|
cta?: TripCardCta;
|
|
2279
|
-
/** Preço
|
|
2354
|
+
/** Preço (ex: "from € 769"). */
|
|
2280
2355
|
price?: string;
|
|
2281
2356
|
size?: TripCardSize;
|
|
2282
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;
|
|
2283
2376
|
}
|
|
2284
|
-
declare function TripCard(
|
|
2377
|
+
declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
|
|
2285
2378
|
|
|
2286
2379
|
interface TripDuration {
|
|
2287
2380
|
/** Total number of days */
|
|
@@ -2289,6 +2382,10 @@ interface TripDuration {
|
|
|
2289
2382
|
/** Number of nights — defaults to days - 1 */
|
|
2290
2383
|
nights?: number;
|
|
2291
2384
|
}
|
|
2385
|
+
interface TripHeaderChip {
|
|
2386
|
+
label: string;
|
|
2387
|
+
href?: string;
|
|
2388
|
+
}
|
|
2292
2389
|
interface TripHeaderProps {
|
|
2293
2390
|
/** Hero image array — shows a carousel when more than one image */
|
|
2294
2391
|
images: string[];
|
|
@@ -2307,6 +2404,8 @@ interface TripHeaderProps {
|
|
|
2307
2404
|
duration?: TripDuration;
|
|
2308
2405
|
/** Legacy tagline — shown only when destination/duration are not provided */
|
|
2309
2406
|
tagline?: string;
|
|
2407
|
+
/** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
|
|
2408
|
+
chips?: TripHeaderChip[];
|
|
2310
2409
|
/**
|
|
2311
2410
|
* Optional content rendered directly below the destination/duration meta
|
|
2312
2411
|
* row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
|
|
@@ -2318,7 +2417,7 @@ interface TripHeaderProps {
|
|
|
2318
2417
|
uiVariant?: "v1" | "v2";
|
|
2319
2418
|
className?: string;
|
|
2320
2419
|
}
|
|
2321
|
-
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;
|
|
2322
2421
|
|
|
2323
2422
|
interface TripHighlight {
|
|
2324
2423
|
label: string;
|
|
@@ -2379,7 +2478,7 @@ interface TripSectionIcons {
|
|
|
2379
2478
|
itinerary?: React.ReactNode;
|
|
2380
2479
|
whatIsIncluded?: React.ReactNode;
|
|
2381
2480
|
/** Accordion sections */
|
|
2382
|
-
|
|
2481
|
+
howToGetThere?: React.ReactNode;
|
|
2383
2482
|
meetingPoint?: React.ReactNode;
|
|
2384
2483
|
optionalExtras?: React.ReactNode;
|
|
2385
2484
|
whatToBring?: React.ReactNode;
|
|
@@ -2405,15 +2504,13 @@ interface TripPageProps {
|
|
|
2405
2504
|
label: string;
|
|
2406
2505
|
href?: string;
|
|
2407
2506
|
}>;
|
|
2507
|
+
/** Pill chips rendered under the hero meta row (e.g. related tour categories). */
|
|
2508
|
+
chips?: TripHeaderChip[];
|
|
2408
2509
|
highlights?: TripHighlight[];
|
|
2409
2510
|
infoGroups?: TripInfoGroup[];
|
|
2410
|
-
/**
|
|
2411
|
-
* Rich-text "Key info" content (WYSIWYG). When provided, replaces the
|
|
2412
|
-
* structured `infoGroups` render inside the accordion item — useful when
|
|
2413
|
-
* the source of truth is a free-form WP WYSIWYG field instead of
|
|
2414
|
-
* structured groups.
|
|
2415
|
-
*/
|
|
2416
2511
|
keyInfo?: React.ReactNode;
|
|
2512
|
+
/** Rich-text "How to get there" content (WYSIWYG) — directions, arrival info, etc. */
|
|
2513
|
+
howToGetThere?: React.ReactNode;
|
|
2417
2514
|
recommendedFor?: string;
|
|
2418
2515
|
overview?: React.ReactNode;
|
|
2419
2516
|
/** Optional list of long-form highlights rendered inside the Overview section. */
|
|
@@ -2441,6 +2538,8 @@ interface TripPageProps {
|
|
|
2441
2538
|
*/
|
|
2442
2539
|
meetingPoint?: React.ReactNode;
|
|
2443
2540
|
faqs?: TripFaq[];
|
|
2541
|
+
/** Number of FAQs shown before the "Load more" button appears. @default 5 */
|
|
2542
|
+
faqInitialCount?: number;
|
|
2444
2543
|
/**
|
|
2445
2544
|
* Per-section icon overrides for the trip details accordion. When a value
|
|
2446
2545
|
* is supplied for a section, it replaces the hardcoded lucide icon next
|
|
@@ -2485,7 +2584,7 @@ interface TripPageProps {
|
|
|
2485
2584
|
features?: Record<string, boolean>;
|
|
2486
2585
|
className?: string;
|
|
2487
2586
|
}
|
|
2488
|
-
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;
|
|
2489
2588
|
|
|
2490
2589
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
2491
2590
|
interface ActivityCardProps {
|