@qite/tide-booking-component 1.4.65 → 1.4.67

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.
@@ -45185,6 +45185,126 @@ var PhotoGallery = function (_a) {
45185
45185
  );
45186
45186
  };
45187
45187
 
45188
+ var Breadcrumbs = function (_a) {
45189
+ var items = _a.items,
45190
+ _b = _a.noHeader,
45191
+ noHeader = _b === void 0 ? false : _b;
45192
+ var lastIndex = items.length - 1;
45193
+ return React__default['default'].createElement(
45194
+ 'nav',
45195
+ { className: 'breadcrumb'.concat(noHeader ? ' breadcrumb--no-header' : ''), 'aria-label': 'Breadcrumb' },
45196
+ React__default['default'].createElement(
45197
+ 'div',
45198
+ { className: 'breadcrumb__container' },
45199
+ React__default['default'].createElement(
45200
+ 'ol',
45201
+ { className: 'breadcrumb__list' },
45202
+ items.map(function (item, idx) {
45203
+ var _a;
45204
+ var isCurrent = (_a = item.isCurrent) !== null && _a !== void 0 ? _a : idx === lastIndex;
45205
+ var content = React__default['default'].createElement(
45206
+ 'span',
45207
+ { className: 'breadcrumb__content' },
45208
+ item.icon && React__default['default'].createElement('span', { className: 'breadcrumb__icon', 'aria-hidden': 'true' }, item.icon),
45209
+ item.label && React__default['default'].createElement('span', { className: 'breadcrumb__label', title: item.label }, item.label)
45210
+ );
45211
+ return React__default['default'].createElement(
45212
+ 'li',
45213
+ { key: idx, className: 'breadcrumb__item' },
45214
+ idx > 0 && React__default['default'].createElement('span', { className: 'breadcrumb__separator', 'aria-hidden': 'true' }, '/'),
45215
+ isCurrent || !item.href
45216
+ ? React__default['default'].createElement('span', { className: 'breadcrumb__current', 'aria-current': isCurrent ? 'page' : undefined }, content)
45217
+ : React__default['default'].createElement('a', { className: 'breadcrumb__link', href: item.href, onClick: item.onClick }, content)
45218
+ );
45219
+ })
45220
+ )
45221
+ )
45222
+ );
45223
+ };
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
+
45188
45308
  var signalR$1 = {};
45189
45309
 
45190
45310
  var jqueryDeferred$1 = { exports: {} };
@@ -49081,6 +49201,8 @@ var signalR = /*#__PURE__*/ _mergeNamespaces(
49081
49201
 
49082
49202
  exports.BookingProduct = BookingProduct;
49083
49203
  exports.BookingWizard = BookingWizard;
49204
+ exports.Breadcrumbs = Breadcrumbs;
49205
+ exports.FAQ = FAQ;
49084
49206
  exports.Footer = Footer;
49085
49207
  exports.Header = Header;
49086
49208
  exports.ImageCardGrid = ImageCardGrid;
@@ -6,11 +6,9 @@ export type BreadcrumbItem = {
6
6
  icon?: React.ReactNode;
7
7
  isCurrent?: boolean;
8
8
  };
9
- type BreadcrumbsProps = {
9
+ export type BreadcrumbsProps = {
10
10
  items: BreadcrumbItem[];
11
- separator?: React.ReactNode;
12
- ariaLabel?: string;
13
11
  noHeader?: boolean;
14
12
  };
15
- export default function Breadcrumbs({ items, separator, ariaLabel, noHeader }: BreadcrumbsProps): React.JSX.Element;
16
- export {};
13
+ declare const Breadcrumbs: React.FC<BreadcrumbsProps>;
14
+ export default Breadcrumbs;
@@ -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;
@@ -10,6 +10,8 @@ import Login from './content/login';
10
10
  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
+ import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
13
15
  export * from './content/navbar/types';
14
16
  export * from './content/header/types';
15
17
  export * from './content/footer/types';
@@ -19,4 +21,19 @@ export * from './content/image-with-text-section/types';
19
21
  export * from './search-results/types';
20
22
  export * from './qsm/types';
21
23
  export * from './shared/types';
22
- export { BookingProduct, BookingWizard, QSM, SearchResults, Navbar, Header, Footer, ImageCardGrid, Login, ImageWithTextSection, Slider, PhotoGallery };
24
+ export {
25
+ BookingProduct,
26
+ BookingWizard,
27
+ QSM,
28
+ SearchResults,
29
+ Navbar,
30
+ Header,
31
+ Footer,
32
+ ImageCardGrid,
33
+ Login,
34
+ ImageWithTextSection,
35
+ Slider,
36
+ PhotoGallery,
37
+ Breadcrumbs,
38
+ FAQ
39
+ };
@@ -44888,6 +44888,126 @@ var PhotoGallery = function (_a) {
44888
44888
  );
44889
44889
  };
44890
44890
 
44891
+ var Breadcrumbs = function (_a) {
44892
+ var items = _a.items,
44893
+ _b = _a.noHeader,
44894
+ noHeader = _b === void 0 ? false : _b;
44895
+ var lastIndex = items.length - 1;
44896
+ return React__default.createElement(
44897
+ 'nav',
44898
+ { className: 'breadcrumb'.concat(noHeader ? ' breadcrumb--no-header' : ''), 'aria-label': 'Breadcrumb' },
44899
+ React__default.createElement(
44900
+ 'div',
44901
+ { className: 'breadcrumb__container' },
44902
+ React__default.createElement(
44903
+ 'ol',
44904
+ { className: 'breadcrumb__list' },
44905
+ items.map(function (item, idx) {
44906
+ var _a;
44907
+ var isCurrent = (_a = item.isCurrent) !== null && _a !== void 0 ? _a : idx === lastIndex;
44908
+ var content = React__default.createElement(
44909
+ 'span',
44910
+ { className: 'breadcrumb__content' },
44911
+ item.icon && React__default.createElement('span', { className: 'breadcrumb__icon', 'aria-hidden': 'true' }, item.icon),
44912
+ item.label && React__default.createElement('span', { className: 'breadcrumb__label', title: item.label }, item.label)
44913
+ );
44914
+ return React__default.createElement(
44915
+ 'li',
44916
+ { key: idx, className: 'breadcrumb__item' },
44917
+ idx > 0 && React__default.createElement('span', { className: 'breadcrumb__separator', 'aria-hidden': 'true' }, '/'),
44918
+ isCurrent || !item.href
44919
+ ? React__default.createElement('span', { className: 'breadcrumb__current', 'aria-current': isCurrent ? 'page' : undefined }, content)
44920
+ : React__default.createElement('a', { className: 'breadcrumb__link', href: item.href, onClick: item.onClick }, content)
44921
+ );
44922
+ })
44923
+ )
44924
+ )
44925
+ );
44926
+ };
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
+
44891
45011
  var signalR$1 = {};
44892
45012
 
44893
45013
  var jqueryDeferred$1 = { exports: {} };
@@ -48785,7 +48905,9 @@ var signalR = /*#__PURE__*/ _mergeNamespaces(
48785
48905
  export {
48786
48906
  BookingProduct,
48787
48907
  BookingWizard,
48908
+ Breadcrumbs,
48788
48909
  DepartureRange,
48910
+ FAQ,
48789
48911
  Footer,
48790
48912
  Header,
48791
48913
  ImageCardGrid,
@@ -6,11 +6,9 @@ export type BreadcrumbItem = {
6
6
  icon?: React.ReactNode;
7
7
  isCurrent?: boolean;
8
8
  };
9
- type BreadcrumbsProps = {
9
+ export type BreadcrumbsProps = {
10
10
  items: BreadcrumbItem[];
11
- separator?: React.ReactNode;
12
- ariaLabel?: string;
13
11
  noHeader?: boolean;
14
12
  };
15
- export default function Breadcrumbs({ items, separator, ariaLabel, noHeader }: BreadcrumbsProps): React.JSX.Element;
16
- export {};
13
+ declare const Breadcrumbs: React.FC<BreadcrumbsProps>;
14
+ export default Breadcrumbs;
@@ -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;
@@ -10,6 +10,8 @@ import Login from './content/login';
10
10
  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
+ import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
13
15
  export * from './content/navbar/types';
14
16
  export * from './content/header/types';
15
17
  export * from './content/footer/types';
@@ -19,4 +21,19 @@ export * from './content/image-with-text-section/types';
19
21
  export * from './search-results/types';
20
22
  export * from './qsm/types';
21
23
  export * from './shared/types';
22
- export { BookingProduct, BookingWizard, QSM, SearchResults, Navbar, Header, Footer, ImageCardGrid, Login, ImageWithTextSection, Slider, PhotoGallery };
24
+ export {
25
+ BookingProduct,
26
+ BookingWizard,
27
+ QSM,
28
+ SearchResults,
29
+ Navbar,
30
+ Header,
31
+ Footer,
32
+ ImageCardGrid,
33
+ Login,
34
+ ImageWithTextSection,
35
+ Slider,
36
+ PhotoGallery,
37
+ Breadcrumbs,
38
+ FAQ
39
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "1.4.65",
3
+ "version": "1.4.67",
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",
@@ -8,27 +8,16 @@ export type BreadcrumbItem = {
8
8
  isCurrent?: boolean;
9
9
  };
10
10
 
11
- type BreadcrumbsProps = {
11
+ export type BreadcrumbsProps = {
12
12
  items: BreadcrumbItem[];
13
- separator?: React.ReactNode;
14
- ariaLabel?: string;
15
13
  noHeader?: boolean;
16
14
  };
17
15
 
18
- export default function Breadcrumbs({
19
- items,
20
- separator = (
21
- <span className="breadcrumb__separator" aria-hidden="true">
22
- /
23
- </span>
24
- ),
25
- ariaLabel = 'Breadcrumb',
26
- noHeader = false
27
- }: BreadcrumbsProps) {
16
+ const Breadcrumbs: React.FC<BreadcrumbsProps> = ({ items, noHeader = false }) => {
28
17
  const lastIndex = items.length - 1;
29
18
 
30
19
  return (
31
- <nav className={`breadcrumb${noHeader ? ' breadcrumb--no-header' : ''}`} aria-label={ariaLabel}>
20
+ <nav className={`breadcrumb${noHeader ? ' breadcrumb--no-header' : ''}`} aria-label="Breadcrumb">
32
21
  <div className="breadcrumb__container">
33
22
  <ol className="breadcrumb__list">
34
23
  {items.map((item, idx) => {
@@ -51,7 +40,11 @@ export default function Breadcrumbs({
51
40
 
52
41
  return (
53
42
  <li key={idx} className="breadcrumb__item">
54
- {idx > 0 && separator}
43
+ {idx > 0 && (
44
+ <span className="breadcrumb__separator" aria-hidden="true">
45
+ /
46
+ </span>
47
+ )}
55
48
 
56
49
  {isCurrent || !item.href ? (
57
50
  <span className="breadcrumb__current" aria-current={isCurrent ? 'page' : undefined}>
@@ -69,4 +62,6 @@ export default function Breadcrumbs({
69
62
  </div>
70
63
  </nav>
71
64
  );
72
- }
65
+ };
66
+
67
+ export default Breadcrumbs;
@@ -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;
package/src/index.ts CHANGED
@@ -10,6 +10,8 @@ import Login from './content/login';
10
10
  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
+ import Breadcrumbs from './content/components/breadcrumb';
14
+ import FAQ from './content/components/faq';
13
15
 
14
16
  export * from './content/navbar/types';
15
17
  export * from './content/header/types';
@@ -21,4 +23,19 @@ export * from './search-results/types';
21
23
  export * from './qsm/types';
22
24
  export * from './shared/types';
23
25
 
24
- export { BookingProduct, BookingWizard, QSM, SearchResults, Navbar, Header, Footer, ImageCardGrid, Login, ImageWithTextSection, Slider, PhotoGallery };
26
+ export {
27
+ BookingProduct,
28
+ BookingWizard,
29
+ QSM,
30
+ SearchResults,
31
+ Navbar,
32
+ Header,
33
+ Footer,
34
+ ImageCardGrid,
35
+ Login,
36
+ ImageWithTextSection,
37
+ Slider,
38
+ PhotoGallery,
39
+ Breadcrumbs,
40
+ FAQ
41
+ };