@royaloperahouse/harmonic 0.2.3-c → 0.2.3-d

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.
@@ -8361,11 +8361,55 @@ var ButtonsContainer$1 = /*#__PURE__*/styled.div(_templateObject14$2 || (_templa
8361
8361
  return '';
8362
8362
  });
8363
8363
 
8364
+ // Function to check if a URL is from the same site
8365
+ // NOTE: This function is not SSR compatible
8366
+ var isSameSiteUrl = function isSameSiteUrl(url) {
8367
+ var _window;
8368
+ if (url[0] === '/') return true; // URL is relative (e.g. /about)
8369
+ if (!((_window = window) != null && _window.location)) return false; // window.location is not available (e.g. in SSR)
8370
+ var currentPageURL = window.location.href || '';
8371
+ var regexPattern = /^(https?:\/\/)?(www\d?\.)?([\w.-]+)\.\w+.*$/;
8372
+ var match = url.match(regexPattern);
8373
+ if (match != null && match[3] && currentPageURL) {
8374
+ var urlDomain = match[3]; // Extract the domain from the third capture group
8375
+ var currentMatch = currentPageURL.match(regexPattern);
8376
+ if (currentMatch) {
8377
+ var currentDomain = currentMatch[3];
8378
+ return urlDomain === currentDomain;
8379
+ }
8380
+ }
8381
+ return false; // URL didn't match the pattern
8382
+ };
8383
+ // Hook to check if a URL is from the same site - use for SSR
8384
+ var useSameSiteUrl = function useSameSiteUrl(url) {
8385
+ var _useState = useState(false),
8386
+ hasSameSiteUrl = _useState[0],
8387
+ setSameSiteUrl = _useState[1];
8388
+ useEffect(function () {
8389
+ setSameSiteUrl(isSameSiteUrl(url));
8390
+ }, [url]);
8391
+ return hasSameSiteUrl;
8392
+ };
8393
+ var limitImageUrlDimension = function limitImageUrlDimension(imageUrl, widthLimit) {
8394
+ try {
8395
+ var url = new URL(imageUrl);
8396
+ var widthParam = url.searchParams.get('w') || url.searchParams.get('width');
8397
+ if (widthParam) {
8398
+ return imageUrl.replace(/(w|width)=\d+/, "$1=" + widthLimit);
8399
+ }
8400
+ var separator = url.search.includes('?') ? '&' : '?';
8401
+ return "" + imageUrl + separator + "w=" + widthLimit;
8402
+ } catch (error) {
8403
+ return imageUrl;
8404
+ }
8405
+ };
8406
+
8364
8407
  var _excluded$k = ["text"],
8365
8408
  _excluded2$3 = ["text"];
8366
8409
  var _buttonTypeToButton$1;
8367
8410
  var LENGTH_LARGE_TEXT$1 = 28;
8368
8411
  var LENGTH_SMALL_TEXT$2 = 19;
8412
+ var IMAGE_WIDTH_LIMIT = 600;
8369
8413
  var buttonTypeToButton$1 = (_buttonTypeToButton$1 = {}, _buttonTypeToButton$1[ButtonType.Primary] = PrimaryButton, _buttonTypeToButton$1[ButtonType.Secondary] = SecondaryButton, _buttonTypeToButton$1[ButtonType.Tertiary] = TertiaryButton, _buttonTypeToButton$1);
8370
8414
  var Card = function Card(_ref) {
8371
8415
  var _labelParams$color;
@@ -8431,6 +8475,7 @@ var Card = function Card(_ref) {
8431
8475
  };
8432
8476
  var FirstButtonComponent = firstButton != null && firstButton.buttonType ? buttonTypeToButton$1[firstButton.buttonType] : PrimaryButton;
8433
8477
  var SecondButtonComponent = secondButton != null && secondButton.buttonType ? buttonTypeToButton$1[secondButton.buttonType] : TertiaryButton;
8478
+ var limitedImage = image ? limitImageUrlDimension(image, IMAGE_WIDTH_LIMIT) : image;
8434
8479
  return /*#__PURE__*/React__default.createElement(CardContainer, {
8435
8480
  onMouseOver: function onMouseOver() {
8436
8481
  return onlyShowButtonsOnHover ? hoverHandler(true) : undefined;
@@ -8470,7 +8515,7 @@ var Card = function Card(_ref) {
8470
8515
  }), /*#__PURE__*/React__default.createElement(ImageAspectRatioWrapper, {
8471
8516
  aspectRatio: AspectRatio['4:3']
8472
8517
  }, /*#__PURE__*/React__default.createElement("img", {
8473
- src: image,
8518
+ src: limitedImage,
8474
8519
  alt: imageAltText || title
8475
8520
  })), withContinueWatching && (/*#__PURE__*/React__default.createElement(ProgressContainer, null, /*#__PURE__*/React__default.createElement(Progress, {
8476
8521
  progress: progress,
@@ -9444,36 +9489,6 @@ var PrimaryButtonWithInversion = /*#__PURE__*/styled(PrimaryButton)(_templateObj
9444
9489
  return invert ? theme.colors.white : theme.colors.black;
9445
9490
  });
9446
9491
 
9447
- // Function to check if a URL is from the same site
9448
- // NOTE: This function is not SSR compatible
9449
- var isSameSiteUrl = function isSameSiteUrl(url) {
9450
- var _window;
9451
- if (url[0] === '/') return true; // URL is relative (e.g. /about)
9452
- if (!((_window = window) != null && _window.location)) return false; // window.location is not available (e.g. in SSR)
9453
- var currentPageURL = window.location.href || '';
9454
- var regexPattern = /^(https?:\/\/)?(www\d?\.)?([\w.-]+)\.\w+.*$/;
9455
- var match = url.match(regexPattern);
9456
- if (match != null && match[3] && currentPageURL) {
9457
- var urlDomain = match[3]; // Extract the domain from the third capture group
9458
- var currentMatch = currentPageURL.match(regexPattern);
9459
- if (currentMatch) {
9460
- var currentDomain = currentMatch[3];
9461
- return urlDomain === currentDomain;
9462
- }
9463
- }
9464
- return false; // URL didn't match the pattern
9465
- };
9466
- // Hook to check if a URL is from the same site - use for SSR
9467
- var useSameSiteUrl = function useSameSiteUrl(url) {
9468
- var _useState = useState(false),
9469
- hasSameSiteUrl = _useState[0],
9470
- setSameSiteUrl = _useState[1];
9471
- useEffect(function () {
9472
- setSameSiteUrl(isSameSiteUrl(url));
9473
- }, [url]);
9474
- return hasSameSiteUrl;
9475
- };
9476
-
9477
9492
  var renderBranding = function renderBranding(brandingStyle, invert, brandingText, brandingLink) {
9478
9493
  // eslint-disable-next-line react-hooks/rules-of-hooks
9479
9494
  var sameSiteUrl = brandingLink && useSameSiteUrl(brandingLink);
@@ -10189,13 +10204,13 @@ var PromoWithTitleImageWrapper = /*#__PURE__*/styled.div(_templateObject2$U || (
10189
10204
  var imageToLeft = _ref3.imageToLeft;
10190
10205
  return imageToLeft ? 'left' : 'right';
10191
10206
  }, devices.mobile);
10192
- var PromoWithTitleContentWrapper = /*#__PURE__*/styled.div(_templateObject3$G || (_templateObject3$G = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n grid-area: ", ";\n align-self: center;\n\n @media ", " {\n & {\n grid-area: row2;\n align-self: start;\n }\n }\n"])), function (_ref4) {
10207
+ var PromoWithTitleContentWrapper = /*#__PURE__*/styled.div(_templateObject3$G || (_templateObject3$G = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n grid-area: ", ";\n align-self: center;\n @media ", " {\n & {\n grid-area: row2;\n align-self: start;\n }\n }\n"])), function (_ref4) {
10193
10208
  var imageToLeft = _ref4.imageToLeft;
10194
10209
  return imageToLeft ? 'right' : 'left';
10195
10210
  }, devices.mobile);
10196
- var HarmonicHeaderWithWrapper = /*#__PURE__*/styled(HarmonicHeader)(_templateObject4$A || (_templateObject4$A = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-bottom: 32px;\n\n @media ", " {\n margin-bottom: 24px;\n }\n"])), devices.mobile);
10197
- var HarmonicSubtitleWithWrapper = /*#__PURE__*/styled(HarmonicSubtitle)(_templateObject5$t || (_templateObject5$t = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin: 0;\n overflow-wrap: break-word;\n margin-bottom: 16px;\n"])));
10198
- var BodyCopyHarmonicWithWrapper = /*#__PURE__*/styled(BodyCopyHarmonic)(_templateObject6$n || (_templateObject6$n = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n padding: 0;\n margin: 0;\n margin-bottom: 32px;\n whiete-space: break-spaces;\n overflow-wrap: break-word;\n\n a {\n text-decoration: underline;\n cursor: pointer;\n\n &[href^='tel:'] {\n text-decoration: none;\n }\n\n &:link {\n color: var(--color-primary-black);\n }\n\n &:visited {\n color: var(--color-base-dark-grey);\n }\n\n &:hover {\n color: var(--color-primary-red);\n }\n }\n @media ", " {\n margin-bottom: 24px;\n }\n"])), devices.mobile);
10211
+ var PromoWithTitleContainer = /*#__PURE__*/styled.div(_templateObject4$A || (_templateObject4$A = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n h2,\n h3 {\n margin: 0 0 32px;\n\n @media ", " {\n & {\n margin: 0 0 24px;\n }\n }\n }\n"])), devices.mobile);
10212
+ var PromoWithTitleSubtitle = /*#__PURE__*/styled.span(_templateObject5$t || (_templateObject5$t = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n font-family: var(--font-family-subtitle);\n font-feature-settings: var(--font-feature-settings-subtitle);\n font-size: var(--font-size-subtitle-1);\n font-weight: var(--font-weight-subtitle-1);\n line-height: var(--line-height-subtitle-1);\n letter-spacing: var(--letter-spacing-subtitle-1);\n text-transform: var(--text-transform-subtitle);\n margin-bottom: var(--editorial-subtitle-margin-bottom);\n display: block;\n overflow-wrap: break-word;\n"])));
10213
+ var PromoWithTitleText = /*#__PURE__*/styled.div(_templateObject6$n || (_templateObject6$n = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n font-family: var(--font-family-body);\n font-feature-settings: var(--font-feature-settings-body);\n font-size: var(--font-size-body-1);\n font-weight: var(--font-weight-body-1);\n line-height: var(--line-height-body-1);\n letter-spacing: var(--letter-spacing-body-1);\n text-transform: var(--text-transform-body);\n margin: 0;\n padding: 0;\n white-space: break-spaces;\n overflow-wrap: break-word;\n\n h5,\n h6 {\n margin: 0 0 4px 0;\n font-family: var(--font-family-subtitle);\n font-feature-settings: var(--font-feature-settings-subtitle);\n font-size: var(--font-size-subtitle-2);\n font-weight: var(--font-weight-subtitle-2);\n line-height: var(--line-height-subtitle-2);\n letter-spacing: var(--letter-spacing-subtitle-2);\n text-transform: var(--text-transform-subtitle);\n overflow-wrap: break-word;\n }\n\n em {\n font-family: var(--font-family-body-italics);\n }\n\n a {\n text-decoration: underline;\n cursor: pointer;\n\n &[href^='tel:'] {\n text-decoration: none;\n }\n\n &:link {\n color: var(--color-primary-black);\n }\n\n &:visited {\n color: var(--color-base-dark-grey);\n }\n\n &:hover {\n color: var(--color-primary-red);\n }\n }\n"])));
10199
10214
  var ButtonsContainer$3 = /*#__PURE__*/styled.div(_templateObject7$h || (_templateObject7$h = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n gap: 16px;\n margin-top: 32px;\n\n ", "\n\n @media ", " {\n gap: 24px;\n margin-top: 24px;\n flex-direction: column;\n align-items: center;\n }\n\n @media ", " {\n gap: 24px;\n margin-top: 24px;\n align-items: flex-start;\n\n ", "\n }\n"])), function (_ref5) {
10200
10215
  var _ref5$primaryButtonTe = _ref5.primaryButtonTextLength,
10201
10216
  primaryButtonTextLength = _ref5$primaryButtonTe === void 0 ? 0 : _ref5$primaryButtonTe,
@@ -10341,20 +10356,18 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10341
10356
  title = _ref$title === void 0 ? '' : _ref$title,
10342
10357
  _ref$titleSize = _ref.titleSize,
10343
10358
  titleSize = _ref$titleSize === void 0 ? 'large' : _ref$titleSize,
10344
- titleHierarchy = _ref.titleHierarchy,
10345
10359
  subtitle = _ref.subtitle,
10346
10360
  text = _ref.text,
10347
10361
  links = _ref.links,
10348
10362
  children = _ref.children,
10349
10363
  videoSettings = _ref.videoSettings,
10364
+ titleSemanticLevel = _ref.titleSemanticLevel,
10350
10365
  className = _ref.className;
10351
10366
  var truncate = function truncate(str, n) {
10352
10367
  return str.length >= n ? str.substr(0, n) : str;
10353
10368
  };
10354
- var correctTitleSize = function correctTitleSize(size) {
10355
- return size === 'small' ? 'medium' : 'large';
10356
- };
10357
10369
  var imageToLeft = imagePosition === 'left';
10370
+ var titleLevel = titleSize === 'large' ? 2 : 3;
10358
10371
  var primaryButton = links == null ? void 0 : links[0];
10359
10372
  var _ref2 = primaryButton || {},
10360
10373
  _ref2$text = _ref2.text,
@@ -10378,19 +10391,20 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10378
10391
  imageToLeft: imageToLeft,
10379
10392
  className: className,
10380
10393
  "data-testid": "promo-with-title"
10381
- }, /*#__PURE__*/React__default.createElement(PromoChild, {
10394
+ }, /*#__PURE__*/React__default.createElement(PromoChild
10395
+ // eslint-disable-next-line react/no-children-prop
10396
+ , {
10397
+ // eslint-disable-next-line react/no-children-prop
10398
+ children: children,
10382
10399
  videoSettings: _extends({}, defaultVideoSettings, videoSettings),
10383
10400
  imageToLeft: imageToLeft
10384
- }, children), /*#__PURE__*/React__default.createElement(PromoWithTitleContentWrapper, {
10401
+ }), /*#__PURE__*/React__default.createElement(PromoWithTitleContentWrapper, {
10385
10402
  "data-testid": "content-wrapper",
10386
10403
  imageToLeft: imageToLeft
10387
- }, /*#__PURE__*/React__default.createElement(HarmonicHeaderWithWrapper, {
10388
- size: correctTitleSize(titleSize),
10389
- hierarchy: titleHierarchy
10390
- }, title), subtitle ? /*#__PURE__*/React__default.createElement(HarmonicSubtitleWithWrapper, {
10391
- size: "medium"
10392
- }, subtitle) : null, /*#__PURE__*/React__default.createElement(BodyCopyHarmonicWithWrapper, {
10393
- size: "large",
10404
+ }, /*#__PURE__*/React__default.createElement(PromoWithTitleContainer, null, /*#__PURE__*/React__default.createElement(Header, {
10405
+ level: titleLevel,
10406
+ semanticLevel: titleSemanticLevel != null ? titleSemanticLevel : titleLevel
10407
+ }, title)), subtitle ? /*#__PURE__*/React__default.createElement(PromoWithTitleSubtitle, null, subtitle) : null, /*#__PURE__*/React__default.createElement(PromoWithTitleText, {
10394
10408
  dangerouslySetInnerHTML: {
10395
10409
  __html: text
10396
10410
  }
@@ -10398,11 +10412,7 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10398
10412
  "data-testid": "buttons-wrapper",
10399
10413
  primaryButtonTextLength: primaryButtonText.length,
10400
10414
  tertiaryButtonTextLength: tertiaryButtonText.length
10401
- }, primaryButton ? (/*#__PURE__*/React__default.createElement(PrimaryButton, Object.assign({
10402
- target: "_blank"
10403
- }, restPrimaryButton), primaryButtonTextTruncate)) : null, tertiaryButton ? (/*#__PURE__*/React__default.createElement(TertiaryButton, Object.assign({
10404
- target: "_blank"
10405
- }, restTertiaryButton), tertiaryButtonTextTruncate)) : null)) : null));
10415
+ }, primaryButton ? /*#__PURE__*/React__default.createElement(PrimaryButton, Object.assign({}, restPrimaryButton), primaryButtonTextTruncate) : null, tertiaryButton ? (/*#__PURE__*/React__default.createElement(TertiaryButton, Object.assign({}, restTertiaryButton), tertiaryButtonTextTruncate)) : null)) : null));
10406
10416
  };
10407
10417
 
10408
10418
  var _templateObject$1a;
@@ -12240,6 +12250,7 @@ var isVideoSlide = function isVideoSlide(slideMedia) {
12240
12250
  return slideMedia.video !== undefined;
12241
12251
  };
12242
12252
 
12253
+ var IMAGE_WIDTH_LIMIT$1 = 800;
12243
12254
  var VideoSlide = function VideoSlide(_ref) {
12244
12255
  var index = _ref.index,
12245
12256
  settings = _ref.settings,
@@ -12270,12 +12281,18 @@ var SwipeCarousel = function SwipeCarousel(_ref2) {
12270
12281
  var hasOnlyImageSlides = slidesMedia.every(function (slide) {
12271
12282
  return !isVideoSlide(slide);
12272
12283
  });
12284
+ var limitedMediaContent = slidesMedia.map(function (slide) {
12285
+ if (isVideoSlide(slide)) return slide;
12286
+ return _extends({}, slide, {
12287
+ src: slide.src ? limitImageUrlDimension(slide.src, IMAGE_WIDTH_LIMIT$1) : undefined
12288
+ });
12289
+ });
12273
12290
  return /*#__PURE__*/React__default.createElement(Swipe, {
12274
12291
  ref: carouselRef,
12275
12292
  infinite: hasMultipleSlides && hasOnlyImageSlides,
12276
12293
  onIndexChange: setCurrentSlide,
12277
12294
  "aria-roledescription": "carousel"
12278
- }, slidesMedia.map(function (mediaContent, index) {
12295
+ }, limitedMediaContent.map(function (mediaContent, index) {
12279
12296
  return /*#__PURE__*/React__default.createElement("div", {
12280
12297
  className: "swiper-slide",
12281
12298
  key: mediaContent.key,