@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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,3 @@
1
- ## [0.2.3]
2
- - Restyle PromoWithTitle component
3
-
4
1
  ## [0.2.0]
5
2
  - PeopleListing: Add variable column span based on people names length
6
3
 
@@ -2,7 +2,7 @@ import { IEditorialGridProps } from '../../../types/editorial';
2
2
  export declare const PromoWithTitleGrid: import("styled-components").StyledComponent<"div", any, IEditorialGridProps, never>;
3
3
  export declare const PromoWithTitleImageWrapper: import("styled-components").StyledComponent<"div", any, IEditorialGridProps, never>;
4
4
  export declare const PromoWithTitleContentWrapper: import("styled-components").StyledComponent<"div", any, IEditorialGridProps, never>;
5
- export declare const HarmonicHeaderWithWrapper: import("styled-components").StyledComponent<({ children, size, em, color, serif, hierarchy: Tag, className, }: import("../../../types/typography").IHarmonicHeaderProps) => import("react").JSX.Element, any, {}, never>;
6
- export declare const HarmonicSubtitleWithWrapper: import("styled-components").StyledComponent<({ children, size, color, className }: import("../../../types/typography").IGenericTypographyProps<HTMLParagraphElement>) => import("react").JSX.Element, any, {}, never>;
7
- export declare const BodyCopyHarmonicWithWrapper: import("styled-components").StyledComponent<({ children, size, color, className, ...props }: import("../../../types/typography").IGenericTypographyProps<HTMLParagraphElement>) => import("react").JSX.Element, any, {}, never>;
5
+ export declare const PromoWithTitleContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
6
+ export declare const PromoWithTitleSubtitle: import("styled-components").StyledComponent<"span", any, {}, never>;
7
+ export declare const PromoWithTitleText: import("styled-components").StyledComponent<"div", any, {}, never>;
8
8
  export declare const ButtonsContainer: import("styled-components").StyledComponent<"div", any, IEditorialGridProps, never>;
@@ -8333,11 +8333,55 @@ var ButtonsContainer$1 = /*#__PURE__*/styled__default.div(_templateObject14$2 ||
8333
8333
  return '';
8334
8334
  });
8335
8335
 
8336
+ // Function to check if a URL is from the same site
8337
+ // NOTE: This function is not SSR compatible
8338
+ var isSameSiteUrl = function isSameSiteUrl(url) {
8339
+ var _window;
8340
+ if (url[0] === '/') return true; // URL is relative (e.g. /about)
8341
+ if (!((_window = window) != null && _window.location)) return false; // window.location is not available (e.g. in SSR)
8342
+ var currentPageURL = window.location.href || '';
8343
+ var regexPattern = /^(https?:\/\/)?(www\d?\.)?([\w.-]+)\.\w+.*$/;
8344
+ var match = url.match(regexPattern);
8345
+ if (match != null && match[3] && currentPageURL) {
8346
+ var urlDomain = match[3]; // Extract the domain from the third capture group
8347
+ var currentMatch = currentPageURL.match(regexPattern);
8348
+ if (currentMatch) {
8349
+ var currentDomain = currentMatch[3];
8350
+ return urlDomain === currentDomain;
8351
+ }
8352
+ }
8353
+ return false; // URL didn't match the pattern
8354
+ };
8355
+ // Hook to check if a URL is from the same site - use for SSR
8356
+ var useSameSiteUrl = function useSameSiteUrl(url) {
8357
+ var _useState = React.useState(false),
8358
+ hasSameSiteUrl = _useState[0],
8359
+ setSameSiteUrl = _useState[1];
8360
+ React.useEffect(function () {
8361
+ setSameSiteUrl(isSameSiteUrl(url));
8362
+ }, [url]);
8363
+ return hasSameSiteUrl;
8364
+ };
8365
+ var limitImageUrlDimension = function limitImageUrlDimension(imageUrl, widthLimit) {
8366
+ try {
8367
+ var url = new URL(imageUrl);
8368
+ var widthParam = url.searchParams.get('w') || url.searchParams.get('width');
8369
+ if (widthParam) {
8370
+ return imageUrl.replace(/(w|width)=\d+/, "$1=" + widthLimit);
8371
+ }
8372
+ var separator = url.search.includes('?') ? '&' : '?';
8373
+ return "" + imageUrl + separator + "w=" + widthLimit;
8374
+ } catch (error) {
8375
+ return imageUrl;
8376
+ }
8377
+ };
8378
+
8336
8379
  var _excluded$k = ["text"],
8337
8380
  _excluded2$3 = ["text"];
8338
8381
  var _buttonTypeToButton$1;
8339
8382
  var LENGTH_LARGE_TEXT$1 = 28;
8340
8383
  var LENGTH_SMALL_TEXT$2 = 19;
8384
+ var IMAGE_WIDTH_LIMIT = 600;
8341
8385
  var buttonTypeToButton$1 = (_buttonTypeToButton$1 = {}, _buttonTypeToButton$1[exports.ButtonType.Primary] = PrimaryButton, _buttonTypeToButton$1[exports.ButtonType.Secondary] = SecondaryButton, _buttonTypeToButton$1[exports.ButtonType.Tertiary] = TertiaryButton, _buttonTypeToButton$1);
8342
8386
  var Card = function Card(_ref) {
8343
8387
  var _labelParams$color;
@@ -8403,6 +8447,7 @@ var Card = function Card(_ref) {
8403
8447
  };
8404
8448
  var FirstButtonComponent = firstButton != null && firstButton.buttonType ? buttonTypeToButton$1[firstButton.buttonType] : PrimaryButton;
8405
8449
  var SecondButtonComponent = secondButton != null && secondButton.buttonType ? buttonTypeToButton$1[secondButton.buttonType] : TertiaryButton;
8450
+ var limitedImage = image ? limitImageUrlDimension(image, IMAGE_WIDTH_LIMIT) : image;
8406
8451
  return /*#__PURE__*/React__default.createElement(CardContainer, {
8407
8452
  onMouseOver: function onMouseOver() {
8408
8453
  return onlyShowButtonsOnHover ? hoverHandler(true) : undefined;
@@ -8442,7 +8487,7 @@ var Card = function Card(_ref) {
8442
8487
  }), /*#__PURE__*/React__default.createElement(ImageAspectRatioWrapper, {
8443
8488
  aspectRatio: exports.AspectRatio['4:3']
8444
8489
  }, /*#__PURE__*/React__default.createElement("img", {
8445
- src: image,
8490
+ src: limitedImage,
8446
8491
  alt: imageAltText || title
8447
8492
  })), withContinueWatching && (/*#__PURE__*/React__default.createElement(ProgressContainer, null, /*#__PURE__*/React__default.createElement(Progress, {
8448
8493
  progress: progress,
@@ -9416,36 +9461,6 @@ var PrimaryButtonWithInversion = /*#__PURE__*/styled__default(PrimaryButton)(_te
9416
9461
  return invert ? theme.colors.white : theme.colors.black;
9417
9462
  });
9418
9463
 
9419
- // Function to check if a URL is from the same site
9420
- // NOTE: This function is not SSR compatible
9421
- var isSameSiteUrl = function isSameSiteUrl(url) {
9422
- var _window;
9423
- if (url[0] === '/') return true; // URL is relative (e.g. /about)
9424
- if (!((_window = window) != null && _window.location)) return false; // window.location is not available (e.g. in SSR)
9425
- var currentPageURL = window.location.href || '';
9426
- var regexPattern = /^(https?:\/\/)?(www\d?\.)?([\w.-]+)\.\w+.*$/;
9427
- var match = url.match(regexPattern);
9428
- if (match != null && match[3] && currentPageURL) {
9429
- var urlDomain = match[3]; // Extract the domain from the third capture group
9430
- var currentMatch = currentPageURL.match(regexPattern);
9431
- if (currentMatch) {
9432
- var currentDomain = currentMatch[3];
9433
- return urlDomain === currentDomain;
9434
- }
9435
- }
9436
- return false; // URL didn't match the pattern
9437
- };
9438
- // Hook to check if a URL is from the same site - use for SSR
9439
- var useSameSiteUrl = function useSameSiteUrl(url) {
9440
- var _useState = React.useState(false),
9441
- hasSameSiteUrl = _useState[0],
9442
- setSameSiteUrl = _useState[1];
9443
- React.useEffect(function () {
9444
- setSameSiteUrl(isSameSiteUrl(url));
9445
- }, [url]);
9446
- return hasSameSiteUrl;
9447
- };
9448
-
9449
9464
  var renderBranding = function renderBranding(brandingStyle, invert, brandingText, brandingLink) {
9450
9465
  // eslint-disable-next-line react-hooks/rules-of-hooks
9451
9466
  var sameSiteUrl = brandingLink && useSameSiteUrl(brandingLink);
@@ -10161,13 +10176,13 @@ var PromoWithTitleImageWrapper = /*#__PURE__*/styled__default.div(_templateObjec
10161
10176
  var imageToLeft = _ref3.imageToLeft;
10162
10177
  return imageToLeft ? 'left' : 'right';
10163
10178
  }, devices.mobile);
10164
- var PromoWithTitleContentWrapper = /*#__PURE__*/styled__default.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) {
10179
+ var PromoWithTitleContentWrapper = /*#__PURE__*/styled__default.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) {
10165
10180
  var imageToLeft = _ref4.imageToLeft;
10166
10181
  return imageToLeft ? 'right' : 'left';
10167
10182
  }, devices.mobile);
10168
- var HarmonicHeaderWithWrapper = /*#__PURE__*/styled__default(HarmonicHeader)(_templateObject4$A || (_templateObject4$A = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-bottom: 32px;\n\n @media ", " {\n margin-bottom: 24px;\n }\n"])), devices.mobile);
10169
- var HarmonicSubtitleWithWrapper = /*#__PURE__*/styled__default(HarmonicSubtitle)(_templateObject5$t || (_templateObject5$t = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin: 0;\n overflow-wrap: break-word;\n margin-bottom: 16px;\n"])));
10170
- var BodyCopyHarmonicWithWrapper = /*#__PURE__*/styled__default(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);
10183
+ var PromoWithTitleContainer = /*#__PURE__*/styled__default.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);
10184
+ var PromoWithTitleSubtitle = /*#__PURE__*/styled__default.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"])));
10185
+ var PromoWithTitleText = /*#__PURE__*/styled__default.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"])));
10171
10186
  var ButtonsContainer$3 = /*#__PURE__*/styled__default.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) {
10172
10187
  var _ref5$primaryButtonTe = _ref5.primaryButtonTextLength,
10173
10188
  primaryButtonTextLength = _ref5$primaryButtonTe === void 0 ? 0 : _ref5$primaryButtonTe,
@@ -10313,20 +10328,18 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10313
10328
  title = _ref$title === void 0 ? '' : _ref$title,
10314
10329
  _ref$titleSize = _ref.titleSize,
10315
10330
  titleSize = _ref$titleSize === void 0 ? 'large' : _ref$titleSize,
10316
- titleHierarchy = _ref.titleHierarchy,
10317
10331
  subtitle = _ref.subtitle,
10318
10332
  text = _ref.text,
10319
10333
  links = _ref.links,
10320
10334
  children = _ref.children,
10321
10335
  videoSettings = _ref.videoSettings,
10336
+ titleSemanticLevel = _ref.titleSemanticLevel,
10322
10337
  className = _ref.className;
10323
10338
  var truncate = function truncate(str, n) {
10324
10339
  return str.length >= n ? str.substr(0, n) : str;
10325
10340
  };
10326
- var correctTitleSize = function correctTitleSize(size) {
10327
- return size === 'small' ? 'medium' : 'large';
10328
- };
10329
10341
  var imageToLeft = imagePosition === 'left';
10342
+ var titleLevel = titleSize === 'large' ? 2 : 3;
10330
10343
  var primaryButton = links == null ? void 0 : links[0];
10331
10344
  var _ref2 = primaryButton || {},
10332
10345
  _ref2$text = _ref2.text,
@@ -10350,19 +10363,20 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10350
10363
  imageToLeft: imageToLeft,
10351
10364
  className: className,
10352
10365
  "data-testid": "promo-with-title"
10353
- }, /*#__PURE__*/React__default.createElement(PromoChild, {
10366
+ }, /*#__PURE__*/React__default.createElement(PromoChild
10367
+ // eslint-disable-next-line react/no-children-prop
10368
+ , {
10369
+ // eslint-disable-next-line react/no-children-prop
10370
+ children: children,
10354
10371
  videoSettings: _extends({}, defaultVideoSettings, videoSettings),
10355
10372
  imageToLeft: imageToLeft
10356
- }, children), /*#__PURE__*/React__default.createElement(PromoWithTitleContentWrapper, {
10373
+ }), /*#__PURE__*/React__default.createElement(PromoWithTitleContentWrapper, {
10357
10374
  "data-testid": "content-wrapper",
10358
10375
  imageToLeft: imageToLeft
10359
- }, /*#__PURE__*/React__default.createElement(HarmonicHeaderWithWrapper, {
10360
- size: correctTitleSize(titleSize),
10361
- hierarchy: titleHierarchy
10362
- }, title), subtitle ? /*#__PURE__*/React__default.createElement(HarmonicSubtitleWithWrapper, {
10363
- size: "medium"
10364
- }, subtitle) : null, /*#__PURE__*/React__default.createElement(BodyCopyHarmonicWithWrapper, {
10365
- size: "large",
10376
+ }, /*#__PURE__*/React__default.createElement(PromoWithTitleContainer, null, /*#__PURE__*/React__default.createElement(Header, {
10377
+ level: titleLevel,
10378
+ semanticLevel: titleSemanticLevel != null ? titleSemanticLevel : titleLevel
10379
+ }, title)), subtitle ? /*#__PURE__*/React__default.createElement(PromoWithTitleSubtitle, null, subtitle) : null, /*#__PURE__*/React__default.createElement(PromoWithTitleText, {
10366
10380
  dangerouslySetInnerHTML: {
10367
10381
  __html: text
10368
10382
  }
@@ -10370,11 +10384,7 @@ var PromoWithTitle = function PromoWithTitle(_ref) {
10370
10384
  "data-testid": "buttons-wrapper",
10371
10385
  primaryButtonTextLength: primaryButtonText.length,
10372
10386
  tertiaryButtonTextLength: tertiaryButtonText.length
10373
- }, primaryButton ? (/*#__PURE__*/React__default.createElement(PrimaryButton, Object.assign({
10374
- target: "_blank"
10375
- }, restPrimaryButton), primaryButtonTextTruncate)) : null, tertiaryButton ? (/*#__PURE__*/React__default.createElement(TertiaryButton, Object.assign({
10376
- target: "_blank"
10377
- }, restTertiaryButton), tertiaryButtonTextTruncate)) : null)) : null));
10387
+ }, primaryButton ? /*#__PURE__*/React__default.createElement(PrimaryButton, Object.assign({}, restPrimaryButton), primaryButtonTextTruncate) : null, tertiaryButton ? (/*#__PURE__*/React__default.createElement(TertiaryButton, Object.assign({}, restTertiaryButton), tertiaryButtonTextTruncate)) : null)) : null));
10378
10388
  };
10379
10389
 
10380
10390
  var _templateObject$1a;
@@ -12212,6 +12222,7 @@ var isVideoSlide = function isVideoSlide(slideMedia) {
12212
12222
  return slideMedia.video !== undefined;
12213
12223
  };
12214
12224
 
12225
+ var IMAGE_WIDTH_LIMIT$1 = 800;
12215
12226
  var VideoSlide = function VideoSlide(_ref) {
12216
12227
  var index = _ref.index,
12217
12228
  settings = _ref.settings,
@@ -12242,12 +12253,18 @@ var SwipeCarousel = function SwipeCarousel(_ref2) {
12242
12253
  var hasOnlyImageSlides = slidesMedia.every(function (slide) {
12243
12254
  return !isVideoSlide(slide);
12244
12255
  });
12256
+ var limitedMediaContent = slidesMedia.map(function (slide) {
12257
+ if (isVideoSlide(slide)) return slide;
12258
+ return _extends({}, slide, {
12259
+ src: slide.src ? limitImageUrlDimension(slide.src, IMAGE_WIDTH_LIMIT$1) : undefined
12260
+ });
12261
+ });
12245
12262
  return /*#__PURE__*/React__default.createElement(Swipe, {
12246
12263
  ref: carouselRef,
12247
12264
  infinite: hasMultipleSlides && hasOnlyImageSlides,
12248
12265
  onIndexChange: setCurrentSlide,
12249
12266
  "aria-roledescription": "carousel"
12250
- }, slidesMedia.map(function (mediaContent, index) {
12267
+ }, limitedMediaContent.map(function (mediaContent, index) {
12251
12268
  return /*#__PURE__*/React__default.createElement("div", {
12252
12269
  className: "swiper-slide",
12253
12270
  key: mediaContent.key,