@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.
- package/build/build-cjs/index.js +146 -0
- package/build/build-cjs/src/content/components/faq.d.ts +2 -1
- package/build/build-cjs/src/content/featured-trips/featured-trip-card.d.ts +4 -0
- package/build/build-cjs/src/content/featured-trips/index.d.ts +4 -0
- package/build/build-cjs/src/content/featured-trips/types.d.ts +12 -0
- package/build/build-cjs/src/index.d.ts +6 -1
- package/build/build-esm/index.js +142 -0
- package/build/build-esm/src/content/components/faq.d.ts +2 -1
- package/build/build-esm/src/content/featured-trips/featured-trip-card.d.ts +4 -0
- package/build/build-esm/src/content/featured-trips/index.d.ts +4 -0
- package/build/build-esm/src/content/featured-trips/types.d.ts +12 -0
- package/build/build-esm/src/index.d.ts +6 -1
- package/package.json +1 -1
- package/src/content/components/faq.tsx +17 -11
- package/src/content/featured-trips/featured-trip-card.tsx +46 -0
- package/src/content/featured-trips/index.tsx +19 -0
- package/src/content/featured-trips/types.ts +13 -0
- package/src/index.ts +6 -1
package/build/build-cjs/index.js
CHANGED
|
@@ -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;
|
|
@@ -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/build/build-esm/index.js
CHANGED
|
@@ -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,
|
|
@@ -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
|
@@ -11,7 +11,7 @@ export interface FAQProps {
|
|
|
11
11
|
title?: string;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
|
|
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
|
-
<
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
</
|
|
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
|
};
|