@skyscanner/backpack-web 9.2.0-beta.3 → 10.0.0

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 (118) hide show
  1. package/bpk-animate-height/package.json +3 -3
  2. package/bpk-component-accordion/package.json +7 -7
  3. package/bpk-component-aria-live/README.md +2 -2
  4. package/bpk-component-aria-live/{index.js → index.ts} +0 -1
  5. package/bpk-component-aria-live/package.json +9 -10
  6. package/bpk-component-aria-live/src/BpkAriaLive-test.tsx +60 -0
  7. package/bpk-component-aria-live/src/{BpkAriaLive.js → BpkAriaLive.tsx} +20 -26
  8. package/bpk-component-aria-live/src/accessibility-test.tsx +31 -0
  9. package/bpk-component-autosuggest/package.json +4 -4
  10. package/bpk-component-badge/package.json +5 -5
  11. package/bpk-component-banner-alert/package.json +9 -9
  12. package/bpk-component-barchart/package.json +8 -8
  13. package/bpk-component-blockquote/package.json +2 -2
  14. package/bpk-component-breadcrumb/package.json +5 -5
  15. package/bpk-component-breadcrumb/src/BpkBreadcrumbItem.module.scss +2 -2
  16. package/bpk-component-breakpoint/package.json +3 -3
  17. package/bpk-component-button/package.json +3 -3
  18. package/bpk-component-calendar/DOCS.md +1 -7
  19. package/bpk-component-calendar/README.md +0 -10
  20. package/bpk-component-calendar/index.js +0 -2
  21. package/bpk-component-calendar/package.json +9 -9
  22. package/bpk-component-calendar/src/BpkCalendarDate.js +0 -15
  23. package/bpk-component-calendar/src/BpkCalendarDate.module.scss +17 -50
  24. package/bpk-component-calendar/src/BpkCalendarGrid.js +3 -2
  25. package/bpk-component-calendar/src/BpkCalendarGrid.module.scss +5 -5
  26. package/bpk-component-calendar/src/_variables.scss +1 -3
  27. package/bpk-component-card/package.json +4 -4
  28. package/bpk-component-checkbox/package.json +5 -5
  29. package/bpk-component-chip/package.json +5 -5
  30. package/bpk-component-close-button/package.json +4 -4
  31. package/bpk-component-code/package.json +2 -2
  32. package/bpk-component-content-cards/README.md +43 -0
  33. package/bpk-component-content-cards/index.ts +21 -0
  34. package/bpk-component-content-cards/package.json +23 -0
  35. package/bpk-component-content-cards/src/BpkContentCard-test.tsx +88 -0
  36. package/bpk-component-content-cards/src/BpkContentCard.module.scss +87 -0
  37. package/bpk-component-content-cards/src/BpkContentCard.tsx +84 -0
  38. package/bpk-component-content-cards/src/BpkContentCards-test.tsx +126 -0
  39. package/bpk-component-content-cards/src/BpkContentCards.module.css +18 -0
  40. package/bpk-component-content-cards/src/BpkContentCards.module.scss +51 -0
  41. package/bpk-component-content-cards/src/BpkContentCards.tsx +72 -0
  42. package/bpk-component-content-cards/src/accessibility-test.tsx +64 -0
  43. package/bpk-component-content-container/package.json +2 -2
  44. package/bpk-component-datatable/README.md +78 -21
  45. package/bpk-component-datatable/package.json +5 -6
  46. package/bpk-component-datatable/src/BpkDataTable.js +176 -143
  47. package/bpk-component-datatable/src/BpkDataTable.module.scss +10 -14
  48. package/bpk-component-datatable/src/BpkDataTableColumn.js +37 -40
  49. package/bpk-component-datatable/src/BpkDataTableHeader.js +143 -0
  50. package/bpk-component-datatable/src/{BpkDataTableColumn.module.scss → BpkDataTableHeader.module.scss} +12 -11
  51. package/bpk-component-datatable/src/common-types.js +33 -11
  52. package/bpk-component-datatable/src/sort-types.js +6 -0
  53. package/bpk-component-datatable/src/utils.js +66 -9
  54. package/bpk-component-datepicker/package.json +9 -9
  55. package/bpk-component-description-list/package.json +2 -2
  56. package/bpk-component-dialog/package.json +8 -8
  57. package/bpk-component-drawer/package.json +9 -9
  58. package/bpk-component-fieldset/package.json +12 -12
  59. package/bpk-component-flare/package.json +4 -4
  60. package/bpk-component-floating-notification/package.json +5 -5
  61. package/bpk-component-form-validation/package.json +10 -10
  62. package/bpk-component-graphic-promotion/package.json +6 -5
  63. package/bpk-component-graphic-promotion/src/BpkGraphicPromo-test.tsx +3 -2
  64. package/bpk-component-graphic-promotion/src/BpkGraphicPromo.tsx +24 -24
  65. package/bpk-component-grid/package.json +2 -2
  66. package/bpk-component-grid-toggle/package.json +3 -3
  67. package/bpk-component-horizontal-nav/package.json +6 -6
  68. package/bpk-component-icon/package.json +7 -7
  69. package/bpk-component-image/package.json +6 -6
  70. package/bpk-component-infinite-scroll/package.json +6 -6
  71. package/bpk-component-input/package.json +6 -6
  72. package/bpk-component-label/package.json +2 -2
  73. package/bpk-component-link/package.json +4 -4
  74. package/bpk-component-list/README.md +8 -5
  75. package/bpk-component-list/package.json +2 -2
  76. package/bpk-component-list/src/BpkList.js +18 -2
  77. package/bpk-component-loading-button/package.json +6 -6
  78. package/bpk-component-map/package.json +6 -6
  79. package/bpk-component-map/src/BpkIconMarker.module.scss +3 -3
  80. package/bpk-component-map/src/BpkIconMarkerBackground.module.scss +4 -4
  81. package/bpk-component-map/src/BpkPriceMarker.module.scss +17 -17
  82. package/bpk-component-map/src/DefaultLoadingElement.module.scss +1 -1
  83. package/bpk-component-mobile-scroll-container/package.json +3 -3
  84. package/bpk-component-modal/package.json +9 -9
  85. package/bpk-component-navigation-bar/package.json +8 -8
  86. package/bpk-component-nudger/package.json +7 -7
  87. package/bpk-component-overlay/package.json +4 -4
  88. package/bpk-component-pagination/package.json +4 -4
  89. package/bpk-component-panel/package.json +2 -2
  90. package/bpk-component-phone-input/package.json +9 -9
  91. package/bpk-component-popover/package.json +8 -8
  92. package/bpk-component-price/package.json +3 -3
  93. package/bpk-component-progress/package.json +5 -5
  94. package/bpk-component-radio/package.json +4 -4
  95. package/bpk-component-rating/package.json +4 -4
  96. package/bpk-component-rtl-toggle/package.json +2 -2
  97. package/bpk-component-scrollable-calendar/package.json +7 -7
  98. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarGridList.js +100 -69
  99. package/bpk-component-scrollable-calendar/src/utils.js +24 -1
  100. package/bpk-component-section-list/package.json +6 -6
  101. package/bpk-component-select/package.json +3 -3
  102. package/bpk-component-skip-link/package.json +2 -2
  103. package/bpk-component-slider/package.json +4 -4
  104. package/bpk-component-spinner/package.json +3 -3
  105. package/bpk-component-split-input/package.json +3 -3
  106. package/bpk-component-star-rating/package.json +5 -5
  107. package/bpk-component-switch/package.json +2 -2
  108. package/bpk-component-table/package.json +2 -2
  109. package/bpk-component-text/package.json +2 -2
  110. package/bpk-component-textarea/package.json +4 -4
  111. package/bpk-component-theme-toggle/package.json +5 -5
  112. package/bpk-component-ticket/package.json +4 -4
  113. package/bpk-component-tooltip/package.json +4 -4
  114. package/bpk-scrim-utils/package.json +2 -2
  115. package/bpk-theming/package.json +2 -2
  116. package/package.json +6 -5
  117. package/bpk-component-datatable/src/bpkHeaderRenderer.js +0 -110
  118. package/bpk-component-datatable/src/sorter.js +0 -166
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-phone-input",
3
- "version": "8.0.1",
3
+ "version": "8.0.3",
4
4
  "description": "Backpack phone input component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,12 +14,12 @@
14
14
  },
15
15
  "gitHead": "f9f94f86d7cfc75e43bc6ad5eb01b23e62a89cc8",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-foundations-web": "^8.5.0",
18
- "bpk-component-input": "^7.0.1",
19
- "bpk-component-label": "^6.0.1",
20
- "bpk-component-select": "^6.0.1",
21
- "bpk-component-text": "^8.0.1",
22
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
18
+ "bpk-component-input": "^7.0.3",
19
+ "bpk-component-label": "^6.0.3",
20
+ "bpk-component-select": "^6.0.3",
21
+ "bpk-component-text": "^8.0.3",
22
+ "bpk-mixins": "^31.6.1",
23
23
  "bpk-react-utils": "^7.0.0",
24
24
  "prop-types": "^15.7.2"
25
25
  },
@@ -27,7 +27,7 @@
27
27
  "react": "^17.0.2"
28
28
  },
29
29
  "devDependencies": {
30
- "bpk-component-fieldset": "^5.0.1",
31
- "bpk-component-image": "^6.0.1"
30
+ "bpk-component-fieldset": "^5.0.3",
31
+ "bpk-component-image": "^6.0.3"
32
32
  }
33
33
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-popover",
3
- "version": "8.0.1",
3
+ "version": "8.0.3",
4
4
  "description": "Backpack popover component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -17,10 +17,10 @@
17
17
  "@popperjs/core": "^2.11.5",
18
18
  "a11y-focus-scope": "^1.1.3",
19
19
  "a11y-focus-store": "^1.0.0",
20
- "bpk-component-close-button": "^4.0.1",
21
- "bpk-component-link": "^4.0.1",
22
- "bpk-component-text": "^8.0.1",
23
- "bpk-mixins": "^31.4.0",
20
+ "bpk-component-close-button": "^4.0.3",
21
+ "bpk-component-link": "^4.0.3",
22
+ "bpk-component-text": "^8.0.3",
23
+ "bpk-mixins": "^31.6.1",
24
24
  "bpk-react-utils": "^7.0.0",
25
25
  "prop-types": "^15.7.2"
26
26
  },
@@ -28,8 +28,8 @@
28
28
  "react": "^17.0.2"
29
29
  },
30
30
  "devDependencies": {
31
- "bpk-component-button": "^7.0.1",
32
- "bpk-component-content-container": "^6.0.1",
33
- "bpk-component-input": "^7.0.1"
31
+ "bpk-component-button": "^7.0.3",
32
+ "bpk-component-content-container": "^6.0.3",
33
+ "bpk-component-input": "^7.0.3"
34
34
  }
35
35
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-price",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Backpack price component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -13,8 +13,8 @@
13
13
  "registry": "https://registry.npmjs.org/"
14
14
  },
15
15
  "dependencies": {
16
- "bpk-component-text": "^8.0.1",
17
- "bpk-mixins": "^31.4.0",
16
+ "bpk-component-text": "^8.0.3",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.5.8"
20
20
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-progress",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack progress bar component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-foundations-web": "^8.5.0",
18
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
18
+ "bpk-mixins": "^31.6.1",
19
19
  "bpk-react-utils": "^7.0.0",
20
20
  "lodash.clamp": "^4.0.3",
21
21
  "prop-types": "^15.7.2"
@@ -24,7 +24,7 @@
24
24
  "react": "^17.0.2"
25
25
  },
26
26
  "devDependencies": {
27
- "bpk-component-button": "^7.0.1",
28
- "bpk-storybook-utils": "^2.0.1"
27
+ "bpk-component-button": "^7.0.3",
28
+ "bpk-storybook-utils": "^2.0.3"
29
29
  }
30
30
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-radio",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack radio button component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "bpk-mixins": "^31.4.0",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.7.2"
20
20
  },
@@ -22,7 +22,7 @@
22
22
  "react": "^17.0.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@skyscanner/bpk-foundations-web": "^8.5.0",
26
- "bpk-storybook-utils": "^2.0.1"
25
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
26
+ "bpk-storybook-utils": "^2.0.3"
27
27
  }
28
28
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-rating",
3
- "version": "6.0.1",
3
+ "version": "6.0.3",
4
4
  "description": "Backpack rating component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "gitHead": "f9f94f86d7cfc75e43bc6ad5eb01b23e62a89cc8",
16
16
  "dependencies": {
17
- "bpk-mixins": "^31.4.0",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "lodash.clamp": "^4.0.3",
20
20
  "prop-types": "^15.5.8"
@@ -23,7 +23,7 @@
23
23
  "react": "^17.0.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@skyscanner/bpk-foundations-web": "^8.5.0",
27
- "bpk-component-text": "^8.0.1"
26
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
27
+ "bpk-component-text": "^8.0.3"
28
28
  }
29
29
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-rtl-toggle",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack RTL toggle component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "bpk-component-link": "^4.0.1",
17
+ "bpk-component-link": "^4.0.3",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.7.2"
20
20
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-scrollable-calendar",
3
- "version": "7.0.1",
3
+ "version": "7.1.1",
4
4
  "description": "Backpack scrollable calendar component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,17 +14,17 @@
14
14
  },
15
15
  "gitHead": "4e4ec9add28e1db54d6a38a10c331bbd163f2926",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-foundations-web": "^8.5.0",
18
- "bpk-component-calendar": "^12.0.1",
19
- "bpk-component-text": "^8.0.1",
20
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
18
+ "bpk-component-calendar": "^13.0.0",
19
+ "bpk-component-text": "^8.0.3",
20
+ "bpk-mixins": "^31.6.1",
21
21
  "bpk-react-utils": "^7.0.0",
22
22
  "date-fns": "^2.21.1",
23
23
  "prop-types": "^15.5.8",
24
- "react-virtualized": "^9.22.3"
24
+ "react-window": "^1.8.7"
25
25
  },
26
26
  "devDependencies": {
27
- "bpk-storybook-utils": "^2.0.1"
27
+ "bpk-storybook-utils": "^2.0.3"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "react": "^17.0.2"
@@ -19,12 +19,7 @@
19
19
  import PropTypes from 'prop-types';
20
20
  import React from 'react';
21
21
  import { startOfDay, startOfMonth } from 'date-fns';
22
- import {
23
- AutoSizer,
24
- List,
25
- CellMeasurer,
26
- CellMeasurerCache,
27
- } from 'react-virtualized';
22
+ import { VariableSizeList as List } from 'react-window';
28
23
 
29
24
  import { cssModules, deprecated } from '../../bpk-react-utils';
30
25
  import {
@@ -34,16 +29,24 @@ import {
34
29
 
35
30
  import STYLES from './BpkScrollableCalendarGridList.module.scss';
36
31
  import BpkScrollableCalendarGrid from './BpkScrollableCalendarGrid';
37
- import getMonthsArray from './utils';
32
+ import { getMonthsArray, getMonthItemHeights } from './utils';
38
33
 
39
34
  const getClassName = cssModules(STYLES);
40
35
 
36
+ // The `react-window` API requires the height in pixels to be specified.
37
+ // These constants are here to facilitate calculating the height.
38
+ const ROW_HEIGHT = 44;
39
+ // This is the additional height of each grid without any rows.
40
+ const BASE_MONTH_ITEM_HEIGHT = 130;
41
+ const COLUMN_COUNT = 7;
42
+ // Most calendar grids have 5 rows:
43
+ const ESTIMATED_MONTH_ITEM_HEIGHT = BASE_MONTH_ITEM_HEIGHT + 5 * ROW_HEIGHT;
44
+
41
45
  class BpkScrollableCalendarGridList extends React.Component {
42
46
  constructor(props) {
43
47
  super(props);
44
48
 
45
- this.rowRenderer = this.rowRenderer.bind(this);
46
- this.renderList = this.renderList.bind(this);
49
+ this.outerDiv = null;
47
50
 
48
51
  const startDate = startOfDay(startOfMonth(this.props.minDate));
49
52
  const endDate = startOfDay(startOfMonth(this.props.maxDate));
@@ -52,88 +55,116 @@ class BpkScrollableCalendarGridList extends React.Component {
52
55
  startDate,
53
56
  );
54
57
  const months = getMonthsArray(startDate, monthsCount);
58
+ const monthItemHeights = getMonthItemHeights(
59
+ months,
60
+ props.weekStartsOn,
61
+ COLUMN_COUNT,
62
+ ROW_HEIGHT,
63
+ BASE_MONTH_ITEM_HEIGHT,
64
+ );
55
65
 
56
- const cache = new CellMeasurerCache({
57
- fixedWidth: true,
58
- defaultHeight: 276, // most common height (in px) of BpkScrollableCalendarGrid
59
- });
60
66
  this.state = {
61
67
  months,
62
- cache,
68
+ monthItemHeights,
69
+ outerHeight: ESTIMATED_MONTH_ITEM_HEIGHT,
63
70
  };
64
71
  }
65
72
 
73
+ componentDidMount = () => {
74
+ this.setComponentHeight();
75
+ if (typeof document !== 'undefined') {
76
+ window.addEventListener('resize', this.setComponentHeight);
77
+ document.addEventListener('orientationchange', this.setComponentHeight);
78
+ document.addEventListener('fullscreenchange', this.setComponentHeight);
79
+ }
80
+ };
81
+
82
+ componentWillUnmount = () => {
83
+ if (typeof document !== 'undefined') {
84
+ window.removeEventListener('resize', this.setComponentHeight);
85
+ document.removeEventListener(
86
+ 'orientationchange',
87
+ this.setComponentHeight,
88
+ );
89
+ document.removeEventListener('fullscreenchange', this.setComponentHeight);
90
+ }
91
+ };
92
+
66
93
  getHtmlElement = () =>
67
94
  typeof document !== 'undefined' ? document.querySelector('html') : {};
68
95
 
69
- rowRenderer({ index, key, parent, style }) {
70
- return (
71
- <CellMeasurer
72
- key={key}
73
- cache={this.state.cache}
74
- parent={parent}
75
- columnIndex={0}
76
- rowIndex={index}
77
- >
78
- <div style={style}>
79
- <BpkScrollableCalendarGrid
80
- onDateClick={this.props.onDateClick}
81
- {...this.props}
82
- key={key}
83
- month={this.state.months[index]}
84
- focusedDate={this.props.focusedDate}
85
- preventKeyboardFocus={this.props.preventKeyboardFocus}
86
- aria-hidden={index !== 1}
87
- className={getClassName('bpk-scrollable-calendar-grid-list__item')}
88
- />
89
- </div>
90
- </CellMeasurer>
91
- );
92
- }
96
+ getItemSize = (index) =>
97
+ this.state.monthItemHeights[index] || ESTIMATED_MONTH_ITEM_HEIGHT;
93
98
 
94
- renderList(width, height, minDate, focusedDate, selectionConfiguration) {
95
- const { date, startDate } = selectionConfiguration || {};
96
- const selectedDate = focusedDate || date || startDate;
97
- return (
98
- <List
99
- extraData={this.props}
100
- style={this.getHtmlElement().dir === 'rtl' ? { direction: 'rtl' } : {}}
101
- width={width}
102
- height={height}
103
- deferredMeasurementCache={this.state.cache}
104
- rowHeight={this.state.cache.rowHeight}
105
- rowRenderer={this.rowRenderer}
106
- rowCount={this.state.months.length}
107
- overscanRowCount={0}
108
- scrollToIndex={
109
- selectedDate
110
- ? DateUtils.differenceInCalendarMonths(selectedDate, minDate)
111
- : 0
112
- }
99
+ setComponentHeight = () => {
100
+ const outerNode = this.outerDiv;
101
+ if (outerNode) {
102
+ const newHeight = outerNode.clientHeight;
103
+ this.setState({ outerHeight: newHeight });
104
+ } else {
105
+ this.setState({ outerHeight: ESTIMATED_MONTH_ITEM_HEIGHT });
106
+ }
107
+ };
108
+
109
+ rowRenderer = ({ index, style }) => (
110
+ <div style={style}>
111
+ <BpkScrollableCalendarGrid
112
+ onDateClick={this.props.onDateClick}
113
+ {...this.props}
114
+ month={this.state.months[index]}
115
+ focusedDate={this.props.focusedDate}
116
+ preventKeyboardFocus={this.props.preventKeyboardFocus}
117
+ aria-hidden={index !== 1}
118
+ className={getClassName('bpk-scrollable-calendar-grid-list__item')}
113
119
  />
114
- );
115
- }
120
+ </div>
121
+ );
122
+
123
+ calculateOffsetInPixels = (numberOfMonths) => {
124
+ // The `react-window` API requires the scroll offset to be provided in pixels.
125
+ // Here we use the pre-calculated item heights to find the correct pixel offset
126
+ let result = 0;
127
+ for (let i = 0; i < numberOfMonths; i += 1) {
128
+ result += this.getItemSize(i);
129
+ }
130
+ return result;
131
+ };
116
132
 
117
133
  render() {
118
134
  const { focusedDate, minDate, selectionConfiguration } = this.props;
135
+ const { date, startDate } = selectionConfiguration || {};
136
+ const selectedDate = focusedDate || date || startDate;
137
+
119
138
  return (
120
139
  <div
121
140
  className={getClassName(
122
141
  'bpk-scrollable-calendar-grid-list',
123
142
  this.props.className,
124
143
  )}
144
+ ref={(div) => {
145
+ this.outerDiv = div;
146
+ }}
125
147
  >
126
- <AutoSizer>
127
- {({ height, width }) =>
128
- this.renderList(
129
- width,
130
- height,
131
- minDate,
132
- focusedDate,
133
- selectionConfiguration,
134
- )
148
+ <List
149
+ extraData={this.props}
150
+ style={
151
+ this.getHtmlElement().dir === 'rtl' ? { direction: 'rtl' } : {}
135
152
  }
136
- </AutoSizer>
153
+ width="100%"
154
+ height={this.state.outerHeight}
155
+ estimatedItemSize={ESTIMATED_MONTH_ITEM_HEIGHT}
156
+ itemSize={this.getItemSize}
157
+ itemCount={this.state.months.length}
158
+ rowCount={this.state.months.length}
159
+ overscanCount={1}
160
+ initialScrollOffset={this.calculateOffsetInPixels(
161
+ selectedDate
162
+ ? DateUtils.differenceInCalendarMonths(selectedDate, minDate)
163
+ : 0,
164
+ )}
165
+ >
166
+ {this.rowRenderer}
167
+ </List>
137
168
  </div>
138
169
  );
139
170
  }
@@ -27,4 +27,27 @@ const getMonthsArray = (startDate, count) => {
27
27
 
28
28
  return months;
29
29
  };
30
- export default getMonthsArray;
30
+
31
+ // Here we calculate the height of each calendar grid item in pixels, as the `react-window` API
32
+ // requires that these are provided so that they can be efficiently rendered.
33
+ const getMonthItemHeights = (
34
+ months,
35
+ weekStartsOn,
36
+ columnCount,
37
+ rowHeight,
38
+ baseMonthItemHeight,
39
+ ) => {
40
+ const monthItemHeights = months.map((month) => {
41
+ const firstDayOffset = (month.getDay() + 7 - weekStartsOn) % 7;
42
+ const monthLength = DateUtils.daysInMonth(
43
+ month.getYear(),
44
+ month.getMonth(),
45
+ );
46
+ const calendarGridSpaces = firstDayOffset + monthLength;
47
+ const rowCount = Math.ceil(calendarGridSpaces / columnCount);
48
+ return baseMonthItemHeight + rowHeight * rowCount;
49
+ });
50
+ return monthItemHeights;
51
+ };
52
+
53
+ export { getMonthsArray, getMonthItemHeights };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-section-list",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack section list component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,15 +14,15 @@
14
14
  },
15
15
  "gitHead": "f9f94f86d7cfc75e43bc6ad5eb01b23e62a89cc8",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-foundations-web": "^8.5.0",
18
- "bpk-component-icon": "^10.0.1",
19
- "bpk-component-text": "^8.0.1",
20
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
18
+ "bpk-component-icon": "^10.0.3",
19
+ "bpk-component-text": "^8.0.3",
20
+ "bpk-mixins": "^31.6.1",
21
21
  "bpk-react-utils": "^7.0.0",
22
22
  "prop-types": "^15.7.2"
23
23
  },
24
24
  "devDependencies": {
25
- "bpk-storybook-utils": "^2.0.1"
25
+ "bpk-storybook-utils": "^2.0.3"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": "^17.0.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-select",
3
- "version": "6.0.1",
3
+ "version": "6.0.3",
4
4
  "description": "Backpack select component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,12 +14,12 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "bpk-mixins": "^31.4.0",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.7.2"
20
20
  },
21
21
  "devDependencies": {
22
- "bpk-storybook-utils": "^2.0.1"
22
+ "bpk-storybook-utils": "^2.0.3"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": "^17.0.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-skip-link",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "Backpack skip-link component.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -13,7 +13,7 @@
13
13
  "react": "^17.0.2"
14
14
  },
15
15
  "dependencies": {
16
- "bpk-mixins": "^31.4.0",
16
+ "bpk-mixins": "^31.6.1",
17
17
  "bpk-react-utils": "^7.0.0",
18
18
  "prop-types": "^15.5.8"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-slider",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack slider component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-foundations-web": "^8.5.0",
18
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-foundations-web": "^9.2.0",
18
+ "bpk-mixins": "^31.6.1",
19
19
  "bpk-react-utils": "^7.0.0",
20
20
  "prop-types": "^15.7.2",
21
21
  "react-slider": "^1.3.1"
@@ -24,6 +24,6 @@
24
24
  "react": "^17.0.2"
25
25
  },
26
26
  "devDependencies": {
27
- "bpk-component-rtl-toggle": "^4.0.1"
27
+ "bpk-component-rtl-toggle": "^4.0.3"
28
28
  }
29
29
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-spinner",
3
- "version": "6.0.1",
3
+ "version": "6.0.3",
4
4
  "description": "Backpack spinner components.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "@skyscanner/bpk-svgs": "^14.3.6",
18
- "bpk-mixins": "^31.4.0",
17
+ "@skyscanner/bpk-svgs": "^14.4.1",
18
+ "bpk-mixins": "^31.6.1",
19
19
  "bpk-react-utils": "^7.0.0",
20
20
  "prop-types": "^15.7.2"
21
21
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-split-input",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Backpack split-input component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -13,8 +13,8 @@
13
13
  "registry": "https://registry.npmjs.org/"
14
14
  },
15
15
  "dependencies": {
16
- "bpk-component-input": "^7.0.1",
17
- "bpk-mixins": "^31.4.0",
16
+ "bpk-component-input": "^7.0.3",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.5.8"
20
20
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-star-rating",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "Backpack rating star component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "gitHead": "f9f94f86d7cfc75e43bc6ad5eb01b23e62a89cc8",
16
16
  "dependencies": {
17
- "bpk-component-icon": "^10.0.1",
18
- "bpk-mixins": "^31.4.0",
17
+ "bpk-component-icon": "^10.0.3",
18
+ "bpk-mixins": "^31.6.1",
19
19
  "bpk-react-utils": "^7.0.0",
20
20
  "prop-types": "^15.7.2"
21
21
  },
@@ -23,7 +23,7 @@
23
23
  "react": "^17.0.2"
24
24
  },
25
25
  "devDependencies": {
26
- "bpk-component-table": "^4.0.1",
27
- "bpk-storybook-utils": "^2.0.1"
26
+ "bpk-component-table": "^4.0.3",
27
+ "bpk-storybook-utils": "^2.0.3"
28
28
  }
29
29
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpk-component-switch",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "Backpack switch component.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "gitHead": "5c156b97cb0ba5e75851d3c763334578714c895e",
16
16
  "dependencies": {
17
- "bpk-mixins": "^31.4.0",
17
+ "bpk-mixins": "^31.6.1",
18
18
  "bpk-react-utils": "^7.0.0",
19
19
  "prop-types": "^15.5.8"
20
20
  },