@skyscanner/backpack-web 0.4.0 → 2.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 (220) hide show
  1. package/bpk-component-accordion/src/BpkAccordion.js +1 -2
  2. package/bpk-component-accordion/src/BpkAccordionItem.js +5 -6
  3. package/bpk-component-accordion/src/withAccordionItemState.js +1 -2
  4. package/bpk-component-accordion/src/withSingleItemAccordionState.js +1 -2
  5. package/bpk-component-aria-live/src/BpkAriaLive.js +1 -2
  6. package/bpk-component-autosuggest/src/BpkAutosuggest.js +2 -3
  7. package/bpk-component-autosuggest/src/BpkAutosuggestSuggestion.js +1 -2
  8. package/bpk-component-badge/src/BpkBadge.js +1 -2
  9. package/bpk-component-banner-alert/src/AnimateAndFade.js +2 -3
  10. package/bpk-component-banner-alert/src/BpkBannerAlertInner.js +7 -8
  11. package/bpk-component-banner-alert/src/withBannerAlertState.js +1 -2
  12. package/bpk-component-barchart/src/BpkBarchart.js +2 -3
  13. package/bpk-component-barchart/src/BpkBarchartBar.js +1 -2
  14. package/bpk-component-barchart/src/BpkChartAxis.js +1 -2
  15. package/bpk-component-barchart/src/BpkChartDataTable.js +1 -2
  16. package/bpk-component-barchart/src/BpkChartGridLines.js +1 -2
  17. package/bpk-component-barchart/src/RTLtransforms.js +1 -1
  18. package/bpk-component-blockquote/src/BpkBlockquote.js +1 -2
  19. package/bpk-component-breadcrumb/src/BpkBreadcrumb.js +1 -2
  20. package/bpk-component-breadcrumb/src/BpkBreadcrumbItem.js +5 -6
  21. package/bpk-component-breakpoint/src/BpkBreakpoint.js +3 -0
  22. package/bpk-component-calendar/src/BpkCalendarContainer.js +1 -2
  23. package/bpk-component-calendar/src/BpkCalendarDate.js +1 -2
  24. package/bpk-component-calendar/src/BpkCalendarGrid.js +1 -2
  25. package/bpk-component-calendar/src/BpkCalendarGridHeader.js +1 -2
  26. package/bpk-component-calendar/src/BpkCalendarGridTransition.js +1 -2
  27. package/bpk-component-calendar/src/BpkCalendarNav.js +5 -6
  28. package/bpk-component-calendar/src/Week.js +1 -2
  29. package/bpk-component-calendar/src/composeCalendar.js +1 -2
  30. package/bpk-component-card/src/BpkCard.js +1 -2
  31. package/bpk-component-checkbox/src/BpkCheckbox.js +1 -2
  32. package/bpk-component-chip/src/BpkDismissibleChip.js +1 -2
  33. package/bpk-component-chip/src/BpkSelectableChip.js +2 -3
  34. package/bpk-component-close-button/src/BpkCloseButton.js +2 -3
  35. package/bpk-component-code/src/BpkCode.js +1 -2
  36. package/bpk-component-code/src/BpkCodeBlock.js +1 -2
  37. package/bpk-component-content-container/src/BpkContentContainer.js +1 -2
  38. package/bpk-component-datatable/src/BpkDataTable.js +1 -2
  39. package/bpk-component-datatable/src/BpkDataTableColumn.js +1 -2
  40. package/bpk-component-datatable/src/bpkHeaderRenderer.js +4 -5
  41. package/bpk-component-datepicker/index.js +1 -1
  42. package/bpk-component-datepicker/src/BpkDatepicker.js +6 -7
  43. package/bpk-component-datepicker/src/themeAttributes.js +3 -3
  44. package/bpk-component-description-list/src/ComponentFactory.js +1 -2
  45. package/bpk-component-dialog/src/BpkDialog.js +2 -3
  46. package/bpk-component-dialog/src/BpkDialogInner.js +3 -4
  47. package/bpk-component-drawer/src/BpkDrawer.js +2 -3
  48. package/bpk-component-drawer/src/BpkDrawerContent.js +3 -4
  49. package/bpk-component-drawer/src/themeAttributes.js +1 -1
  50. package/bpk-component-fieldset/src/BpkFieldset.js +3 -4
  51. package/bpk-component-flare/src/BpkContentBubble.js +1 -2
  52. package/bpk-component-flare/src/BpkFlareBar.js +1 -2
  53. package/bpk-component-flare/src/__generated__/js/pointer.js +1 -1
  54. package/bpk-component-flare/src/svgs/pointer.svg +1 -1
  55. package/bpk-component-form-validation/src/BpkFormValidation.js +4 -5
  56. package/bpk-component-graphic-promotion/src/BpkGraphicPromo.js +4 -5
  57. package/bpk-component-grid/src/BpkGridColumn.js +1 -2
  58. package/bpk-component-grid/src/BpkGridContainer.js +1 -2
  59. package/bpk-component-grid/src/BpkGridRow.js +1 -2
  60. package/bpk-component-grid-toggle/src/BpkGridToggle.js +2 -3
  61. package/bpk-component-horizontal-nav/src/BpkHorizontalNav.js +2 -3
  62. package/bpk-component-horizontal-nav/src/BpkHorizontalNavItem.js +1 -2
  63. package/bpk-component-icon/src/classNameModifierHOCFactory.js +1 -2
  64. package/bpk-component-icon/src/withAlignment.js +1 -2
  65. package/bpk-component-icon/src/withDescription.js +1 -2
  66. package/bpk-component-icon/src/withRtlSupport.js +1 -1
  67. package/bpk-component-image/src/BpkBackgroundImage.js +2 -3
  68. package/bpk-component-image/src/BpkImage.js +2 -3
  69. package/bpk-component-image/src/withLazyLoading.js +1 -2
  70. package/bpk-component-image/src/withLoadingBehavior.js +1 -2
  71. package/bpk-component-infinite-scroll/src/withInfiniteScroll.js +1 -2
  72. package/bpk-component-input/src/BpkClearButton.js +3 -4
  73. package/bpk-component-input/src/BpkInput.js +1 -2
  74. package/bpk-component-input/src/withOpenEvents.js +1 -2
  75. package/bpk-component-label/src/BpkLabel.js +1 -2
  76. package/bpk-component-link/src/BpkButtonLink.js +1 -2
  77. package/bpk-component-link/src/BpkLink.js +1 -2
  78. package/bpk-component-list/src/BpkList.js +1 -2
  79. package/bpk-component-list/src/BpkListItem.js +1 -2
  80. package/bpk-component-loading-button/src/BpkLoadingButton.js +6 -7
  81. package/bpk-component-map/src/BpkIconMarker.js +1 -2
  82. package/bpk-component-map/src/BpkIconMarkerBackground.js +1 -2
  83. package/bpk-component-map/src/BpkMap.js +1 -2
  84. package/bpk-component-map/src/BpkPriceMarker.js +2 -3
  85. package/bpk-component-map/src/DefaultLoadingElement.js +2 -3
  86. package/bpk-component-mobile-scroll-container/src/BpkMobileScrollContainer.js +1 -2
  87. package/bpk-component-modal/src/BpkModal.js +2 -3
  88. package/bpk-component-modal/src/BpkModalInner.js +4 -5
  89. package/bpk-component-modal/src/themeAttributes.js +1 -1
  90. package/bpk-component-navigation-bar/src/BpkNavigationBar.js +2 -3
  91. package/bpk-component-navigation-bar/src/BpkNavigationBarButtonLink.js +2 -3
  92. package/bpk-component-navigation-bar/src/BpkNavigationBarIconButton.js +2 -3
  93. package/bpk-component-navigation-stack/src/BpkNavigationStack.js +1 -2
  94. package/bpk-component-nudger/src/BpkConfigurableNudger.js +6 -7
  95. package/bpk-component-nudger/src/BpkNudger.js +1 -2
  96. package/bpk-component-nudger/src/themeAttributes.js +1 -1
  97. package/bpk-component-overlay/src/BpkOverlay.js +1 -2
  98. package/bpk-component-pagination/src/BpkPagination.js +1 -2
  99. package/bpk-component-pagination/src/BpkPaginationList.js +1 -2
  100. package/bpk-component-pagination/src/BpkPaginationNudger.js +4 -5
  101. package/bpk-component-pagination/src/BpkPaginationPage.js +2 -3
  102. package/bpk-component-pagination/src/themeAttributes.js +1 -1
  103. package/bpk-component-panel/src/BpkPanel.js +1 -2
  104. package/bpk-component-phone-input/src/BpkPhoneInput.js +4 -5
  105. package/bpk-component-popover/src/BpkPopover.js +4 -5
  106. package/bpk-component-popover/src/BpkPopoverPortal.js +1 -2
  107. package/bpk-component-popover/src/themeAttributes.js +1 -1
  108. package/bpk-component-progress/src/BpkProgress.js +1 -2
  109. package/bpk-component-radio/src/BpkRadio.js +1 -2
  110. package/bpk-component-rating/README.md +40 -33
  111. package/bpk-component-rating/index.js +2 -3
  112. package/bpk-component-rating/src/BpkRating.js +54 -79
  113. package/bpk-component-rating/src/BpkRating.module.scss +37 -99
  114. package/bpk-component-rating/src/common-types.js +1 -6
  115. package/bpk-component-rtl-toggle/src/BpkRtlToggle.js +1 -2
  116. package/bpk-component-rtl-toggle/src/updateOnDirectionChange.js +1 -2
  117. package/bpk-component-scrollable-calendar/index.js +1 -1
  118. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendar.js +1 -1
  119. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarDate.js +1 -2
  120. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarGrid.js +3 -4
  121. package/bpk-component-scrollable-calendar/src/BpkScrollableCalendarGridList.js +2 -6
  122. package/bpk-component-scrollable-calendar/src/utils.js +1 -1
  123. package/bpk-component-section-list/src/BpkSectionListItem.js +3 -4
  124. package/bpk-component-section-list/src/BpkSectionListSection.js +2 -3
  125. package/bpk-component-select/src/BpkSelect.js +1 -2
  126. package/bpk-component-skip-link/src/BpkSkipLink.js +1 -2
  127. package/bpk-component-slider/src/BpkSlider.js +1 -2
  128. package/bpk-component-spinner/src/BpkExtraLargeSpinner.js +1 -2
  129. package/bpk-component-spinner/src/BpkLargeSpinner.js +1 -2
  130. package/bpk-component-spinner/src/BpkSpinner.js +1 -2
  131. package/bpk-component-star-rating/src/BpkInteractiveStar.js +1 -2
  132. package/bpk-component-star-rating/src/BpkInteractiveStarRating.js +1 -2
  133. package/bpk-component-star-rating/src/BpkStar.js +8 -9
  134. package/bpk-component-star-rating/src/BpkStarRating.js +1 -2
  135. package/bpk-component-star-rating/src/withInteractiveStarRatingState.js +1 -2
  136. package/bpk-component-switch/src/BpkSwitch.js +1 -2
  137. package/bpk-component-table/src/BpkTable.js +1 -2
  138. package/bpk-component-table/src/BpkTableCell.js +1 -2
  139. package/bpk-component-table/src/BpkTableHeadCell.js +1 -2
  140. package/bpk-component-text/src/BpkText.js +1 -2
  141. package/bpk-component-textarea/src/BpkTextarea.js +1 -2
  142. package/bpk-component-theme-toggle/src/BpkThemeToggle.js +3 -4
  143. package/bpk-component-theme-toggle/src/updateOnThemeChange.js +1 -2
  144. package/bpk-component-ticket/src/BpkTicket.js +1 -2
  145. package/bpk-component-tooltip/src/BpkTooltip.js +1 -2
  146. package/bpk-component-tooltip/src/BpkTooltipPortal.js +1 -2
  147. package/bpk-scrim-utils/src/BpkScrim.js +1 -2
  148. package/bpk-scrim-utils/src/withScrim.js +1 -2
  149. package/package.json +5 -8
  150. package/bpk-animate-height/package.json +0 -26
  151. package/bpk-component-accordion/package.json +0 -31
  152. package/bpk-component-aria-live/package.json +0 -31
  153. package/bpk-component-autosuggest/package.json +0 -29
  154. package/bpk-component-badge/package.json +0 -29
  155. package/bpk-component-banner-alert/package.json +0 -34
  156. package/bpk-component-barchart/package.json +0 -35
  157. package/bpk-component-blockquote/package.json +0 -24
  158. package/bpk-component-breadcrumb/package.json +0 -27
  159. package/bpk-component-breakpoint/package.json +0 -28
  160. package/bpk-component-button/package.json +0 -26
  161. package/bpk-component-calendar/package.json +0 -34
  162. package/bpk-component-card/package.json +0 -28
  163. package/bpk-component-checkbox/package.json +0 -29
  164. package/bpk-component-chip/package.json +0 -29
  165. package/bpk-component-close-button/package.json +0 -28
  166. package/bpk-component-code/package.json +0 -24
  167. package/bpk-component-content-container/package.json +0 -24
  168. package/bpk-component-datatable/package.json +0 -30
  169. package/bpk-component-datepicker/package.json +0 -33
  170. package/bpk-component-description-list/package.json +0 -24
  171. package/bpk-component-dialog/package.json +0 -32
  172. package/bpk-component-drawer/package.json +0 -34
  173. package/bpk-component-fieldset/package.json +0 -36
  174. package/bpk-component-flare/package.json +0 -29
  175. package/bpk-component-form-validation/package.json +0 -34
  176. package/bpk-component-graphic-promotion/package.json +0 -26
  177. package/bpk-component-grid/package.json +0 -24
  178. package/bpk-component-grid-toggle/package.json +0 -25
  179. package/bpk-component-horizontal-nav/package.json +0 -30
  180. package/bpk-component-icon/package.json +0 -34
  181. package/bpk-component-image/package.json +0 -31
  182. package/bpk-component-infinite-scroll/package.json +0 -31
  183. package/bpk-component-input/package.json +0 -30
  184. package/bpk-component-label/package.json +0 -24
  185. package/bpk-component-link/package.json +0 -28
  186. package/bpk-component-list/package.json +0 -24
  187. package/bpk-component-loading-button/package.json +0 -30
  188. package/bpk-component-map/package.json +0 -32
  189. package/bpk-component-mobile-scroll-container/package.json +0 -28
  190. package/bpk-component-modal/package.json +0 -33
  191. package/bpk-component-navigation-bar/package.json +0 -32
  192. package/bpk-component-navigation-stack/package.json +0 -32
  193. package/bpk-component-nudger/package.json +0 -32
  194. package/bpk-component-overlay/package.json +0 -28
  195. package/bpk-component-pagination/package.json +0 -28
  196. package/bpk-component-panel/package.json +0 -24
  197. package/bpk-component-phone-input/package.json +0 -33
  198. package/bpk-component-popover/package.json +0 -35
  199. package/bpk-component-progress/package.json +0 -30
  200. package/bpk-component-radio/package.json +0 -28
  201. package/bpk-component-rating/package.json +0 -29
  202. package/bpk-component-rating/src/themeAttributes.js +0 -25
  203. package/bpk-component-rtl-toggle/package.json +0 -24
  204. package/bpk-component-scrollable-calendar/package.json +0 -32
  205. package/bpk-component-section-list/package.json +0 -30
  206. package/bpk-component-select/package.json +0 -27
  207. package/bpk-component-skip-link/package.json +0 -24
  208. package/bpk-component-slider/package.json +0 -29
  209. package/bpk-component-spinner/package.json +0 -25
  210. package/bpk-component-star-rating/package.json +0 -29
  211. package/bpk-component-switch/package.json +0 -24
  212. package/bpk-component-table/package.json +0 -24
  213. package/bpk-component-text/package.json +0 -24
  214. package/bpk-component-textarea/package.json +0 -28
  215. package/bpk-component-theme-toggle/package.json +0 -28
  216. package/bpk-component-ticket/package.json +0 -28
  217. package/bpk-component-tooltip/package.json +0 -29
  218. package/bpk-react-utils/package.json +0 -25
  219. package/bpk-scrim-utils/package.json +0 -25
  220. package/bpk-theming/package.json +0 -23
@@ -18,8 +18,7 @@
18
18
 
19
19
  import React from 'react';
20
20
  import PropTypes from 'prop-types';
21
-
22
- import { cssModules } from '../../bpk-react-utils';
21
+ import { cssModules } from 'bpk-react-utils';
23
22
 
24
23
  import BpkPaginationList from './BpkPaginationList';
25
24
  import BpkPaginationNudger from './BpkPaginationNudger';
@@ -18,8 +18,7 @@
18
18
 
19
19
  import PropTypes from 'prop-types';
20
20
  import React from 'react';
21
-
22
- import { cssModules } from '../../bpk-react-utils';
21
+ import { cssModules } from 'bpk-react-utils';
23
22
 
24
23
  import BpkPaginationPage from './BpkPaginationPage';
25
24
  import BpkPaginationBreak from './BpkPaginationBreak';
@@ -18,11 +18,10 @@
18
18
 
19
19
  import PropTypes from 'prop-types';
20
20
  import React from 'react';
21
-
22
- import { cssModules } from '../../bpk-react-utils';
23
- import { withButtonAlignment, withRtlSupport } from '../../bpk-component-icon';
24
- import ArrowLeftIcon from '../../bpk-component-icon/lg/arrow-left';
25
- import ArrowRightIcon from '../../bpk-component-icon/lg/arrow-right';
21
+ import { cssModules } from 'bpk-react-utils';
22
+ import { withButtonAlignment, withRtlSupport } from 'bpk-component-icon';
23
+ import ArrowLeftIcon from 'bpk-component-icon/lg/arrow-left';
24
+ import ArrowRightIcon from 'bpk-component-icon/lg/arrow-right';
26
25
 
27
26
  import STYLES from './BpkPaginationNudger.module.scss';
28
27
 
@@ -16,11 +16,10 @@
16
16
  * limitations under the License.
17
17
  */
18
18
 
19
+ import BpkButton from 'bpk-component-button';
19
20
  import PropTypes from 'prop-types';
20
21
  import React from 'react';
21
-
22
- import BpkButton from '../../bpk-component-button';
23
- import { cssModules } from '../../bpk-react-utils';
22
+ import { cssModules } from 'bpk-react-utils';
24
23
 
25
24
  import STYLES from './BpkPaginationPage.module.scss';
26
25
 
@@ -15,7 +15,7 @@
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */
18
- import { secondaryThemeAttributes } from '../../bpk-component-button';
18
+ import { secondaryThemeAttributes } from 'bpk-component-button';
19
19
 
20
20
  export default [
21
21
  ...secondaryThemeAttributes,
@@ -18,8 +18,7 @@
18
18
 
19
19
  import PropTypes from 'prop-types';
20
20
  import React from 'react';
21
-
22
- import { cssModules } from '../../bpk-react-utils';
21
+ import { cssModules } from 'bpk-react-utils';
23
22
 
24
23
  import STYLES from './BpkPanel.module.scss';
25
24
 
@@ -20,11 +20,10 @@
20
20
 
21
21
  import React from 'react';
22
22
  import PropTypes from 'prop-types';
23
-
24
- import { cssModules } from '../../bpk-react-utils';
25
- import BpkInput, { INPUT_TYPES } from '../../bpk-component-input';
26
- import BpkLabel from '../../bpk-component-label';
27
- import BpkSelect from '../../bpk-component-select';
23
+ import { cssModules } from 'bpk-react-utils';
24
+ import BpkInput, { INPUT_TYPES } from 'bpk-component-input';
25
+ import BpkLabel from 'bpk-component-label';
26
+ import BpkSelect from 'bpk-component-select';
28
27
 
29
28
  import STYLES from './BpkPhoneInput.module.scss';
30
29
 
@@ -20,11 +20,10 @@
20
20
 
21
21
  import PropTypes from 'prop-types';
22
22
  import React, { type Node } from 'react';
23
-
24
- import BpkText, { TEXT_STYLES } from '../../bpk-component-text';
25
- import { BpkButtonLink } from '../../bpk-component-link';
26
- import BpkCloseButton from '../../bpk-component-close-button';
27
- import { TransitionInitialMount, cssModules } from '../../bpk-react-utils';
23
+ import BpkText, { TEXT_STYLES } from 'bpk-component-text';
24
+ import { BpkButtonLink } from 'bpk-component-link';
25
+ import BpkCloseButton from 'bpk-component-close-button';
26
+ import { TransitionInitialMount, cssModules } from 'bpk-react-utils';
28
27
 
29
28
  import STYLES from './BpkPopover.module.scss';
30
29
  import { ARROW_ID } from './constants';
@@ -22,8 +22,7 @@ import Popper from '@skyscanner/popper.js';
22
22
  import PropTypes from 'prop-types';
23
23
  import React, { Component, type Node } from 'react';
24
24
  import focusStore from 'a11y-focus-store';
25
-
26
- import { Portal, cssModules } from '../../bpk-react-utils';
25
+ import { Portal, cssModules } from 'bpk-react-utils';
27
26
 
28
27
  import keyboardFocusScope from './keyboardFocusScope';
29
28
  import STYLES from './BpkPopover.module.scss';
@@ -18,6 +18,6 @@
18
18
 
19
19
  /* @flow strict */
20
20
 
21
- import { themeAttributes as linkAttributes } from '../../bpk-component-link';
21
+ import { themeAttributes as linkAttributes } from 'bpk-component-link';
22
22
 
23
23
  export default [...linkAttributes];
@@ -22,8 +22,7 @@ import PropTypes from 'prop-types';
22
22
  import React, { Component } from 'react';
23
23
  import { colorWhite } from '@skyscanner/bpk-foundations-web/tokens/base.es6';
24
24
  import clamp from 'lodash.clamp';
25
-
26
- import { cssModules } from '../../bpk-react-utils';
25
+ import { cssModules } from 'bpk-react-utils';
27
26
 
28
27
  import STYLES from './BpkProgress.module.scss';
29
28
 
@@ -20,8 +20,7 @@
20
20
 
21
21
  import PropTypes from 'prop-types';
22
22
  import React, { type Node } from 'react';
23
-
24
- import { cssModules } from '../../bpk-react-utils';
23
+ import { cssModules } from 'bpk-react-utils';
25
24
 
26
25
  import STYLES from './BpkRadio.module.scss';
27
26
 
@@ -12,40 +12,56 @@ npm install bpk-component-rating --save-dev
12
12
 
13
13
  ```js
14
14
  import React from 'react';
15
- import BpkRating, { RATING_SIZES, RATING_SCALES, RATING_TYPES } from 'bpk-component-rating';
15
+ import BpkRating, { RATING_SIZES, RATING_SCALES } from 'bpk-component-rating';
16
16
 
17
17
  export default () => (
18
18
  <BpkRating
19
- ariaLabel="9 Excellent would recommend"
19
+ ariaLabel="4.8 Excellent 2,420 reviews"
20
+ value={4.8}
20
21
  title="Excellent"
21
- subtitle="It was almost perfect!"
22
- value={9}
22
+ subtitle="2,420 reviews"
23
23
  />
24
24
 
25
- // Large rating
25
+ // Large size rating
26
26
  <BpkRating
27
- ariaLabel="9 Excellent would recommend"
28
- title="Excellent"
29
- subtitle="It was almost perfect!"
27
+ ariaLabel="4.4 Very good 120 reviews"
28
+ title="Very good"
29
+ subtitle="120 reviews"
30
30
  size={RATING_SIZES.large}
31
- value={9}
31
+ value={4.4}
32
32
  />
33
33
 
34
- // Pill-shaped rating
34
+ // Title only rating
35
35
  <BpkRating
36
- ariaLabel="9 Excellent would recommend"
37
- title="Excellent"
38
- subtitle="It was almost perfect!"
39
- type={RATING_TYPE.pill}
40
- value={9}
36
+ ariaLabel="2.3 Bad"
37
+ title="Bad"
38
+ value={2.3}
39
+ />
40
+
41
+ // Show scale rating
42
+ <BpkRating
43
+ ariaLabel="3.8 Good 530 reviews"
44
+ title="Good"
45
+ subtitle="530 reviews"
46
+ value={3.8}
41
47
  />
42
48
 
43
- // 0-5 scale
49
+ // Hide scale rating
44
50
  <BpkRating
45
- ariaLabel="2 It was ok I guess"
46
- title="Meh"
47
- value={2}
48
- ratingScale={RATING_SCALES.zeroToFive}
51
+ ariaLabel="3.8 Good 530 reviews"
52
+ title="Good"
53
+ subtitle="530 reviews"
54
+ value={3.8}
55
+ showScale={false}
56
+ />
57
+
58
+ // 0-10 scale
59
+ <BpkRating
60
+ ariaLabel="9.9 Awesome 6,549 reviews"
61
+ title="Awesome"
62
+ subtitle="6,549 reviews"
63
+ value={9.9}
64
+ ratingScale={RATING_SCALES.zeroToTen}
49
65
  />
50
66
  );
51
67
  ```
@@ -55,19 +71,10 @@ export default () => (
55
71
  | Property | PropType | Required | Default Value |
56
72
  | --------- | --------------------- | -------- | ----------------- |
57
73
  | ariaLabel | string | true | - |
58
- | title | string | true | - |
59
- | value | number | true | - |
74
+ | title | oneOfType(string, node) | true | - |
75
+ | value | oneOfType(string, number) | true | - |
60
76
  | className | string | false | null |
61
- | ratingScale | oneOf(RATING_SCALES) | false | RATING_SCALES.zeroToTen |
77
+ | ratingScale | oneOf(RATING_SCALES) | false | RATING_SCALES.zeroToFive |
62
78
  | size | oneOf(RATING_SIZES) | false | RATING_SIZES.base |
63
79
  | subtitle | string | false | null |
64
- | type | oneOf(RATING_TYPES) | false | RATING_TYPES.default |
65
- | vertical | boolean | false | false |
66
-
67
- ## Theme props
68
-
69
- * `ratingHighColor`
70
- * `ratingHighTextColor`
71
- * `ratingMediumColor`
72
- * `ratingMediumTextColor`
73
- * `ratingLowColor`
80
+ | showScale | boolean | false | true |
@@ -18,8 +18,7 @@
18
18
  /* @flow strict */
19
19
 
20
20
  import BpkRating from './src/BpkRating';
21
- import { RATING_SIZES, RATING_TYPES, RATING_SCALES } from './src/common-types';
22
- import themeAttributes from './src/themeAttributes';
21
+ import { RATING_SIZES, RATING_SCALES } from './src/common-types';
23
22
 
24
23
  export default BpkRating;
25
- export { RATING_SIZES, RATING_TYPES, RATING_SCALES, themeAttributes };
24
+ export { RATING_SIZES, RATING_SCALES };
@@ -17,29 +17,23 @@
17
17
  */
18
18
  /* @flow strict */
19
19
 
20
- import React from 'react';
20
+ import React, { type Node } from 'react';
21
21
  import PropTypes from 'prop-types';
22
22
  import clamp from 'lodash.clamp';
23
-
24
- import { cssModules } from '../../bpk-react-utils';
25
- import BpkText, { TEXT_STYLES } from '../../bpk-component-text';
23
+ import { cssModules } from 'bpk-react-utils';
24
+ import BpkText, { TEXT_STYLES } from 'bpk-component-text';
26
25
 
27
26
  import STYLES from './BpkRating.module.scss';
28
- import { RATING_SIZES, RATING_TYPES, RATING_SCALES } from './common-types';
27
+ import { RATING_SIZES, RATING_SCALES } from './common-types';
29
28
 
30
29
  const getClassName = cssModules(STYLES);
31
30
 
32
- // The thresholds are what determine whether a rating is low, medium or high.
33
- // They are expressed as a percentage of the scale. For example, on a 1-5 scale,
34
- // 5 * 0.8 (4) would be a high rating.
35
- const MEDIUM_RATING_THRESHOLD = 0.6;
36
- const HIGH_RATING_THRESHOLD = 0.8;
37
-
38
31
  const getMinValue = () =>
39
32
  // Currently the min value is zero no matter what scale is used.
40
33
  // If this ever changes, this function should be changed to return
41
34
  // different values based on the rating scale.
42
35
  0;
36
+
43
37
  const getMaxValue = (ratingScale) => {
44
38
  switch (ratingScale) {
45
39
  case RATING_SCALES.zeroToFive:
@@ -49,22 +43,15 @@ const getMaxValue = (ratingScale) => {
49
43
  }
50
44
  };
51
45
 
52
- const getMediumRatingThreshold = (ratingScale) =>
53
- getMaxValue(ratingScale) * MEDIUM_RATING_THRESHOLD;
54
-
55
- const getHighRatingThreshold = (ratingScale) =>
56
- getMaxValue(ratingScale) * HIGH_RATING_THRESHOLD;
57
-
58
- export type Props = {
46
+ type Props = {
59
47
  ariaLabel: string,
48
+ className: ?string,
60
49
  ratingScale: $Values<typeof RATING_SCALES>,
50
+ showScale: ?boolean,
61
51
  size: $Values<typeof RATING_SIZES>,
62
- title: string,
63
- type: $Values<typeof RATING_TYPES>,
64
- value: number,
65
- vertical: boolean,
66
- className: ?string,
67
52
  subtitle: ?string,
53
+ title: string | Node,
54
+ value: string | number,
68
55
  };
69
56
 
70
57
  const BpkRating = (props: Props) => {
@@ -72,33 +59,36 @@ const BpkRating = (props: Props) => {
72
59
  ariaLabel,
73
60
  className,
74
61
  ratingScale,
62
+ showScale,
75
63
  size,
76
64
  subtitle,
77
65
  title,
78
- type,
79
66
  value,
80
- vertical,
81
67
  ...rest
82
68
  } = props;
69
+
83
70
  const classNames = [getClassName('bpk-rating', className)];
84
- const scoreStyles = [
85
- getClassName(
86
- 'bpk-rating__component',
87
- `bpk-rating--${size}-rating`,
88
- type === RATING_TYPES.pill && `bpk-rating--${size}-pill`,
89
- ),
90
- ];
71
+ const valueStyles = [getClassName('bpk-rating__value')];
72
+ const scaleStyles = [getClassName('bpk-rating__scale')];
91
73
  const textWrapperStyles = [getClassName('bpk-rating__text-wrapper')];
92
- const textStyles = [getClassName('bpk-rating__text')];
74
+ const titleStyles = [];
75
+ const subtitleStyles = [getClassName('bpk-rating__subtitle')];
93
76
 
94
- let titleTextSize = TEXT_STYLES.bodyDefault;
95
77
  let valueTextSize = TEXT_STYLES.label1;
96
- if (size === RATING_SIZES.lg) {
97
- titleTextSize = TEXT_STYLES.bodyLongform;
98
- valueTextSize = TEXT_STYLES.heading4;
99
- } else if (size === RATING_SIZES.sm) {
100
- titleTextSize = TEXT_STYLES.footnote;
101
- valueTextSize = TEXT_STYLES.label2;
78
+ let scaleTextSize = TEXT_STYLES.caption;
79
+ let titleTextSize = TEXT_STYLES.label1;
80
+ let subtitleTextSize = TEXT_STYLES.caption;
81
+
82
+ if (size === RATING_SIZES.large) {
83
+ classNames.push(getClassName('bpk-rating--large'));
84
+ textWrapperStyles.push(getClassName('bpk-rating__text-wrapper--large'));
85
+ titleStyles.push(getClassName('bpk-rating__title--large'));
86
+ subtitleStyles.push(getClassName('bpk-rating__subtitle--large'));
87
+
88
+ valueTextSize = TEXT_STYLES.hero5;
89
+ scaleTextSize = TEXT_STYLES.bodyDefault;
90
+ titleTextSize = TEXT_STYLES.heading5;
91
+ subtitleTextSize = TEXT_STYLES.bodyDefault;
102
92
  }
103
93
 
104
94
  const minValue = getMinValue();
@@ -106,29 +96,8 @@ const BpkRating = (props: Props) => {
106
96
 
107
97
  let adjustedValue = value;
108
98
 
109
- if (adjustedValue >= getHighRatingThreshold(ratingScale)) {
110
- scoreStyles.push(getClassName('bpk-rating--high-rating'));
111
- } else if (adjustedValue >= getMediumRatingThreshold(ratingScale)) {
112
- scoreStyles.push(getClassName('bpk-rating--medium-rating'));
113
- } else {
114
- scoreStyles.push(getClassName('bpk-rating--low-rating'));
115
- }
116
-
117
- if (vertical) {
118
- classNames.push(getClassName('bpk-rating--vertical'));
119
- textWrapperStyles.push(getClassName('bpk-rating__text-wrapper--vertical'));
120
- textStyles.push(getClassName('bpk-rating__text--vertical'));
121
- } else {
122
- textWrapperStyles.push(
123
- getClassName('bpk-rating__text-wrapper--horizontal'),
124
- );
125
- textStyles.push(getClassName('bpk-rating__text--horizontal'));
126
- }
127
-
128
99
  if (adjustedValue >= maxValue || adjustedValue <= minValue) {
129
100
  adjustedValue = clamp(adjustedValue, minValue, maxValue);
130
- } else {
131
- adjustedValue = value.toFixed(1);
132
101
  }
133
102
 
134
103
  return (
@@ -137,29 +106,37 @@ const BpkRating = (props: Props) => {
137
106
  <BpkText
138
107
  textStyle={valueTextSize}
139
108
  tagName="span"
140
- className={scoreStyles.join(' ')}
109
+ className={valueStyles.join(' ')}
141
110
  aria-hidden="true"
142
111
  >
143
112
  {adjustedValue}
113
+
114
+ {showScale && (
115
+ <BpkText
116
+ textStyle={scaleTextSize}
117
+ className={scaleStyles.join(' ')}
118
+ tagName="span"
119
+ aria-hidden="true"
120
+ >
121
+ /{maxValue}
122
+ </BpkText>
123
+ )}
144
124
  </BpkText>
125
+
145
126
  <div className={textWrapperStyles.join(' ')}>
146
127
  <BpkText
147
- className={textStyles.join(' ')}
148
128
  textStyle={titleTextSize}
129
+ className={titleStyles.join(' ')}
149
130
  tagName="span"
150
131
  aria-hidden="true"
151
132
  >
152
- <strong>{title}</strong>{' '}
153
- {subtitle && type === RATING_TYPES.pill && <span>{subtitle}</span>}
133
+ {title}
154
134
  </BpkText>
155
- {subtitle && type !== RATING_TYPES.pill && (
135
+
136
+ {subtitle && (
156
137
  <BpkText
157
- className={textStyles.join(' ')}
158
- textStyle={
159
- size === RATING_SIZES.lg
160
- ? TEXT_STYLES.footnote
161
- : TEXT_STYLES.caption
162
- }
138
+ className={subtitleStyles.join(' ')}
139
+ textStyle={subtitleTextSize}
163
140
  tagName="span"
164
141
  aria-hidden="true"
165
142
  >
@@ -173,23 +150,21 @@ const BpkRating = (props: Props) => {
173
150
 
174
151
  BpkRating.propTypes = {
175
152
  ariaLabel: PropTypes.string.isRequired,
176
- title: PropTypes.string.isRequired,
177
- value: PropTypes.number.isRequired,
153
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,
154
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
178
155
  className: PropTypes.string,
179
156
  ratingScale: PropTypes.oneOf(Object.keys(RATING_SCALES)),
180
157
  size: PropTypes.oneOf(Object.keys(RATING_SIZES)),
181
158
  subtitle: PropTypes.string,
182
- type: PropTypes.oneOf([RATING_TYPES.default, RATING_TYPES.pill]),
183
- vertical: PropTypes.bool,
159
+ showScale: PropTypes.bool,
184
160
  };
185
161
 
186
162
  BpkRating.defaultProps = {
187
163
  className: null,
188
- ratingScale: RATING_SCALES.zeroToTen,
164
+ ratingScale: RATING_SCALES.zeroToFive,
189
165
  size: RATING_SIZES.base,
190
166
  subtitle: null,
191
- type: RATING_TYPES.default,
192
- vertical: false,
167
+ showScale: true,
193
168
  };
194
169
 
195
170
  export default BpkRating;
@@ -22,127 +22,65 @@ $bpk-spacing-v2: true;
22
22
 
23
23
  .bpk-rating {
24
24
  display: flex;
25
+ flex-flow: row nowrap;
26
+ align-items: baseline;
25
27
 
26
- &--vertical {
27
- flex-direction: column;
28
- }
29
-
30
- &__component {
31
- justify-content: center;
28
+ &--large {
32
29
  align-items: center;
33
- border-radius: 50%;
34
- color: $bpk-color-white;
35
30
  }
36
31
 
37
- &--base-rating {
32
+ &__value {
38
33
  display: flex;
39
- width: bpk-spacing-lg() * 2;
40
- height: bpk-spacing-lg() * 2;
41
- }
34
+ padding-right: bpk-spacing-md();
35
+ justify-content: center;
36
+ align-items: baseline;
37
+ color: $bpk-color-sky-gray;
42
38
 
43
- &--lg-rating {
44
- display: flex;
45
- width: bpk-spacing-xxl() + (bpk-spacing-sm() * 5);
46
- height: bpk-spacing-xxl() + (bpk-spacing-sm() * 5);
39
+ @include bpk-rtl {
40
+ padding-right: 0;
41
+ padding-left: bpk-spacing-md();
42
+ }
47
43
  }
48
44
 
49
- &--sm-rating {
45
+ &__text-wrapper {
50
46
  display: flex;
51
- width: bpk-spacing-sm() * 9;
52
- height: bpk-spacing-sm() * 9;
53
- }
47
+ flex-direction: row;
48
+ align-items: baseline;
49
+ white-space: nowrap;
54
50
 
55
- &--sm-pill {
56
- width: bpk-spacing-sm() * 9;
57
- height: bpk-spacing-xl() - (bpk-spacing-sm() / 2);
58
- border-radius: $bpk-border-radius-pill;
51
+ &--large {
52
+ flex-direction: column;
53
+ align-items: flex-start;
54
+ }
59
55
  }
60
56
 
61
- &--base-pill {
62
- width: bpk-spacing-lg() * 2;
63
- height: bpk-spacing-sm() * 9;
64
- border-radius: $bpk-border-radius-pill;
57
+ &__scale {
58
+ color: $bpk-color-sky-gray-tint-02;
65
59
  }
66
60
 
67
- &--lg-pill {
68
- width: (bpk-spacing-xl() * 2) + (bpk-spacing-sm() / 2);
69
- height: bpk-spacing-xxl() + (bpk-spacing-sm() / 2);
70
- border-radius: $bpk-border-radius-pill-lg;
61
+ &__title {
62
+ &--large {
63
+ padding-top: $bpk-one-pixel-rem;
64
+ }
71
65
  }
72
66
 
73
- &__text-wrapper {
74
- display: flex;
75
- flex-direction: column;
76
- justify-content: center;
77
-
78
- &--horizontal {
79
- // We could use `padding-inline-start: $bpk-spacing-sm` here, but it's unsupported in IE
80
- padding-left: bpk-spacing-sm() * 3;
67
+ &__subtitle {
68
+ padding-left: bpk-spacing-md();
69
+ color: $bpk-color-sky-gray-tint-02;
81
70
 
82
- @include bpk-rtl {
83
- padding-right: bpk-spacing-sm() * 3;
84
- }
85
- }
86
-
87
- &--vertical {
88
- padding-top: bpk-spacing-sm() + ($bpk-one-pixel-rem * 2);
71
+ @include bpk-rtl {
72
+ padding-right: bpk-spacing-md();
73
+ padding-left: 0;
89
74
  }
90
- }
91
75
 
92
- &__text {
93
- &--horizontal {
94
- // We could use `text-align: start` here, but it's unsupported in IE
95
- text-align: left;
76
+ &--large {
77
+ padding-top: $bpk-one-pixel-rem;
78
+ padding-left: 0;
96
79
 
97
80
  @include bpk-rtl {
98
- text-align: right;
81
+ padding-right: 0;
82
+ padding-left: 0;
99
83
  }
100
84
  }
101
-
102
- &--vertical {
103
- align-self: center;
104
- text-align: center;
105
- }
106
- }
107
-
108
- &--high-rating {
109
- align-self: center;
110
- color: $bpk-color-sky-gray;
111
-
112
- @include bpk-themeable-property(
113
- color,
114
- --bpk-rating-high-text-color,
115
- $bpk-color-sky-gray
116
- );
117
- @include bpk-themeable-property(
118
- background-color,
119
- --bpk-rating-high-color,
120
- $bpk-color-glencoe
121
- );
122
- }
123
-
124
- &--medium-rating {
125
- align-self: center;
126
-
127
- @include bpk-themeable-property(
128
- color,
129
- --bpk-rating-medium-text-color,
130
- $bpk-color-sky-gray
131
- );
132
- @include bpk-themeable-property(
133
- background-color,
134
- --bpk-rating-medium-color,
135
- $bpk-color-erfoud
136
- );
137
- }
138
-
139
- &--low-rating {
140
- align-self: center;
141
-
142
- @include bpk-themeable-property(
143
- background-color,
144
- --bpk-rating-low-color,
145
- $bpk-color-panjin
146
- );
147
85
  }
148
86
  }
@@ -18,12 +18,7 @@
18
18
 
19
19
  /* @flow */
20
20
 
21
- export const RATING_SIZES = { sm: 'sm', base: 'base', lg: 'lg' };
22
-
23
- export const RATING_TYPES = {
24
- default: 'default',
25
- pill: 'pill',
26
- };
21
+ export const RATING_SIZES = { base: 'base', large: 'large' };
27
22
 
28
23
  export const RATING_SCALES = {
29
24
  zeroToFive: 'zeroToFive',