@desynova-digital/components 9.3.1 → 9.3.3

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.
@@ -14,7 +14,6 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
  var _tokens = require("@desynova-digital/tokens");
16
16
  var _icon = _interopRequireDefault(require("../../atoms/icon"));
17
- var _tokens2 = require("../../../tokens");
18
17
  var _statusV = _interopRequireDefault(require("../../../tokens/statusV2"));
19
18
  var _cardV = require("./cardV2");
20
19
  var _utils = require("../../_helpers/utils");
@@ -23,6 +22,8 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
23
22
  // styles
24
23
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
24
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
25
+ var DEFAULT_THUMBNAIL_URL = "https://thumbnail.desynova.com/default_placeholder/Contido_Placeholder_Image.png";
26
+ var DEFAULT_FILE_TYPES = ["document", "audio", "video", "music", "image", "file", "folder"];
26
27
  var OverlayBackgroundStyles = (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n background: rgba(0, 0, 0, 0.5);\n"])));
27
28
  var assetStyles = {
28
29
  folder: {
@@ -292,6 +293,9 @@ var getStatusLabel = function getStatusLabel(status) {
292
293
  var _ARCHIVED_STATUS_CONF2;
293
294
  return ((_ARCHIVED_STATUS_CONF2 = ARCHIVED_STATUS_CONFIG[normalizeStatusCode(status)]) === null || _ARCHIVED_STATUS_CONF2 === void 0 ? void 0 : _ARCHIVED_STATUS_CONF2.label) || null;
294
295
  };
296
+ var getNormalizedFileType = function getNormalizedFileType(fileType) {
297
+ return String(fileType || "").trim().toLowerCase();
298
+ };
295
299
  var ThumbnailV2 = function ThumbnailV2(props) {
296
300
  var theme = props.theme,
297
301
  width = props.width,
@@ -333,6 +337,11 @@ var ThumbnailV2 = function ThumbnailV2(props) {
333
337
  var displayDuration = hasDuration ? getDisplayTimecode(durationValue, effectiveFrameRate) : "";
334
338
  var supportsDuration = ["audio", "video"].includes(String(file_type || "").trim().toLowerCase());
335
339
  var displayAssetType = asset_type === undefined || asset_type === null ? "" : String(asset_type).trim();
340
+ var rawThumbnail = typeof props.thumbnail === "string" ? props.thumbnail.trim() : "";
341
+ var rawIframeurl = typeof props.iframeurl === "string" ? props.iframeurl.trim() : "";
342
+ var hasNoMediaSources = !rawThumbnail && !rawIframeurl;
343
+ var normalizedFileType = getNormalizedFileType(file_type);
344
+ var isVideoFileType = normalizedFileType === "video";
336
345
  var actionItems = Array.isArray(actions) ? actions : [];
337
346
  var isSegmentCard = Boolean(isSegment || is_segment);
338
347
  var totalSeconds = getTimeInSeconds(resolvedDuration, effectiveFrameRate);
@@ -345,18 +354,30 @@ var ThumbnailV2 = function ThumbnailV2(props) {
345
354
  var segmentWidthPercent = hasSegmentTimeline ? Math.min(100 - segmentLeftPercent, Math.max(1, (segmentEndSeconds - segmentStartSeconds) / totalSeconds * 100)) : 0;
346
355
  var segmentCenterPercent = segmentLeftPercent + segmentWidthPercent / 2;
347
356
  var segmentPopupAlignment = segmentCenterPercent < 40 ? "start" : segmentCenterPercent > 60 ? "end" : "center";
348
- var _useState5 = (0, _react.useState)(null),
357
+ var _useState5 = (0, _react.useState)(false),
349
358
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
350
- statusIndex = _useState6[0],
351
- setStatusIndex = _useState6[1];
359
+ isClickPrevented = _useState6[0],
360
+ setClickPreventation = _useState6[1];
352
361
  var _useState7 = (0, _react.useState)(false),
353
362
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
354
- isClickPrevented = _useState8[0],
355
- setClickPreventation = _useState8[1];
363
+ showTopRightAction = _useState8[0],
364
+ setShowTopRightAction = _useState8[1];
356
365
  var _useState9 = (0, _react.useState)(false),
357
366
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
358
- showTopRightAction = _useState10[0],
359
- setShowTopRightAction = _useState10[1];
367
+ hasThumbnailLoaded = _useState10[0],
368
+ setHasThumbnailLoaded = _useState10[1];
369
+ var _useState11 = (0, _react.useState)(false),
370
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
371
+ hasThumbnailError = _useState12[0],
372
+ setHasThumbnailError = _useState12[1];
373
+ var _useState13 = (0, _react.useState)(false),
374
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
375
+ hasIframeLoaded = _useState14[0],
376
+ setHasIframeLoaded = _useState14[1];
377
+ var _useState15 = (0, _react.useState)(false),
378
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
379
+ hasIframeError = _useState16[0],
380
+ setHasIframeError = _useState16[1];
360
381
  var iframeImageBlockRef = (0, _react.useRef)(null);
361
382
  var iframeImageRef = (0, _react.useRef)(null);
362
383
  var hoverPointerRef = (0, _react.useRef)(null);
@@ -379,11 +400,47 @@ var ThumbnailV2 = function ThumbnailV2(props) {
379
400
  }
380
401
  }, [actionItems]);
381
402
  (0, _react.useEffect)(function () {
382
- var index = _tokens2.CARD_ASSET_STATUS.findIndex(function (label) {
383
- return label.code.includes(card_status || upload_status ? (card_status || upload_status).toLowerCase().split(" ").join("_") : []);
384
- });
385
- setStatusIndex(index);
386
- }, [upload_status, card_status]);
403
+ var isMounted = true;
404
+ var preloaders = [];
405
+
406
+ /**
407
+ * This function preloads an image from the provided URL and handles its load and error states.
408
+ * @param {string} src URL of the image to load.
409
+ * @param {Function} setLoaded State setter for successful image loading.
410
+ * @param {Function} setError State setter for image loading failure.
411
+ */
412
+
413
+ var loadImage = function loadImage(src, setLoaded, setError) {
414
+ setLoaded(false);
415
+ setError(false);
416
+ if (!src) {
417
+ setError(true);
418
+ return;
419
+ }
420
+ var image = new Image();
421
+ image.onload = function () {
422
+ if (!isMounted) return;
423
+ setLoaded(true);
424
+ setError(false);
425
+ };
426
+ image.onerror = function () {
427
+ if (!isMounted) return;
428
+ setLoaded(false);
429
+ setError(true);
430
+ };
431
+ image.src = src;
432
+ preloaders.push(image);
433
+ };
434
+ loadImage(rawThumbnail, setHasThumbnailLoaded, setHasThumbnailError);
435
+ loadImage(rawIframeurl, setHasIframeLoaded, setHasIframeError);
436
+ return function () {
437
+ isMounted = false;
438
+ preloaders.forEach(function (image) {
439
+ image.onload = null;
440
+ image.onerror = null;
441
+ });
442
+ };
443
+ }, [rawThumbnail, rawIframeurl]);
387
444
  (0, _react.useEffect)(function () {
388
445
  if (!showTopRightAction) return;
389
446
  var handleClick = function handleClick(e) {
@@ -446,9 +503,14 @@ var ThumbnailV2 = function ThumbnailV2(props) {
446
503
  onNestedDropdownSelect(item);
447
504
  }
448
505
  }, [onNestedDropdownSelect]);
506
+ var resolvedIconName = normalizedFileType === "video" && value == "collateral" ? "video-icon" : DEFAULT_FILE_TYPES.includes(normalizedFileType) ? "".concat(normalizedFileType, "-icon") : "unsupportedFile-icon";
507
+ var shouldShowThumbnailImage = !hasNoMediaSources && hasThumbnailLoaded;
508
+ var shouldShowDefaultThumbnail = !hasNoMediaSources && isVideoFileType && rawThumbnail && !hasThumbnailLoaded;
509
+ var shouldShowFileTypeIcon = Boolean(file_type) && (hasNoMediaSources || !shouldShowThumbnailImage && !shouldShowDefaultThumbnail);
510
+ var shouldRenderIframePreview = hasIframeLoaded && !hasIframeError;
449
511
  return /*#__PURE__*/_react["default"].createElement(ThumbnailStyles, {
450
512
  width: width,
451
- thumbnail: thumbnail,
513
+ thumbnail: shouldShowThumbnailImage ? rawThumbnail : shouldShowDefaultThumbnail ? DEFAULT_THUMBNAIL_URL : "",
452
514
  isClickPrevented: isClickPrevented,
453
515
  onClick: handleThumbnailClick,
454
516
  theme: props.theme,
@@ -538,15 +600,15 @@ var ThumbnailV2 = function ThumbnailV2(props) {
538
600
  }), /*#__PURE__*/_react["default"].createElement("div", {
539
601
  className: "tooltip"
540
602
  }, item.title));
541
- })) || null, file_type && !thumbnail ? /*#__PURE__*/_react["default"].createElement("div", {
603
+ })) || null, shouldShowFileTypeIcon ? /*#__PURE__*/_react["default"].createElement("div", {
542
604
  className: "thumbnail-image-block background-block"
543
605
  }, /*#__PURE__*/_react["default"].createElement("div", {
544
606
  className: "circle"
545
607
  }, /*#__PURE__*/_react["default"].createElement(_icon["default"], {
546
- name: file_type == "video" && value == "collateral" ? "video-icon" : "".concat(file_type, "-icon"),
608
+ name: resolvedIconName,
547
609
  width: 15,
548
610
  height: 15
549
- }))) : null, iframeurl && /*#__PURE__*/_react["default"].createElement("div", {
611
+ }))) : null, shouldRenderIframePreview && /*#__PURE__*/_react["default"].createElement("div", {
550
612
  onMouseMove: handleMouseMove,
551
613
  className: "iframe-image-block background-block",
552
614
  ref: iframeImageBlockRef
@@ -556,7 +618,7 @@ var ThumbnailV2 = function ThumbnailV2(props) {
556
618
  }), /*#__PURE__*/_react["default"].createElement("img", {
557
619
  ref: iframeImageRef,
558
620
  className: "iframe-image",
559
- src: iframeurl,
621
+ src: rawIframeurl,
560
622
  alt: "preview"
561
623
  })) || null, isSearchPageCard && supportsDuration && displayDuration ? /*#__PURE__*/_react["default"].createElement(DurationBadge, null, displayDuration) : null);
562
624
  };
@@ -590,7 +652,7 @@ ThumbnailV2.propTypes = {
590
652
  ThumbnailV2.defaultProps = {
591
653
  theme: "dark",
592
654
  width: "lg",
593
- thumbnail: "https://thumbnail.desynova.com/default_placeholder/Contido_Placeholder_Image.png",
655
+ thumbnail: DEFAULT_THUMBNAIL_URL,
594
656
  iframeurl: "",
595
657
  isAdobe: false,
596
658
  isSearchPageCard: false
@@ -2019,6 +2019,14 @@
2019
2019
  ],
2020
2020
  "width": 14,
2021
2021
  "height": 14
2022
+ },
2023
+ "unsupportedFile-icon": {
2024
+ "viewBox": "0 -960 960 960",
2025
+ "paths": [
2026
+ "M160-160q-33 0-56.5-23.5T80-240v-120h360q33 0 56.5-23.5T520-440v-360h280q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160ZM80-400v-240q0-33 23.5-56.5T160-720h240L80-400Zm153-40 207-207v207H233Z"
2027
+ ],
2028
+ "width": 24,
2029
+ "height": 24
2022
2030
  }
2023
2031
  }
2024
2032
  }
@@ -12,7 +12,8 @@ var _react = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _styledComponents = _interopRequireDefault(require("styled-components"));
14
14
  var _tokens = require("@desynova-digital/tokens");
15
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
15
+ var _icon = _interopRequireDefault(require("../icon"));
16
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
16
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
18
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
18
19
  var getSearchAccent = function getSearchAccent(theme) {
@@ -24,43 +25,53 @@ var capitalizeFirstLetter = function capitalizeFirstLetter(value) {
24
25
  if (typeof value !== 'string' || !value) return value;
25
26
  return "".concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
26
27
  };
27
- var Card = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n width: ", ";\n height: ", ";\n border-radius: 10px;\n overflow: visible;\n cursor: pointer;\n background: #0c141d;\n flex-shrink: 0;\n box-sizing: border-box;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.18);\n transform: scale(1);\n transform-origin: center;\n z-index: 0;\n isolation: isolate;\n transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 240ms cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform;\n\n &:hover {\n transform: scale(1.035);\n z-index: 5;\n box-shadow: 0 22px 60px rgba(0, 0, 0, 0.6);\n }\n"])), function (_ref) {
28
+ var Card = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n width: ", ";\n height: ", ";\n border-radius: 10px;\n overflow: visible;\n cursor: ", ";\n background: #0c141d;\n flex-shrink: 0;\n box-sizing: border-box;\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.18);\n transform: scale(1);\n transform-origin: center;\n z-index: 0;\n isolation: isolate;\n transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1),\n box-shadow 240ms cubic-bezier(0.16, 1, 0.3, 1);\n will-change: transform;\n\n &:hover {\n transform: scale(1.035);\n z-index: 5;\n box-shadow: 0 22px 60px rgba(0, 0, 0, 0.6);\n }\n\n &:hover .show-movie-open-page,\n &:focus-within .show-movie-open-page {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n }\n"])), function (_ref) {
28
29
  var width = _ref.width;
29
30
  return width || '178px';
30
31
  }, function (_ref2) {
31
32
  var height = _ref2.height;
32
33
  return height || '258px';
34
+ }, function (_ref3) {
35
+ var onClick = _ref3.onClick;
36
+ return onClick ? 'pointer' : 'default';
33
37
  });
34
38
  var Poster = _styledComponents["default"].img(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n display: block;\n background: #0c141d;\n border-radius: inherit;\n\n &.fallback-image {\n object-fit: cover;\n object-position: center;\n }\n"])));
35
- var Gradient = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0) 30%, rgba(12, 20, 29, 0.7) 60%, rgba(12, 20, 29, 0.97) 100%);\n"])));
36
- var Badge = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n top: 12px;\n left: 12px;\n display: inline-flex;\n height: 16.75px;\n padding: 2px 6px;\n align-items: center;\n justify-content: center;\n font-family: 'SFUIText-Medium';\n border-radius: 4px;\n background: ", ";\n color: #0c141d;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0.6px;\n text-transform: uppercase;\n z-index: 2;\n"])), function (_ref3) {
37
- var theme = _ref3.theme;
39
+ var Gradient = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0) 30%,\n rgba(12, 20, 29, 0.7) 60%,\n rgba(12, 20, 29, 0.97) 100%\n );\n pointer-events: none;\n"])));
40
+ var Badge = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n top: 12px;\n left: 12px;\n display: inline-flex;\n height: 16.75px;\n padding: 2px 6px;\n align-items: center;\n justify-content: center;\n font-family: 'SFUIText-Medium';\n border-radius: 4px;\n background: ", ";\n color: #0c141d;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: 0.6px;\n text-transform: uppercase;\n z-index: 2;\n"])), function (_ref4) {
41
+ var theme = _ref4.theme;
38
42
  return getSearchAccent(theme);
39
43
  });
40
- var Content = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n left: 16px;\n right: 16px;\n bottom: 16px;\n z-index: 2;\n"])));
41
- var Title = _styledComponents["default"].h3(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0;\n color: #fff;\n font-family: 'SFUIText-Medium';\n font-size: 13px;\n font-style: normal;\n font-weight: 700;\n line-height: 18px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
42
- var Subtitle = _styledComponents["default"].p(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 2px 0 0;\n color: #5b7088;\n font-family: 'SFUIText-Medium';\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 15px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
43
- var PageSearchCard = function PageSearchCard(_ref4) {
44
- var thumbnail = _ref4.thumbnail,
45
- show_name = _ref4.show_name,
46
- asset_language = _ref4.asset_language,
47
- asset_type = _ref4.asset_type,
48
- channel_name = _ref4.channel_name,
49
- _ref4$title = _ref4.title,
50
- title = _ref4$title === void 0 ? 'Ghazi Attack' : _ref4$title,
51
- _ref4$subtitle = _ref4.subtitle,
52
- subtitle = _ref4$subtitle === void 0 ? 'Star Plus' : _ref4$subtitle,
53
- _ref4$tag = _ref4.tag,
54
- tag = _ref4$tag === void 0 ? 'MOVIE' : _ref4$tag,
55
- _ref4$theme = _ref4.theme,
56
- theme = _ref4$theme === void 0 ? 'dark' : _ref4$theme,
57
- _ref4$width = _ref4.width,
58
- width = _ref4$width === void 0 ? '220px' : _ref4$width,
59
- _ref4$height = _ref4.height,
60
- height = _ref4$height === void 0 ? '292px' : _ref4$height,
61
- onClick = _ref4.onClick;
44
+ var Content = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n left: 16px;\n right: 16px;\n bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n z-index: 2;\n"])));
45
+ var TextContent = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n min-width: 0;\n flex: 1;\n"])));
46
+ var Title = _styledComponents["default"].button(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n color: #fff;\n background: transparent;\n font-family: 'SFUIText-Medium';\n font-size: 13px;\n font-style: normal;\n font-weight: 700;\n line-height: 18px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n cursor: pointer;\n\n &:hover {\n color: ", ";\n }\n"])), function (_ref5) {
47
+ var theme = _ref5.theme;
48
+ return getSearchAccent(theme);
49
+ });
50
+ var OpenPageButton = _styledComponents["default"].button(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 3px;\n border: 0;\n background: transparent;\n cursor: pointer;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition: opacity 160ms ease;\n"])));
51
+ var Subtitle = _styledComponents["default"].p(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 2px 0 0;\n color: #5b7088;\n font-family: 'SFUIText-Medium';\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 15px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
52
+ var PageSearchCard = function PageSearchCard(_ref6) {
53
+ var thumbnail = _ref6.thumbnail,
54
+ show_name = _ref6.show_name,
55
+ asset_language = _ref6.asset_language,
56
+ asset_type = _ref6.asset_type,
57
+ content_type = _ref6.content_type,
58
+ channel_name = _ref6.channel_name,
59
+ _ref6$title = _ref6.title,
60
+ title = _ref6$title === void 0 ? 'Ghazi Attack' : _ref6$title,
61
+ _ref6$subtitle = _ref6.subtitle,
62
+ subtitle = _ref6$subtitle === void 0 ? 'Star Plus' : _ref6$subtitle,
63
+ _ref6$tag = _ref6.tag,
64
+ tag = _ref6$tag === void 0 ? 'MOVIE' : _ref6$tag,
65
+ _ref6$theme = _ref6.theme,
66
+ theme = _ref6$theme === void 0 ? 'dark' : _ref6$theme,
67
+ _ref6$width = _ref6.width,
68
+ width = _ref6$width === void 0 ? '220px' : _ref6$width,
69
+ _ref6$height = _ref6.height,
70
+ height = _ref6$height === void 0 ? '292px' : _ref6$height,
71
+ onClick = _ref6.onClick,
72
+ onCardClick = _ref6.onCardClick;
62
73
  var effectiveTitle = show_name || title;
63
- var effectiveTag = asset_type || tag;
74
+ var effectiveTag = content_type || asset_type || tag;
64
75
  var normalizedAssetType = String(effectiveTag).toLowerCase();
65
76
  var effectiveSubtitle = subtitle;
66
77
  if (normalizedAssetType === 'movie') {
@@ -72,15 +83,43 @@ var PageSearchCard = function PageSearchCard(_ref4) {
72
83
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
73
84
  hasImageError = _useState2[0],
74
85
  setHasImageError = _useState2[1];
86
+ var _useState3 = (0, _react.useState)(false),
87
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
88
+ isOpenIconHovered = _useState4[0],
89
+ setIsOpenIconHovered = _useState4[1];
75
90
  (0, _react.useEffect)(function () {
76
91
  setHasImageError(!thumbnail);
77
92
  }, [thumbnail]);
78
93
  var imageSource = hasImageError ? FALLBACK_IMAGE : thumbnail;
94
+ var accentColor = getSearchAccent(theme);
95
+ var handleNavigate = function handleNavigate(event) {
96
+ event.stopPropagation();
97
+ if (onClick) onClick(event);
98
+ };
99
+ var handleCardClick = function handleCardClick(event) {
100
+ if (event.type === 'keydown' && event.key !== 'Enter' && event.key !== ' ') {
101
+ return;
102
+ }
103
+ if (event.type === 'keydown') event.preventDefault();
104
+ if (onCardClick) {
105
+ onCardClick(event, {
106
+ searchText: effectiveTitle,
107
+ asset_language: asset_language,
108
+ asset_type: effectiveTag,
109
+ content_type: effectiveTag,
110
+ channel_name: channel_name
111
+ });
112
+ }
113
+ };
79
114
  return /*#__PURE__*/_react["default"].createElement(Card, {
80
115
  width: width,
81
116
  height: height,
82
117
  theme: theme,
83
- onClick: onClick
118
+ role: onCardClick ? 'button' : undefined,
119
+ tabIndex: onCardClick ? 0 : undefined,
120
+ "aria-label": onCardClick ? "Filter results by ".concat(effectiveTitle) : undefined,
121
+ onClick: onCardClick ? handleCardClick : undefined,
122
+ onKeyDown: onCardClick ? handleCardClick : undefined
84
123
  }, /*#__PURE__*/_react["default"].createElement(Poster, {
85
124
  src: imageSource,
86
125
  alt: effectiveTitle,
@@ -90,13 +129,36 @@ var PageSearchCard = function PageSearchCard(_ref4) {
90
129
  }
91
130
  }), /*#__PURE__*/_react["default"].createElement(Gradient, null), /*#__PURE__*/_react["default"].createElement(Badge, {
92
131
  theme: theme
93
- }, effectiveTag), /*#__PURE__*/_react["default"].createElement(Content, null, /*#__PURE__*/_react["default"].createElement(Title, null, effectiveTitle), effectiveSubtitle ? /*#__PURE__*/_react["default"].createElement(Subtitle, null, effectiveSubtitle) : null));
132
+ }, effectiveTag), /*#__PURE__*/_react["default"].createElement(Content, null, /*#__PURE__*/_react["default"].createElement(TextContent, null, /*#__PURE__*/_react["default"].createElement(Title, {
133
+ type: "button",
134
+ theme: theme,
135
+ title: effectiveTitle,
136
+ onClick: handleNavigate
137
+ }, effectiveTitle), effectiveSubtitle ? /*#__PURE__*/_react["default"].createElement(Subtitle, null, effectiveSubtitle) : null), onClick ? /*#__PURE__*/_react["default"].createElement(OpenPageButton, {
138
+ className: "show-movie-open-page",
139
+ type: "button",
140
+ title: "Open Page",
141
+ "aria-label": "Open ".concat(effectiveTitle, " page"),
142
+ onMouseEnter: function onMouseEnter() {
143
+ return setIsOpenIconHovered(true);
144
+ },
145
+ onMouseLeave: function onMouseLeave() {
146
+ return setIsOpenIconHovered(false);
147
+ },
148
+ onClick: handleNavigate
149
+ }, /*#__PURE__*/_react["default"].createElement(_icon["default"], {
150
+ name: "files-associated",
151
+ width: 16,
152
+ height: 16,
153
+ color: isOpenIconHovered ? accentColor : '#AFB2BA'
154
+ })) : null));
94
155
  };
95
156
  PageSearchCard.propTypes = {
96
157
  thumbnail: _propTypes["default"].string,
97
158
  show_name: _propTypes["default"].string,
98
159
  asset_language: _propTypes["default"].string,
99
160
  asset_type: _propTypes["default"].string,
161
+ content_type: _propTypes["default"].string,
100
162
  channel_name: _propTypes["default"].string,
101
163
  title: _propTypes["default"].string,
102
164
  subtitle: _propTypes["default"].string,
@@ -104,6 +166,7 @@ PageSearchCard.propTypes = {
104
166
  theme: _propTypes["default"].string,
105
167
  width: _propTypes["default"].string,
106
168
  height: _propTypes["default"].string,
107
- onClick: _propTypes["default"].func
169
+ onClick: _propTypes["default"].func,
170
+ onCardClick: _propTypes["default"].func
108
171
  };
109
172
  var _default = exports["default"] = PageSearchCard;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@desynova-digital/components",
3
- "version": "9.3.1",
3
+ "version": "9.3.3",
4
4
  "description": "Components for Desynova Digital",
5
5
  "main": "index.js",
6
6
  "author": "desynova-digital",
7
7
  "license": "MIT",
8
8
  "repository": "desynova-digital",
9
9
  "dependencies": {
10
- "@desynova-digital/tokens": "9.3.1",
10
+ "@desynova-digital/tokens": "9.3.3",
11
11
  "prop-types": "^15.7.2",
12
12
  "styled-components": "^4.3.2"
13
13
  },