@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 +0 -3
- package/dist/components/molecules/PromoWithTitle/PromoWithTitle.style.d.ts +3 -3
- package/dist/harmonic.cjs.development.js +71 -54
- package/dist/harmonic.cjs.development.js.map +1 -1
- package/dist/harmonic.cjs.production.min.js +1 -1
- package/dist/harmonic.cjs.production.min.js.map +1 -1
- package/dist/harmonic.esm.js +71 -54
- package/dist/harmonic.esm.js.map +1 -1
- package/dist/helpers/urls.d.ts +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/types/editorial.d.ts +4 -6
- package/dist/types/information.d.ts +2 -2
- package/dist/types/typography.d.ts +3 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -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
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
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:
|
|
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
|
|
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
|
|
10169
|
-
var
|
|
10170
|
-
var
|
|
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
|
-
}
|
|
10373
|
+
}), /*#__PURE__*/React__default.createElement(PromoWithTitleContentWrapper, {
|
|
10357
10374
|
"data-testid": "content-wrapper",
|
|
10358
10375
|
imageToLeft: imageToLeft
|
|
10359
|
-
}, /*#__PURE__*/React__default.createElement(
|
|
10360
|
-
|
|
10361
|
-
|
|
10362
|
-
}, title), subtitle ? /*#__PURE__*/React__default.createElement(
|
|
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 ?
|
|
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
|
-
},
|
|
12267
|
+
}, limitedMediaContent.map(function (mediaContent, index) {
|
|
12251
12268
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
12252
12269
|
className: "swiper-slide",
|
|
12253
12270
|
key: mediaContent.key,
|