@skyscanner/backpack-web 33.3.1 → 34.0.0-premajor

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 (263) hide show
  1. package/bpk-component-accordion/index.js +1 -1
  2. package/bpk-component-accordion/src/BpkAccordionItem.js +12 -13
  3. package/bpk-component-accordion/src/BpkAccordionItem.module.css +1 -1
  4. package/bpk-component-autosuggest/src/BpkAutosuggestSuggestion.js +5 -3
  5. package/bpk-component-banner-alert/index.js +1 -1
  6. package/bpk-component-banner-alert/src/AnimateAndFade.js +37 -35
  7. package/bpk-component-banner-alert/src/BpkBannerAlertInner.js +12 -6
  8. package/bpk-component-barchart/src/BpkBarchart.js +9 -10
  9. package/bpk-component-barchart/src/BpkBarchartBar.js +1 -2
  10. package/bpk-component-barchart/src/BpkBarchartBars.js +2 -2
  11. package/bpk-component-barchart/src/BpkBarchartDefs.js +1 -2
  12. package/bpk-component-barchart/src/BpkChartAxis.js +1 -2
  13. package/bpk-component-barchart/src/BpkChartDataTable.js +1 -2
  14. package/bpk-component-bottom-sheet/src/BpkBottomSheet.js +4 -6
  15. package/bpk-component-breadcrumb/src/BpkBreadcrumb.js +1 -2
  16. package/bpk-component-breadcrumb/src/BpkBreadcrumbItem.js +18 -14
  17. package/bpk-component-breadcrumb/src/BpkBreadcrumbItem.module.css +1 -1
  18. package/bpk-component-breakpoint/index.d.ts +2 -1
  19. package/bpk-component-breakpoint/src/BpkBreakpoint.js +5 -19
  20. package/bpk-component-breakpoint/src/useMediaQuery.js +10 -12
  21. package/bpk-component-button/index.js +5 -5
  22. package/bpk-component-button/src/BpkButtonDestructive.js +10 -9
  23. package/bpk-component-button/src/BpkButtonFeatured.js +10 -9
  24. package/bpk-component-button/src/BpkButtonLink.js +11 -10
  25. package/bpk-component-button/src/BpkButtonLinkOnDark.js +11 -10
  26. package/bpk-component-button/src/BpkButtonPrimary.js +2 -2
  27. package/bpk-component-button/src/BpkButtonPrimaryOnDark.js +10 -9
  28. package/bpk-component-button/src/BpkButtonPrimaryOnLight.js +10 -9
  29. package/bpk-component-button/src/BpkButtonSecondary.js +10 -10
  30. package/bpk-component-button/src/BpkButtonSecondaryOnDark.js +10 -9
  31. package/bpk-component-calendar/index.js +1 -1
  32. package/bpk-component-calendar/src/BpkCalendarContainer.js +3 -3
  33. package/bpk-component-calendar/src/BpkCalendarGrid.js +3 -2
  34. package/bpk-component-calendar/src/BpkCalendarGrid.module.css +1 -1
  35. package/bpk-component-calendar/src/BpkCalendarGridHeader.js +4 -1
  36. package/bpk-component-calendar/src/BpkCalendarGridTransition.js +6 -4
  37. package/bpk-component-calendar/src/BpkCalendarNav.js +10 -5
  38. package/bpk-component-calendar/src/Week.js +6 -3
  39. package/bpk-component-calendar/src/composeCalendar.js +9 -4
  40. package/bpk-component-calendar/src/date-utils.js +14 -14
  41. package/bpk-component-card/src/BpkCardWrapper.js +1 -2
  42. package/bpk-component-card/src/BpkDividedCard.js +19 -15
  43. package/bpk-component-card-button/src/BpkSaveButton.js +14 -6
  44. package/bpk-component-checkbox/src/BpkCheckbox.js +1 -2
  45. package/bpk-component-chip/index.d.ts +3 -5
  46. package/bpk-component-chip/index.js +3 -2
  47. package/bpk-component-chip/src/BpkDismissibleChip.js +7 -2
  48. package/bpk-component-chip/src/BpkIconChip.d.ts +25 -0
  49. package/bpk-component-chip/src/BpkIconChip.js +31 -0
  50. package/bpk-component-chip/src/BpkSelectableChip.d.ts +0 -2
  51. package/bpk-component-chip/src/BpkSelectableChip.js +5 -6
  52. package/bpk-component-chip/src/BpkSelectableChip.module.css +1 -1
  53. package/bpk-component-chip/src/commonTypes.d.ts +1 -1
  54. package/bpk-component-chip/src/commonTypes.js +1 -24
  55. package/bpk-component-close-button/src/BpkCloseButton.js +3 -2
  56. package/bpk-component-close-button/src/BpkCloseButton.module.css +1 -1
  57. package/bpk-component-content-cards/src/BpkContentCard.js +9 -4
  58. package/bpk-component-content-cards/src/BpkContentCards.js +2 -7
  59. package/bpk-component-content-cards/src/BpkContentCards.module.css +1 -1
  60. package/bpk-component-datatable/src/BpkDataTable.js +4 -4
  61. package/bpk-component-datatable/src/BpkDataTableHeader.js +14 -11
  62. package/bpk-component-datatable/src/BpkDataTableHeader.module.css +1 -1
  63. package/bpk-component-datepicker/src/BpkDatepicker.js +3 -5
  64. package/bpk-component-description-list/index.js +1 -1
  65. package/bpk-component-description-list/src/ComponentFactory.js +10 -5
  66. package/bpk-component-dialog/src/BpkDialog.js +7 -6
  67. package/bpk-component-dialog/src/BpkDialog.module.css +1 -1
  68. package/bpk-component-dialog/src/BpkDialogInner.js +7 -5
  69. package/bpk-component-drawer/src/BpkDrawer.js +1 -4
  70. package/bpk-component-drawer/src/BpkDrawerContent.js +8 -7
  71. package/bpk-component-fieldset/src/BpkFieldset.js +10 -9
  72. package/bpk-component-flare/index.js +2 -2
  73. package/bpk-component-flare/src/BpkContentBubble.js +5 -3
  74. package/bpk-component-flare/src/BpkFlareBar.js +15 -7
  75. package/bpk-component-flare/src/__generated__/corner-radius.d.ts +6 -0
  76. package/bpk-component-flare/src/__generated__/pointer.d.ts +6 -0
  77. package/bpk-component-floating-notification/src/BpkFloatingNotification.js +10 -4
  78. package/bpk-component-form-validation/src/BpkFormValidation.js +6 -6
  79. package/bpk-component-graphic-promotion/src/BpkGraphicPromo.js +10 -14
  80. package/bpk-component-graphic-promotion/src/BpkGraphicPromo.module.css +1 -1
  81. package/bpk-component-grid-toggle/src/BpkGridToggle.js +8 -6
  82. package/bpk-component-horizontal-nav/src/BpkHorizontalNav.js +16 -14
  83. package/bpk-component-horizontal-nav/src/BpkHorizontalNav.module.css +1 -1
  84. package/bpk-component-horizontal-nav/src/BpkHorizontalNavItem.js +2 -2
  85. package/bpk-component-icon/index.js +1 -1
  86. package/bpk-component-icon/lg/aircraft.js +1 -2
  87. package/bpk-component-icon/lg/beach.js +1 -2
  88. package/bpk-component-icon/lg/call-back.js +1 -2
  89. package/bpk-component-icon/lg/camper-van.js +1 -2
  90. package/bpk-component-icon/lg/car-wash.js +1 -2
  91. package/bpk-component-icon/lg/cars.js +1 -2
  92. package/bpk-component-icon/lg/clean.js +1 -2
  93. package/bpk-component-icon/lg/cloakroom.js +1 -2
  94. package/bpk-component-icon/lg/content--copy.js +1 -2
  95. package/bpk-component-icon/lg/data.js +1 -2
  96. package/bpk-component-icon/lg/depart.js +1 -2
  97. package/bpk-component-icon/lg/download.js +1 -2
  98. package/bpk-component-icon/lg/education.js +1 -2
  99. package/bpk-component-icon/lg/explore.js +1 -2
  100. package/bpk-component-icon/lg/fast-track.js +1 -2
  101. package/bpk-component-icon/lg/fast-train.js +1 -2
  102. package/bpk-component-icon/lg/flight-landing.js +1 -2
  103. package/bpk-component-icon/lg/flight-takeoff.js +1 -2
  104. package/bpk-component-icon/lg/flight.js +1 -2
  105. package/bpk-component-icon/lg/legroom--extra.js +1 -2
  106. package/bpk-component-icon/lg/legroom--normal.js +1 -2
  107. package/bpk-component-icon/lg/legroom--reduced.js +1 -2
  108. package/bpk-component-icon/lg/logout.js +1 -2
  109. package/bpk-component-icon/lg/lounge.js +1 -2
  110. package/bpk-component-icon/lg/mail.js +1 -2
  111. package/bpk-component-icon/lg/mileage.js +1 -2
  112. package/bpk-component-icon/lg/new-window.js +1 -2
  113. package/bpk-component-icon/lg/plane-seat.js +1 -2
  114. package/bpk-component-icon/lg/return.js +1 -2
  115. package/bpk-component-icon/lg/scales.js +1 -2
  116. package/bpk-component-icon/lg/share--ios.js +1 -2
  117. package/bpk-component-icon/lg/social-distancing.js +1 -2
  118. package/bpk-component-icon/lg/speaker.js +1 -2
  119. package/bpk-component-icon/lg/taxi.js +1 -2
  120. package/bpk-component-icon/lg/unmute.js +1 -2
  121. package/bpk-component-icon/lg/wallet.js +1 -2
  122. package/bpk-component-icon/lg/weather--cloudy.js +1 -2
  123. package/bpk-component-icon/lg/weather--partly-cloudy.js +1 -2
  124. package/bpk-component-icon/lg/weather--rain.js +1 -2
  125. package/bpk-component-icon/lg/weather--thunderstorm.js +1 -2
  126. package/bpk-component-icon/lg/window--reduce.js +1 -2
  127. package/bpk-component-icon/lg/world--emea.js +1 -2
  128. package/bpk-component-icon/sm/aircraft.js +1 -2
  129. package/bpk-component-icon/sm/beach.js +1 -2
  130. package/bpk-component-icon/sm/bus.js +1 -2
  131. package/bpk-component-icon/sm/call-back.js +1 -2
  132. package/bpk-component-icon/sm/camper-van.js +1 -2
  133. package/bpk-component-icon/sm/car-wash.js +1 -2
  134. package/bpk-component-icon/sm/cars.js +1 -2
  135. package/bpk-component-icon/sm/chauffeur.js +1 -2
  136. package/bpk-component-icon/sm/clean.js +1 -2
  137. package/bpk-component-icon/sm/content--copy.js +1 -2
  138. package/bpk-component-icon/sm/data.js +1 -2
  139. package/bpk-component-icon/sm/depart.js +1 -2
  140. package/bpk-component-icon/sm/direct.js +1 -2
  141. package/bpk-component-icon/sm/download.js +1 -2
  142. package/bpk-component-icon/sm/education.js +1 -2
  143. package/bpk-component-icon/sm/explore.js +1 -2
  144. package/bpk-component-icon/sm/fast-track.js +1 -2
  145. package/bpk-component-icon/sm/fast-train.js +1 -2
  146. package/bpk-component-icon/sm/flight-landing.js +1 -2
  147. package/bpk-component-icon/sm/flight-takeoff.js +1 -2
  148. package/bpk-component-icon/sm/flight.js +1 -2
  149. package/bpk-component-icon/sm/hotels--jacuzzi.js +1 -2
  150. package/bpk-component-icon/sm/infant.js +1 -2
  151. package/bpk-component-icon/sm/legroom--extra.js +1 -2
  152. package/bpk-component-icon/sm/legroom--normal.js +1 -2
  153. package/bpk-component-icon/sm/legroom--reduced.js +1 -2
  154. package/bpk-component-icon/sm/logout.js +1 -2
  155. package/bpk-component-icon/sm/mail.js +1 -2
  156. package/bpk-component-icon/sm/mileage.js +1 -2
  157. package/bpk-component-icon/sm/new-window.js +1 -2
  158. package/bpk-component-icon/sm/onsen.js +1 -2
  159. package/bpk-component-icon/sm/plane-seat.js +1 -2
  160. package/bpk-component-icon/sm/return.js +1 -2
  161. package/bpk-component-icon/sm/share--ios.js +1 -2
  162. package/bpk-component-icon/sm/social-distancing.js +1 -2
  163. package/bpk-component-icon/sm/taxi.js +1 -2
  164. package/bpk-component-icon/sm/unmute.js +1 -2
  165. package/bpk-component-icon/sm/weather--cloudy.js +1 -2
  166. package/bpk-component-icon/sm/weather--rain.js +1 -2
  167. package/bpk-component-icon/sm/weather--thunderstorm.js +1 -2
  168. package/bpk-component-icon/sm/weather--wind.js +1 -2
  169. package/bpk-component-icon/sm/window--reduce.js +1 -2
  170. package/bpk-component-icon/src/classNameModifierHOCFactory.js +3 -0
  171. package/bpk-component-icon/src/withDescription.js +1 -2
  172. package/bpk-component-icon/src/withRtlSupport.js +1 -1
  173. package/bpk-component-image/index.js +2 -2
  174. package/bpk-component-image/src/BpkBackgroundImage.js +4 -3
  175. package/bpk-component-image/src/BpkImage.js +6 -4
  176. package/bpk-component-infinite-scroll/src/withInfiniteScroll.js +4 -5
  177. package/bpk-component-info-banner/src/AnimateAndFade.js +37 -35
  178. package/bpk-component-info-banner/src/BpkInfoBanner.module.css +1 -1
  179. package/bpk-component-info-banner/src/BpkInfoBannerInner.js +17 -14
  180. package/bpk-component-input/index.js +1 -1
  181. package/bpk-component-input/src/BpkClearButton.js +3 -1
  182. package/bpk-component-input/src/BpkInput.js +6 -4
  183. package/bpk-component-input/src/withOpenEvents.js +4 -1
  184. package/bpk-component-label/src/BpkLabel.js +1 -2
  185. package/bpk-component-link/index.js +2 -2
  186. package/bpk-component-list/src/BpkList.js +4 -1
  187. package/bpk-component-loading-button/src/BpkLoadingButton.js +7 -5
  188. package/bpk-component-map/index.js +4 -4
  189. package/bpk-component-map/src/BpkIconMarker.js +2 -3
  190. package/bpk-component-map/src/BpkMap.js +2 -2
  191. package/bpk-component-map/src/BpkPriceMarker.js +8 -7
  192. package/bpk-component-map/src/BpkPriceMarkerV2/BpkPriceMarker.js +2 -3
  193. package/bpk-component-mobile-scroll-container/src/BpkMobileScrollContainer.js +5 -2
  194. package/bpk-component-modal/index.js +4 -3
  195. package/bpk-component-modal/src/BpkModal.d.ts +2 -1
  196. package/bpk-component-modal/src/BpkModal.js +8 -3
  197. package/bpk-component-modal/src/BpkModalInner.d.ts +2 -0
  198. package/bpk-component-modal/src/BpkModalInner.js +25 -10
  199. package/bpk-component-modal/src/BpkModalInner.module.css +1 -1
  200. package/bpk-component-modal/src/BpkModalV2/BpKModal.module.css +1 -1
  201. package/bpk-component-modal/src/BpkModalV2/BpkModal.d.ts +2 -0
  202. package/bpk-component-modal/src/BpkModalV2/BpkModal.js +20 -10
  203. package/bpk-component-navigation-bar/index.js +1 -1
  204. package/bpk-component-navigation-bar/src/BpkNavigationBar.js +8 -7
  205. package/bpk-component-navigation-bar/src/BpkNavigationBarButtonLink.js +5 -2
  206. package/bpk-component-navigation-bar/src/BpkNavigationBarIconButton.js +5 -2
  207. package/bpk-component-nudger/index.js +1 -1
  208. package/bpk-component-nudger/src/BpkConfigurableNudger.js +17 -6
  209. package/bpk-component-nudger/src/BpkNudger.js +17 -7
  210. package/bpk-component-overlay/src/BpkOverlay.js +1 -2
  211. package/bpk-component-page-indicator/src/BpkPageIndicator.js +1 -2
  212. package/bpk-component-page-indicator/src/BpkPageIndicator.module.css +1 -1
  213. package/bpk-component-page-indicator/src/NavButton.js +1 -1
  214. package/bpk-component-pagination/src/BpkPagination.js +1 -2
  215. package/bpk-component-pagination/src/BpkPaginationList.js +1 -1
  216. package/bpk-component-pagination/src/BpkPaginationNudger.js +14 -6
  217. package/bpk-component-pagination/src/BpkPaginationPage.js +4 -1
  218. package/bpk-component-phone-input/src/BpkPhoneInput.js +16 -6
  219. package/bpk-component-popover/src/BpkPopover.js +106 -63
  220. package/bpk-component-popover/src/BpkPopoverPortal.js +123 -119
  221. package/bpk-component-popover/src/keyboardFocusScope.js +1 -1
  222. package/bpk-component-price/src/BpkPrice.js +19 -8
  223. package/bpk-component-progress/src/BpkProgress.js +1 -2
  224. package/bpk-component-radio/src/BpkRadio.js +1 -2
  225. package/bpk-component-rating/src/BpkRating.js +19 -8
  226. package/bpk-component-rtl-toggle/src/BpkRtlToggle.js +4 -1
  227. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarGrid.js +7 -5
  228. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarGridList.js +7 -4
  229. package/bpk-component-section-header/src/BpkSectionHeader.js +10 -5
  230. package/bpk-component-section-list/index.js +1 -1
  231. package/bpk-component-section-list/src/BpkSectionListItem.js +11 -6
  232. package/bpk-component-section-list/src/BpkSectionListSection.js +2 -3
  233. package/bpk-component-select/src/BpkSelect.js +1 -2
  234. package/bpk-component-slider/src/BpkSlider.js +6 -2
  235. package/bpk-component-spinner/index.js +3 -3
  236. package/bpk-component-spinner/src/BpkExtraLargeSpinner.js +9 -7
  237. package/bpk-component-spinner/src/BpkLargeSpinner.js +9 -7
  238. package/bpk-component-spinner/src/BpkSpinner.js +9 -7
  239. package/bpk-component-split-input/src/BpkInputField.js +2 -2
  240. package/bpk-component-split-input/src/BpkSplitInput.js +3 -3
  241. package/bpk-component-star-rating/index.js +4 -4
  242. package/bpk-component-star-rating/src/BpkInteractiveStar.js +6 -2
  243. package/bpk-component-star-rating/src/BpkInteractiveStarRating.js +1 -1
  244. package/bpk-component-star-rating/src/BpkStar.js +22 -15
  245. package/bpk-component-swap-button/src/BpkSwapButton.js +2 -1
  246. package/bpk-component-switch/src/BpkSwitch.js +1 -2
  247. package/bpk-component-table/index.js +2 -2
  248. package/bpk-component-text/src/BpkText.js +10 -5
  249. package/bpk-component-theme-toggle/src/BpkThemeToggle.js +6 -4
  250. package/bpk-component-theme-toggle/src/updateOnThemeChange.js +1 -1
  251. package/bpk-component-tooltip/src/BpkTooltip.js +2 -3
  252. package/bpk-component-tooltip/src/BpkTooltipPortal.js +7 -6
  253. package/bpk-mixins/_chips.scss +9 -0
  254. package/bpk-react-utils/index.js +3 -3
  255. package/bpk-react-utils/src/BpkDialogWrapper/BpkDialogWrapper.js +2 -2
  256. package/bpk-react-utils/src/Portal.js +1 -0
  257. package/bpk-react-utils/src/withDefaultProps.js +4 -1
  258. package/bpk-scrim-utils/src/withScrim.js +3 -3
  259. package/bpk-scrim-utils/src/withScrimmedPortal.js +1 -1
  260. package/bpk-theming/src/BpkThemeProvider.js +1 -1
  261. package/package.json +5 -3
  262. package/unstable__bpk-mixins/_chips.scss +9 -0
  263. package/bpk-component-button/src/commonButtonTests.js +0 -133
@@ -15,14 +15,15 @@
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */import PropTypes from 'prop-types';
18
- import BpkText, { TEXT_STYLES } from "../../bpk-component-text";
19
- import { BpkButtonLink } from "../../bpk-component-link";
18
+ import { useState, cloneElement } from 'react';
19
+ import { useFloating, autoUpdate, offset, flip, shift, useClick, useDismiss, useInteractions, FloatingFocusManager } from '@floating-ui/react';
20
20
  import BpkCloseButton from "../../bpk-component-close-button";
21
+ import { BpkButtonLink } from "../../bpk-component-link";
22
+ import BpkText, { TEXT_STYLES } from "../../bpk-component-text";
21
23
  import { TransitionInitialMount, cssModules } from "../../bpk-react-utils";
22
- import STYLES from "./BpkPopover.module.css";
23
24
  import { ARROW_ID } from "./constants";
24
- import { jsx as _jsx } from "react/jsx-runtime";
25
- import { jsxs as _jsxs } from "react/jsx-runtime";
25
+ import STYLES from "./BpkPopover.module.css";
26
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
27
  const getClassName = cssModules(STYLES);
27
28
  const EVENT_SOURCES = {
28
29
  CLOSE_BUTTON: 'CLOSE_BUTTON',
@@ -44,74 +45,116 @@ const BpkPopover = props => {
44
45
  closeButtonProps,
45
46
  closeButtonText,
46
47
  id,
48
+ isOpen,
47
49
  label,
48
50
  labelAsTitle,
49
51
  onClose,
50
52
  padded,
53
+ placement,
54
+ popperModifiers,
55
+ portalStyle,
56
+ renderTarget,
57
+ target,
51
58
  ...rest
52
59
  } = props;
53
- const classNames = [getClassName('bpk-popover')];
54
- const bodyClassNames = [];
60
+ const [isOpenState, setIsOpenState] = useState(isOpen);
61
+ const {
62
+ context,
63
+ floatingStyles,
64
+ refs
65
+ } = useFloating({
66
+ open: isOpenState,
67
+ onOpenChange: setIsOpenState,
68
+ middleware: [offset(17), popperModifiers],
69
+ whileElementsMounted: autoUpdate
70
+ });
71
+ const click = useClick(context);
72
+ const dismiss = useDismiss(context);
55
73
 
56
- // outer classNames
57
- if (className) {
58
- classNames.push(className);
59
- }
74
+ // Merge all the interactions into prop getters
75
+ const {
76
+ getFloatingProps,
77
+ getReferenceProps
78
+ } = useInteractions([click, dismiss]);
60
79
 
61
- // inner classNames
62
- if (padded) {
63
- bodyClassNames.push(getClassName('bpk-popover__body--padded'));
64
- }
80
+ // const getTargetElement = () => typeof target === 'function' ? target() : (target as JSXElementWithRefProps)?.ref.current
81
+
82
+ // const targetEl = cloneElement(getRenderTarget(renderTarget), { ...getReferenceProps(), ref: refs.setReference });
83
+ // console.error('renderTarget', renderTarget());
84
+ const targetEl = /*#__PURE__*/cloneElement(target, {
85
+ ...getReferenceProps(),
86
+ ref: refs.setReference
87
+ });
88
+ const classNames = getClassName('bpk-popover', className);
89
+ const bodyClassNames = getClassName(padded && 'bpk-popover__body--padded');
65
90
  const labelId = `bpk-popover-label-${id}`;
66
- return /*#__PURE__*/_jsx(TransitionInitialMount, {
67
- appearClassName: getClassName('bpk-popover--appear'),
68
- appearActiveClassName: getClassName('bpk-popover--appear-active'),
69
- transitionTimeout: 200,
70
- children: /*#__PURE__*/_jsxs("section", {
71
- id: id,
72
- tabIndex: "-1",
73
- role: "dialog",
74
- "aria-labelledby": labelId,
75
- className: classNames.join(' '),
76
- ...rest,
77
- children: [/*#__PURE__*/_jsx("span", {
78
- id: ARROW_ID,
79
- className: getClassName('bpk-popover__arrow'),
80
- role: "presentation",
81
- "data-popper-arrow": true
82
- }), labelAsTitle ? /*#__PURE__*/_jsxs("header", {
83
- className: getClassName('bpk-popover__header'),
84
- children: [/*#__PURE__*/_jsx(BpkText, {
85
- tagName: "h2",
86
- id: labelId,
87
- textStyle: TEXT_STYLES.label1,
88
- children: label
89
- }), "\xA0", closeButtonIcon ? /*#__PURE__*/_jsx(BpkCloseButton, {
90
- className: getClassName('bpk-popover__close-button'),
91
- label: closeButtonText,
92
- onClick: bindEventSource(EVENT_SOURCES.CLOSE_BUTTON, props.onClose),
93
- ...closeButtonProps
94
- }) : /*#__PURE__*/_jsx(BpkButtonLink, {
95
- onClick: bindEventSource(EVENT_SOURCES.CLOSE_LINK, props.onClose),
96
- ...closeButtonProps,
97
- children: closeButtonText
98
- })]
99
- }) : /*#__PURE__*/_jsx("span", {
100
- id: labelId,
101
- className: getClassName('bpk-popover__label'),
102
- children: label
103
- }), /*#__PURE__*/_jsx("div", {
104
- className: bodyClassNames.join(' '),
105
- children: children
106
- }), !labelAsTitle && /*#__PURE__*/_jsx("footer", {
107
- className: getClassName('bpk-popover__footer'),
108
- children: /*#__PURE__*/_jsx(BpkButtonLink, {
109
- onClick: bindEventSource(EVENT_SOURCES.CLOSE_LINK, props.onClose),
110
- ...closeButtonProps,
111
- children: closeButtonText
91
+ return /*#__PURE__*/_jsxs(_Fragment, {
92
+ children: [targetEl, isOpenState && /*#__PURE__*/_jsx(FloatingFocusManager, {
93
+ context: context,
94
+ modal: false,
95
+ children: /*#__PURE__*/_jsx("div", {
96
+ ref: refs.setFloating,
97
+ style: floatingStyles,
98
+ ...getFloatingProps(),
99
+ children: /*#__PURE__*/_jsx(TransitionInitialMount, {
100
+ appearClassName: getClassName('bpk-popover--appear'),
101
+ appearActiveClassName: getClassName('bpk-popover--appear-active'),
102
+ transitionTimeout: 200,
103
+ children: /*#__PURE__*/_jsxs("section", {
104
+ id: id,
105
+ tabIndex: "-1",
106
+ role: "dialog",
107
+ "aria-labelledby": labelId,
108
+ className: classNames,
109
+ ...rest,
110
+ children: [labelAsTitle ? /*#__PURE__*/_jsxs("header", {
111
+ className: getClassName('bpk-popover__header'),
112
+ children: [/*#__PURE__*/_jsx(BpkText, {
113
+ tagName: "h2",
114
+ id: labelId,
115
+ textStyle: TEXT_STYLES.label1,
116
+ children: label
117
+ }), "\xA0", closeButtonIcon ? /*#__PURE__*/_jsx(BpkCloseButton
118
+ // TODO: className to be removed
119
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
120
+ , {
121
+ className: getClassName('bpk-popover__close-button'),
122
+ label: closeButtonText,
123
+ onClick: () => {
124
+ bindEventSource(EVENT_SOURCES.CLOSE_BUTTON, props.onClose);
125
+ setIsOpenState(false);
126
+ },
127
+ ...closeButtonProps
128
+ }) : /*#__PURE__*/_jsx(BpkButtonLink, {
129
+ onClick: () => {
130
+ bindEventSource(EVENT_SOURCES.CLOSE_LINK, props.onClose);
131
+ setIsOpenState(false);
132
+ },
133
+ ...closeButtonProps,
134
+ children: closeButtonText
135
+ })]
136
+ }) : /*#__PURE__*/_jsx("span", {
137
+ id: labelId,
138
+ className: getClassName('bpk-popover__label'),
139
+ children: label
140
+ }), /*#__PURE__*/_jsx("div", {
141
+ className: bodyClassNames,
142
+ children: children
143
+ }), !labelAsTitle && /*#__PURE__*/_jsx("footer", {
144
+ className: getClassName('bpk-popover__footer'),
145
+ children: /*#__PURE__*/_jsx(BpkButtonLink, {
146
+ onClick: () => {
147
+ bindEventSource(EVENT_SOURCES.CLOSE_LINK, props.onClose);
148
+ setIsOpenState(false);
149
+ },
150
+ ...closeButtonProps,
151
+ children: closeButtonText
152
+ })
153
+ })]
154
+ })
112
155
  })
113
- })]
114
- })
156
+ })
157
+ })]
115
158
  });
116
159
  };
117
160
  export const propTypes = {
@@ -14,17 +14,15 @@
14
14
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
- */import { createPopper } from '@popperjs/core';
18
- import PropTypes from 'prop-types';
17
+ */import PropTypes from 'prop-types';
19
18
  import { Component } from 'react';
19
+ import { createPopper } from '@popperjs/core';
20
20
  import focusStore from 'a11y-focus-store';
21
21
  import { Portal, cssModules } from "../../bpk-react-utils";
22
+ import BpkPopover from "./BpkPopover";
22
23
  import keyboardFocusScope from "./keyboardFocusScope";
23
24
  import STYLES from "./BpkPopover.module.css";
24
- import BpkPopover from "./BpkPopover";
25
- import { jsx as _jsx } from "react/jsx-runtime";
26
- import { Fragment as _Fragment } from "react/jsx-runtime";
27
- import { jsxs as _jsxs } from "react/jsx-runtime";
25
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
28
26
  const getClassName = cssModules(STYLES);
29
27
  class BpkPopoverPortal extends Component {
30
28
  constructor() {
@@ -32,9 +30,10 @@ class BpkPopoverPortal extends Component {
32
30
  this.popper = null;
33
31
  this.previousTargetElement = null;
34
32
  }
35
- onRender = (popoverElement, targetElement) => {
36
- this.position(popoverElement, targetElement);
37
- };
33
+
34
+ // onRender = (popoverElement: HTMLElement, targetElement: ?HTMLElement) => {
35
+ // this.position(popoverElement, targetElement);
36
+ // };
38
37
 
39
38
  // The order of events here is as follows:
40
39
  // - `onClose` is called by `Portal`
@@ -44,125 +43,130 @@ class BpkPopoverPortal extends Component {
44
43
 
45
44
  // `onClose` is called by the `Portal` to inform the consumer that `isOpen` should be made false.
46
45
  // Before we pass this information to the consumer, we want to note if restoring focus should be suppressed
47
- onClose = (event, information) => {
48
- // If the user has clicked outside the popover then we don't want focus to be restored
49
- // otherwise it will be stolen back from the element they clicked on.
50
- // Here we suppress restoring focus before the consumer is told about the close and updates state.
51
- this.suppressRestoreFocus = information.source === 'DOCUMENT_CLICK';
52
- if (this.props.onClose) {
53
- this.props.onClose(event, information);
54
- }
55
- };
46
+ // onClose = (event: Object, information: { source: string }) => {
47
+ // // If the user has clicked outside the popover then we don't want focus to be restored
48
+ // // otherwise it will be stolen back from the element they clicked on.
49
+ // // Here we suppress restoring focus before the consumer is told about the close and updates state.
50
+ // this.suppressRestoreFocus = information.source === 'DOCUMENT_CLICK';
51
+
52
+ // if (this.props.onClose) {
53
+ // this.props.onClose(event, information);
54
+ // }
55
+ // };
56
56
 
57
57
  // `beforeClose` is called by the `Portal` when `isOpen` is changed to false.
58
58
  // As a result, `onClose` is called first, followed by `beforeClose`.
59
- beforeClose = done => {
60
- if (this.popper) {
61
- this.popper.destroy();
62
- this.popper = null;
63
- this.previousTargetElement = null;
64
- }
65
- keyboardFocusScope.unscopeFocus();
66
- if (!this.suppressRestoreFocus) {
67
- focusStore.restoreFocus();
68
- this.suppressRestoreFocus = false;
69
- }
70
- done();
71
- };
72
- position(popoverElement, targetElement) {
73
- if (!targetElement) {
74
- return;
75
- }
76
- const targetElementHasChanged = targetElement !== this.previousTargetElement;
77
- if (targetElementHasChanged && this.popper) {
78
- this.popper.destroy();
79
- this.popper = null;
80
- }
81
-
82
- // Custom modifier that makes the arrow display at the edge of the target.
83
- const applyArrowHide = {
84
- name: 'applyArrowHide',
85
- enabled: true,
86
- phase: 'write',
87
- fn({
88
- state
89
- }) {
90
- const {
91
- arrow
92
- } = state.elements;
93
- if (arrow) {
94
- if (state.modifiersData.arrow.centerOffset !== 0) {
95
- arrow.setAttribute('data-hide', '');
96
- } else {
97
- arrow.removeAttribute('data-hide');
98
- }
99
- }
100
- }
101
- };
102
-
103
- // The default modifiers for the popper
104
- // Note that GPU acceleration should be disabled otherwise Popper will use `translate3d`
105
- // which can cause blurriness in Safari and Chrome.
106
- const stdModifiers = [{
107
- name: 'computeStyles',
108
- options: {
109
- gpuAcceleration: false
110
- }
111
- }, {
112
- name: 'offset',
113
- options: {
114
- offset: [0, 17]
115
- }
116
- }, applyArrowHide];
117
- if (!this.popper) {
118
- this.popper = createPopper(targetElement, popoverElement, {
119
- placement: this.props.placement,
120
- onFirstUpdate: () => {
121
- if (targetElement) {
122
- targetElement.focus();
123
- }
124
- focusStore.storeFocus();
125
- keyboardFocusScope.scopeFocus(popoverElement);
126
- },
127
- modifiers: this.props.popperModifiers ? [...this.props.popperModifiers, ...stdModifiers] : stdModifiers
128
- });
129
- }
130
- this.previousTargetElement = targetElement;
131
- if (this.popper) {
132
- this.popper.update();
133
- }
134
- }
59
+ // beforeClose = (done: () => void) => {
60
+ // if (this.popper) {
61
+ // this.popper.destroy();
62
+ // this.popper = null;
63
+ // this.previousTargetElement = null;
64
+ // }
65
+
66
+ // keyboardFocusScope.unscopeFocus();
67
+ // if (!this.suppressRestoreFocus) {
68
+ // focusStore.restoreFocus();
69
+ // this.suppressRestoreFocus = false;
70
+ // }
71
+
72
+ // done();
73
+ // };
74
+
75
+ // position(popoverElement: HTMLElement, targetElement: ?HTMLElement) {
76
+ // if (!targetElement) {
77
+ // return;
78
+ // }
79
+
80
+ // const targetElementHasChanged =
81
+ // targetElement !== this.previousTargetElement;
82
+
83
+ // if (targetElementHasChanged && this.popper) {
84
+ // this.popper.destroy();
85
+ // this.popper = null;
86
+ // }
87
+
88
+ // // Custom modifier that makes the arrow display at the edge of the target.
89
+ // const applyArrowHide = {
90
+ // name: 'applyArrowHide',
91
+ // enabled: true,
92
+ // phase: 'write',
93
+ // fn({ state }) {
94
+ // const { arrow } = state.elements;
95
+ // if (arrow) {
96
+ // if (state.modifiersData.arrow.centerOffset !== 0) {
97
+ // arrow.setAttribute('data-hide', '');
98
+ // } else {
99
+ // arrow.removeAttribute('data-hide');
100
+ // }
101
+ // }
102
+ // },
103
+ // };
104
+
105
+ // // The default modifiers for the popper
106
+ // // Note that GPU acceleration should be disabled otherwise Popper will use `translate3d`
107
+ // // which can cause blurriness in Safari and Chrome.
108
+ // const stdModifiers = [
109
+ // {
110
+ // name: 'computeStyles',
111
+ // options: {
112
+ // gpuAcceleration: false,
113
+ // },
114
+ // },
115
+ // {
116
+ // name: 'offset',
117
+ // options: {
118
+ // offset: [0, 17],
119
+ // },
120
+ // },
121
+ // applyArrowHide,
122
+ // ];
123
+
124
+ // if (!this.popper) {
125
+ // this.popper = createPopper(targetElement, popoverElement, {
126
+ // placement: this.props.placement,
127
+ // onFirstUpdate: () => {
128
+ // if (targetElement) {
129
+ // targetElement.focus();
130
+ // }
131
+ // focusStore.storeFocus();
132
+ // keyboardFocusScope.scopeFocus(popoverElement);
133
+ // },
134
+ // modifiers: this.props.popperModifiers
135
+ // ? [...this.props.popperModifiers, ...stdModifiers]
136
+ // : stdModifiers,
137
+ // });
138
+ // }
139
+
140
+ // this.previousTargetElement = targetElement;
141
+ // if (this.popper) {
142
+ // this.popper.update();
143
+ // }
144
+ // }
145
+
135
146
  render() {
136
147
  const {
137
- isOpen,
138
- onClose,
139
- placement,
140
- popperModifiers,
148
+ // isOpen,
149
+ // onClose,
150
+ // placement,
151
+ // popperModifiers,
141
152
  portalClassName,
142
- portalStyle,
143
- renderTarget,
144
- target,
153
+ // portalStyle,
154
+ // renderTarget,
155
+ // target,
145
156
  ...rest
146
157
  } = this.props;
147
- const classNames = [getClassName('bpk-popover-portal')];
148
- if (portalClassName) {
149
- classNames.push(portalClassName);
150
- }
151
- return /*#__PURE__*/_jsxs(_Fragment, {
152
- children: [typeof target !== 'function' && target, /*#__PURE__*/_jsx(Portal, {
153
- beforeClose: this.beforeClose,
154
- className: classNames.join(' '),
155
- isOpen: isOpen,
158
+ const classNames = getClassName('bpk-popover-portal', portalClassName);
159
+
160
+ // if (portalClassName) {
161
+ // classNames.push(portalClassName);
162
+ // }
163
+
164
+ return /*#__PURE__*/_jsx(_Fragment, {
165
+ children: /*#__PURE__*/_jsx(BpkPopover, {
166
+ className: classNames,
156
167
  onClose: this.onClose,
157
- onRender: this.onRender,
158
- style: portalStyle,
159
- renderTarget: renderTarget,
160
- target: target,
161
- children: /*#__PURE__*/_jsx(BpkPopover, {
162
- onClose: this.onClose,
163
- ...rest
164
- })
165
- })]
168
+ ...rest
169
+ })
166
170
  });
167
171
  }
168
172
  }
@@ -21,8 +21,8 @@
21
21
  // it only prevents it leaving due to keyboard events.
22
22
  // Clicks outside the target element will move focus as normal.
23
23
 
24
- import tabbable from 'tabbable';
25
24
  import focusin from 'focusin';
25
+ import tabbable from 'tabbable';
26
26
  let polyfilled = false;
27
27
  let focusTrapped = false;
28
28
  const init = element => {
@@ -15,12 +15,11 @@
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */import PropTypes from 'prop-types';
18
- import { cssModules } from "../../bpk-react-utils";
19
18
  import BpkText, { TEXT_STYLES } from "../../bpk-component-text";
20
- import STYLES from "./BpkPrice.module.css";
19
+ import { cssModules } from "../../bpk-react-utils";
21
20
  import { SIZES, ALIGNS } from "./common-types";
22
- import { jsx as _jsx } from "react/jsx-runtime";
23
- import { jsxs as _jsxs } from "react/jsx-runtime";
21
+ import STYLES from "./BpkPrice.module.css";
22
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
23
  const getClassName = cssModules(STYLES);
25
24
  const BpkPrice = props => {
26
25
  const {
@@ -43,14 +42,20 @@ const BpkPrice = props => {
43
42
  ...rest,
44
43
  children: [/*#__PURE__*/_jsxs("div", {
45
44
  className: getClassName(previousPrice && 'bpk-price__leading', isAlignRight && 'bpk-price__leading--right', leadingClassName),
46
- children: [previousPrice && /*#__PURE__*/_jsx(BpkText, {
45
+ children: [previousPrice && /*#__PURE__*/_jsx(BpkText
46
+ // TODO: className to be removed
47
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
48
+ , {
47
49
  className: getClassName('bpk-price__previous-price'),
48
50
  textStyle: isSmall ? TEXT_STYLES.xs : TEXT_STYLES.sm,
49
51
  tagName: "span",
50
52
  children: previousPrice
51
53
  }), previousPrice && leadingText && /*#__PURE__*/_jsx(BpkText, {
52
54
  textStyle: isSmall ? TEXT_STYLES.xs : TEXT_STYLES.sm,
53
- tagName: "span",
55
+ tagName: "span"
56
+ // TODO: className to be removed
57
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
58
+ ,
54
59
  className: getClassName('bpk-price__separator'),
55
60
  children: "\uD802\uDD1F"
56
61
  }), leadingText && /*#__PURE__*/_jsx(BpkText, {
@@ -61,13 +66,19 @@ const BpkPrice = props => {
61
66
  }), /*#__PURE__*/_jsxs("div", {
62
67
  className: getClassName(isAlignRight && 'bpk-price__column-container'),
63
68
  children: [/*#__PURE__*/_jsx(BpkText, {
64
- textStyle: isSmall ? TEXT_STYLES.heading4 : TEXT_STYLES.xxl,
69
+ textStyle: isSmall ? TEXT_STYLES.heading4 : TEXT_STYLES.xxl
70
+ // TODO: className to be removed
71
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
72
+ ,
65
73
  className: getClassName('bpk-price__price', !isAlignRight && 'bpk-price__spacing'),
66
74
  tagName: "span",
67
75
  children: price
68
76
  }), trailingText && /*#__PURE__*/_jsx(BpkText, {
69
77
  textStyle: isSmall ? TEXT_STYLES.xs : TEXT_STYLES.sm,
70
- tagName: "span",
78
+ tagName: "span"
79
+ // TODO: className to be removed
80
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
81
+ ,
71
82
  className: getClassName('bpk-price__trailing'),
72
83
  children: trailingText
73
84
  })]
@@ -19,8 +19,7 @@ import { Component } from 'react';
19
19
  import clamp from 'lodash.clamp';
20
20
  import { cssModules } from "../../bpk-react-utils";
21
21
  import STYLES from "./BpkProgress.module.css";
22
- import { jsx as _jsx } from "react/jsx-runtime";
23
- import { jsxs as _jsxs } from "react/jsx-runtime";
22
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
23
  const getClassName = cssModules(STYLES);
25
24
  const isTransitionEndSupported = () => !!(typeof window !== 'undefined' && 'TransitionEvent' in window);
26
25
  const renderSteps = numberOfSteps => {
@@ -17,8 +17,7 @@
17
17
  */import PropTypes from 'prop-types';
18
18
  import { cssModules } from "../../bpk-react-utils";
19
19
  import STYLES from "./BpkRadio.module.css";
20
- import { jsx as _jsx } from "react/jsx-runtime";
21
- import { jsxs as _jsxs } from "react/jsx-runtime";
20
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
21
  const getClassName = cssModules(STYLES);
23
22
  const BpkRadio = props => {
24
23
  const {
@@ -16,12 +16,11 @@
16
16
  * limitations under the License.
17
17
  */import PropTypes from 'prop-types';
18
18
  import clamp from 'lodash.clamp';
19
- import { cssModules } from "../../bpk-react-utils";
20
19
  import BpkText, { TEXT_STYLES } from "../../bpk-component-text";
21
- import STYLES from "./BpkRating.module.css";
20
+ import { cssModules } from "../../bpk-react-utils";
22
21
  import { RATING_SIZES, RATING_SCALES } from "./common-types";
23
- import { jsxs as _jsxs } from "react/jsx-runtime";
24
- import { jsx as _jsx } from "react/jsx-runtime";
22
+ import STYLES from "./BpkRating.module.css";
23
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
25
24
  const getClassName = cssModules(STYLES);
26
25
  const getMinValue = () =>
27
26
  // Currently the min value is zero no matter what scale is used.
@@ -80,11 +79,17 @@ const BpkRating = props => {
80
79
  ...rest,
81
80
  children: [/*#__PURE__*/_jsxs(BpkText, {
82
81
  textStyle: valueTextSize,
83
- tagName: "span",
82
+ tagName: "span"
83
+ // TODO: className to be removed
84
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
85
+ ,
84
86
  className: valueStyles,
85
87
  "aria-hidden": "true",
86
88
  children: [adjustedValue, showScale && /*#__PURE__*/_jsxs(BpkText, {
87
- textStyle: scaleTextSize,
89
+ textStyle: scaleTextSize
90
+ // TODO: className to be removed
91
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
92
+ ,
88
93
  className: scaleStyles,
89
94
  tagName: "span",
90
95
  "aria-hidden": "true",
@@ -93,12 +98,18 @@ const BpkRating = props => {
93
98
  }), /*#__PURE__*/_jsxs("div", {
94
99
  className: textWrapperStyles,
95
100
  children: [title && /*#__PURE__*/_jsx(BpkText, {
96
- textStyle: titleTextSize,
101
+ textStyle: titleTextSize
102
+ // TODO: className to be removed
103
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
104
+ ,
97
105
  className: titleStyles,
98
106
  tagName: "span",
99
107
  "aria-hidden": "true",
100
108
  children: title
101
- }), subtitle && /*#__PURE__*/_jsx(BpkText, {
109
+ }), subtitle && /*#__PURE__*/_jsx(BpkText
110
+ // TODO: className to be removed
111
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
112
+ , {
102
113
  className: subtitleStyles,
103
114
  textStyle: subtitleTextSize,
104
115
  tagName: "span",
@@ -66,7 +66,10 @@ class BpkRtlToggle extends Component {
66
66
  const onOrOff = this.state.direction === DIRECTIONS.RTL ? 'off' : 'on';
67
67
  return /*#__PURE__*/_jsxs(BpkButtonLink, {
68
68
  title: "Keyboard Shortcut: ctrl + cmd + r",
69
- onClick: this.toggleRtl,
69
+ onClick: this.toggleRtl
70
+ // TODO: className to be removed
71
+ // eslint-disable-next-line @skyscanner/rules/forbid-component-props
72
+ ,
70
73
  className: className,
71
74
  children: ["RTL ", onOrOff]
72
75
  });