@qite/tide-booking-component 1.4.66 → 1.4.68

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.
@@ -45222,6 +45222,150 @@ var Breadcrumbs = function (_a) {
45222
45222
  );
45223
45223
  };
45224
45224
 
45225
+ function Accordion(_a) {
45226
+ var summary = _a.summary,
45227
+ children = _a.children,
45228
+ _b = _a.defaultOpen,
45229
+ defaultOpen = _b === void 0 ? false : _b,
45230
+ _c = _a.className,
45231
+ className = _c === void 0 ? '' : _c;
45232
+ var _d = React__default['default'].useState(defaultOpen),
45233
+ open = _d[0],
45234
+ setOpen = _d[1];
45235
+ return React__default['default'].createElement(
45236
+ 'div',
45237
+ { className: ['accordion', open && 'accordion--open', className].filter(Boolean).join(' ') },
45238
+ React__default['default'].createElement(
45239
+ 'button',
45240
+ {
45241
+ className: 'accordion__trigger',
45242
+ type: 'button',
45243
+ 'aria-expanded': open,
45244
+ onClick: function () {
45245
+ return setOpen(function (v) {
45246
+ return !v;
45247
+ });
45248
+ }
45249
+ },
45250
+ React__default['default'].createElement('span', null, summary),
45251
+ React__default['default'].createElement(
45252
+ 'span',
45253
+ { className: 'accordion__icon', 'aria-hidden': true },
45254
+ React__default['default'].createElement(Icon$3, { name: 'ui-chevron', width: 20, height: 20 })
45255
+ )
45256
+ ),
45257
+ React__default['default'].createElement(
45258
+ 'div',
45259
+ { className: 'accordion__panel' },
45260
+ React__default['default'].createElement(
45261
+ 'div',
45262
+ { className: 'accordion__panelInner' },
45263
+ React__default['default'].createElement('div', { className: 'accordion__content' }, children)
45264
+ )
45265
+ )
45266
+ );
45267
+ }
45268
+
45269
+ var FAQ = function (_a) {
45270
+ var items = _a.items,
45271
+ _b = _a.title,
45272
+ title = _b === void 0 ? 'Frequently Asked Questions' : _b;
45273
+ if (!(items === null || items === void 0 ? void 0 : items.length)) {
45274
+ return React__default['default'].createElement(
45275
+ 'section',
45276
+ { className: 'faq' },
45277
+ React__default['default'].createElement('h2', { className: 'faq__title' }, title),
45278
+ React__default['default'].createElement('p', { className: 'faq__empty' }, 'No FAQs available.')
45279
+ );
45280
+ }
45281
+ return React__default['default'].createElement(
45282
+ 'div',
45283
+ { className: 'content' },
45284
+ React__default['default'].createElement(
45285
+ 'div',
45286
+ { className: 'content__container content__container--small' },
45287
+ React__default['default'].createElement(
45288
+ 'section',
45289
+ { className: 'faq' },
45290
+ React__default['default'].createElement('h2', { className: 'faq__title' }, title),
45291
+ React__default['default'].createElement(
45292
+ 'div',
45293
+ { className: 'faq__list' },
45294
+ items.map(function (item, idx) {
45295
+ var _a;
45296
+ return React__default['default'].createElement(
45297
+ Accordion,
45298
+ { key: (_a = item.question) !== null && _a !== void 0 ? _a : idx, summary: item.question },
45299
+ React__default['default'].createElement('div', { className: 'faq__answer' }, item.answer)
45300
+ );
45301
+ })
45302
+ )
45303
+ )
45304
+ )
45305
+ );
45306
+ };
45307
+
45308
+ var FeaturedTripCard = function (_a) {
45309
+ var imageSrc = _a.imageSrc,
45310
+ imageAlt = _a.imageAlt,
45311
+ title = _a.title,
45312
+ location = _a.location,
45313
+ language = _a.language,
45314
+ onButtonClick = _a.onButtonClick;
45315
+ var translations = getTranslations(language !== null && language !== void 0 ? language : 'en-GB');
45316
+ return React__default['default'].createElement(
45317
+ 'div',
45318
+ { className: 'image-card' },
45319
+ React__default['default'].createElement('img', { src: imageSrc, alt: imageAlt, className: 'image-card__image' }),
45320
+ React__default['default'].createElement(
45321
+ 'div',
45322
+ { className: 'image-card__content' },
45323
+ React__default['default'].createElement('h3', { className: 'image-card__title' }, title),
45324
+ React__default['default'].createElement(
45325
+ 'div',
45326
+ { className: 'image-card__options' },
45327
+ React__default['default'].createElement(
45328
+ 'div',
45329
+ { className: 'image-card__option' },
45330
+ React__default['default'].createElement(Icon$3, { name: 'ui-location', width: 16, height: 16 }),
45331
+ React__default['default'].createElement('span', null, location)
45332
+ )
45333
+ ),
45334
+ React__default['default'].createElement(
45335
+ 'div',
45336
+ { className: 'image-card__bottom' },
45337
+ React__default['default'].createElement('button', { className: 'cta cta--select', onClick: onButtonClick }, translations.PRODUCT.BOOK_NOW)
45338
+ )
45339
+ )
45340
+ );
45341
+ };
45342
+
45343
+ var FeaturedTrips = function (_a) {
45344
+ var title = _a.title,
45345
+ cards = _a.cards;
45346
+ return React__default['default'].createElement(
45347
+ 'div',
45348
+ { className: 'content' },
45349
+ React__default['default'].createElement(
45350
+ 'div',
45351
+ { className: 'content__container' },
45352
+ React__default['default'].createElement(
45353
+ 'div',
45354
+ { className: 'content__title__row' },
45355
+ React__default['default'].createElement('h2', { className: 'content__title' }, title)
45356
+ ),
45357
+ React__default['default'].createElement(
45358
+ 'div',
45359
+ { className: 'content__colums content__colums--4' },
45360
+ !lodash.isEmpty(cards) &&
45361
+ cards.map(function (card, idx) {
45362
+ return React__default['default'].createElement(FeaturedTripCard, __assign({ key: idx }, card));
45363
+ })
45364
+ )
45365
+ )
45366
+ );
45367
+ };
45368
+
45225
45369
  var signalR$1 = {};
45226
45370
 
45227
45371
  var jqueryDeferred$1 = { exports: {} };
@@ -49119,6 +49263,8 @@ var signalR = /*#__PURE__*/ _mergeNamespaces(
49119
49263
  exports.BookingProduct = BookingProduct;
49120
49264
  exports.BookingWizard = BookingWizard;
49121
49265
  exports.Breadcrumbs = Breadcrumbs;
49266
+ exports.FAQ = FAQ;
49267
+ exports.FeaturedTrips = FeaturedTrips;
49122
49268
  exports.Footer = Footer;
49123
49269
  exports.Header = Header;
49124
49270
  exports.ImageCardGrid = ImageCardGrid;
@@ -7,4 +7,5 @@ export interface FAQProps {
7
7
  items: FAQItem[];
8
8
  title?: string;
9
9
  }
10
- export default function FAQ({ items, title }: FAQProps): React.JSX.Element;
10
+ declare const FAQ: React.FC<FAQProps>;
11
+ export default FAQ;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { FeaturedTrip } from './types';
3
+ declare const FeaturedTripCard: React.FC<FeaturedTrip>;
4
+ export default FeaturedTripCard;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { FeaturedTripsProps } from './types';
3
+ declare const FeaturedTrips: React.FC<FeaturedTripsProps>;
4
+ export default FeaturedTrips;
@@ -0,0 +1,12 @@
1
+ export interface FeaturedTripsProps {
2
+ title: string;
3
+ cards: FeaturedTrip[];
4
+ }
5
+ export interface FeaturedTrip {
6
+ imageSrc: string;
7
+ imageAlt: string;
8
+ title: string;
9
+ location: string;
10
+ language?: string;
11
+ onButtonClick?: () => void;
12
+ }
@@ -11,6 +11,8 @@ import ImageWithTextSection from './content/image-with-text-section';
11
11
  import Slider from './content/components/slider';
12
12
  import PhotoGallery from './content/components/gallery';
13
13
  import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
15
+ import FeaturedTrips from './content/featured-trips';
14
16
  export * from './content/navbar/types';
15
17
  export * from './content/header/types';
16
18
  export * from './content/footer/types';
@@ -20,6 +22,7 @@ export * from './content/image-with-text-section/types';
20
22
  export * from './search-results/types';
21
23
  export * from './qsm/types';
22
24
  export * from './shared/types';
25
+ export * from './content/featured-trips/types';
23
26
  export {
24
27
  BookingProduct,
25
28
  BookingWizard,
@@ -33,5 +36,7 @@ export {
33
36
  ImageWithTextSection,
34
37
  Slider,
35
38
  PhotoGallery,
36
- Breadcrumbs
39
+ Breadcrumbs,
40
+ FAQ,
41
+ FeaturedTrips
37
42
  };
@@ -44925,6 +44925,146 @@ var Breadcrumbs = function (_a) {
44925
44925
  );
44926
44926
  };
44927
44927
 
44928
+ function Accordion(_a) {
44929
+ var summary = _a.summary,
44930
+ children = _a.children,
44931
+ _b = _a.defaultOpen,
44932
+ defaultOpen = _b === void 0 ? false : _b,
44933
+ _c = _a.className,
44934
+ className = _c === void 0 ? '' : _c;
44935
+ var _d = React__default.useState(defaultOpen),
44936
+ open = _d[0],
44937
+ setOpen = _d[1];
44938
+ return React__default.createElement(
44939
+ 'div',
44940
+ { className: ['accordion', open && 'accordion--open', className].filter(Boolean).join(' ') },
44941
+ React__default.createElement(
44942
+ 'button',
44943
+ {
44944
+ className: 'accordion__trigger',
44945
+ type: 'button',
44946
+ 'aria-expanded': open,
44947
+ onClick: function () {
44948
+ return setOpen(function (v) {
44949
+ return !v;
44950
+ });
44951
+ }
44952
+ },
44953
+ React__default.createElement('span', null, summary),
44954
+ React__default.createElement(
44955
+ 'span',
44956
+ { className: 'accordion__icon', 'aria-hidden': true },
44957
+ React__default.createElement(Icon$3, { name: 'ui-chevron', width: 20, height: 20 })
44958
+ )
44959
+ ),
44960
+ React__default.createElement(
44961
+ 'div',
44962
+ { className: 'accordion__panel' },
44963
+ React__default.createElement(
44964
+ 'div',
44965
+ { className: 'accordion__panelInner' },
44966
+ React__default.createElement('div', { className: 'accordion__content' }, children)
44967
+ )
44968
+ )
44969
+ );
44970
+ }
44971
+
44972
+ var FAQ = function (_a) {
44973
+ var items = _a.items,
44974
+ _b = _a.title,
44975
+ title = _b === void 0 ? 'Frequently Asked Questions' : _b;
44976
+ if (!(items === null || items === void 0 ? void 0 : items.length)) {
44977
+ return React__default.createElement(
44978
+ 'section',
44979
+ { className: 'faq' },
44980
+ React__default.createElement('h2', { className: 'faq__title' }, title),
44981
+ React__default.createElement('p', { className: 'faq__empty' }, 'No FAQs available.')
44982
+ );
44983
+ }
44984
+ return React__default.createElement(
44985
+ 'div',
44986
+ { className: 'content' },
44987
+ React__default.createElement(
44988
+ 'div',
44989
+ { className: 'content__container content__container--small' },
44990
+ React__default.createElement(
44991
+ 'section',
44992
+ { className: 'faq' },
44993
+ React__default.createElement('h2', { className: 'faq__title' }, title),
44994
+ React__default.createElement(
44995
+ 'div',
44996
+ { className: 'faq__list' },
44997
+ items.map(function (item, idx) {
44998
+ var _a;
44999
+ return React__default.createElement(
45000
+ Accordion,
45001
+ { key: (_a = item.question) !== null && _a !== void 0 ? _a : idx, summary: item.question },
45002
+ React__default.createElement('div', { className: 'faq__answer' }, item.answer)
45003
+ );
45004
+ })
45005
+ )
45006
+ )
45007
+ )
45008
+ );
45009
+ };
45010
+
45011
+ var FeaturedTripCard = function (_a) {
45012
+ var imageSrc = _a.imageSrc,
45013
+ imageAlt = _a.imageAlt,
45014
+ title = _a.title,
45015
+ location = _a.location,
45016
+ language = _a.language,
45017
+ onButtonClick = _a.onButtonClick;
45018
+ var translations = getTranslations(language !== null && language !== void 0 ? language : 'en-GB');
45019
+ return React__default.createElement(
45020
+ 'div',
45021
+ { className: 'image-card' },
45022
+ React__default.createElement('img', { src: imageSrc, alt: imageAlt, className: 'image-card__image' }),
45023
+ React__default.createElement(
45024
+ 'div',
45025
+ { className: 'image-card__content' },
45026
+ React__default.createElement('h3', { className: 'image-card__title' }, title),
45027
+ React__default.createElement(
45028
+ 'div',
45029
+ { className: 'image-card__options' },
45030
+ React__default.createElement(
45031
+ 'div',
45032
+ { className: 'image-card__option' },
45033
+ React__default.createElement(Icon$3, { name: 'ui-location', width: 16, height: 16 }),
45034
+ React__default.createElement('span', null, location)
45035
+ )
45036
+ ),
45037
+ React__default.createElement(
45038
+ 'div',
45039
+ { className: 'image-card__bottom' },
45040
+ React__default.createElement('button', { className: 'cta cta--select', onClick: onButtonClick }, translations.PRODUCT.BOOK_NOW)
45041
+ )
45042
+ )
45043
+ );
45044
+ };
45045
+
45046
+ var FeaturedTrips = function (_a) {
45047
+ var title = _a.title,
45048
+ cards = _a.cards;
45049
+ return React__default.createElement(
45050
+ 'div',
45051
+ { className: 'content' },
45052
+ React__default.createElement(
45053
+ 'div',
45054
+ { className: 'content__container' },
45055
+ React__default.createElement('div', { className: 'content__title__row' }, React__default.createElement('h2', { className: 'content__title' }, title)),
45056
+ React__default.createElement(
45057
+ 'div',
45058
+ { className: 'content__colums content__colums--4' },
45059
+ !isEmpty(cards) &&
45060
+ cards.map(function (card, idx) {
45061
+ return React__default.createElement(FeaturedTripCard, __assign({ key: idx }, card));
45062
+ })
45063
+ )
45064
+ )
45065
+ );
45066
+ };
45067
+
44928
45068
  var signalR$1 = {};
44929
45069
 
44930
45070
  var jqueryDeferred$1 = { exports: {} };
@@ -48824,6 +48964,8 @@ export {
48824
48964
  BookingWizard,
48825
48965
  Breadcrumbs,
48826
48966
  DepartureRange,
48967
+ FAQ,
48968
+ FeaturedTrips,
48827
48969
  Footer,
48828
48970
  Header,
48829
48971
  ImageCardGrid,
@@ -7,4 +7,5 @@ export interface FAQProps {
7
7
  items: FAQItem[];
8
8
  title?: string;
9
9
  }
10
- export default function FAQ({ items, title }: FAQProps): React.JSX.Element;
10
+ declare const FAQ: React.FC<FAQProps>;
11
+ export default FAQ;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { FeaturedTrip } from './types';
3
+ declare const FeaturedTripCard: React.FC<FeaturedTrip>;
4
+ export default FeaturedTripCard;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { FeaturedTripsProps } from './types';
3
+ declare const FeaturedTrips: React.FC<FeaturedTripsProps>;
4
+ export default FeaturedTrips;
@@ -0,0 +1,12 @@
1
+ export interface FeaturedTripsProps {
2
+ title: string;
3
+ cards: FeaturedTrip[];
4
+ }
5
+ export interface FeaturedTrip {
6
+ imageSrc: string;
7
+ imageAlt: string;
8
+ title: string;
9
+ location: string;
10
+ language?: string;
11
+ onButtonClick?: () => void;
12
+ }
@@ -11,6 +11,8 @@ import ImageWithTextSection from './content/image-with-text-section';
11
11
  import Slider from './content/components/slider';
12
12
  import PhotoGallery from './content/components/gallery';
13
13
  import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
15
+ import FeaturedTrips from './content/featured-trips';
14
16
  export * from './content/navbar/types';
15
17
  export * from './content/header/types';
16
18
  export * from './content/footer/types';
@@ -20,6 +22,7 @@ export * from './content/image-with-text-section/types';
20
22
  export * from './search-results/types';
21
23
  export * from './qsm/types';
22
24
  export * from './shared/types';
25
+ export * from './content/featured-trips/types';
23
26
  export {
24
27
  BookingProduct,
25
28
  BookingWizard,
@@ -33,5 +36,7 @@ export {
33
36
  ImageWithTextSection,
34
37
  Slider,
35
38
  PhotoGallery,
36
- Breadcrumbs
39
+ Breadcrumbs,
40
+ FAQ,
41
+ FeaturedTrips
37
42
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "1.4.66",
3
+ "version": "1.4.68",
4
4
  "description": "React Booking wizard & Booking product component for Tide",
5
5
  "main": "build/build-cjs/index.js",
6
6
  "types": "build/build-cjs/src/index.d.ts",
@@ -11,7 +11,7 @@ export interface FAQProps {
11
11
  title?: string;
12
12
  }
13
13
 
14
- export default function FAQ({ items, title = 'Frequently Asked Questions' }: FAQProps) {
14
+ const FAQ: React.FC<FAQProps> = ({ items, title = 'Frequently Asked Questions' }) => {
15
15
  if (!items?.length) {
16
16
  return (
17
17
  <section className="faq">
@@ -22,15 +22,21 @@ export default function FAQ({ items, title = 'Frequently Asked Questions' }: FAQ
22
22
  }
23
23
 
24
24
  return (
25
- <section className="faq">
26
- <h2 className="faq__title">{title}</h2>
27
- <div className="faq__list">
28
- {items.map((item, idx) => (
29
- <Accordion key={item.question ?? idx} summary={item.question}>
30
- <div className="faq__answer">{item.answer}</div>
31
- </Accordion>
32
- ))}
25
+ <div className="content">
26
+ <div className="content__container content__container--small">
27
+ <section className="faq">
28
+ <h2 className="faq__title">{title}</h2>
29
+ <div className="faq__list">
30
+ {items.map((item, idx) => (
31
+ <Accordion key={item.question ?? idx} summary={item.question}>
32
+ <div className="faq__answer">{item.answer}</div>
33
+ </Accordion>
34
+ ))}
35
+ </div>
36
+ </section>
33
37
  </div>
34
- </section>
38
+ </div>
35
39
  );
36
- }
40
+ };
41
+
42
+ export default FAQ;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import { FeaturedTrip } from './types';
3
+ import Icon from '../components/icon';
4
+ import { getTranslations } from '../../shared/utils/localization-util';
5
+
6
+ const FeaturedTripCard: React.FC<FeaturedTrip> = ({ imageSrc, imageAlt, title, location, language, onButtonClick }) => {
7
+ const translations = getTranslations(language ?? 'en-GB');
8
+
9
+ return (
10
+ <div className="image-card">
11
+ <img src={imageSrc} alt={imageAlt} className="image-card__image" />
12
+ <div className="image-card__content">
13
+ <h3 className="image-card__title">{title}</h3>
14
+ <div className="image-card__options">
15
+ <div className="image-card__option">
16
+ <Icon name="ui-location" width={16} height={16} />
17
+ <span>{location}</span>
18
+ </div>
19
+ {/* <div className="image-card__option">
20
+ <Icon name="ui-moon" width={16} height={16} />
21
+ <span>2 nights</span>
22
+ </div>
23
+ <div className="image-card__option">
24
+ <Icon name="ui-plane" width={16} height={16} />
25
+ <span>3 transports</span>
26
+ </div> */}
27
+ </div>
28
+ {/* <p className="image__card__description">
29
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Placeat nulla aliquam, quis accusantium quae inventore, accusamus cumque culpa, quasi officia magnam suscipit laboriosam. Velit eveniet, id modi aperiam natus veritatis.
30
+ </p> */}
31
+ <div className="image-card__bottom">
32
+ {/* <div className="image-card__price">
33
+ From
34
+ <p className="image-card__price--amount">$899</p>
35
+ Per Person
36
+ </div> */}
37
+ <button className="cta cta--select" onClick={onButtonClick}>
38
+ {translations.PRODUCT.BOOK_NOW}
39
+ </button>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ export default FeaturedTripCard;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { FeaturedTripsProps } from './types';
3
+ import { isEmpty } from 'lodash';
4
+ import FeaturedTripCard from './featured-trip-card';
5
+
6
+ const FeaturedTrips: React.FC<FeaturedTripsProps> = ({ title, cards }) => {
7
+ return (
8
+ <div className="content">
9
+ <div className="content__container">
10
+ <div className="content__title__row">
11
+ <h2 className="content__title">{title}</h2>
12
+ </div>
13
+ <div className="content__colums content__colums--4">{!isEmpty(cards) && cards.map((card, idx) => <FeaturedTripCard key={idx} {...card} />)}</div>
14
+ </div>
15
+ </div>
16
+ );
17
+ };
18
+
19
+ export default FeaturedTrips;
@@ -0,0 +1,13 @@
1
+ export interface FeaturedTripsProps {
2
+ title: string;
3
+ cards: FeaturedTrip[];
4
+ }
5
+
6
+ export interface FeaturedTrip {
7
+ imageSrc: string;
8
+ imageAlt: string;
9
+ title: string;
10
+ location: string;
11
+ language?: string;
12
+ onButtonClick?: () => void;
13
+ }
package/src/index.ts CHANGED
@@ -11,6 +11,8 @@ import ImageWithTextSection from './content/image-with-text-section';
11
11
  import Slider from './content/components/slider';
12
12
  import PhotoGallery from './content/components/gallery';
13
13
  import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
15
+ import FeaturedTrips from './content/featured-trips';
14
16
 
15
17
  export * from './content/navbar/types';
16
18
  export * from './content/header/types';
@@ -21,6 +23,7 @@ export * from './content/image-with-text-section/types';
21
23
  export * from './search-results/types';
22
24
  export * from './qsm/types';
23
25
  export * from './shared/types';
26
+ export * from './content/featured-trips/types';
24
27
 
25
28
  export {
26
29
  BookingProduct,
@@ -35,5 +38,7 @@ export {
35
38
  ImageWithTextSection,
36
39
  Slider,
37
40
  PhotoGallery,
38
- Breadcrumbs
41
+ Breadcrumbs,
42
+ FAQ,
43
+ FeaturedTrips
39
44
  };