@skyscanner/backpack-web 42.27.3 → 43.0.0-dev-v28222480725.1

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.
Files changed (115) hide show
  1. package/bpk-component-accordion/src/BpkAccordionItem.d.ts +1 -1
  2. package/bpk-component-accordion/src/withAccordionItemState.d.ts +2 -7
  3. package/bpk-component-accordion/src/withAccordionItemState.js +4 -6
  4. package/bpk-component-accordion/src/withSingleItemAccordionState.d.ts +1 -1
  5. package/bpk-component-aria-live/src/BpkAriaLive.d.ts +1 -1
  6. package/bpk-component-aria-live/src/BpkAriaLive.story-helpers.d.ts +2 -2
  7. package/bpk-component-autosuggest/src/BpkAutosuggestV2/BpkAutosuggest.d.ts +4 -4
  8. package/bpk-component-badge/src/BpkBadge.module.css +1 -1
  9. package/bpk-component-banner-alert/src/AnimateAndFade.d.ts +4 -7
  10. package/bpk-component-banner-alert/src/AnimateAndFade.js +14 -10
  11. package/bpk-component-banner-alert/src/withBannerAlertState.d.ts +0 -10
  12. package/bpk-component-banner-alert/src/withBannerAlertState.js +3 -13
  13. package/bpk-component-barchart/src/BpkBarchart.js +24 -41
  14. package/bpk-component-barchart/src/BpkBarchartBar.js +7 -16
  15. package/bpk-component-barchart/src/BpkBarchartBars.js +6 -14
  16. package/bpk-component-barchart/src/BpkChartAxis.js +5 -12
  17. package/bpk-component-barchart/src/BpkChartDataTable.js +1 -4
  18. package/bpk-component-barchart/src/BpkChartGridLines.js +3 -8
  19. package/bpk-component-calendar/index.d.ts +2 -2
  20. package/bpk-component-calendar/index.js +2 -2
  21. package/bpk-component-calendar/src/BpkCalendarContainer.d.ts +3 -28
  22. package/bpk-component-calendar/src/BpkCalendarContainer.js +47 -34
  23. package/bpk-component-calendar/src/BpkCalendarDate.d.ts +0 -1
  24. package/bpk-component-calendar/src/BpkCalendarDate.js +32 -31
  25. package/bpk-component-calendar/src/BpkCalendarGrid.d.ts +13 -14
  26. package/bpk-component-calendar/src/BpkCalendarGrid.js +28 -37
  27. package/bpk-component-calendar/src/BpkCalendarGridHeader.d.ts +0 -4
  28. package/bpk-component-calendar/src/BpkCalendarGridHeader.js +2 -6
  29. package/bpk-component-calendar/src/BpkCalendarGridTransition.d.ts +0 -5
  30. package/bpk-component-calendar/src/BpkCalendarGridTransition.js +0 -5
  31. package/bpk-component-calendar/src/BpkCalendarWeek.d.ts +0 -1
  32. package/bpk-component-calendar/src/BpkCalendarWeek.js +19 -27
  33. package/bpk-component-calendar/src/custom-proptypes.d.ts +1 -1
  34. package/bpk-component-card-list/src/BpkCardList.js +0 -3
  35. package/bpk-component-card-list/src/BpkCardListRowRail/BpkCardListCarousel.js +1 -3
  36. package/bpk-component-card-list/src/BpkCardListRowRail/BpkCardListRowRailContainer.js +1 -14
  37. package/bpk-component-card-list/src/BpkCardListRowRail/utils.d.ts +1 -2
  38. package/bpk-component-card-list/src/BpkCardListRowRail/utils.js +0 -21
  39. package/bpk-component-card-list/src/common-types.d.ts +4 -7
  40. package/bpk-component-chatbot-input/src/hooks/useChatbotInput.d.ts +1 -1
  41. package/bpk-component-chatbot-input/src/hooks/useTextAreaAutoResize.d.ts +1 -1
  42. package/bpk-component-datepicker/src/BpkDatepicker.d.ts +6 -192
  43. package/bpk-component-datepicker/src/BpkDatepicker.js +47 -53
  44. package/bpk-component-dialog/src/BpkDialogInner.d.ts +0 -7
  45. package/bpk-component-drawer/src/BpkDrawerContent.d.ts +2 -2
  46. package/bpk-component-drawer/src/BpkDrawerContent.js +13 -1
  47. package/bpk-component-fieldset/src/BpkFieldset.d.ts +1 -1
  48. package/bpk-component-floating-notification/src/BpkFloatingNotification.js +4 -1
  49. package/bpk-component-grid-toggle/src/BpkGridToggle.js +9 -7
  50. package/bpk-component-image/src/BpkBackgroundImage.d.ts +1 -9
  51. package/bpk-component-image/src/BpkBackgroundImage.js +18 -18
  52. package/bpk-component-image/src/BpkImage.d.ts +1 -8
  53. package/bpk-component-image/src/BpkImage.js +10 -18
  54. package/bpk-component-image/src/withLazyLoading.d.ts +0 -4
  55. package/bpk-component-image/src/withLazyLoading.js +2 -6
  56. package/bpk-component-infinite-scroll/src/withInfiniteScroll.js +6 -8
  57. package/bpk-component-info-banner/src/AnimateAndFade.d.ts +4 -7
  58. package/bpk-component-info-banner/src/AnimateAndFade.js +14 -10
  59. package/bpk-component-info-banner/src/withBannerAlertState.d.ts +0 -10
  60. package/bpk-component-info-banner/src/withBannerAlertState.js +3 -13
  61. package/bpk-component-input/index.d.ts +2 -2
  62. package/bpk-component-input/index.js +2 -2
  63. package/bpk-component-input/src/BpkInput.d.ts +0 -13
  64. package/bpk-component-input/src/BpkInput.js +13 -12
  65. package/bpk-component-input/src/common-types.d.ts +0 -32
  66. package/bpk-component-input/src/common-types.js +1 -56
  67. package/bpk-component-input/src/withOpenEvents.d.ts +1 -12
  68. package/bpk-component-input/src/withOpenEvents.js +2 -14
  69. package/bpk-component-layout/src/types.d.ts +19 -35
  70. package/bpk-component-map/src/BpkBasicMapMarker.d.ts +1 -8
  71. package/bpk-component-map/src/BpkBasicMapMarker.js +0 -6
  72. package/bpk-component-map/src/BpkIconMarker.js +4 -10
  73. package/bpk-component-map/src/BpkIconMarkerBackground.js +3 -8
  74. package/bpk-component-map/src/BpkMap.js +14 -30
  75. package/bpk-component-map/src/withGoogleMapsScript.js +4 -8
  76. package/bpk-component-mobile-scroll-container/src/BpkMobileScrollContainer.d.ts +0 -1
  77. package/bpk-component-mobile-scroll-container/src/BpkMobileScrollContainer.js +1 -5
  78. package/bpk-component-modal/index.d.ts +1 -2
  79. package/bpk-component-modal/index.js +1 -3
  80. package/bpk-component-navigation-bar/src/BpkNavigationBar.d.ts +2 -2
  81. package/bpk-component-phone-input/src/BpkPhoneInput.js +6 -14
  82. package/bpk-component-popover/src/BpkPopover.d.ts +1 -1
  83. package/bpk-component-popover/src/BpkPopover.js +1 -1
  84. package/bpk-component-progress/src/BpkProgress.d.ts +0 -8
  85. package/bpk-component-progress/src/BpkProgress.js +10 -16
  86. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendar.d.ts +0 -14
  87. package/bpk-component-section-list/src/BpkSectionListItem.js +4 -10
  88. package/bpk-component-section-list/src/BpkSectionListSection.js +1 -4
  89. package/bpk-component-segmented-control/src/BpkSegmentedControl.d.ts +1 -1
  90. package/bpk-component-select/src/BpkSelect.d.ts +1 -1
  91. package/bpk-component-slider/src/BpkSlider.js +1 -1
  92. package/bpk-component-spinner/src/SpinnerLayout.story-helpers.d.ts +1 -7
  93. package/bpk-component-spinner/src/SpinnerLayout.story-helpers.js +0 -4
  94. package/bpk-component-split-input/src/BpkInputField.d.ts +2 -6
  95. package/bpk-component-split-input/src/BpkInputField.js +2 -6
  96. package/bpk-component-split-input/src/BpkSplitInput.d.ts +0 -6
  97. package/bpk-component-split-input/src/BpkSplitInput.js +7 -13
  98. package/bpk-component-star-rating/src/withInteractiveStarRatingState.d.ts +0 -3
  99. package/bpk-component-star-rating/src/withInteractiveStarRatingState.js +0 -3
  100. package/bpk-component-ticket/src/BpkTicket.js +6 -14
  101. package/bpk-mixins/_badges.scss +3 -3
  102. package/bpk-react-utils/index.d.ts +3 -1
  103. package/bpk-react-utils/src/BpkDialogWrapper/BpkDialogWrapper.js +1 -0
  104. package/bpk-react-utils/src/Portal.d.ts +10 -22
  105. package/bpk-react-utils/src/Portal.js +22 -19
  106. package/bpk-react-utils/src/TransitionInitialMount.d.ts +4 -2
  107. package/bpk-react-utils/src/TransitionInitialMount.js +51 -14
  108. package/bpk-scrim-utils/index.d.ts +0 -7
  109. package/bpk-scrim-utils/src/withScrim.d.ts +0 -7
  110. package/bpk-scrim-utils/src/withScrim.js +10 -15
  111. package/bpk-stylesheets/base.css +1 -1
  112. package/bpk-stylesheets/theme-backpack-dark.css +4 -0
  113. package/bpk-stylesheets/theme-backpack-light.css +7 -3
  114. package/package.json +3 -3
  115. package/bpk-component-modal/src/legacy-prop-types.js +0 -74
@@ -16,7 +16,6 @@
16
16
  * limitations under the License.
17
17
  */
18
18
 
19
- import PropTypes from 'prop-types';
20
19
  import { Children } from 'react';
21
20
  import { cssModules } from "../../bpk-react-utils";
22
21
  import SPINNER_TYPES from "./spinnerTypes";
@@ -41,7 +40,4 @@ const SpinnerLayout = props => {
41
40
  })
42
41
  });
43
42
  };
44
- SpinnerLayout.propTypes = {
45
- children: PropTypes.node.isRequired
46
- };
47
43
  export default SpinnerLayout;
@@ -3,17 +3,13 @@ export type Props = DefaultProps;
3
3
  type DefaultProps = {
4
4
  id: string;
5
5
  label: string;
6
- value: string | number;
6
+ value?: string | number;
7
7
  focus: boolean;
8
8
  index: number;
9
- name: string;
9
+ name?: string;
10
10
  [key: string]: any;
11
11
  };
12
12
  declare class BpkInputField extends PureComponent<Props> {
13
- static defaultProps: {
14
- value: string;
15
- name: string;
16
- };
17
13
  componentDidUpdate(prevProps: Props): void;
18
14
  private input;
19
15
  render(): import("react/jsx-runtime").JSX.Element;
@@ -23,10 +23,6 @@ import STYLES from "./BpkInputField.module.css";
23
23
  import { jsx as _jsx } from "react/jsx-runtime";
24
24
  const getClassName = cssModules(STYLES);
25
25
  class BpkInputField extends PureComponent {
26
- static defaultProps = {
27
- value: '',
28
- name: ''
29
- };
30
26
  componentDidUpdate(prevProps) {
31
27
  const {
32
28
  focus
@@ -43,8 +39,8 @@ class BpkInputField extends PureComponent {
43
39
  id,
44
40
  index,
45
41
  label,
46
- name,
47
- value,
42
+ name = '',
43
+ value = '',
48
44
  ...rest
49
45
  } = this.props;
50
46
  return /*#__PURE__*/_jsx("div", {
@@ -17,12 +17,6 @@ interface State {
17
17
  inputValue: string[] | number[];
18
18
  }
19
19
  declare class BpkSplitInput extends Component<Props, State> {
20
- static defaultProps: {
21
- type: "number";
22
- inputLength: number;
23
- large: boolean;
24
- placeholder: string;
25
- };
26
20
  constructor(props: Props);
27
21
  onInputChange: (input: string[] | number[]) => void;
28
22
  updateInputValue: (value: string | number) => void;
@@ -24,12 +24,6 @@ import STYLES from "./BpkSplitInput.module.css";
24
24
  import { jsx as _jsx } from "react/jsx-runtime";
25
25
  const getClassName = cssModules(STYLES);
26
26
  class BpkSplitInput extends Component {
27
- static defaultProps = {
28
- type: INPUT_TYPES.number,
29
- inputLength: 4,
30
- large: true,
31
- placeholder: ''
32
- };
33
27
  constructor(props) {
34
28
  super(props);
35
29
  this.state = {
@@ -77,14 +71,14 @@ class BpkSplitInput extends Component {
77
71
  }
78
72
  return true;
79
73
  };
80
- isNumeric = () => this.props.type === INPUT_TYPES.number;
74
+ isNumeric = () => (this.props.type ?? INPUT_TYPES.number) === INPUT_TYPES.number;
81
75
  isInputValid = value => {
82
76
  const isTypeValid = this.isNumeric() ? /^\d$/.test(`${value}`) : typeof value === 'string';
83
77
  return isTypeValid && `${value}`.trim().length === 1;
84
78
  };
85
79
  focusInput = inputIndex => {
86
80
  const {
87
- inputLength
81
+ inputLength = 4
88
82
  } = this.props;
89
83
  const focusedInput = Math.max(Math.min(inputLength - 1, inputIndex), 0);
90
84
  this.setState({
@@ -106,7 +100,7 @@ class BpkSplitInput extends Component {
106
100
  handleOnPaste = e => {
107
101
  e.preventDefault();
108
102
  const {
109
- inputLength
103
+ inputLength = 4
110
104
  } = this.props;
111
105
  const {
112
106
  focusedInput,
@@ -170,12 +164,12 @@ class BpkSplitInput extends Component {
170
164
  } = this.state;
171
165
  const {
172
166
  id,
173
- inputLength,
167
+ inputLength = 4,
174
168
  label,
175
- large,
169
+ large = true,
176
170
  name,
177
- placeholder,
178
- type,
171
+ placeholder = '',
172
+ type = INPUT_TYPES.number,
179
173
  ...rest
180
174
  } = this.props;
181
175
  const inputs = [];
@@ -34,9 +34,6 @@ declare const withInteractiveStarRatingState: <P extends object>(InteractiveStar
34
34
  UNSAFE_componentWillUpdate?(nextProps: Readonly<P & WithInteractiveStarRatingStateProps>, nextState: Readonly<State>, nextContext: any): void;
35
35
  };
36
36
  displayName: string;
37
- defaultProps: {
38
- onRatingSelect: () => null;
39
- };
40
37
  contextType?: import("react").Context<any> | undefined;
41
38
  };
42
39
  export default withInteractiveStarRatingState;
@@ -21,9 +21,6 @@ import { wrapDisplayName } from "../../bpk-react-utils";
21
21
  import { jsx as _jsx } from "react/jsx-runtime";
22
22
  const withInteractiveStarRatingState = InteractiveStarRating => {
23
23
  class EnhancedComponent extends Component {
24
- static defaultProps = {
25
- onRatingSelect: () => null
26
- };
27
24
  constructor(props) {
28
25
  super(props);
29
26
  this.state = {
@@ -28,13 +28,13 @@ const getClassName = cssModules(STYLES);
28
28
  const BpkTicket = props => {
29
29
  const {
30
30
  children,
31
- className,
32
- href,
33
- padded,
31
+ className = null,
32
+ href = null,
33
+ padded = true,
34
34
  stub,
35
- stubClassName,
36
- stubProps,
37
- vertical,
35
+ stubClassName = null,
36
+ stubProps = {},
37
+ vertical = false,
38
38
  ...rest
39
39
  } = props;
40
40
  const classNames = getClassName('bpk-ticket', className, vertical && 'bpk-ticket--vertical');
@@ -94,12 +94,4 @@ BpkTicket.propTypes = {
94
94
  stubClassName: PropTypes.string,
95
95
  stubProps: PropTypes.object // eslint-disable-line react/forbid-prop-types
96
96
  };
97
- BpkTicket.defaultProps = {
98
- className: null,
99
- href: null,
100
- padded: true,
101
- vertical: false,
102
- stubClassName: null,
103
- stubProps: {}
104
- };
105
97
  export default BpkTicket;
@@ -45,11 +45,11 @@
45
45
  tokens.$bpk-border-radius-xs
46
46
  );
47
47
  @include typography.bpk-text;
48
- @include typography.bpk-footnote;
48
+ @include typography.bpk-caption;
49
49
  @include utils.bpk-themeable-property(
50
50
  font-size,
51
51
  --bpk-badge-font-size,
52
- tokens.$bpk-font-size-sm
52
+ tokens.$bpk-font-size-xs
53
53
  );
54
54
  @include utils.bpk-themeable-property(
55
55
  font-weight,
@@ -59,7 +59,7 @@
59
59
  @include utils.bpk-themeable-property(
60
60
  line-height,
61
61
  --bpk-badge-line-height,
62
- tokens.$bpk-line-height-sm
62
+ tokens.$bpk-line-height-xs
63
63
  );
64
64
  }
65
65
 
@@ -19,7 +19,9 @@ declare const _default: {
19
19
  appearClassName: string;
20
20
  appearActiveClassName: string;
21
21
  transitionTimeout: number;
22
- children: string | import("react").ReactNode;
22
+ children: import("react").ReactElement<{
23
+ ref?: import("react").Ref<HTMLElement>;
24
+ }>;
23
25
  }) => import("react/jsx-runtime").JSX.Element;
24
26
  cssModules: (styles?: {
25
27
  [key: string]: any;
@@ -109,6 +109,7 @@ export const BpkDialogWrapper = ({
109
109
  className: getClassName('bpk-dialog-wrapper--backdrop'),
110
110
  "data-open": isOpen
111
111
  }), /*#__PURE__*/_jsx(CSSTransition, {
112
+ nodeRef: ref,
112
113
  classNames: transitionClassNames,
113
114
  in: !exiting,
114
115
  appear: !exiting,
@@ -4,18 +4,18 @@ type InteractionEvents = TouchEvent | MouseEvent | KeyboardEvent;
4
4
  type Props = {
5
5
  children: string | ReactNode;
6
6
  isOpen: boolean;
7
- beforeClose: ((arg0: () => void) => void) | null | undefined;
8
- className: string | null | undefined;
9
- onClose: (arg0: InteractionEvents, arg1: {
7
+ beforeClose?: ((arg0: () => void) => void) | null | undefined;
8
+ className?: string | null | undefined;
9
+ onClose?: (arg0: InteractionEvents, arg1: {
10
10
  source: 'ESCAPE' | 'DOCUMENT_CLICK';
11
11
  }) => void;
12
- onOpen: (arg0: HTMLElement, arg1?: HTMLElement | null | undefined) => void;
13
- onRender: (arg0: HTMLElement | null | undefined, arg1: HTMLElement | null | undefined) => void;
14
- style: {} | null | undefined;
15
- renderTarget: null | HTMLElement | (() => null | HTMLElement);
16
- target: null | HTMLElement | JSX.Element | (() => HTMLElement);
17
- targetRef: ((arg0: null | Element | undefined) => void) | null | undefined;
18
- closeOnEscPressed: boolean;
12
+ onOpen?: (arg0: HTMLElement, arg1?: HTMLElement | null | undefined) => void;
13
+ onRender?: (arg0: HTMLElement | null | undefined, arg1: HTMLElement | null | undefined) => void;
14
+ style?: {} | null | undefined;
15
+ renderTarget?: null | HTMLElement | (() => null | HTMLElement);
16
+ target?: null | HTMLElement | JSX.Element | (() => HTMLElement);
17
+ targetRef?: ((arg0: null | Element | undefined) => void) | null | undefined;
18
+ closeOnEscPressed?: boolean;
19
19
  };
20
20
  type State = {
21
21
  isVisible: boolean;
@@ -23,18 +23,6 @@ type State = {
23
23
  declare class Portal extends Component<Props, State> {
24
24
  portalElement: null | HTMLDivElement;
25
25
  shouldClose: boolean;
26
- static defaultProps: {
27
- beforeClose: null;
28
- className: null;
29
- onClose: () => null;
30
- onOpen: () => null;
31
- onRender: () => null;
32
- style: null;
33
- renderTarget: null;
34
- target: null;
35
- targetRef: null;
36
- closeOnEscPressed: boolean;
37
- };
38
26
  constructor(props: Props);
39
27
  componentDidMount(): void;
40
28
  componentDidUpdate(prevProps: Props): void;
@@ -25,19 +25,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
25
25
  const KEYCODES = {
26
26
  ESCAPE: 'Escape'
27
27
  };
28
+ const noop = () => null;
28
29
  class Portal extends Component {
29
- static defaultProps = {
30
- beforeClose: null,
31
- className: null,
32
- onClose: () => null,
33
- onOpen: () => null,
34
- onRender: () => null,
35
- style: null,
36
- renderTarget: null,
37
- target: null,
38
- targetRef: null,
39
- closeOnEscPressed: true
40
- };
41
30
  constructor(props) {
42
31
  super(props);
43
32
  this.portalElement = null;
@@ -69,15 +58,19 @@ class Portal extends Component {
69
58
  // call their beforeClose function so that they can trigger the close.
70
59
  // If they don't provide `beforeClose` we just call `close` directly.
71
60
  componentDidUpdate(prevProps) {
61
+ const {
62
+ beforeClose,
63
+ onRender = noop
64
+ } = this.props;
72
65
  if (this.props.isOpen) {
73
66
  if (!prevProps.isOpen) {
74
67
  this.open();
75
68
  } else {
76
- this.props.onRender(this.portalElement, this.getTargetElement());
69
+ onRender(this.portalElement, this.getTargetElement());
77
70
  }
78
71
  } else if (prevProps.isOpen) {
79
- if (this.props.beforeClose) {
80
- this.props.beforeClose(this.close);
72
+ if (beforeClose) {
73
+ beforeClose(this.close);
81
74
  } else {
82
75
  this.close();
83
76
  }
@@ -95,6 +88,9 @@ class Portal extends Component {
95
88
  this.shouldClose = true;
96
89
  }
97
90
  onDocumentMouseUp(event) {
91
+ const {
92
+ onClose = noop
93
+ } = this.props;
98
94
  const clickEventProperties = this.getClickEventProperties(event);
99
95
  if (clickEventProperties.isNotLeftClick || clickEventProperties.isTargetClick || clickEventProperties.isPortalClick) {
100
96
  this.shouldClose = false;
@@ -103,16 +99,20 @@ class Portal extends Component {
103
99
  if (this.shouldClose) {
104
100
  // `onClose` tells the consumer that they should change `isOpen` to false.
105
101
  // Once the consumer has responded to `onClose`, `beforeClose` and `close` will be called.
106
- this.props.onClose(event, {
102
+ onClose(event, {
107
103
  source: 'DOCUMENT_CLICK'
108
104
  });
109
105
  }
110
106
  }
111
107
  onDocumentKeyDown(event) {
112
- if (event.key === KEYCODES.ESCAPE && this.props.isOpen && this.props.closeOnEscPressed) {
108
+ const {
109
+ closeOnEscPressed = true,
110
+ onClose = noop
111
+ } = this.props;
112
+ if (event.key === KEYCODES.ESCAPE && this.props.isOpen && closeOnEscPressed) {
113
113
  // `onClose` tells the consumer that they should change `isOpen` to false.
114
114
  // Once the consumer has responded to `onClose`, `beforeClose` and `close` will be called.
115
- this.props.onClose(event, {
115
+ onClose(event, {
116
116
  source: 'ESCAPE'
117
117
  });
118
118
  }
@@ -166,10 +166,13 @@ class Portal extends Component {
166
166
  if (this.props.className) {
167
167
  portalElement.className = this.props.className;
168
168
  }
169
+ const {
170
+ onOpen = noop
171
+ } = this.props;
169
172
  this.portalElement = portalElement;
170
173
  this.setState({
171
174
  isVisible: true
172
- }, () => this.props.onOpen(portalElement, this.getTargetElement()));
175
+ }, () => onOpen(portalElement, this.getTargetElement()));
173
176
  }
174
177
  close() {
175
178
  if (!this.portalElement) {
@@ -1,9 +1,11 @@
1
- import type { ReactNode } from 'react';
1
+ import type { ReactElement, Ref } from 'react';
2
2
  type Props = {
3
3
  appearClassName: string;
4
4
  appearActiveClassName: string;
5
5
  transitionTimeout: number;
6
- children: string | ReactNode;
6
+ children: ReactElement<{
7
+ ref?: Ref<HTMLElement>;
8
+ }>;
7
9
  };
8
10
  declare const TransitionInitialMount: ({ appearActiveClassName, appearClassName, children, transitionTimeout, }: Props) => import("react/jsx-runtime").JSX.Element;
9
11
  export default TransitionInitialMount;
@@ -16,6 +16,7 @@
16
16
  * limitations under the License.
17
17
  */
18
18
 
19
+ import { cloneElement, useCallback, useRef } from 'react';
19
20
  // @ts-expect-error Untyped import. See `decisions/imports-ts-suppressions.md`.
20
21
  import assign from 'object-assign';
21
22
  import CSSTransition from 'react-transition-group/CSSTransition';
@@ -24,23 +25,59 @@ import CSSTransition from 'react-transition-group/CSSTransition';
24
25
  // It will use the native implementation if it's present and isn't buggy.
25
26
  import { jsx as _jsx } from "react/jsx-runtime";
26
27
  Object.assign = assign;
28
+ const assignRef = (ref, node) => {
29
+ if (!ref) {
30
+ return;
31
+ }
32
+ if (typeof ref === 'function') {
33
+ ref(node);
34
+ } else {
35
+ // eslint-disable-next-line no-param-reassign
36
+ ref.current = node;
37
+ }
38
+ };
39
+
40
+ // TODO: revisit the cloneElement pattern when react-transition-group v5 ships;
41
+ // it is expected to remove the nodeRef requirement.
27
42
  const TransitionInitialMount = ({
28
43
  appearActiveClassName,
29
44
  appearClassName,
30
45
  children,
31
46
  transitionTimeout
32
- }) => /*#__PURE__*/_jsx(CSSTransition, {
33
- classNames: {
34
- appear: appearClassName,
35
- appearActive: appearActiveClassName
36
- },
37
- in: true,
38
- appear: true,
39
- timeout: {
40
- exit: 0,
41
- enter: 0,
42
- appear: transitionTimeout
43
- },
44
- children: children
45
- });
47
+ }) => {
48
+ const nodeRef = useRef(null);
49
+ // Read the child's own ref so injecting nodeRef does not clobber it.
50
+ // React 19 exposes ref as a normal prop (children.props.ref); React 18 keeps
51
+ // it on the element itself (children.ref). Check props.ref FIRST so that on
52
+ // React 19 we never touch element.ref (which logs a deprecation warning).
53
+ const childProps = children.props;
54
+ const childRef = childProps.ref ?? children.ref;
55
+
56
+ // Compose the nodeRef CSSTransition needs with any ref the child already has,
57
+ // so injecting nodeRef does not clobber the child's own ref (e.g. the
58
+ // `dialogRef` used by withScrim to scope focus inside BpkModal/BpkDialog).
59
+ // Memoised so the callback ref keeps a stable identity across renders and is
60
+ // only re-run when nodeRef or the child's ref actually changes.
61
+ const mergedRef = useCallback(node => {
62
+ assignRef(nodeRef, node);
63
+ assignRef(childRef, node);
64
+ }, [childRef]);
65
+ return /*#__PURE__*/_jsx(CSSTransition, {
66
+ nodeRef: nodeRef,
67
+ classNames: {
68
+ appear: appearClassName,
69
+ appearActive: appearActiveClassName
70
+ },
71
+ in: true,
72
+ appear: true,
73
+ timeout: {
74
+ exit: 0,
75
+ enter: 0,
76
+ appear: transitionTimeout
77
+ },
78
+ children: /*#__PURE__*/cloneElement(children, {
79
+ ref: mergedRef
80
+ })
81
+ });
82
+ };
46
83
  export default TransitionInitialMount;
@@ -54,13 +54,6 @@ declare const _default: {
54
54
  UNSAFE_componentWillUpdate?(nextProps: Readonly<import("./src/withScrim").Props & Omit<P, "dialogRef">>, nextState: Readonly<{}>, nextContext: any): void;
55
55
  };
56
56
  displayName: string;
57
- defaultProps: {
58
- onClose: null;
59
- isIphone: boolean;
60
- isIpad: boolean;
61
- containerClassName: null;
62
- closeOnScrimClick: boolean;
63
- };
64
57
  contextType?: import("react").Context<any> | undefined;
65
58
  };
66
59
  };
@@ -72,13 +72,6 @@ declare const withScrim: <P extends object>(WrappedComponent: ComponentType<P> |
72
72
  UNSAFE_componentWillUpdate?(nextProps: Readonly<Props & Omit<P, "dialogRef">>, nextState: Readonly<{}>, nextContext: any): void;
73
73
  };
74
74
  displayName: string;
75
- defaultProps: {
76
- onClose: null;
77
- isIphone: boolean;
78
- isIpad: boolean;
79
- containerClassName: null;
80
- closeOnScrimClick: boolean;
81
- };
82
75
  contextType?: import("react").Context<any> | undefined;
83
76
  };
84
77
  export default withScrim;
@@ -25,20 +25,15 @@ import { fixBody, lockScroll, lockTouchAction, restoreScroll, storeScroll, unfix
25
25
  import STYLES from "./bpk-scrim-content.module.css";
26
26
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
27
27
  const getClassName = cssModules(STYLES);
28
+ const DEFAULT_IS_IPHONE = isDeviceIphone();
29
+ const DEFAULT_IS_IPAD = isDeviceIpad();
28
30
  const withScrim = WrappedComponent => {
29
31
  class WithScrim extends Component {
30
- static defaultProps = {
31
- onClose: null,
32
- isIphone: isDeviceIphone(),
33
- isIpad: isDeviceIpad(),
34
- containerClassName: null,
35
- closeOnScrimClick: true
36
- };
37
32
  componentDidMount() {
38
33
  const {
39
34
  getApplicationElement,
40
- isIpad,
41
- isIphone
35
+ isIpad = DEFAULT_IS_IPAD,
36
+ isIphone = DEFAULT_IS_IPHONE
42
37
  } = this.props;
43
38
  const applicationElement = getApplicationElement();
44
39
 
@@ -73,8 +68,8 @@ const withScrim = WrappedComponent => {
73
68
  componentWillUnmount() {
74
69
  const {
75
70
  getApplicationElement,
76
- isIpad,
77
- isIphone
71
+ isIpad = DEFAULT_IS_IPAD,
72
+ isIphone = DEFAULT_IS_IPHONE
78
73
  } = this.props;
79
74
  const applicationElement = getApplicationElement();
80
75
  if (isIphone || isIpad) {
@@ -96,11 +91,11 @@ const withScrim = WrappedComponent => {
96
91
  };
97
92
  render() {
98
93
  const {
99
- closeOnScrimClick,
100
- containerClassName,
94
+ closeOnScrimClick = true,
95
+ containerClassName = null,
101
96
  getApplicationElement,
102
- isIpad,
103
- isIphone,
97
+ isIpad = DEFAULT_IS_IPAD,
98
+ isIphone = DEFAULT_IS_IPHONE,
104
99
  onClose,
105
100
  ...rest
106
101
  } = this.props;
@@ -16,4 +16,4 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  *
19
- *//*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:initial}[hidden],template{display:none}a{background-color:#0000;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:initial;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}html{box-sizing:border-box;font-size:100%}*,:after,:before{box-sizing:inherit}body{color:#161616;font-family:var(--bpk-base-font-stack,"Skyscanner Relative",-apple-system,BlinkMacSystemFont,"Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif);font-size:1rem;line-height:1.3rem}body.scaffold-font-size{font-size:13px}body.enable-font-smoothing{-webkit-font-smoothing:antialiased}:focus-visible,[type=button]:focus-visible,[type=reset]:focus-visible,[type=submit]:focus-visible,button:focus-visible{outline:.125rem solid #0062e3;outline-offset:.125rem}.hidden,.hide{display:none!important}.visually-hidden,.visuallyhidden{border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;clip:rect(0 0 0 0)}.visually-hidden.focusable:active,.visually-hidden.focusable:focus,.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{height:auto;margin:0;overflow:visible;position:static;width:auto;clip:auto}.invisible{visibility:hidden}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}:root{--bpk-border-1:0.0625rem;--bpk-border-2:0.125rem;--bpk-border-3:0.1875rem;--bpk-modal-200:12.5rem;--bpk-modal-400:25rem;--bpk-modal-512:32rem;--bpk-modal-600:37.5rem;--bpk-modal-800:50rem;--bpk-modal-1000:62.5rem;--bpk-modal-1024:64rem;--bpk-radius-none:0;--bpk-radius-full:62.4375rem;--bpk-radius-lg:1.5rem;--bpk-radius-md:0.75rem;--bpk-radius-nav-tabs:1.125rem;--bpk-radius-sm:0.5rem;--bpk-radius-xs:0.25rem;--bpk-spacing-base:1rem;--bpk-spacing-lg:1.5rem;--bpk-spacing-md:0.5rem;--bpk-spacing-none:0;--bpk-spacing-sm:0.25rem;--bpk-spacing-xl:2rem;--bpk-spacing-xs:0.125rem;--bpk-spacing-xxl:2.5rem;--bpk-spacing-xxs:0.0625rem;--bpk-spacing-xxxl:4rem;--bpk-spacing-xxxxl:6rem;--bpk-canvas-contrast:#eff3f8;--bpk-canvas-default:#fff;--bpk-private-autosuggest-colour-bg-default:#fff;--bpk-private-autosuggest-colour-bg-hover:#f7f9fb;--bpk-private-autosuggest-colour-border-default:#c1c7cf;--bpk-private-autosuggest-colour-text-close:#161616;--bpk-private-badge-colour-bg-default:#eff3f8;--bpk-private-badge-colour-bg-inverse:#fff;--bpk-private-badge-colour-bg-outline:#fff0;--bpk-private-badge-colour-bg-subtle:#eff3f8;--bpk-private-badge-colour-stroke-outline:#fff;--bpk-private-badge-dimension-padding-horizontal-default:0.5rem;--bpk-private-badge-dimension-padding-horizontal-subtle:0.5rem;--bpk-private-badge-typography-tmp-badge-label:0.875rem;--bpk-private-button-colour-bg-destructive:#e0e4e9;--bpk-private-button-colour-bg-destructive-pressed:#e70866;--bpk-private-button-colour-bg-disabled:#e0e4e9;--bpk-private-button-colour-bg-feature-pressed:#024daf;--bpk-private-button-colour-bg-featured:#0062e3;--bpk-private-button-colour-bg-footer:#fff0;--bpk-private-button-colour-bg-footer-pressed:#fff0;--bpk-private-button-colour-bg-primary:#05203c;--bpk-private-button-colour-bg-primary-on-dark:#fff;--bpk-private-button-colour-bg-primary-on-dark-pressed:#c1c7cf;--bpk-private-button-colour-bg-primary-on-light:#fff;--bpk-private-button-colour-bg-primary-on-light-pressed:#154679;--bpk-private-button-colour-bg-secondary:#e0e4e9;--bpk-private-button-colour-bg-secondary-pressed:#c1c7cf;--bpk-private-button-colour-bg-secondary-on-contrast:#e0e4e9;--bpk-private-button-colour-bg-secondary-on-contrast-pressed:#c1c7cf;--bpk-private-button-colour-bg-secondary-on-dark:#ffffff1a;--bpk-private-button-colour-bg-secondary-on-dark-disabled:#0b121d;--bpk-private-button-colour-bg-secondary-on-dark-pressed:#04182d;--bpk-private-button-colour-text-disruptive:#e70866;--bpk-private-button-colour-text-feature:#fff;--bpk-private-button-colour-text-footer:#fff0;--bpk-private-button-colour-text-link-on-dark:#fff;--bpk-private-button-colour-text-secondary:#161616;--bpk-private-button-dimension-radius:0.5rem;--bpk-private-button-dimension-min-height-default:2.25rem;--bpk-private-button-dimension-min-height-large:3rem;--bpk-private-button-dimension-min-weight-large:3rem;--bpk-private-button-dimension-padding-horizontal-default:1rem;--bpk-private-button-dimension-padding-horizontal-large:1rem;--bpk-private-button-typography-tmp-default-label:1rem;--bpk-private-card-button-contained-fill:#fffc;--bpk-private-card-button-max-height:2.5rem;--bpk-private-carousel-trigger-bg-default:#ffffff80;--bpk-private-carousel-trigger-bg-default-hover:#fffc;--bpk-private-checkbox-bg-default-checked:#0062e3;--bpk-private-checkbox-bg-default-intermediate:#0062e3;--bpk-private-checkbox-bg-on-contrast-checked:#0062e3;--bpk-private-checkbox-bg-on-contrast-intermediate:#0062e3;--bpk-private-checkbox-border-default-disabled:#e0e4e9;--bpk-private-checkbox-border-default-not-checked:#626971;--bpk-private-checkbox-border-on-contrast-disabled:#fff3;--bpk-private-checkbox-border-on-contrast-not-checked:#ffffff80;--bpk-private-checkbox-icon-on-contrast:#fff;--bpk-private-checkbox-stroke:0.1875rem;--bpk-private-chip-group-filter-colour-bg-icon-hover-on-image:#eff3f8;--bpk-private-chip-group-filter-colour-bg-icon-off-on-image:#fff;--bpk-private-chip-group-filter-colour-bg-icon-on-default:#05203c;--bpk-private-chip-group-filter-colour-bg-icon-on-on-dark:#fff;--bpk-private-chip-group-filter-colour-bg-icon-on-on-image:#05203c;--bpk-private-chip-group-filter-colour-stroke-icon-hover-default:#05203c;--bpk-private-chip-group-filter-colour-stroke-icon-hover-on-dark:#fff;--bpk-private-chip-group-filter-colour-stroke-icon-off-default:#c1c7cf;--bpk-private-chip-group-filter-colour-stroke-icon-off-on-dark:#fff3;--bpk-private-chip-group-filter-dimensions-min-height:2.25rem;--bpk-private-chip-colour-bg-default-dismissible-hover:#05203c;--bpk-private-chip-colour-bg-default-on:#05203c;--bpk-private-chip-colour-bg-disabled:#e0e4e9;--bpk-private-chip-colour-bg-on-contrast-hover:#fff;--bpk-private-chip-colour-bg-on-contrast-on:#05203c;--bpk-private-chip-colour-bg-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-bg-on-dark-hover:#fff;--bpk-private-chip-colour-bg-on-dark-off:#fff0;--bpk-private-chip-colour-bg-on-dark-on:#fff;--bpk-private-chip-colour-bg-on-image-dismissible-hover:#05203c;--bpk-private-chip-colour-bg-on-image-on:#eff3f8;--bpk-private-chip-colour-border-default-dismissible-hover:#fff0;--bpk-private-chip-colour-border-default-hover:#05203c;--bpk-private-chip-colour-border-default-off:#c1c7cf;--bpk-private-chip-colour-border-on-contrast-off:#fff;--bpk-private-chip-colour-border-on-contrast-on:#05203c;--bpk-private-chip-colour-border-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-border-on-dark-hover:#fff;--bpk-private-chip-colour-border-on-dark-off:#fff3;--bpk-private-chip-colour-stroke-off-on-canvas-contrast-new:#fff0;--bpk-private-chip-colour-text-default-dismissible-hover:#fff;--bpk-private-chip-colour-text-dismissible-on-icon:#ffffff80;--bpk-private-chip-colour-text-on:#fff;--bpk-private-chip-colour-text-on-image:#fff;--bpk-private-chip-colour-text-on-image-dismissible-icon:#626971;--bpk-private-chip-colour-text-on-dark:#161616;--bpk-private-chip-colour-text-on-dark-dismissible-hover:#161616;--bpk-private-chip-colour-text-on-dark-dismissible-icon:#626971;--bpk-private-chip-dimension-border:0.0625rem;--bpk-private-chip-dimension-min-height-width:2rem;--bpk-private-chip-dimension-radius:0.5rem;--bpk-private-date-selector-cheapest-month-highlight:#154679;--bpk-private-date-selector-flexible-date-card:#eff3f8;--bpk-private-info-banner-default:#eff3f8;--bpk-private-info-banner-on-contrast:#fff;--bpk-private-map-cluster-pin:#05203c;--bpk-private-map-cluster-pin-previous-selection:#94c3ff;--bpk-private-map-marker-viewed:#fffc;--bpk-private-map-poi-pin:#8e47ba;--bpk-private-map-previous-selection:#cfe4ff;--bpk-private-navigation-tabs-hover:#154679;--bpk-private-navigation-tabs-outline:#fff3;--bpk-private-navigation-tabs-selected:#024daf;--bpk-private-radio-bg-default-disabled:#c1c7cf;--bpk-private-radio-bg-default-on:#0062e3;--bpk-private-radio-bg-on-contrast-off:#fff;--bpk-private-radio-bg-on-contrast-on:#fff;--bpk-private-radio-border:0.1875rem;--bpk-private-radio-border-default-off:#626971;--bpk-private-rating-bar-default:#e0e4e9;--bpk-private-rating-bar-on-contrast:#fff;--bpk-private-segmented-control-colour-bg-on-canvas-default-default:#eff3f8;--bpk-private-segmented-control-colour-bg-on-surface-contrast-default:#ffffff1a;--bpk-private-segmented-control-colour-bg-on-surface-contrast-selected:#024daf;--bpk-private-segmented-control-colour-bg-selected:#05203c;--bpk-private-segmented-control-colour-divider-default:#e0e4e9;--bpk-private-segmented-control-colour-divider-on-surface-contrast:#fff3;--bpk-private-segmented-control-dimension-bg-indicator-radius:0;--bpk-private-segmented-control-dimension-bg-track-radius:0.5rem;--bpk-private-segmented-control-dimension-min-height:2rem;--bpk-private-segmented-control-dimension-track-padding:0;--bpk-private-shadow-large-blur:0.875rem;--bpk-private-shadow-large-color:#16161640;--bpk-private-shadow-large-position-x:0;--bpk-private-shadow-large-position-y:0.25rem;--bpk-private-shadow-large-spread:0;--bpk-private-shadow-small-blur:0.1875rem;--bpk-private-shadow-small-color:#16161640;--bpk-private-shadow-small-position-x:0;--bpk-private-shadow-small-position-y:0.0625rem;--bpk-private-shadow-small-spread:0;--bpk-private-shadow-xl-blur:3.125rem;--bpk-private-shadow-xl-color:#16161640;--bpk-private-shadow-xl-position-x:0;--bpk-private-shadow-xl-position-y:0.75rem;--bpk-private-shadow-xl-spread:0;--bpk-private-skeleton-on-dark:#ffffff1a;--bpk-private-speech-bubble-colour-bg-contrast:#eff3f8;--bpk-private-speech-bubble-colour-bg-default:#fff;--bpk-private-trip-advisor:#00aa6c;--bpk-core-accent:#0062e3;--bpk-core-eco:#0fa1a9;--bpk-core-primary:#05203c;--bpk-other-overlay:#0003;--bpk-other-scrim:#000000b3;--bpk-other-shadow:#16161640;--bpk-other-line-default:#c1c7cf;--bpk-other-line-on-contrast:#fff3;--bpk-status-danger-spot:#e70866;--bpk-status-success-spot:#0c838a;--bpk-status-warning-spot:#f55d42;--bpk-surface-contrast:#05203c;--bpk-surface-danger-fill:#ffe9f9;--bpk-surface-default:#fff;--bpk-surface-elevated:#fff;--bpk-surface-hero:#0062e3;--bpk-surface-highlight:#e0e4e9;--bpk-surface-low-contrast:#f7f9fb;--bpk-surface-subtle:#e3f0ff;--bpk-surface-success-fill:#d4fff2;--bpk-surface-tint:#ffffff1a;--bpk-surface-warning-fill:#fff7cf;--bpk-surface-promo:#0062e3;--bpk-test:#ff1088;--bpk-text-disabled:#0003;--bpk-text-disabled-on-dark:#ffffff80;--bpk-text-error:#e70866;--bpk-text-inverse:#fff;--bpk-text-on-dark:#fff;--bpk-text-on-light:#161616;--bpk-text-primary:#161616;--bpk-text-secondary:#626971;--bpk-text-secondary-on-contrast:#ffffff80;--bpk-text-success:#0c838a;--bpk-text-deprecated-link:#0062e3;--bpk-text-hero:#0062e3;--bpk-title:true;--bpk-typography-family-sans-serif:"Skyscanner Relative";--bpk-typography-family-serif:Larken;--bpk-typography-kerning-default:0;--bpk-typography-kerning-loose:0;--bpk-typography-kerning-tight:0;--bpk-typography-style-body:400;--bpk-typography-style-headline:700;--bpk-typography-style-hero:900;--bpk-typography-style-label:700;--bpk-typography-style-subhead:300}:root[data-theme=dark]{--bpk-canvas-contrast:#010913;--bpk-canvas-default:#010913;--bpk-private-autosuggest-colour-bg-default:#fff;--bpk-private-autosuggest-colour-bg-hover:#fff;--bpk-private-autosuggest-colour-border-default:#fff;--bpk-private-autosuggest-colour-text-close:#fff;--bpk-private-badge-colour-bg-default:#243346;--bpk-private-badge-colour-bg-inverse:#243346;--bpk-private-badge-colour-bg-outline:#fff0;--bpk-private-badge-colour-bg-subtle:#243346;--bpk-private-badge-colour-stroke-outline:#fff;--bpk-private-badge-dimension-padding-horizontal-default:0.5rem;--bpk-private-badge-dimension-padding-horizontal-subtle:0.5rem;--bpk-private-badge-typography-tmp-badge-label:0.875rem;--bpk-private-button-colour-bg-destructive:#e0e4e9;--bpk-private-button-colour-bg-destructive-pressed:#ff649c;--bpk-private-button-colour-bg-disabled:#0b121d;--bpk-private-button-colour-bg-feature-pressed:#d1f7ff;--bpk-private-button-colour-bg-featured:#d1f7ff;--bpk-private-button-colour-bg-footer:#fff0;--bpk-private-button-colour-bg-footer-pressed:#fff0;--bpk-private-button-colour-bg-primary:#024daf;--bpk-private-button-colour-bg-primary-on-dark:#fff;--bpk-private-button-colour-bg-primary-on-dark-pressed:#c1c7cf;--bpk-private-button-colour-bg-primary-on-light:#fff;--bpk-private-button-colour-bg-primary-on-light-pressed:#002b4b;--bpk-private-button-colour-bg-secondary:#243346;--bpk-private-button-colour-bg-secondary-pressed:#010913;--bpk-private-button-colour-bg-secondary-on-contrast:#243346;--bpk-private-button-colour-bg-secondary-on-contrast-pressed:#010913;--bpk-private-button-colour-bg-secondary-on-dark:#ffffff1a;--bpk-private-button-colour-bg-secondary-on-dark-disabled:#0b121d;--bpk-private-button-colour-bg-secondary-on-dark-pressed:#fff3;--bpk-private-button-colour-text-disruptive:#ff649c;--bpk-private-button-colour-text-feature:#010913;--bpk-private-button-colour-text-footer:#fff0;--bpk-private-button-colour-text-link-on-dark:#fff;--bpk-private-button-colour-text-secondary:#fff;--bpk-private-button-dimension-radius:0.5rem;--bpk-private-button-dimension-min-height-default:2.25rem;--bpk-private-button-dimension-min-height-large:3rem;--bpk-private-button-dimension-min-weight-large:3rem;--bpk-private-button-dimension-padding-horizontal-default:1rem;--bpk-private-button-dimension-padding-horizontal-large:1rem;--bpk-private-button-typography-tmp-default-label:1rem;--bpk-private-card-button-contained-fill:#ffffff1a;--bpk-private-card-button-max-height:2.5rem;--bpk-private-carousel-trigger-bg-default:#ffffff80;--bpk-private-carousel-trigger-bg-default-hover:#fffc;--bpk-private-checkbox-bg-default-checked:#84e9ff;--bpk-private-checkbox-bg-default-intermediate:#84e9ff;--bpk-private-checkbox-bg-on-contrast-checked:#84e9ff;--bpk-private-checkbox-bg-on-contrast-intermediate:#84e9ff;--bpk-private-checkbox-border-default-disabled:#fff3;--bpk-private-checkbox-border-default-not-checked:#ffffff80;--bpk-private-checkbox-border-on-contrast-disabled:#fff3;--bpk-private-checkbox-border-on-contrast-not-checked:#ffffff80;--bpk-private-checkbox-icon-on-contrast:#161616;--bpk-private-checkbox-stroke:0.1875rem;--bpk-private-chip-group-filter-colour-bg-icon-hover-on-image:#010913;--bpk-private-chip-group-filter-colour-bg-icon-off-on-image:#131d2b;--bpk-private-chip-group-filter-colour-bg-icon-on-default:#054184;--bpk-private-chip-group-filter-colour-bg-icon-on-on-dark:#131d2b;--bpk-private-chip-group-filter-colour-bg-icon-on-on-image:#054184;--bpk-private-chip-group-filter-colour-stroke-icon-hover-default:#054184;--bpk-private-chip-group-filter-colour-stroke-icon-hover-on-dark:#131d2b;--bpk-private-chip-group-filter-colour-stroke-icon-off-default:#fff3;--bpk-private-chip-group-filter-colour-stroke-icon-off-on-dark:#fff3;--bpk-private-chip-group-filter-dimensions-min-height:2.25rem;--bpk-private-chip-colour-bg-default-dismissible-hover:#054184;--bpk-private-chip-colour-bg-default-on:#054184;--bpk-private-chip-colour-bg-disabled:#0b121d;--bpk-private-chip-colour-bg-on-contrast-hover:#131d2b;--bpk-private-chip-colour-bg-on-contrast-on:#054184;--bpk-private-chip-colour-bg-on-dark-dismissible-hover:#131d2b;--bpk-private-chip-colour-bg-on-dark-hover:#fff0;--bpk-private-chip-colour-bg-on-dark-off:#fff0;--bpk-private-chip-colour-bg-on-dark-on:#131d2b;--bpk-private-chip-colour-bg-on-image-dismissible-hover:#054184;--bpk-private-chip-colour-bg-on-image-on:#010913;--bpk-private-chip-colour-border-default-dismissible-hover:#fff0;--bpk-private-chip-colour-border-default-hover:#054184;--bpk-private-chip-colour-border-default-off:#fff3;--bpk-private-chip-colour-border-on-contrast-off:#131d2b;--bpk-private-chip-colour-border-on-contrast-on:#131d2b;--bpk-private-chip-colour-border-on-dark-dismissible-hover:#131d2b;--bpk-private-chip-colour-border-on-dark-hover:#fff;--bpk-private-chip-colour-border-on-dark-off:#fff3;--bpk-private-chip-colour-stroke-off-on-canvas-contrast-new:#fff0;--bpk-private-chip-colour-text-default-dismissible-hover:#fff;--bpk-private-chip-colour-text-dismissible-on-icon:#ffffff80;--bpk-private-chip-colour-text-on:#fff;--bpk-private-chip-colour-text-on-image:#fff;--bpk-private-chip-colour-text-on-image-dismissible-icon:#bdc4cb;--bpk-private-chip-colour-text-on-dark:#fff;--bpk-private-chip-colour-text-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-text-on-dark-dismissible-icon:#bdc4cb;--bpk-private-chip-dimension-border:0.0625rem;--bpk-private-chip-dimension-min-height-width:2rem;--bpk-private-chip-dimension-radius:0.5rem;--bpk-private-date-selector-cheapest-month-highlight:#fff;--bpk-private-date-selector-flexible-date-card:#243346;--bpk-private-info-banner-default:#131d2b;--bpk-private-info-banner-on-contrast:#131d2b;--bpk-private-map-cluster-pin:#fff;--bpk-private-map-cluster-pin-previous-selection:#94c3ff;--bpk-private-map-marker-viewed:#000c;--bpk-private-map-poi-pin:#8e47ba;--bpk-private-map-previous-selection:#cfe4ff;--bpk-private-navigation-tabs-hover:#002b4b;--bpk-private-navigation-tabs-outline:#fff3;--bpk-private-navigation-tabs-selected:#054184;--bpk-private-radio-bg-default-disabled:#ffffff80;--bpk-private-radio-bg-default-on:#84e9ff;--bpk-private-radio-bg-on-contrast-off:#fff0;--bpk-private-radio-bg-on-contrast-on:#84e9ff;--bpk-private-radio-border:0.1875rem;--bpk-private-radio-border-default-off:#ffffff80;--bpk-private-rating-bar-default:#243346;--bpk-private-rating-bar-on-contrast:#243346;--bpk-private-segmented-control-colour-bg-on-canvas-default-default:#131d2b;--bpk-private-segmented-control-colour-bg-on-surface-contrast-default:#131d2b;--bpk-private-segmented-control-colour-bg-on-surface-contrast-selected:#054184;--bpk-private-segmented-control-colour-bg-selected:#054184;--bpk-private-segmented-control-colour-divider-default:#e0e4e9;--bpk-private-segmented-control-colour-divider-on-surface-contrast:#fff3;--bpk-private-segmented-control-dimension-bg-indicator-radius:0;--bpk-private-segmented-control-dimension-bg-track-radius:0.5rem;--bpk-private-segmented-control-dimension-min-height:2rem;--bpk-private-segmented-control-dimension-track-padding:0;--bpk-private-shadow-large-blur:0.875rem;--bpk-private-shadow-large-color:#16161640;--bpk-private-shadow-large-position-x:0;--bpk-private-shadow-large-position-y:0.25rem;--bpk-private-shadow-large-spread:0;--bpk-private-shadow-small-blur:0.1875rem;--bpk-private-shadow-small-color:#16161640;--bpk-private-shadow-small-position-x:0;--bpk-private-shadow-small-position-y:0.0625rem;--bpk-private-shadow-small-spread:0;--bpk-private-shadow-xl-blur:3.125rem;--bpk-private-shadow-xl-color:#16161640;--bpk-private-shadow-xl-position-x:0;--bpk-private-shadow-xl-position-y:0.75rem;--bpk-private-shadow-xl-spread:0;--bpk-private-skeleton-on-dark:#243346;--bpk-private-speech-bubble-colour-bg-contrast:#131d2b;--bpk-private-speech-bubble-colour-bg-default:#131d2b;--bpk-private-trip-advisor:#9ce6c0;--bpk-core-accent:#84e9ff;--bpk-core-eco:#0fa1a9;--bpk-core-primary:#054184;--bpk-other-overlay:#fffc;--bpk-other-scrim:#000000b3;--bpk-other-shadow:#16161640;--bpk-other-line-default:#fff3;--bpk-other-line-on-contrast:#fff3;--bpk-status-danger-spot:#ff649c;--bpk-status-success-spot:#62f1c6;--bpk-status-warning-spot:#feeb87;--bpk-surface-contrast:#010913;--bpk-surface-danger-fill:#ffcadd;--bpk-surface-default:#131d2b;--bpk-surface-elevated:#243346;--bpk-surface-hero:#010913;--bpk-surface-highlight:#243346;--bpk-surface-low-contrast:#243346;--bpk-surface-subtle:#243346;--bpk-surface-success-fill:#b1ffe7;--bpk-surface-tint:#ffffff1a;--bpk-surface-warning-fill:#fbf1bb;--bpk-surface-promo:#243346;--bpk-test:red;--bpk-text-disabled:#fff3;--bpk-text-disabled-on-dark:#ffffff80;--bpk-text-error:#ff649c;--bpk-text-inverse:#010913;--bpk-text-on-dark:#fff;--bpk-text-on-light:#010913;--bpk-text-primary:#fff;--bpk-text-secondary:#bdc4cb;--bpk-text-secondary-on-contrast:#ffffff80;--bpk-text-success:#62f1c6;--bpk-text-deprecated-link:#84e9ff;--bpk-text-hero:#010913;--bpk-title:true;--bpk-typography-family-sans-serif:"Skyscanner Relative";--bpk-typography-family-serif:Larken;--bpk-typography-kerning-default:0;--bpk-typography-kerning-loose:0;--bpk-typography-kerning-tight:0;--bpk-typography-style-body:400;--bpk-typography-style-headline:700;--bpk-typography-style-hero:900;--bpk-typography-style-label:700;--bpk-typography-style-subhead:300}
19
+ *//*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:initial}[hidden],template{display:none}a{background-color:#0000;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:initial;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}html{box-sizing:border-box;font-size:100%}*,:after,:before{box-sizing:inherit}body{color:#161616;font-family:var(--bpk-base-font-stack,"Skyscanner Relative",-apple-system,BlinkMacSystemFont,"Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif);font-size:1rem;line-height:1.3rem}body.scaffold-font-size{font-size:13px}body.enable-font-smoothing{-webkit-font-smoothing:antialiased}:focus-visible,[type=button]:focus-visible,[type=reset]:focus-visible,[type=submit]:focus-visible,button:focus-visible{outline:.125rem solid #0062e3;outline-offset:.125rem}.hidden,.hide{display:none!important}.visually-hidden,.visuallyhidden{border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;clip:rect(0 0 0 0)}.visually-hidden.focusable:active,.visually-hidden.focusable:focus,.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{height:auto;margin:0;overflow:visible;position:static;width:auto;clip:auto}.invisible{visibility:hidden}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}:root{--bpk-border-1:0.0625rem;--bpk-border-2:0.125rem;--bpk-border-3:0.1875rem;--bpk-modal-200:12.5rem;--bpk-modal-400:25rem;--bpk-modal-512:32rem;--bpk-modal-600:37.5rem;--bpk-modal-800:50rem;--bpk-modal-1000:62.5rem;--bpk-modal-1024:64rem;--bpk-radius-none:0;--bpk-radius-full:62.4375rem;--bpk-radius-lg:1.5rem;--bpk-radius-md:0.75rem;--bpk-radius-nav-tabs:1.125rem;--bpk-radius-sm:0.5rem;--bpk-radius-xs:0.25rem;--bpk-spacing-base:1rem;--bpk-spacing-lg:1.5rem;--bpk-spacing-md:0.5rem;--bpk-spacing-none:0;--bpk-spacing-sm:0.25rem;--bpk-spacing-xl:2rem;--bpk-spacing-xs:0.125rem;--bpk-spacing-xxl:2.5rem;--bpk-spacing-xxs:0.0625rem;--bpk-spacing-xxxl:4rem;--bpk-spacing-xxxxl:6rem;--bpk-canvas-contrast:#eff3f8;--bpk-canvas-default:#fff;--bpk-private-autosuggest-colour-bg-default:#fff;--bpk-private-autosuggest-colour-bg-hover:#f5f7fa;--bpk-private-autosuggest-colour-border-default:#c1c7cf;--bpk-private-autosuggest-colour-text-close:#161616;--bpk-private-badge-colour-bg-default:#eff3f8;--bpk-private-badge-colour-bg-inverse:#fff;--bpk-private-badge-colour-bg-outline:#fff0;--bpk-private-badge-colour-bg-subtle:#eff3f8;--bpk-private-badge-colour-stroke-outline:#fff;--bpk-private-badge-dimension-padding-horizontal-default:0.5rem;--bpk-private-badge-dimension-padding-horizontal-subtle:0.5rem;--bpk-private-badge-typography-tmp-badge-label:0.875rem;--bpk-private-button-colour-bg-destructive:#e0e4e9;--bpk-private-button-colour-bg-destructive-pressed:#e70866;--bpk-private-button-colour-bg-disabled:#e0e4e9;--bpk-private-button-colour-bg-feature-pressed:#024daf;--bpk-private-button-colour-bg-featured:#0062e3;--bpk-private-button-colour-bg-footer:#fff0;--bpk-private-button-colour-bg-footer-pressed:#fff0;--bpk-private-button-colour-bg-primary:#05203c;--bpk-private-button-colour-bg-primary-on-dark:#fff;--bpk-private-button-colour-bg-primary-on-dark-pressed:#c1c7cf;--bpk-private-button-colour-bg-primary-on-light:#fff;--bpk-private-button-colour-bg-primary-on-light-pressed:#154679;--bpk-private-button-colour-bg-secondary:#e0e4e9;--bpk-private-button-colour-bg-secondary-pressed:#c1c7cf;--bpk-private-button-colour-bg-secondary-on-contrast:#e0e4e9;--bpk-private-button-colour-bg-secondary-on-contrast-pressed:#c1c7cf;--bpk-private-button-colour-bg-secondary-on-dark:#ffffff1a;--bpk-private-button-colour-bg-secondary-on-dark-disabled:#0b121d;--bpk-private-button-colour-bg-secondary-on-dark-pressed:#04182d;--bpk-private-button-colour-text-disruptive:#e70866;--bpk-private-button-colour-text-feature:#fff;--bpk-private-button-colour-text-footer:#fff0;--bpk-private-button-colour-text-link-on-dark:#fff;--bpk-private-button-colour-text-secondary:#161616;--bpk-private-button-dimension-radius:0.5rem;--bpk-private-button-dimension-min-height-default:2.25rem;--bpk-private-button-dimension-min-height-large:3rem;--bpk-private-button-dimension-min-weight-large:3rem;--bpk-private-button-dimension-padding-horizontal-default:1rem;--bpk-private-button-dimension-padding-horizontal-large:1rem;--bpk-private-button-typography-tmp-default-label:1rem;--bpk-private-card-button-contained-fill:#fffc;--bpk-private-card-button-max-height:2.5rem;--bpk-private-carousel-trigger-bg-default:#ffffff80;--bpk-private-carousel-trigger-bg-default-hover:#fffc;--bpk-private-checkbox-bg-default-checked:#0062e3;--bpk-private-checkbox-bg-default-intermediate:#0062e3;--bpk-private-checkbox-bg-on-contrast-checked:#0062e3;--bpk-private-checkbox-bg-on-contrast-intermediate:#0062e3;--bpk-private-checkbox-border-default-disabled:#e0e4e9;--bpk-private-checkbox-border-default-not-checked:#626971;--bpk-private-checkbox-border-on-contrast-disabled:#fff3;--bpk-private-checkbox-border-on-contrast-not-checked:#ffffff80;--bpk-private-checkbox-icon-on-contrast:#fff;--bpk-private-checkbox-stroke:0.1875rem;--bpk-private-chip-group-filter-colour-bg-icon-hover-on-image:#eff3f8;--bpk-private-chip-group-filter-colour-bg-icon-off-on-image:#fff;--bpk-private-chip-group-filter-colour-bg-icon-on-default:#05203c;--bpk-private-chip-group-filter-colour-bg-icon-on-on-dark:#fff;--bpk-private-chip-group-filter-colour-bg-icon-on-on-image:#05203c;--bpk-private-chip-group-filter-colour-stroke-icon-hover-default:#05203c;--bpk-private-chip-group-filter-colour-stroke-icon-hover-on-dark:#fff;--bpk-private-chip-group-filter-colour-stroke-icon-off-default:#c1c7cf;--bpk-private-chip-group-filter-colour-stroke-icon-off-on-dark:#fff3;--bpk-private-chip-group-filter-dimensions-min-height:2.25rem;--bpk-private-chip-colour-bg-default-dismissible-hover:#05203c;--bpk-private-chip-colour-bg-default-hover:#fff0;--bpk-private-chip-colour-bg-default-off:#fff0;--bpk-private-chip-colour-bg-default-on:#05203c;--bpk-private-chip-colour-bg-disabled:#e0e4e9;--bpk-private-chip-colour-bg-on-contrast-hover:#fff;--bpk-private-chip-colour-bg-on-contrast-on:#05203c;--bpk-private-chip-colour-bg-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-bg-on-dark-hover:#fff;--bpk-private-chip-colour-bg-on-dark-off:#fff0;--bpk-private-chip-colour-bg-on-dark-on:#fff;--bpk-private-chip-colour-bg-on-image-dismissible-hover:#05203c;--bpk-private-chip-colour-bg-on-image-on:#eff3f8;--bpk-private-chip-colour-border-default-dismissible-hover:#fff0;--bpk-private-chip-colour-border-default-hover:#05203c;--bpk-private-chip-colour-border-default-off:#c1c7cf;--bpk-private-chip-colour-border-on-contrast-off:#fff;--bpk-private-chip-colour-border-on-contrast-on:#05203c;--bpk-private-chip-colour-border-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-border-on-dark-hover:#fff;--bpk-private-chip-colour-border-on-dark-off:#fff3;--bpk-private-chip-colour-stroke-off-on-canvas-contrast-new:#fff0;--bpk-private-chip-colour-text-default-dismissible-hover:#fff;--bpk-private-chip-colour-text-dismissible-on-icon:#ffffff80;--bpk-private-chip-colour-text-on:#fff;--bpk-private-chip-colour-text-on-image:#fff;--bpk-private-chip-colour-text-on-image-dismissible-icon:#626971;--bpk-private-chip-colour-text-on-dark:#161616;--bpk-private-chip-colour-text-on-dark-dismissible-hover:#161616;--bpk-private-chip-colour-text-on-dark-dismissible-icon:#626971;--bpk-private-chip-dimension-border:0.0625rem;--bpk-private-chip-dimension-min-height-width:2rem;--bpk-private-chip-dimension-radius:0.5rem;--bpk-private-date-selector-cheapest-month-highlight:#154679;--bpk-private-date-selector-flexible-date-card:#eff3f8;--bpk-private-info-banner-default:#eff3f8;--bpk-private-info-banner-on-contrast:#fff;--bpk-private-map-cluster-pin:#05203c;--bpk-private-map-cluster-pin-previous-selection:#94c3ff;--bpk-private-map-marker-viewed:#fffc;--bpk-private-map-poi-pin:#8e47ba;--bpk-private-map-previous-selection:#cfe4ff;--bpk-private-navigation-tabs-hover:#154679;--bpk-private-navigation-tabs-outline:#fff3;--bpk-private-navigation-tabs-selected:#0062e3;--bpk-private-radio-bg-default-disabled:#c1c7cf;--bpk-private-radio-bg-default-on:#0062e3;--bpk-private-radio-bg-on-contrast-off:#fff;--bpk-private-radio-bg-on-contrast-on:#fff;--bpk-private-radio-border:0.1875rem;--bpk-private-radio-border-default-off:#626971;--bpk-private-rating-bar-default:#e0e4e9;--bpk-private-rating-bar-on-contrast:#fff;--bpk-private-segmented-control-colour-bg-on-canvas-default-default:#eff3f8;--bpk-private-segmented-control-colour-bg-on-surface-contrast-default:#ffffff1a;--bpk-private-segmented-control-colour-bg-on-surface-contrast-selected:#024daf;--bpk-private-segmented-control-colour-bg-selected:#05203c;--bpk-private-segmented-control-colour-divider-default:#e0e4e9;--bpk-private-segmented-control-colour-divider-on-surface-contrast:#fff3;--bpk-private-segmented-control-dimension-bg-indicator-radius:0;--bpk-private-segmented-control-dimension-bg-track-radius:0.5rem;--bpk-private-segmented-control-dimension-min-height:2rem;--bpk-private-segmented-control-dimension-track-padding:0;--bpk-private-shadow-large-blur:0.875rem;--bpk-private-shadow-large-color:#16161640;--bpk-private-shadow-large-position-x:0;--bpk-private-shadow-large-position-y:0.25rem;--bpk-private-shadow-large-spread:0;--bpk-private-shadow-small-blur:0.1875rem;--bpk-private-shadow-small-color:#16161640;--bpk-private-shadow-small-position-x:0;--bpk-private-shadow-small-position-y:0.0625rem;--bpk-private-shadow-small-spread:0;--bpk-private-shadow-xl-blur:3.125rem;--bpk-private-shadow-xl-color:#16161640;--bpk-private-shadow-xl-position-x:0;--bpk-private-shadow-xl-position-y:0.75rem;--bpk-private-shadow-xl-spread:0;--bpk-private-skeleton-on-dark:#ffffff1a;--bpk-private-slider-bg-knob:#0062e3;--bpk-private-slider-bg-track:#0062e3;--bpk-private-speech-bubble-colour-bg-contrast:#eff3f8;--bpk-private-speech-bubble-colour-bg-default:#fff;--bpk-private-trip-advisor:#00aa6c;--bpk-core-accent:#0062e3;--bpk-core-eco:#0fa1a9;--bpk-core-primary:#05203c;--bpk-other-overlay:#0003;--bpk-other-scrim:#000000b3;--bpk-other-shadow:#16161640;--bpk-other-line-default:#c1c7cf;--bpk-other-line-on-contrast:#fff3;--bpk-status-danger-spot:#e70866;--bpk-status-success-spot:#0c838a;--bpk-status-warning-spot:#f55d42;--bpk-surface-contrast:#05203c;--bpk-surface-danger-fill:#ffe9f9;--bpk-surface-default:#fff;--bpk-surface-elevated:#fff;--bpk-surface-hero:#0062e3;--bpk-surface-highlight:#e0e4e9;--bpk-surface-low-contrast:#f5f7fa;--bpk-surface-subtle:#e3f0ff;--bpk-surface-success-fill:#d4fff2;--bpk-surface-tint:#ffffff1a;--bpk-surface-warning-fill:#fff7cf;--bpk-surface-promo:#0062e3;--bpk-test:#ff1088;--bpk-text-disabled:#0003;--bpk-text-disabled-on-dark:#ffffff80;--bpk-text-error:#e70866;--bpk-text-inverse:#fff;--bpk-text-on-dark:#fff;--bpk-text-on-light:#161616;--bpk-text-primary:#161616;--bpk-text-secondary:#626971;--bpk-text-secondary-on-contrast:#ffffff80;--bpk-text-success:#0c838a;--bpk-text-deprecated-link:#0062e3;--bpk-text-hero:#0062e3;--bpk-title:true;--bpk-typography-family-sans-serif:"Skyscanner Relative";--bpk-typography-family-serif:Larken;--bpk-typography-kerning-default:0;--bpk-typography-kerning-loose:0;--bpk-typography-kerning-tight:0;--bpk-typography-style-body:400;--bpk-typography-style-headline:700;--bpk-typography-style-hero:900;--bpk-typography-style-label:700;--bpk-typography-style-subhead:300}:root[data-theme=dark]{--bpk-canvas-contrast:#010913;--bpk-canvas-default:#010913;--bpk-private-autosuggest-colour-bg-default:#fff;--bpk-private-autosuggest-colour-bg-hover:#fff;--bpk-private-autosuggest-colour-border-default:#fff;--bpk-private-autosuggest-colour-text-close:#fff;--bpk-private-badge-colour-bg-default:#243346;--bpk-private-badge-colour-bg-inverse:#243346;--bpk-private-badge-colour-bg-outline:#fff0;--bpk-private-badge-colour-bg-subtle:#243346;--bpk-private-badge-colour-stroke-outline:#fff;--bpk-private-badge-dimension-padding-horizontal-default:0.5rem;--bpk-private-badge-dimension-padding-horizontal-subtle:0.5rem;--bpk-private-badge-typography-tmp-badge-label:0.875rem;--bpk-private-button-colour-bg-destructive:#e0e4e9;--bpk-private-button-colour-bg-destructive-pressed:#ff649c;--bpk-private-button-colour-bg-disabled:#0b121d;--bpk-private-button-colour-bg-feature-pressed:#d1f7ff;--bpk-private-button-colour-bg-featured:#d1f7ff;--bpk-private-button-colour-bg-footer:#fff0;--bpk-private-button-colour-bg-footer-pressed:#fff0;--bpk-private-button-colour-bg-primary:#024daf;--bpk-private-button-colour-bg-primary-on-dark:#fff;--bpk-private-button-colour-bg-primary-on-dark-pressed:#c1c7cf;--bpk-private-button-colour-bg-primary-on-light:#fff;--bpk-private-button-colour-bg-primary-on-light-pressed:#002b4b;--bpk-private-button-colour-bg-secondary:#243346;--bpk-private-button-colour-bg-secondary-pressed:#010913;--bpk-private-button-colour-bg-secondary-on-contrast:#243346;--bpk-private-button-colour-bg-secondary-on-contrast-pressed:#010913;--bpk-private-button-colour-bg-secondary-on-dark:#ffffff1a;--bpk-private-button-colour-bg-secondary-on-dark-disabled:#0b121d;--bpk-private-button-colour-bg-secondary-on-dark-pressed:#fff3;--bpk-private-button-colour-text-disruptive:#ff649c;--bpk-private-button-colour-text-feature:#010913;--bpk-private-button-colour-text-footer:#fff0;--bpk-private-button-colour-text-link-on-dark:#fff;--bpk-private-button-colour-text-secondary:#fff;--bpk-private-button-dimension-radius:0.5rem;--bpk-private-button-dimension-min-height-default:2.25rem;--bpk-private-button-dimension-min-height-large:3rem;--bpk-private-button-dimension-min-weight-large:3rem;--bpk-private-button-dimension-padding-horizontal-default:1rem;--bpk-private-button-dimension-padding-horizontal-large:1rem;--bpk-private-button-typography-tmp-default-label:1rem;--bpk-private-card-button-contained-fill:#ffffff1a;--bpk-private-card-button-max-height:2.5rem;--bpk-private-carousel-trigger-bg-default:#ffffff80;--bpk-private-carousel-trigger-bg-default-hover:#fffc;--bpk-private-checkbox-bg-default-checked:#84e9ff;--bpk-private-checkbox-bg-default-intermediate:#84e9ff;--bpk-private-checkbox-bg-on-contrast-checked:#84e9ff;--bpk-private-checkbox-bg-on-contrast-intermediate:#84e9ff;--bpk-private-checkbox-border-default-disabled:#fff3;--bpk-private-checkbox-border-default-not-checked:#ffffff80;--bpk-private-checkbox-border-on-contrast-disabled:#fff3;--bpk-private-checkbox-border-on-contrast-not-checked:#ffffff80;--bpk-private-checkbox-icon-on-contrast:#161616;--bpk-private-checkbox-stroke:0.1875rem;--bpk-private-chip-group-filter-colour-bg-icon-hover-on-image:#010913;--bpk-private-chip-group-filter-colour-bg-icon-off-on-image:#131d2b;--bpk-private-chip-group-filter-colour-bg-icon-on-default:#054184;--bpk-private-chip-group-filter-colour-bg-icon-on-on-dark:#131d2b;--bpk-private-chip-group-filter-colour-bg-icon-on-on-image:#054184;--bpk-private-chip-group-filter-colour-stroke-icon-hover-default:#054184;--bpk-private-chip-group-filter-colour-stroke-icon-hover-on-dark:#131d2b;--bpk-private-chip-group-filter-colour-stroke-icon-off-default:#fff3;--bpk-private-chip-group-filter-colour-stroke-icon-off-on-dark:#fff3;--bpk-private-chip-group-filter-dimensions-min-height:2.25rem;--bpk-private-chip-colour-bg-default-dismissible-hover:#054184;--bpk-private-chip-colour-bg-default-hover:#fff0;--bpk-private-chip-colour-bg-default-off:#fff0;--bpk-private-chip-colour-bg-default-on:#054184;--bpk-private-chip-colour-bg-disabled:#0b121d;--bpk-private-chip-colour-bg-on-contrast-hover:#131d2b;--bpk-private-chip-colour-bg-on-contrast-on:#054184;--bpk-private-chip-colour-bg-on-dark-dismissible-hover:#131d2b;--bpk-private-chip-colour-bg-on-dark-hover:#fff0;--bpk-private-chip-colour-bg-on-dark-off:#fff0;--bpk-private-chip-colour-bg-on-dark-on:#131d2b;--bpk-private-chip-colour-bg-on-image-dismissible-hover:#054184;--bpk-private-chip-colour-bg-on-image-on:#010913;--bpk-private-chip-colour-border-default-dismissible-hover:#fff0;--bpk-private-chip-colour-border-default-hover:#054184;--bpk-private-chip-colour-border-default-off:#fff3;--bpk-private-chip-colour-border-on-contrast-off:#131d2b;--bpk-private-chip-colour-border-on-contrast-on:#131d2b;--bpk-private-chip-colour-border-on-dark-dismissible-hover:#131d2b;--bpk-private-chip-colour-border-on-dark-hover:#fff;--bpk-private-chip-colour-border-on-dark-off:#fff3;--bpk-private-chip-colour-stroke-off-on-canvas-contrast-new:#fff0;--bpk-private-chip-colour-text-default-dismissible-hover:#fff;--bpk-private-chip-colour-text-dismissible-on-icon:#ffffff80;--bpk-private-chip-colour-text-on:#fff;--bpk-private-chip-colour-text-on-image:#fff;--bpk-private-chip-colour-text-on-image-dismissible-icon:#bdc4cb;--bpk-private-chip-colour-text-on-dark:#fff;--bpk-private-chip-colour-text-on-dark-dismissible-hover:#fff;--bpk-private-chip-colour-text-on-dark-dismissible-icon:#bdc4cb;--bpk-private-chip-dimension-border:0.0625rem;--bpk-private-chip-dimension-min-height-width:2rem;--bpk-private-chip-dimension-radius:0.5rem;--bpk-private-date-selector-cheapest-month-highlight:#fff;--bpk-private-date-selector-flexible-date-card:#243346;--bpk-private-info-banner-default:#131d2b;--bpk-private-info-banner-on-contrast:#131d2b;--bpk-private-map-cluster-pin:#fff;--bpk-private-map-cluster-pin-previous-selection:#94c3ff;--bpk-private-map-marker-viewed:#000c;--bpk-private-map-poi-pin:#8e47ba;--bpk-private-map-previous-selection:#cfe4ff;--bpk-private-navigation-tabs-hover:#002b4b;--bpk-private-navigation-tabs-outline:#fff3;--bpk-private-navigation-tabs-selected:#054184;--bpk-private-radio-bg-default-disabled:#ffffff80;--bpk-private-radio-bg-default-on:#84e9ff;--bpk-private-radio-bg-on-contrast-off:#fff0;--bpk-private-radio-bg-on-contrast-on:#84e9ff;--bpk-private-radio-border:0.1875rem;--bpk-private-radio-border-default-off:#ffffff80;--bpk-private-rating-bar-default:#243346;--bpk-private-rating-bar-on-contrast:#243346;--bpk-private-segmented-control-colour-bg-on-canvas-default-default:#131d2b;--bpk-private-segmented-control-colour-bg-on-surface-contrast-default:#131d2b;--bpk-private-segmented-control-colour-bg-on-surface-contrast-selected:#054184;--bpk-private-segmented-control-colour-bg-selected:#054184;--bpk-private-segmented-control-colour-divider-default:#e0e4e9;--bpk-private-segmented-control-colour-divider-on-surface-contrast:#fff3;--bpk-private-segmented-control-dimension-bg-indicator-radius:0;--bpk-private-segmented-control-dimension-bg-track-radius:0.5rem;--bpk-private-segmented-control-dimension-min-height:2rem;--bpk-private-segmented-control-dimension-track-padding:0;--bpk-private-shadow-large-blur:0.875rem;--bpk-private-shadow-large-color:#16161640;--bpk-private-shadow-large-position-x:0;--bpk-private-shadow-large-position-y:0.25rem;--bpk-private-shadow-large-spread:0;--bpk-private-shadow-small-blur:0.1875rem;--bpk-private-shadow-small-color:#16161640;--bpk-private-shadow-small-position-x:0;--bpk-private-shadow-small-position-y:0.0625rem;--bpk-private-shadow-small-spread:0;--bpk-private-shadow-xl-blur:3.125rem;--bpk-private-shadow-xl-color:#16161640;--bpk-private-shadow-xl-position-x:0;--bpk-private-shadow-xl-position-y:0.75rem;--bpk-private-shadow-xl-spread:0;--bpk-private-skeleton-on-dark:#243346;--bpk-private-slider-bg-knob:#84e9ff;--bpk-private-slider-bg-track:#84e9ff;--bpk-private-speech-bubble-colour-bg-contrast:#131d2b;--bpk-private-speech-bubble-colour-bg-default:#131d2b;--bpk-private-trip-advisor:#9ce6c0;--bpk-core-accent:#84e9ff;--bpk-core-eco:#0fa1a9;--bpk-core-primary:#054184;--bpk-other-overlay:#fffc;--bpk-other-scrim:#000000b3;--bpk-other-shadow:#16161640;--bpk-other-line-default:#fff3;--bpk-other-line-on-contrast:#fff3;--bpk-status-danger-spot:#ff649c;--bpk-status-success-spot:#62f1c6;--bpk-status-warning-spot:#feeb87;--bpk-surface-contrast:#010913;--bpk-surface-danger-fill:#ffcadd;--bpk-surface-default:#131d2b;--bpk-surface-elevated:#243346;--bpk-surface-hero:#010913;--bpk-surface-highlight:#243346;--bpk-surface-low-contrast:#243346;--bpk-surface-subtle:#243346;--bpk-surface-success-fill:#b1ffe7;--bpk-surface-tint:#ffffff1a;--bpk-surface-warning-fill:#fbf1bb;--bpk-surface-promo:#243346;--bpk-test:red;--bpk-text-disabled:#fff3;--bpk-text-disabled-on-dark:#ffffff80;--bpk-text-error:#ff649c;--bpk-text-inverse:#010913;--bpk-text-on-dark:#fff;--bpk-text-on-light:#010913;--bpk-text-primary:#fff;--bpk-text-secondary:#bdc4cb;--bpk-text-secondary-on-contrast:#ffffff80;--bpk-text-success:#62f1c6;--bpk-text-deprecated-link:#84e9ff;--bpk-text-hero:#010913;--bpk-title:true;--bpk-typography-family-sans-serif:"Skyscanner Relative";--bpk-typography-family-serif:Larken;--bpk-typography-kerning-default:0;--bpk-typography-kerning-loose:0;--bpk-typography-kerning-tight:0;--bpk-typography-style-body:400;--bpk-typography-style-headline:700;--bpk-typography-style-hero:900;--bpk-typography-style-label:700;--bpk-typography-style-subhead:300}