@royaloperahouse/harmonic 0.1.8-j → 0.1.8-l

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.
@@ -5896,7 +5896,8 @@ var Navigation = function Navigation(_ref) {
5896
5896
  menuData = _ref.menuData,
5897
5897
  onSearch = _ref.onSearch,
5898
5898
  onLink = _ref.onLink,
5899
- crest = _ref.crest,
5899
+ _ref$crest = _ref.crest,
5900
+ crest = _ref$crest === void 0 ? true : _ref$crest,
5900
5901
  className = _ref.className;
5901
5902
  var _useState = useState(dataNavTop),
5902
5903
  navTopData = _useState[0],
@@ -7313,6 +7314,8 @@ var GRID_VALUES = {
7313
7314
  desktop: {
7314
7315
  gapsNumber: 13,
7315
7316
  columnsNumber: 13,
7317
+ gapsNumberOffset: 15,
7318
+ columnsNumberOffset: 14,
7316
7319
  largeCard: {
7317
7320
  gapsPerSlide: 4,
7318
7321
  columnsPerSlide: 5
@@ -7340,16 +7343,20 @@ var calculateSlideGapsSpace = function calculateSlideGapsSpace(gapsPerSlide) {
7340
7343
  return "calc(" + GRID_COLUMN_GAP + " * " + gapsPerSlide + ")";
7341
7344
  };
7342
7345
  // Slide styles
7343
- var getCardSlideDesktopStyles = function getCardSlideDesktopStyles(type) {
7346
+ var getCardSlideDesktopStyles = function getCardSlideDesktopStyles(type, isActive) {
7344
7347
  var _GRID_VALUES$desktop = GRID_VALUES.desktop,
7345
7348
  gapsNumber = _GRID_VALUES$desktop.gapsNumber,
7346
- columnsNumber = _GRID_VALUES$desktop.columnsNumber;
7349
+ columnsNumber = _GRID_VALUES$desktop.columnsNumber,
7350
+ columnsNumberOffset = _GRID_VALUES$desktop.columnsNumberOffset,
7351
+ gapsNumberOffset = _GRID_VALUES$desktop.gapsNumberOffset;
7347
7352
  var _ref = type === CarouselType.LargeCard ? GRID_VALUES.desktop.largeCard : GRID_VALUES.desktop.smallCard,
7348
7353
  gapsPerSlide = _ref.gapsPerSlide,
7349
7354
  columnsPerSlide = _ref.columnsPerSlide;
7350
- var gapsSpaceInMainGrid = calculateGapsSpaceInMainGrid(gapsNumber);
7355
+ var columns = isActive ? columnsNumberOffset : columnsNumber;
7356
+ var gaps = isActive ? gapsNumberOffset : gapsNumber;
7357
+ var gapsSpaceInMainGrid = calculateGapsSpaceInMainGrid(gaps);
7351
7358
  var slideGapsSpace = calculateSlideGapsSpace(gapsPerSlide);
7352
- return "\n width: calc( (" + columnsPerSlide + " * (100% - " + gapsSpaceInMainGrid + ") / " + columnsNumber + ") + " + slideGapsSpace + " );\n margin-right: " + GRID_COLUMN_GAP + ";\n ";
7359
+ return "\n width: calc( (" + columnsPerSlide + " * (100% - " + gapsSpaceInMainGrid + ") / " + columns + ") + " + slideGapsSpace + " );\n margin-right: " + GRID_COLUMN_GAP + ";\n ";
7353
7360
  };
7354
7361
  var getCardSlideMobileStyles = function getCardSlideMobileStyles() {
7355
7362
  var _GRID_VALUES$mobile = GRID_VALUES.mobile,
@@ -7373,8 +7380,9 @@ var ImageCarouselWrapper = /*#__PURE__*/styled.div(_templateObject$N || (_templa
7373
7380
  return "&&& {\n .swipe-slide > figure {\n " + getImageSlideStyles(imagesHeightDevice) + "\n }\n }";
7374
7381
  });
7375
7382
  var CardsCarouselWrapper = /*#__PURE__*/styled.div(_templateObject2$A || (_templateObject2$A = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n ", "\n\n @media ", " {\n && {\n .swipe-slide {\n ", "\n }\n }\n}}"])), function (_ref3) {
7376
- var type = _ref3.type;
7377
- return "\n & {\n .swipe-slide {\n " + getCardSlideDesktopStyles(type) + "\n }\n }\n ";
7383
+ var type = _ref3.type,
7384
+ isActive = _ref3.isActive;
7385
+ return "\n & {\n .swipe-slide {\n " + getCardSlideDesktopStyles(type, isActive) + "\n }\n }\n ";
7378
7386
  }, devices.mobile, /*#__PURE__*/getCardSlideMobileStyles());
7379
7387
  var TitleButtonsGrid = /*#__PURE__*/styled(Grid)(_templateObject3$o || (_templateObject3$o = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-bottom: 28px;\n\n @media ", " {\n padding-bottom: 0;\n }\n\n @media ", " {\n margin-bottom: 20px;\n }\n"])), devices.mobile, devices.mobile);
7380
7388
  var CarouselInfoWrapper = /*#__PURE__*/styled.div(_templateObject4$j || (_templateObject4$j = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n user-select: text;\n"])));
@@ -7392,10 +7400,12 @@ var SwipeGridWrapper = /*#__PURE__*/styled(GridItem)(_templateObject8$5 || (_tem
7392
7400
  var _templateObject$O, _templateObject2$B;
7393
7401
  var SWIPE_SLIDE_CLASS_NAME = 'swipe-slide';
7394
7402
  var SwipeContainer = /*#__PURE__*/styled.div(_templateObject$O || (_templateObject$O = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: relative;\n overflow: hidden;\n width: 100%;\n touch-action: pan-y;\n"])));
7395
- var SwipeTrack = /*#__PURE__*/styled.div(_templateObject2$B || (_templateObject2$B = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n transition: ", ";\n transform: translateX(", "px);\n\n .", " {\n flex-shrink: 0;\n }\n"])), function (props) {
7396
- return props.transitioning ? 'transform 0.3s ease-in-out' : 'none';
7397
- }, function (props) {
7398
- return props.translateX;
7403
+ var SwipeTrack = /*#__PURE__*/styled.div(_templateObject2$B || (_templateObject2$B = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n transition: ", ";\n transform: translateX(", ");\n\n .", " {\n flex-shrink: 0;\n }\n"])), function (_ref) {
7404
+ var transitioning = _ref.transitioning;
7405
+ return transitioning ? 'transform 0.3s ease' : 'none';
7406
+ }, function (_ref2) {
7407
+ var translateX = _ref2.translateX;
7408
+ return translateX + "px";
7399
7409
  }, SWIPE_SLIDE_CLASS_NAME);
7400
7410
 
7401
7411
  /**
@@ -7423,9 +7433,26 @@ var getVisibleIndexes = function getVisibleIndexes(currentIndex, slideWidths, co
7423
7433
  }
7424
7434
  return visible;
7425
7435
  };
7436
+ var getMovedSlides = function getMovedSlides(delta, slideWidths) {
7437
+ var absDelta = Math.abs(delta);
7438
+ var movedSlides = 0;
7439
+ var accumulated = 0;
7440
+ for (var i = 0; i < slideWidths.length; i++) {
7441
+ accumulated += slideWidths[i];
7442
+ // Allow partial slide (e.g. 50% of next slide) to count
7443
+ var partialThreshold = slideWidths[i] * 0.5;
7444
+ if (absDelta > accumulated - partialThreshold) {
7445
+ movedSlides++;
7446
+ } else {
7447
+ break;
7448
+ }
7449
+ }
7450
+ return movedSlides;
7451
+ };
7426
7452
 
7427
- var _excluded$h = ["children", "infinite", "onIndexChange", "slidesOffsetBefore"];
7453
+ var _excluded$h = ["children", "infinite", "onIndexChange", "slidesOffsetBefore", "onActiveChange"];
7428
7454
  var MAX_CLONES_NUMBER = 6;
7455
+ var CLICK_DRAG_THRESHOLD = 20;
7429
7456
  var getClonesCount = function getClonesCount(infinite, childrenLength) {
7430
7457
  if (!infinite) return 0;
7431
7458
  if (childrenLength > MAX_CLONES_NUMBER) return MAX_CLONES_NUMBER;
@@ -7445,13 +7472,29 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7445
7472
  onIndexChange = _ref.onIndexChange,
7446
7473
  _ref$slidesOffsetBefo = _ref.slidesOffsetBefore,
7447
7474
  slidesOffsetBefore = _ref$slidesOffsetBefo === void 0 ? 0 : _ref$slidesOffsetBefo,
7475
+ onActiveChange = _ref.onActiveChange,
7448
7476
  props = _objectWithoutPropertiesLoose(_ref, _excluded$h);
7449
7477
  var containerRef = useRef(null);
7450
7478
  var childRefs = useRef([]);
7451
7479
  var startX = useRef(0);
7452
7480
  var currentTranslate = useRef(0);
7453
7481
  var isDragging = useRef(false);
7482
+ var isMouseDown = useRef(false);
7483
+ var isActive = useRef(false);
7484
+ var isClickPrevented = useRef(false);
7454
7485
  var uniqueIdRef = useRef(generateDomElementId());
7486
+ var _useState = useState(null),
7487
+ dragTranslateX = _useState[0],
7488
+ setDragTranslateX = _useState[1];
7489
+ var _useState2 = useState(false),
7490
+ transitioning = _useState2[0],
7491
+ setTransitioning = _useState2[1];
7492
+ var _useState3 = useState([]),
7493
+ slideWidths = _useState3[0],
7494
+ setSlideWidths = _useState3[1];
7495
+ var _useState4 = useState(0),
7496
+ containerWidth = _useState4[0],
7497
+ setContainerWidth = _useState4[1];
7455
7498
  var _useMemo = useMemo(function () {
7456
7499
  var count = getClonesCount(infinite, children.length);
7457
7500
  var leftClones = infinite ? children.slice(-count) : [];
@@ -7464,65 +7507,74 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7464
7507
  }, [children, infinite]),
7465
7508
  slides = _useMemo.slides,
7466
7509
  clonesCount = _useMemo.clonesCount;
7467
- // Set the initial index to clonesCount (so the first real slide is shown)
7468
- var _useState = useState(infinite ? clonesCount : 0),
7469
- currentIndex = _useState[0],
7470
- setCurrentIndex = _useState[1];
7471
- var _useState2 = useState(false),
7472
- transitioning = _useState2[0],
7473
- setTransitioning = _useState2[1];
7474
- var _useState3 = useState([]),
7475
- slideWidths = _useState3[0],
7476
- setSlideWidths = _useState3[1];
7477
- var _useState4 = useState(0),
7478
- containerWidth = _useState4[0],
7479
- setContainerWidth = _useState4[1];
7510
+ var _useState5 = useState(infinite ? clonesCount : 0),
7511
+ currentIndex = _useState5[0],
7512
+ setCurrentIndex = _useState5[1];
7480
7513
  useEffect(function () {
7481
7514
  if (!onIndexChange) return;
7482
7515
  if (!infinite) {
7483
7516
  onIndexChange(currentIndex);
7484
- return;
7517
+ } else {
7518
+ var offset = currentIndex - clonesCount + children.length;
7519
+ var realIndex = offset % children.length;
7520
+ onIndexChange(realIndex);
7485
7521
  }
7486
- var offset = currentIndex - clonesCount + children.length;
7487
- var realIndex = offset % children.length;
7488
- onIndexChange(realIndex);
7489
- }, [currentIndex, onIndexChange, infinite, children.length]);
7490
- // Update dimensions
7522
+ }, [currentIndex, onIndexChange, infinite, children.length, clonesCount]);
7491
7523
  var updateDimensions = useCallback(function () {
7492
7524
  if (containerRef.current) setContainerWidth(containerRef.current.offsetWidth);
7493
7525
  if (childRefs.current.length) setSlideWidths(childRefs.current.map(getSlidedWidth));
7494
7526
  }, []);
7495
7527
  useEffect(function () {
7496
- var animationFrameRequestId = requestAnimationFrame(function () {
7497
- updateDimensions();
7498
- });
7528
+ var animationFrameRequestId = requestAnimationFrame(updateDimensions);
7499
7529
  return function () {
7500
- cancelAnimationFrame(animationFrameRequestId);
7530
+ return cancelAnimationFrame(animationFrameRequestId);
7501
7531
  };
7502
7532
  }, [children]);
7503
7533
  useEffect(function () {
7504
7534
  var observer = new ResizeObserver(updateDimensions);
7505
7535
  if (containerRef.current) observer.observe(containerRef.current);
7506
7536
  return function () {
7507
- observer.disconnect();
7537
+ return observer.disconnect();
7508
7538
  };
7509
7539
  }, [children]);
7510
- // Compute current translate X value by summing widths of all slides before currentIndex.
7540
+ var setIsActive = function setIsActive() {
7541
+ if (!isActive.current) {
7542
+ isActive.current = true;
7543
+ onActiveChange == null || onActiveChange(true);
7544
+ }
7545
+ };
7511
7546
  var getTranslateX = function getTranslateX() {
7512
- var slideOffset = slidesOffsetBefore - slideWidths.slice(0, currentIndex).reduce(function (acc, width) {
7547
+ var offset = slidesOffsetBefore - slideWidths.slice(0, currentIndex).reduce(function (acc, width) {
7513
7548
  return acc + width;
7514
7549
  }, 0);
7515
- return slideOffset + (slidesOffsetBefore || 0); // Apply offsetBefore
7550
+ return offset + (slidesOffsetBefore || 0);
7551
+ };
7552
+ var navigateOnSwipeEnd = function navigateOnSwipeEnd() {
7553
+ var delta = currentTranslate.current - getTranslateX();
7554
+ var direction = delta > 0 ? -1 : 1;
7555
+ var movedSlides = getMovedSlides(delta, slideWidths);
7556
+ if (Math.abs(delta) > 20) {
7557
+ movedSlides = Math.max(1, movedSlides);
7558
+ var targetIndex = currentIndex + direction * movedSlides;
7559
+ var finalIndex = infinite ? targetIndex : Math.max(0, Math.min(slides.length - 1, targetIndex));
7560
+ setTransitioning(true);
7561
+ setCurrentIndex(finalIndex);
7562
+ } else {
7563
+ setTransitioning(true);
7564
+ setCurrentIndex(function (prev) {
7565
+ return prev;
7566
+ });
7567
+ }
7568
+ setDragTranslateX(null);
7516
7569
  };
7517
7570
  var canMoveNext = function canMoveNext() {
7518
7571
  var totalVisibleWidth = slideWidths.slice(currentIndex).reduce(function (acc, width) {
7519
7572
  return acc + width;
7520
7573
  }, 0);
7521
- // In non-infinite mode, only move if there is more to show
7522
7574
  return infinite || totalVisibleWidth > containerWidth - (slidesOffsetBefore || 0);
7523
7575
  };
7524
7576
  var handleTransitionEnd = function handleTransitionEnd() {
7525
- setTransitioning(false); // Reset transitioning after animation ends
7577
+ setTransitioning(false);
7526
7578
  if (!infinite) return;
7527
7579
  if (currentIndex >= children.length + clonesCount) {
7528
7580
  setCurrentIndex(clonesCount);
@@ -7531,22 +7583,16 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7531
7583
  }
7532
7584
  };
7533
7585
  var goToPrev = function goToPrev() {
7534
- if (transitioning) return; // Prevent clicks during transition
7535
- if (currentIndex === 0 && !infinite) {
7536
- setTransitioning(false); // Reset immediately if no more slides
7537
- return;
7538
- }
7586
+ if (transitioning) return;
7587
+ setIsActive();
7539
7588
  setTransitioning(true);
7540
7589
  setCurrentIndex(function (prev) {
7541
7590
  return infinite ? prev - 1 : Math.max(0, prev - 1);
7542
7591
  });
7543
7592
  };
7544
7593
  var goToNext = function goToNext() {
7545
- if (transitioning || !canMoveNext()) return; // Prevent clicks during transition
7546
- if (currentIndex === children.length - 1 && !infinite) {
7547
- setTransitioning(false); // Reset immediately if no more slides
7548
- return;
7549
- }
7594
+ if (transitioning || !canMoveNext()) return;
7595
+ setIsActive();
7550
7596
  setTransitioning(true);
7551
7597
  setCurrentIndex(function (prev) {
7552
7598
  return infinite ? prev + 1 : Math.min(children.length - 1, prev + 1);
@@ -7559,26 +7605,70 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7559
7605
  };
7560
7606
  });
7561
7607
  var handleTouchStart = function handleTouchStart(e) {
7608
+ setIsActive();
7562
7609
  startX.current = e.touches[0].clientX;
7563
7610
  isDragging.current = true;
7611
+ isClickPrevented.current = false;
7564
7612
  setTransitioning(false);
7565
7613
  };
7566
7614
  var handleTouchMove = function handleTouchMove(e) {
7567
7615
  if (!isDragging.current) return;
7568
7616
  var deltaX = e.touches[0].clientX - startX.current;
7569
- currentTranslate.current = getTranslateX() + deltaX;
7617
+ if (Math.abs(deltaX) > CLICK_DRAG_THRESHOLD) {
7618
+ isClickPrevented.current = true;
7619
+ }
7620
+ var visualOffset = getTranslateX() + deltaX;
7621
+ currentTranslate.current = visualOffset;
7622
+ setDragTranslateX(visualOffset);
7570
7623
  };
7571
7624
  var handleTouchEnd = function handleTouchEnd() {
7572
7625
  isDragging.current = false;
7573
- setTransitioning(true);
7574
- if (currentTranslate.current > getTranslateX()) {
7575
- goToPrev();
7576
- } else if (currentTranslate.current < getTranslateX()) {
7577
- goToNext();
7626
+ navigateOnSwipeEnd();
7627
+ };
7628
+ var handleMouseMove = function handleMouseMove(e) {
7629
+ if (!isDragging.current || !isMouseDown.current || transitioning) return;
7630
+ var deltaX = e.clientX - startX.current;
7631
+ if (Math.abs(deltaX) > CLICK_DRAG_THRESHOLD) {
7632
+ isClickPrevented.current = true;
7578
7633
  }
7634
+ var visualOffset = getTranslateX() + deltaX;
7635
+ currentTranslate.current = visualOffset;
7636
+ setDragTranslateX(visualOffset);
7637
+ };
7638
+ var _handleMouseUp = function handleMouseUp() {
7639
+ if (!isDragging.current || !isMouseDown.current) return;
7640
+ isDragging.current = false;
7641
+ isMouseDown.current = false;
7642
+ window.removeEventListener('mousemove', handleMouseMove);
7643
+ window.removeEventListener('mouseup', _handleMouseUp);
7644
+ if (!isClickPrevented.current) {
7645
+ setDragTranslateX(null);
7646
+ return;
7647
+ }
7648
+ navigateOnSwipeEnd();
7649
+ };
7650
+ var handleMouseDown = function handleMouseDown(e) {
7651
+ if (transitioning || e.button !== 0) return;
7652
+ e.preventDefault();
7653
+ setIsActive();
7654
+ startX.current = e.clientX;
7655
+ isDragging.current = true;
7656
+ isMouseDown.current = true;
7657
+ isClickPrevented.current = false;
7658
+ setTransitioning(false);
7659
+ window.addEventListener('mousemove', handleMouseMove);
7660
+ window.addEventListener('mouseup', _handleMouseUp);
7579
7661
  };
7580
7662
  var onSlideFocus = function onSlideFocus(isVisible, index) {
7581
- if (!isVisible) setCurrentIndex(index);
7663
+ if (!isVisible) {
7664
+ setCurrentIndex(index);
7665
+ }
7666
+ };
7667
+ var onClickCapture = function onClickCapture(e) {
7668
+ if (isClickPrevented.current) {
7669
+ e.preventDefault();
7670
+ e.stopPropagation();
7671
+ }
7582
7672
  };
7583
7673
  var visibleIndexes = getVisibleIndexes(currentIndex, slideWidths, containerWidth, slides.length);
7584
7674
  return /*#__PURE__*/React__default.createElement(SwipeContainer, Object.assign({
@@ -7586,11 +7676,12 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7586
7676
  onTouchStart: handleTouchStart,
7587
7677
  onTouchMove: handleTouchMove,
7588
7678
  onTouchEnd: handleTouchEnd,
7679
+ onMouseDown: handleMouseDown,
7589
7680
  className: "swipe"
7590
7681
  }, props), /*#__PURE__*/React__default.createElement(SwipeTrack, {
7591
7682
  className: "swipe-track-wrapper",
7592
- translateX: getTranslateX(),
7593
- transitioning: transitioning,
7683
+ translateX: dragTranslateX !== null ? dragTranslateX : getTranslateX(),
7684
+ transitioning: transitioning && dragTranslateX === null,
7594
7685
  onTransitionEnd: handleTransitionEnd
7595
7686
  }, slides.map(function (child, index) {
7596
7687
  var isVisible = visibleIndexes.includes(index);
@@ -7603,7 +7694,8 @@ var Swipe = /*#__PURE__*/forwardRef(function (_ref, ref) {
7603
7694
  },
7604
7695
  onFocus: function onFocus() {
7605
7696
  return onSlideFocus(isVisible, index);
7606
- }
7697
+ },
7698
+ onClickCapture: onClickCapture
7607
7699
  });
7608
7700
  })));
7609
7701
  });
@@ -7657,19 +7749,23 @@ var Carousel = function Carousel(_ref) {
7657
7749
  }, [useOffset, active]);
7658
7750
  var onNext = function onNext() {
7659
7751
  var _swipeRef$current;
7660
- if (useOffset && !active) setActive(true);
7661
7752
  (_swipeRef$current = swipeRef.current) == null || _swipeRef$current.nextSlide();
7662
7753
  };
7663
7754
  var onPrev = function onPrev() {
7664
7755
  var _swipeRef$current2;
7665
- if (useOffset && !active) setActive(true);
7666
7756
  (_swipeRef$current2 = swipeRef.current) == null || _swipeRef$current2.prevSlide();
7667
7757
  };
7758
+ var onActiveChangeHandler = function onActiveChangeHandler(value) {
7759
+ if (useOffset && !active) {
7760
+ setActive(value);
7761
+ }
7762
+ };
7668
7763
  var carouselTitleId = "carousel-title-" + title;
7669
7764
  var Wrapper = type === CarouselType.Image ? ImageCarouselWrapper : CardsCarouselWrapper;
7670
7765
  return /*#__PURE__*/React__default.createElement(Wrapper, {
7671
7766
  className: className,
7672
7767
  type: type,
7768
+ isActive: active,
7673
7769
  imagesHeightDevice: imagesHeightDevice,
7674
7770
  imagesHeightDesktop: imagesHeightDesktop,
7675
7771
  role: "region",
@@ -7708,6 +7804,9 @@ var Carousel = function Carousel(_ref) {
7708
7804
  columnStartDevice: 2,
7709
7805
  columnSpanDevice: 13
7710
7806
  }, /*#__PURE__*/React__default.createElement(Swipe, {
7807
+ onActiveChange: function onActiveChange(value) {
7808
+ return onActiveChangeHandler(value);
7809
+ },
7711
7810
  "data-testid": "carousel-swipe",
7712
7811
  ref: swipeRef,
7713
7812
  infinite: infinite,