@qite/tide-booking-component 1.4.107 → 1.4.109

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.
@@ -16756,6 +16756,28 @@ var Icon = function (_a) {
16756
16756
  d: 'M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z'
16757
16757
  })
16758
16758
  );
16759
+ case 'ui-triangle-error':
16760
+ return React__default.createElement(
16761
+ 'svg',
16762
+ {
16763
+ className: ['icon', 'icon--'.concat(name), className]
16764
+ .filter(function (className) {
16765
+ return !isEmpty(className);
16766
+ })
16767
+ .join(' '),
16768
+ width: width,
16769
+ height: height,
16770
+ viewBox: '0 0 512 512',
16771
+ fill: fill !== null && fill !== void 0 ? fill : 'currentColor'
16772
+ },
16773
+ React__default.createElement(HTMLComment, {
16774
+ text: '!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.'
16775
+ }),
16776
+ title && React__default.createElement('title', null, title),
16777
+ React__default.createElement('path', {
16778
+ d: 'M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z'
16779
+ })
16780
+ );
16759
16781
  default:
16760
16782
  return null;
16761
16783
  }
@@ -31756,6 +31778,7 @@ var MobileFilterModal = function () {
31756
31778
  destinationAirport = _b.destinationAirport,
31757
31779
  returnAirport = _b.returnAirport,
31758
31780
  destination = _b.destination;
31781
+ var searchInputRef = useRef(null);
31759
31782
  var _c = useState(''),
31760
31783
  inputValue = _c[0],
31761
31784
  setInputValue = _c[1];
@@ -31772,6 +31795,18 @@ var MobileFilterModal = function () {
31772
31795
  },
31773
31796
  [activeSearchFieldProps]
31774
31797
  );
31798
+ useEffect(
31799
+ function () {
31800
+ if (mobileFilterType !== 'search') return;
31801
+ requestAnimationFrame(function () {
31802
+ var input = searchInputRef.current;
31803
+ if (!input) return;
31804
+ input.focus();
31805
+ input.setSelectionRange(input.value.length, input.value.length);
31806
+ });
31807
+ },
31808
+ [mobileFilterType, activeSearchFieldProps === null || activeSearchFieldProps === void 0 ? void 0 : activeSearchFieldProps.fieldKey]
31809
+ );
31775
31810
  /* ---------------------------------------------------------------- */
31776
31811
  /* Helpers */
31777
31812
  /* ---------------------------------------------------------------- */
@@ -31964,6 +31999,7 @@ var MobileFilterModal = function () {
31964
31999
  'label',
31965
32000
  { className: 'qsm__input-wrapper' },
31966
32001
  React__default.createElement('input', {
32002
+ ref: searchInputRef,
31967
32003
  type: 'text',
31968
32004
  id: 'search',
31969
32005
  value: inputValue,
@@ -31973,7 +32009,6 @@ var MobileFilterModal = function () {
31973
32009
  onChange: function (e) {
31974
32010
  return handleInputChange(e.target.value);
31975
32011
  },
31976
- // onChange={(e) => handleLocationChange(e.target.value)}
31977
32012
  className: 'qsm__input qsm__input--modal qsm__from-to u-ps-2',
31978
32013
  placeholder: activeSearchFieldProps.placeholder
31979
32014
  }),
@@ -32467,7 +32502,6 @@ var ItemPicker$1 = function (_a) {
32467
32502
  isDropdownOpen = _b[0],
32468
32503
  setIsDropdownOpen = _b[1];
32469
32504
  var dropdownRef = useRef(null);
32470
- var toggleButtonRef = useRef(null);
32471
32505
  var handlePick = function (picked, id) {
32472
32506
  setIsDropdownOpen(false);
32473
32507
  onPick(picked, id);
@@ -32489,7 +32523,7 @@ var ItemPicker$1 = function (_a) {
32489
32523
  React__default.createElement('span', { className: 'dropdown__label' }, label),
32490
32524
  React__default.createElement(
32491
32525
  'div',
32492
- { className: 'dropdown' },
32526
+ { className: 'dropdown', ref: dropdownRef },
32493
32527
  React__default.createElement(
32494
32528
  'button',
32495
32529
  {
@@ -32498,8 +32532,7 @@ var ItemPicker$1 = function (_a) {
32498
32532
  return setIsDropdownOpen(function (prev) {
32499
32533
  return !prev;
32500
32534
  });
32501
- },
32502
- ref: toggleButtonRef
32535
+ }
32503
32536
  },
32504
32537
  React__default.createElement('span', null, selection || placeholder),
32505
32538
  React__default.createElement('span', { className: 'arrow' }, '\u25BE')
@@ -32932,58 +32965,16 @@ var QSMContainer = function () {
32932
32965
  );
32933
32966
  })
32934
32967
  ),
32935
- React__default.createElement(
32936
- 'div',
32937
- { className: 'qsm__filter' },
32938
- (qsmType === build.PortalQsmType.Accommodation ||
32939
- qsmType === build.PortalQsmType.AccommodationAndFlight ||
32940
- qsmType === build.PortalQsmType.GroupTour) &&
32941
- React__default.createElement(
32942
- 'div',
32943
- { className: 'radiobutton-group qsm__filter__inputgroup' },
32944
- React__default.createElement(
32945
- 'div',
32946
- { className: 'radiobutton' },
32947
- React__default.createElement(
32948
- 'label',
32949
- { className: 'radiobutton__label' },
32950
- React__default.createElement('input', {
32951
- type: 'radio',
32952
- name: 'numberOfAccommodations',
32953
- // onChange={handleMainBookerChange}
32954
- // onBlur={formik.handleBlur}
32955
- value: '',
32956
- checked: true,
32957
- readOnly: true,
32958
- className: 'radiobutton__input'
32959
- }),
32960
- React__default.createElement('span', null, translations.QSM.ONE_ACCOMMODATION)
32961
- )
32962
- ),
32968
+ !isMobile &&
32969
+ React__default.createElement(
32970
+ 'div',
32971
+ { className: 'qsm__filter' },
32972
+ (qsmType === build.PortalQsmType.Accommodation ||
32973
+ qsmType === build.PortalQsmType.AccommodationAndFlight ||
32974
+ qsmType === build.PortalQsmType.GroupTour) &&
32963
32975
  React__default.createElement(
32964
32976
  'div',
32965
- { className: 'radiobutton' },
32966
- React__default.createElement(
32967
- 'label',
32968
- { className: 'radiobutton__label' },
32969
- React__default.createElement('input', {
32970
- type: 'radio',
32971
- name: 'numberOfAccommodations',
32972
- // onChange={handleMainBookerChange}
32973
- // onBlur={formik.handleBlur}
32974
- value: '',
32975
- className: 'radiobutton__input',
32976
- disabled: true
32977
- }),
32978
- React__default.createElement('span', null, translations.QSM.MULTIPLE_ACCOMMODATIONS)
32979
- )
32980
- )
32981
- ),
32982
- qsmType === build.PortalQsmType.Flight &&
32983
- React__default.createElement(
32984
- 'div',
32985
- { className: 'radiobutton-group qsm__filter__inputgroup' },
32986
- allowOneWay &&
32977
+ { className: 'radiobutton-group qsm__filter__inputgroup' },
32987
32978
  React__default.createElement(
32988
32979
  'div',
32989
32980
  { className: 'radiobutton' },
@@ -32992,18 +32983,17 @@ var QSMContainer = function () {
32992
32983
  { className: 'radiobutton__label' },
32993
32984
  React__default.createElement('input', {
32994
32985
  type: 'radio',
32995
- name: 'tripType',
32996
- value: 'oneway',
32997
- checked: tripType === 'oneway',
32998
- onChange: function () {
32999
- return handleTripTypeChange('oneway');
33000
- },
32986
+ name: 'numberOfAccommodations',
32987
+ // onChange={handleMainBookerChange}
32988
+ // onBlur={formik.handleBlur}
32989
+ value: '',
32990
+ checked: true,
32991
+ readOnly: true,
33001
32992
  className: 'radiobutton__input'
33002
32993
  }),
33003
- React__default.createElement('span', null, translations.QSM.ONEWAY)
32994
+ React__default.createElement('span', null, translations.QSM.ONE_ACCOMMODATION)
33004
32995
  )
33005
32996
  ),
33006
- allowRoundtrip &&
33007
32997
  React__default.createElement(
33008
32998
  'div',
33009
32999
  { className: 'radiobutton' },
@@ -33012,58 +33002,102 @@ var QSMContainer = function () {
33012
33002
  { className: 'radiobutton__label' },
33013
33003
  React__default.createElement('input', {
33014
33004
  type: 'radio',
33015
- name: 'tripType',
33016
- value: 'roundtrip',
33017
- checked: tripType === 'roundtrip',
33018
- onChange: function () {
33019
- return handleTripTypeChange('roundtrip');
33020
- },
33021
- className: 'radiobutton__input'
33005
+ name: 'numberOfAccommodations',
33006
+ // onChange={handleMainBookerChange}
33007
+ // onBlur={formik.handleBlur}
33008
+ value: '',
33009
+ className: 'radiobutton__input',
33010
+ disabled: true
33022
33011
  }),
33023
- React__default.createElement('span', null, translations.QSM.ROUNDTRIP)
33012
+ React__default.createElement('span', null, translations.QSM.MULTIPLE_ACCOMMODATIONS)
33024
33013
  )
33025
- ),
33026
- allowOpenJaw &&
33027
- React__default.createElement(
33028
- 'div',
33029
- { className: 'radiobutton' },
33014
+ )
33015
+ ),
33016
+ qsmType === build.PortalQsmType.Flight &&
33017
+ React__default.createElement(
33018
+ 'div',
33019
+ { className: 'radiobutton-group qsm__filter__inputgroup' },
33020
+ allowOneWay &&
33030
33021
  React__default.createElement(
33031
- 'label',
33032
- { className: 'radiobutton__label' },
33033
- React__default.createElement('input', {
33034
- type: 'radio',
33035
- name: 'tripType',
33036
- value: 'openjaw',
33037
- checked: tripType === 'openjaw',
33038
- onChange: function () {
33039
- return handleTripTypeChange('openjaw');
33040
- },
33041
- className: 'radiobutton__input'
33042
- }),
33043
- React__default.createElement('span', null, translations.QSM.OPENJAW)
33022
+ 'div',
33023
+ { className: 'radiobutton' },
33024
+ React__default.createElement(
33025
+ 'label',
33026
+ { className: 'radiobutton__label' },
33027
+ React__default.createElement('input', {
33028
+ type: 'radio',
33029
+ name: 'tripType',
33030
+ value: 'oneway',
33031
+ checked: tripType === 'oneway',
33032
+ onChange: function () {
33033
+ return handleTripTypeChange('oneway');
33034
+ },
33035
+ className: 'radiobutton__input'
33036
+ }),
33037
+ React__default.createElement('span', null, translations.QSM.ONEWAY)
33038
+ )
33039
+ ),
33040
+ allowRoundtrip &&
33041
+ React__default.createElement(
33042
+ 'div',
33043
+ { className: 'radiobutton' },
33044
+ React__default.createElement(
33045
+ 'label',
33046
+ { className: 'radiobutton__label' },
33047
+ React__default.createElement('input', {
33048
+ type: 'radio',
33049
+ name: 'tripType',
33050
+ value: 'roundtrip',
33051
+ checked: tripType === 'roundtrip',
33052
+ onChange: function () {
33053
+ return handleTripTypeChange('roundtrip');
33054
+ },
33055
+ className: 'radiobutton__input'
33056
+ }),
33057
+ React__default.createElement('span', null, translations.QSM.ROUNDTRIP)
33058
+ )
33059
+ ),
33060
+ allowOpenJaw &&
33061
+ React__default.createElement(
33062
+ 'div',
33063
+ { className: 'radiobutton' },
33064
+ React__default.createElement(
33065
+ 'label',
33066
+ { className: 'radiobutton__label' },
33067
+ React__default.createElement('input', {
33068
+ type: 'radio',
33069
+ name: 'tripType',
33070
+ value: 'openjaw',
33071
+ checked: tripType === 'openjaw',
33072
+ onChange: function () {
33073
+ return handleTripTypeChange('openjaw');
33074
+ },
33075
+ className: 'radiobutton__input'
33076
+ }),
33077
+ React__default.createElement('span', null, translations.QSM.OPENJAW)
33078
+ )
33044
33079
  )
33045
- )
33046
- ),
33047
- React__default.createElement(
33048
- 'div',
33049
- { className: 'qsm__filter__classgroup' },
33050
- qsmType !== build.PortalQsmType.Accommodation &&
33051
- qsmType !== build.PortalQsmType.Car &&
33052
- qsmType !== build.PortalQsmType.Ticket &&
33053
- qsmType !== build.PortalQsmType.Cruise &&
33054
- qsmType !== build.PortalQsmType.Transfer &&
33055
- qsmType !== build.PortalQsmType.GroupTour &&
33056
- askTravelClass &&
33057
- React__default.createElement(TravelClassPicker, null),
33058
- qsmType !== build.PortalQsmType.Multidestination &&
33059
- qsmType !== build.PortalQsmType.Car &&
33060
- qsmType !== build.PortalQsmType.Flight &&
33061
- qsmType !== build.PortalQsmType.Transfer &&
33062
- askTravelType &&
33063
- React__default.createElement(TravelTypePicker, null),
33064
- askNationality && React__default.createElement(TravelNationalityPicker, null)
33065
- )
33066
- ),
33080
+ ),
33081
+ React__default.createElement(
33082
+ 'div',
33083
+ { className: 'qsm__filter__classgroup' },
33084
+ qsmType !== build.PortalQsmType.Accommodation &&
33085
+ qsmType !== build.PortalQsmType.Car &&
33086
+ qsmType !== build.PortalQsmType.Ticket &&
33087
+ qsmType !== build.PortalQsmType.Cruise &&
33088
+ qsmType !== build.PortalQsmType.Transfer &&
33089
+ qsmType !== build.PortalQsmType.GroupTour &&
33090
+ askTravelClass &&
33091
+ React__default.createElement(TravelClassPicker, null),
33092
+ qsmType !== build.PortalQsmType.Multidestination &&
33093
+ qsmType !== build.PortalQsmType.Car &&
33094
+ qsmType !== build.PortalQsmType.Flight &&
33095
+ qsmType !== build.PortalQsmType.Transfer &&
33096
+ askTravelType &&
33097
+ React__default.createElement(TravelTypePicker, null),
33098
+ askNationality && React__default.createElement(TravelNationalityPicker, null)
33099
+ )
33100
+ ),
33067
33101
  React__default.createElement(
33068
33102
  'div',
33069
33103
  { className: 'qsm__input-group' },
@@ -33082,6 +33116,139 @@ var QSMContainer = function () {
33082
33116
  React__default.createElement(SearchInputGroup, { fieldConfig: destination }),
33083
33117
  React__default.createElement(Dates, { value: dateRange, onChange: handleDateChange }),
33084
33118
  askTravelers && React__default.createElement(TravelInputGroup, null),
33119
+ isMobile &&
33120
+ React__default.createElement(
33121
+ 'div',
33122
+ { className: 'qsm__filter' },
33123
+ (qsmType === build.PortalQsmType.Accommodation ||
33124
+ qsmType === build.PortalQsmType.AccommodationAndFlight ||
33125
+ qsmType === build.PortalQsmType.GroupTour) &&
33126
+ React__default.createElement(
33127
+ 'div',
33128
+ { className: 'radiobutton-group qsm__filter__inputgroup' },
33129
+ React__default.createElement(
33130
+ 'div',
33131
+ { className: 'radiobutton' },
33132
+ React__default.createElement(
33133
+ 'label',
33134
+ { className: 'radiobutton__label' },
33135
+ React__default.createElement('input', {
33136
+ type: 'radio',
33137
+ name: 'numberOfAccommodations',
33138
+ // onChange={handleMainBookerChange}
33139
+ // onBlur={formik.handleBlur}
33140
+ value: '',
33141
+ checked: true,
33142
+ readOnly: true,
33143
+ className: 'radiobutton__input'
33144
+ }),
33145
+ React__default.createElement('span', null, translations.QSM.ONE_ACCOMMODATION)
33146
+ )
33147
+ ),
33148
+ React__default.createElement(
33149
+ 'div',
33150
+ { className: 'radiobutton' },
33151
+ React__default.createElement(
33152
+ 'label',
33153
+ { className: 'radiobutton__label' },
33154
+ React__default.createElement('input', {
33155
+ type: 'radio',
33156
+ name: 'numberOfAccommodations',
33157
+ // onChange={handleMainBookerChange}
33158
+ // onBlur={formik.handleBlur}
33159
+ value: '',
33160
+ className: 'radiobutton__input',
33161
+ disabled: true
33162
+ }),
33163
+ React__default.createElement('span', null, translations.QSM.MULTIPLE_ACCOMMODATIONS)
33164
+ )
33165
+ )
33166
+ ),
33167
+ qsmType === build.PortalQsmType.Flight &&
33168
+ React__default.createElement(
33169
+ 'div',
33170
+ { className: 'radiobutton-group qsm__filter__inputgroup' },
33171
+ allowOneWay &&
33172
+ React__default.createElement(
33173
+ 'div',
33174
+ { className: 'radiobutton' },
33175
+ React__default.createElement(
33176
+ 'label',
33177
+ { className: 'radiobutton__label' },
33178
+ React__default.createElement('input', {
33179
+ type: 'radio',
33180
+ name: 'tripType',
33181
+ value: 'oneway',
33182
+ checked: tripType === 'oneway',
33183
+ onChange: function () {
33184
+ return handleTripTypeChange('oneway');
33185
+ },
33186
+ className: 'radiobutton__input'
33187
+ }),
33188
+ React__default.createElement('span', null, translations.QSM.ONEWAY)
33189
+ )
33190
+ ),
33191
+ allowRoundtrip &&
33192
+ React__default.createElement(
33193
+ 'div',
33194
+ { className: 'radiobutton' },
33195
+ React__default.createElement(
33196
+ 'label',
33197
+ { className: 'radiobutton__label' },
33198
+ React__default.createElement('input', {
33199
+ type: 'radio',
33200
+ name: 'tripType',
33201
+ value: 'roundtrip',
33202
+ checked: tripType === 'roundtrip',
33203
+ onChange: function () {
33204
+ return handleTripTypeChange('roundtrip');
33205
+ },
33206
+ className: 'radiobutton__input'
33207
+ }),
33208
+ React__default.createElement('span', null, translations.QSM.ROUNDTRIP)
33209
+ )
33210
+ ),
33211
+ allowOpenJaw &&
33212
+ React__default.createElement(
33213
+ 'div',
33214
+ { className: 'radiobutton' },
33215
+ React__default.createElement(
33216
+ 'label',
33217
+ { className: 'radiobutton__label' },
33218
+ React__default.createElement('input', {
33219
+ type: 'radio',
33220
+ name: 'tripType',
33221
+ value: 'openjaw',
33222
+ checked: tripType === 'openjaw',
33223
+ onChange: function () {
33224
+ return handleTripTypeChange('openjaw');
33225
+ },
33226
+ className: 'radiobutton__input'
33227
+ }),
33228
+ React__default.createElement('span', null, translations.QSM.OPENJAW)
33229
+ )
33230
+ )
33231
+ ),
33232
+ React__default.createElement(
33233
+ 'div',
33234
+ { className: 'qsm__filter__classgroup' },
33235
+ qsmType !== build.PortalQsmType.Accommodation &&
33236
+ qsmType !== build.PortalQsmType.Car &&
33237
+ qsmType !== build.PortalQsmType.Ticket &&
33238
+ qsmType !== build.PortalQsmType.Cruise &&
33239
+ qsmType !== build.PortalQsmType.Transfer &&
33240
+ qsmType !== build.PortalQsmType.GroupTour &&
33241
+ askTravelClass &&
33242
+ React__default.createElement(TravelClassPicker, null),
33243
+ qsmType !== build.PortalQsmType.Multidestination &&
33244
+ qsmType !== build.PortalQsmType.Car &&
33245
+ qsmType !== build.PortalQsmType.Flight &&
33246
+ qsmType !== build.PortalQsmType.Transfer &&
33247
+ askTravelType &&
33248
+ React__default.createElement(TravelTypePicker, null),
33249
+ askNationality && React__default.createElement(TravelNationalityPicker, null)
33250
+ )
33251
+ ),
33085
33252
  React__default.createElement(
33086
33253
  'button',
33087
33254
  { type: 'button', className: 'cta', onClick: handleSubmit },
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ type ErrorProps = {
3
+ message?: string;
4
+ };
5
+ declare const Error: React.FC<ErrorProps>;
6
+ export default Error;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "1.4.107",
3
+ "version": "1.4.109",
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",
@@ -65,7 +65,6 @@ interface ImageWithTextSectionProps {
65
65
 
66
66
  export const ImageWithTextSection: React.FC<ImageWithTextSectionProps> = ({ variant, sectionTitle, hasBackground = true, cards }) => {
67
67
  const className = ['image-with-text', hasBackground && 'image-with-text--background'].filter(Boolean).join(' ');
68
- console.log('variant', variant);
69
68
  return (
70
69
  <div className={className}>
71
70
  <div className="image-with-text__container">
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import Icon from '../../shared/components/icon';
3
+
4
+ type ErrorProps = {
5
+ message?: string;
6
+ };
7
+ const Error: React.FC<ErrorProps> = ({ message }) => {
8
+ return (
9
+ <section className="error">
10
+ <div className="error__container">
11
+ <div className="error__card">
12
+ <div className="error__icon">
13
+ <Icon name="ui-triangle-error" width={20} height={20} />
14
+ </div>
15
+ <h1 className="error__title">Something went wrong</h1>
16
+ <p className="error__message">{message || 'Sorry, something went wrong. Please try again later.'}</p>
17
+
18
+ <a href="/" className="cta cta--primary error__link">
19
+ Back to home
20
+ </a>
21
+ </div>
22
+ </div>
23
+ </section>
24
+ );
25
+ };
26
+
27
+ export default Error;