@royaloperahouse/harmonic 0.18.6-a → 0.18.6-c

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.
@@ -3677,6 +3677,9 @@ var RotatorButtons = function RotatorButtons(_ref) {
3677
3677
  isTablet = _useViewport.isTablet,
3678
3678
  hydrated = _useViewport.hydrated;
3679
3679
  if (!hydrated) return null;
3680
+ var preventMouseFocus = function preventMouseFocus(e) {
3681
+ e.preventDefault();
3682
+ };
3680
3683
  var onClickLeftHandler = function onClickLeftHandler() {
3681
3684
  if (onClickPrev) {
3682
3685
  onClickPrev();
@@ -3729,6 +3732,7 @@ var RotatorButtons = function RotatorButtons(_ref) {
3729
3732
  className: className
3730
3733
  }, availablePrev ? (/*#__PURE__*/React__default.createElement(IconWrapper$1, {
3731
3734
  size: size,
3735
+ onMouseDown: preventMouseFocus,
3732
3736
  onClick: onClickLeftHandler,
3733
3737
  onKeyDown: onPrevKeyDownHandler,
3734
3738
  tabIndex: 0,
@@ -3738,9 +3742,12 @@ var RotatorButtons = function RotatorButtons(_ref) {
3738
3742
  role: "button"
3739
3743
  }, renderPrevIcon())) : (/*#__PURE__*/React__default.createElement(IconUnavailableWrapper, {
3740
3744
  size: size,
3741
- "data-testid": "iconprevnoavailable"
3745
+ onMouseDown: preventMouseFocus,
3746
+ "data-testid": "iconprevnoavailable",
3747
+ "aria-hidden": "true"
3742
3748
  }, renderPrevIcon())), availableNext ? (/*#__PURE__*/React__default.createElement(IconWrapper$1, {
3743
3749
  size: size,
3750
+ onMouseDown: preventMouseFocus,
3744
3751
  onClick: onClickRightHandler,
3745
3752
  onKeyDown: onNextKeyDownHandler,
3746
3753
  tabIndex: 0,
@@ -3750,9 +3757,12 @@ var RotatorButtons = function RotatorButtons(_ref) {
3750
3757
  role: "button"
3751
3758
  }, renderNextIcon())) : (/*#__PURE__*/React__default.createElement(IconUnavailableWrapper, {
3752
3759
  size: size,
3753
- "data-testid": "iconnextnoavailable"
3760
+ onMouseDown: preventMouseFocus,
3761
+ "data-testid": "iconnextnoavailable",
3762
+ "aria-hidden": "true"
3754
3763
  }, renderNextIcon())), showFullscreen && !isMobile && !isTablet && (/*#__PURE__*/React__default.createElement(FullscreenIconWrapper, {
3755
3764
  size: size,
3765
+ onMouseDown: preventMouseFocus,
3756
3766
  onClick: onClickFullscreenHandler,
3757
3767
  onKeyDown: onFullscreenKeyDownHandler,
3758
3768
  tabIndex: 0,
@@ -6643,7 +6653,7 @@ var CastFiltersComponentWrapper = /*#__PURE__*/styled.div(_templateObject$J || (
6643
6653
  var CastFiltersWrapper = /*#__PURE__*/styled.div(_templateObject2$x || (_templateObject2$x = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-direction: column;\n gap: 32px;\n\n @media ", " {\n gap: 15px;\n }\n"])), devices.mobile);
6644
6654
  var HeadingTextWrapper = /*#__PURE__*/styled.div(_templateObject3$m || (_templateObject3$m = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n height: 44px;\n display: flex;\n align-items: center;\n"])));
6645
6655
  var RotatorButtonsWrapper = /*#__PURE__*/styled(GridItem)(_templateObject4$j || (_templateObject4$j = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n @media ", " {\n display: none;\n }\n"])), devices.mobile);
6646
- var CastWrapper = /*#__PURE__*/styled.div(_templateObject5$f || (_templateObject5$f = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-direction: row;\n gap: 20px;\n overflow-x: scroll;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n @media ", " {\n flex-direction: column;\n gap: 10px;\n }\n"])), devices.mobile);
6656
+ var CastWrapper = /*#__PURE__*/styled.div(_templateObject5$f || (_templateObject5$f = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-direction: row;\n gap: 20px;\n overflow-x: hidden;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n @media ", " {\n flex-direction: column;\n gap: 10px;\n overflow-x: scroll;\n }\n"])), devices.mobile);
6647
6657
  var ActionButtons = /*#__PURE__*/styled.div(_templateObject6$a || (_templateObject6$a = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 32px;\n\n .mobile-only {\n visibility: hidden;\n\n p {\n font-size: 14px;\n line-height: 17px;\n }\n }\n\n @media ", " {\n .mobile-only {\n visibility: visible;\n padding-block: 24px;\n font-size: 17px;\n line-height: 24px;\n }\n\n flex-direction: row-reverse;\n gap: unset;\n justify-content: space-between;\n border-block-end: 2px solid var(--base-color-light-grey);\n\n :has(.mobile-only) {\n justify-content: left;\n }\n\n :not(:has(.mobile-only)) {\n padding-block: 12px;\n }\n\n a {\n width: fit-content;\n }\n }\n"])), devices.mobile);
6648
6658
  var PersonWrapper = /*#__PURE__*/styled.div(_templateObject7$7 || (_templateObject7$7 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n margin-block-start: 2px;\n margin-inline: 2px;\n\n p {\n font-size: 14px;\n line-height: 17px;\n }\n\n :focus-visible {\n outline: none;\n\n & > div:first-child {\n outline: 2px solid var(--color-base-black);\n }\n }\n\n @media ", " {\n flex-direction: row;\n gap: 20px;\n margin-block-end: 2px;\n margin-inline-end: unset;\n\n p {\n font-size: 17px;\n line-height: 24px;\n }\n }\n"])), devices.mobile);
6649
6659
  var PersonToggle = /*#__PURE__*/styled.div(_templateObject8$4 || (_templateObject8$4 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n width: 86px;\n height: 86px;\n min-width: 86px;\n border: 4px solid;\n border-color: ", ";\n border-radius: 50%;\n background: var(--color-base-white);\n position: relative;\n box-shadow: inset 0 0 0 4px var(--color-base-white);\n"])), function (_ref) {
@@ -6733,7 +6743,7 @@ var getMovedSlides = function getMovedSlides(delta, slideWidths) {
6733
6743
  return movedSlides;
6734
6744
  };
6735
6745
 
6736
- var _excluded$h = ["children", "infinite", "onIndexChange", "slidesOffsetBefore", "slidesAriaHidden", "onActiveChange", "onOverflowChange"];
6746
+ var _excluded$h = ["children", "infinite", "onIndexChange", "slidesOffsetBefore", "slidesAriaHidden", "onActiveChange", "onOverflowChange", "limitDragToNavigableRange"];
6737
6747
  var MAX_CLONES_NUMBER = 6;
6738
6748
  var CLICK_DRAG_THRESHOLD = 10;
6739
6749
  var getClonesCount = function getClonesCount(infinite, childrenLength) {
@@ -6758,6 +6768,8 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
6758
6768
  slidesAriaHidden = _ref$slidesAriaHidden === void 0 ? false : _ref$slidesAriaHidden,
6759
6769
  onActiveChange = _ref.onActiveChange,
6760
6770
  onOverflowChange = _ref.onOverflowChange,
6771
+ _ref$limitDragToNavig = _ref.limitDragToNavigableRange,
6772
+ limitDragToNavigableRange = _ref$limitDragToNavig === void 0 ? false : _ref$limitDragToNavig,
6761
6773
  props = _objectWithoutPropertiesLoose(_ref, _excluded$h);
6762
6774
  var containerRef = useRef(null);
6763
6775
  var childRefs = useRef([]);
@@ -6863,6 +6875,39 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
6863
6875
  }, 0);
6864
6876
  return (slidesOffsetBefore || 0) - widthsBefore;
6865
6877
  };
6878
+ var canScrollRightFromIndex = function canScrollRightFromIndex(index) {
6879
+ if (infinite) return true;
6880
+ if (slideWidths.length === 0 || containerWidth === 0) return false;
6881
+ var totalContentWidth = slideWidths.reduce(function (sum, width) {
6882
+ return sum + width;
6883
+ }, 0);
6884
+ var widthBeforeCurrent = slideWidths.slice(0, index).reduce(function (sum, width) {
6885
+ return sum + width;
6886
+ }, 0);
6887
+ var visibleSpace = containerWidth - (slidesOffsetBefore || 0);
6888
+ var remainingToRight = totalContentWidth - widthBeforeCurrent - visibleSpace;
6889
+ var visible = getVisibleIndexes(index, slideWidths, containerWidth, slides.length);
6890
+ var lastVisibleIndex = visible.length ? visible[visible.length - 1] : index;
6891
+ var nextIndex = lastVisibleIndex + 1;
6892
+ if (nextIndex >= slideWidths.length) return false;
6893
+ var nextSlideWidth = typeof slideWidths[nextIndex] === 'number' ? slideWidths[nextIndex] : 0;
6894
+ if (nextSlideWidth === 0) return false;
6895
+ var EPS = 1; // pixel tolerance
6896
+ // full next slide fits
6897
+ if (remainingToRight + EPS >= nextSlideWidth) return true;
6898
+ return remainingToRight > 0;
6899
+ };
6900
+ var canMoveNext = function canMoveNext() {
6901
+ return canScrollRightFromIndex(currentIndex);
6902
+ };
6903
+ var getMaxNavigableIndex = function getMaxNavigableIndex() {
6904
+ if (infinite) return slides.length - 1;
6905
+ var index = 0;
6906
+ while (index < slides.length - 1 && canScrollRightFromIndex(index)) {
6907
+ index += 1;
6908
+ }
6909
+ return index;
6910
+ };
6866
6911
  var navigateOnSwipeEnd = function navigateOnSwipeEnd() {
6867
6912
  var delta = currentTranslate.current - getTranslateX();
6868
6913
  var direction = delta > 0 ? -1 : 1;
@@ -6870,7 +6915,8 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
6870
6915
  if (Math.abs(delta) > 20) {
6871
6916
  movedSlides = Math.max(1, movedSlides);
6872
6917
  var targetIndex = currentIndex + direction * movedSlides;
6873
- var finalIndex = infinite ? targetIndex : Math.max(0, Math.min(slides.length - 1, targetIndex));
6918
+ var maxNavigableIndex = limitDragToNavigableRange ? getMaxNavigableIndex() : slides.length - 1;
6919
+ var finalIndex = infinite ? targetIndex : Math.max(0, Math.min(maxNavigableIndex, targetIndex));
6874
6920
  if (!infinite) {
6875
6921
  currentTranslate.current = getTranslateForIndex(finalIndex);
6876
6922
  setDragTranslateX(null);
@@ -6885,28 +6931,6 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
6885
6931
  }
6886
6932
  setDragTranslateX(null);
6887
6933
  };
6888
- var canMoveNext = function canMoveNext() {
6889
- if (infinite) return true;
6890
- if (slideWidths.length === 0 || containerWidth === 0) return false;
6891
- var totalWidth = slideWidths.reduce(function (acc, w) {
6892
- return acc + w;
6893
- }, 0);
6894
- var widthsBefore = slideWidths.slice(0, currentIndex).reduce(function (acc, w) {
6895
- return acc + w;
6896
- }, 0);
6897
- var visibleSpace = containerWidth - (slidesOffsetBefore || 0);
6898
- var remainingToRight = totalWidth - widthsBefore - visibleSpace;
6899
- var visible = getVisibleIndexes(currentIndex, slideWidths, containerWidth, slides.length);
6900
- var lastVisibleIndex = visible.length ? visible[visible.length - 1] : currentIndex;
6901
- var nextIndex = lastVisibleIndex + 1;
6902
- if (nextIndex >= slideWidths.length) return false;
6903
- var nextSlideWidth = typeof slideWidths[nextIndex] === 'number' ? slideWidths[nextIndex] : 0;
6904
- if (nextSlideWidth === 0) return false;
6905
- var EPS = 1; // pixel tolerance
6906
- // full next slide fits
6907
- if (remainingToRight + EPS >= nextSlideWidth) return true;
6908
- return remainingToRight > 0;
6909
- };
6910
6934
  var handleTransitionEnd = function handleTransitionEnd() {
6911
6935
  setTransitioning(false);
6912
6936
  if (!infinite) return;
@@ -7118,11 +7142,13 @@ var CastFilters = function CastFilters(_ref) {
7118
7142
  };
7119
7143
  var onNext = function onNext() {
7120
7144
  var _swipeRef$current4;
7121
- return (_swipeRef$current4 = swipeRef.current) == null ? void 0 : _swipeRef$current4.nextSlide();
7145
+ if (!availableNext) return;
7146
+ (_swipeRef$current4 = swipeRef.current) == null || _swipeRef$current4.nextSlide();
7122
7147
  };
7123
7148
  var onPrev = function onPrev() {
7124
7149
  var _swipeRef$current5;
7125
- return (_swipeRef$current5 = swipeRef.current) == null ? void 0 : _swipeRef$current5.prevSlide();
7150
+ if (!availablePrev) return;
7151
+ (_swipeRef$current5 = swipeRef.current) == null || _swipeRef$current5.prevSlide();
7126
7152
  };
7127
7153
  useEffect(function () {
7128
7154
  var el = castWrapperRef.current;
@@ -7145,15 +7171,15 @@ var CastFilters = function CastFilters(_ref) {
7145
7171
  };
7146
7172
  }, []);
7147
7173
  var handleMouseDown = useCallback(function (e) {
7148
- if (!castWrapperRef.current) return;
7174
+ if (!isMobile || !castWrapperRef.current) return;
7149
7175
  isDraggingRef.current = true;
7150
7176
  hasDraggedRef.current = false;
7151
7177
  startXRef.current = e.clientX;
7152
7178
  scrollStartRef.current = castWrapperRef.current.scrollLeft;
7153
7179
  if (e.target === castWrapperRef.current) e.preventDefault();
7154
- }, []);
7180
+ }, [isMobile]);
7155
7181
  var handleMouseMove = useCallback(function (e) {
7156
- if (!isDraggingRef.current || !castWrapperRef.current) return;
7182
+ if (!isMobile || !isDraggingRef.current || !castWrapperRef.current) return;
7157
7183
  var deltaX = e.clientX - startXRef.current;
7158
7184
  var threshold = 5;
7159
7185
  if (Math.abs(deltaX) > threshold) {
@@ -7161,17 +7187,19 @@ var CastFilters = function CastFilters(_ref) {
7161
7187
  e.preventDefault();
7162
7188
  castWrapperRef.current.scrollLeft = scrollStartRef.current - deltaX;
7163
7189
  }
7164
- }, []);
7190
+ }, [isMobile]);
7165
7191
  var handleMouseUp = useCallback(function () {
7192
+ if (!isMobile) return;
7166
7193
  isDraggingRef.current = false;
7167
7194
  setTimeout(function () {
7168
7195
  hasDraggedRef.current = false;
7169
7196
  }, 0);
7170
- }, []);
7197
+ }, [isMobile]);
7171
7198
  var handleMouseLeave = useCallback(function () {
7199
+ if (!isMobile) return;
7172
7200
  isDraggingRef.current = false;
7173
7201
  hasDraggedRef.current = false;
7174
- }, []);
7202
+ }, [isMobile]);
7175
7203
  var handleClick = React__default.useCallback(function (index, onClick) {
7176
7204
  if (hasDraggedRef.current) return;
7177
7205
  if (onSelect) onSelect(index);
@@ -7257,7 +7285,8 @@ var CastFilters = function CastFilters(_ref) {
7257
7285
  onIndexChange: onIndexChangeHandler,
7258
7286
  "data-testid": "cast-filter-swipe",
7259
7287
  ref: swipeRef,
7260
- onOverflowChange: handleOverflowChange
7288
+ onOverflowChange: handleOverflowChange,
7289
+ limitDragToNavigableRange: true
7261
7290
  }, getPersonCards())))), showActionButtonsSection && (/*#__PURE__*/React__default.createElement(ActionButtons, null, selectedIndices.length === 0 && emptySelectionText && (/*#__PURE__*/React__default.createElement(BodyCopyHarmonic, {
7262
7291
  size: "medium",
7263
7292
  className: "mobile-only"
@@ -12513,13 +12542,15 @@ var UpsellSection = function UpsellSection(_ref) {
12513
12542
  upsellCards = _ref.upsellCards,
12514
12543
  _ref$theme = _ref.theme,
12515
12544
  theme = _ref$theme === void 0 ? ThemeType.Core : _ref$theme,
12516
- className = _ref.className;
12545
+ className = _ref.className,
12546
+ titleFontFamily = _ref.titleFontFamily;
12517
12547
  var themedUpsellCards = upsellCards ? [].concat(upsellCards).map(function (card) {
12518
12548
  return _extends({}, card, {
12519
12549
  theme: card.theme || theme,
12520
12550
  secondaryTheme: card.secondaryTheme || card.theme || theme
12521
12551
  });
12522
12552
  }) : [];
12553
+ var isVictorTitleFont = titleFontFamily === 'Victor';
12523
12554
  return /*#__PURE__*/React__default.createElement(HarmonicThemeProvider, {
12524
12555
  theme: theme
12525
12556
  }, /*#__PURE__*/React__default.createElement(Grid, {
@@ -12532,7 +12563,7 @@ var UpsellSection = function UpsellSection(_ref) {
12532
12563
  columnStartSmallDevice: 1,
12533
12564
  columnSpanSmallDevice: 14
12534
12565
  }, /*#__PURE__*/React__default.createElement(UpsellBorderBox, null, /*#__PURE__*/React__default.createElement(TitleContent, {
12535
- serif: true
12566
+ serif: isVictorTitleFont
12536
12567
  }, title), /*#__PURE__*/React__default.createElement(TextContainer$2, null, /*#__PURE__*/React__default.createElement(TextContent, {
12537
12568
  text: richText != null ? richText : '',
12538
12569
  columnStartDesktop: 1,