@clickview/lite 0.48.0-rc.7 → 0.48.0

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.
Files changed (128) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
  3. package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
  4. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
  7. package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
  9. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
  11. package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
  13. package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
  14. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
  15. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
  16. package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
  17. package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
  19. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
  21. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
  23. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
  24. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
  25. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
  27. package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
  29. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
  30. package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
  31. package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
  32. package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
  33. package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
  35. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
  37. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
  38. package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
  39. package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
  41. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
  43. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
  45. package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
  47. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
  49. package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
  51. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
  53. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
  55. package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
  57. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
  59. package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
  61. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
  63. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
  65. package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
  67. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
  69. package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
  71. package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
  73. package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
  75. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
  77. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
  79. package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
  81. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
  83. package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
  85. package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
  87. package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
  88. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
  89. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
  91. package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
  92. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
  93. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
  95. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
  97. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
  99. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
  101. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
  103. package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
  105. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
  107. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
  109. package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
  110. package/package.json +1 -1
  111. package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
  113. package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
  114. package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
  115. /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
  116. /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
  117. /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
  118. /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
  119. /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
  120. /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
  121. /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
  122. /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
  123. /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
  124. /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
  125. /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
  126. /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
  127. /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
  128. /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/8906-b75b51bd0f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/calendar-events.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/calendar-day.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/components/emoji-text/emoji-text.scss","file:///app/packages/libs/shared/src/components/emoji-text/EmojiText.tsx","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","file:///app/packages/libs/shared/src/components/feedback-form/feedback-form.scss","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackForm.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetThemingConstants.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/hero-thumbnail-small.scss","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/onboarding-steps-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/subject-thumbnail-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/utils/markdown-helper/MarkdownHelper.ts","file:///app/packages/libs/shared/src/utils/markdown-helper/markdown-helper.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetTemplateConfig.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/widget-container-view.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/resource-thumbnail/resource-thumbnail.scss","file:///app/packages/libs/shared/src/components/resource-thumbnail/ResourceThumbnail.tsx","file:///app/packages/libs/shared/src/utils/ResourceHelper.ts","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/ResourceWidgetItem.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"cellDate\":\"qcD_n\",\"label\":\"sp6Gw\",\"isHovering\":\"_6xWx\",\"numberWrapper\":\"KZfe0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isToday(props.date);\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.hasEvent)\n dateClassName += ' text-white';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hardcodedCover\":\"ByD0q\",\"tag\":\"ZHW8B\",\"date\":\"AKOWh\",\"backgroundImage\":\"RDtch\",\"eventCard\":\"YtMiS\",\"wrapper\":\"ylxwf\",\"left\":\"iTqxB\",\"right\":\"bUUXX\",\"noAnimation\":\"oZacR\",\"cover\":\"kpH3Y\",\"tagWrap\":\"KvlZ8\",\"appear\":\"xlSdc\",\"displayDate\":\"rkBJb\",\"title\":\"c4_Kj\",\"titleText\":\"nRMvg\",\"circle\":\"wu4hg\",\"active\":\"tbdFj\",\"arrow\":\"omZKz\",\"bottomBar\":\"hxKUP\",\"bottomPlaceholder\":\"dzeZ7\",\"multiEventFilter\":\"dSxjc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-events.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = props.eventsOnDay.find((e, idx) => idx === sliderStep);\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n \n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content.id, displayedEvent.name);\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n className='d-flex justify-content-end'\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n hasEvent\n />\n )}\n\n <div className={`postion-relative ${styles.wrapper}`}>\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className}`}\n >\n {iconUrl\n ? <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />\n : <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n }\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <div className={`${styles.titleText} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</div>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronLeft}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronRight}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </div>\n </AppLink>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"nsEjO\",\"multiEventCell\":\"vvFYj\",\"fadeIn\":\"BX0cX\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n />\n )}\n {isMultiEventDate && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && <CalendarEvents {...props} isMultiEventDate={isMultiEventDate} />}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n \n // same month event\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n }\n};","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, CurrentUser, PlaylistCollection, Presentation, User } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { PlaylistCollectionIdentifier } from '../../playlists/interfaces';\n\nexport interface GetPathwayOptions {\n jobTitleOverride?: JobTitles;\n preferredPresentationOverride?: Presentation;\n}\n\nexport function useOnboardingPathway(appLinks: OnboardingScreenAppLinks) {\n const [ hasPlaylist, setHasPlaylist ] = useViewModel<boolean>('has:playlist', null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n\n const presentations = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Subject)\n );\n const preferredPresentation = Flight.useBasicFetch<Presentation>(\n ClassificationRequests.presentation(PresentationType.Subject)\n );\n const curriculums = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Curriculum)\n );\n const playlists = Flight.useBasicFetch<PlaylistCollection>(\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier())\n );\n const preferredSubjects = Flight.useBasicFetch<Classification[]>(\n PreferenceRequests.mySubjectPreferences()\n );\n const { hasPermissions } = usePermissions();\n\n React.useEffect(() => {\n if (!playlists.hasCompleted)\n return;\n\n if (hasPlaylist !== !!playlists.data?.data?.length)\n setHasPlaylist(!!playlists.data?.data?.length);\n }, [playlists.hasCompleted]);\n\n const hasLoadedPathway = (\n currentUser.hasCompleted &&\n user.hasCompleted &&\n presentations.hasCompleted &&\n curriculums.hasCompleted &&\n preferredPresentation.hasCompleted &&\n playlists.hasCompleted &&\n preferredSubjects.hasCompleted &&\n hasPlaylist !== null\n );\n\n const { userSettings } = useSettings(null);\n\n function getPathway(options: GetPathwayOptions = {}): OnboardingPathway {\n const jobTitle = options.jobTitleOverride || user.data?.userProfile?.metadata?.jobTitle;\n const presentation = options.preferredPresentationOverride || preferredPresentation.data;\n\n if (!hasLoadedPathway) {\n return {\n screens: {},\n currentScreen: null,\n totalScreens: 0,\n totalScreensInProgressBar: 0,\n hasCompletedAllSteps: false\n };\n }\n\n return OnboardingPathwayHelper.getOnboardingPathway({\n jobTitle,\n userSettings: userSettings.data,\n presentations: presentations.data,\n curriculums: curriculums.data,\n preferredSubjects: preferredSubjects.data,\n preferredPresentation: presentation,\n appLink: ContextService.getCurrentRoute().appLink,\n appLinks,\n masterUser: user.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"emoji\":\"d86p2\"};","import React from 'react';\n\nimport styles from './emoji-text.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n imageCdnUrl?: string;\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`rounded-circle w-100 h-100 ${styles.logo} ${colourClass}`}\n style={{ backgroundImage: `url(${logoUrl})` }}\n >\n </div>\n </AppLink>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"logoItem\":\"z6iYz\",\"logo\":\"vt0gx\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function CircleLogoSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});","// extracted by mini-css-extract-plugin\nexport default {\"promptContainer\":\"A_kCD\",\"text\":\"UFm9h\",\"form\":\"na9Vb\"};","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string; },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch (ex) {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svgName={cvSvgLibrary.ThumbsUp}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svgName={cvSvgLibrary.ThumbsDown}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageContainer\":\"ZMjnx\",\"image\":\"SsxEf\",\"background\":\"MtcB3\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.scss';\n\nexport function CoverFixedPillListXSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {props.name}\n </h2>\n\n <Row className={`mb-2 w-100`}>\n {props.content.map(classification => {\n const coverUrl = ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n\n return (\n <Col key={classification.id} xs={12} sm={6} lg={4}>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='d-flex align-items-center mb-2'\n >\n <div className={`${styles.imageContainer} me-2`}>\n <div className={`${styles.image} rounded`} style={{ backgroundImage: `url('${coverUrl}')` }} />\n </div>\n <div>\n {classification.name}\n </div>\n </AppLink>\n </Col>\n );\n })}\n </Row>\n </div>\n\n <FeedbackForm onSubmit={props.onSubmitFeedback} />\n </>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function CoverFixedTileListWidgetTemplate(props: WidgetTemplateProps<Playlist[]>): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col key={p.id} xs={6} sm={4} lg={3} className={`px-1 pb-2 columns-of-five`}>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={{\n ...props.analyticsOptions,\n ...analyticsOptions\n }}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\ninterface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: WidgetTemplateProps, content: CoverItemContent[]) {\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<CoverItemContent[]>): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget\n ? props.appLinks?.classificationLatestReleases?.(data)\n : props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n getSubtitle={\n isClassificationLatestReleasedWidget\n ? getSubtitleFromTotalVideos\n : undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svgName={cvSvgLibrary.Hamburger} />\n </div>\n <div className={wrapperClassName}>\n <h3 className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'}`}>\n {props.data.name}\n </h3>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classification, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(props.content, props.preferences);\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content.sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing\n ? content.map((c, index) => ({ id: c.id, hidden: true, index }))\n : Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll'),\n cover: props.presentation.cover\n } as Classification;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n if (!currentSubjects.length)\n return <></>;\n\n return (\n <div>\n <div className={`d-flex flex-wrap align-items-center justify-content-between`}>\n <div className='col'>\n <div className={'d-flex justify-content-between w-100 no-wrap flex-row mb-2'}>\n <h2 className='h4 mb-0 align-self-end flex-shrink-0'>\n {isEditing ? LanguageService.getPhrase(namespace, 'updating') : props.name}\n </h2>\n {(!isEditing && canManagePreferences) && (\n <DivButton className='hover-text-underline' onClick={() => setIsEditing(true)}>\n {LanguageService.getPhrase(namespace, 'edit')}\n </DivButton>\n )}\n </div>\n\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className={`d-flex align-items-start`}>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n <Row className='mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col className='position-relative pb-2 px-1' key={props.presentation.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={exploreAllSubjectsItem}\n getChildAppLink={() => props.appLinks?.allTopics?.(props.presentation.id)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n multiline\n />\n </Col>\n )}\n\n <SortableContainerWrapper\n ids={currentSubjects.map(c => c.id)}\n getDragOverlay={getDragOverlay}\n onSortStart={onSortStart}\n onSortEnd={onSortEnd}\n vertical={false}\n >\n {currentSubjects.map(c => {\n return (\n <Col className='position-relative pb-2 px-1' key={c.id} sm={6} lg={4}>\n <>\n {isEditing ? (\n <SortableItemWrapper\n id={c.id}\n childComponent={EditableSubjectWidgetItem}\n childProps={{\n data: c,\n onToggleVisibility,\n isVisible: isVisible(c),\n isDragging: false,\n canToggle: (\n !isVisible(c) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n ),\n multiline: true\n }}\n />\n ) : (\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n multiline\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"K1Ce4\",\"headingContainer\":\"XpN94\"};","// extracted by mini-css-extract-plugin\nexport default {\"dateItemContainer\":\"Hrx2m\",\"container\":\"k2Xse\"};","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`text-decoration-none my-2 mx-1 rounded-3 d-block position-relative`}\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\ntype SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification, hardCodedEvent?: HashObject): string {\n return hardCodedEvent\n ? ImageHelper.createUrl((hardCodedEvent.iconUrl), { size: ImageSize.Medium })\n : ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification, getHardCodedEvent(classification))}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup;\n startDate: string;\n endDate: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n event: CalendarEvent<CalendarEventContent>;\n label: string;\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month')\n ? DateHelper.format(nextWeekStart, 'MMMM')\n : `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: WidgetTemplateProps<CalendarEvent<CalendarEventContent>[]>\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './video-widget-item.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n subTextAppLink?: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n presentationAudiences?: PresentationAudience[];\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, subTextAppLink, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={video}\n type='expandable'\n appLink={props.getAppLink(video)}\n subTextAppLink={subTextAppLink}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hovering={isHovering}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"hovering\":\"x7nyG\",\"transition\":\"A7FeL\",\"rowWidth\":\"eo8oY\",\"largeRowWidth\":\"lhqxB\"};","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"eSMIx\",\"partialBanner\":\"layDP\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.scss';\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n seriesAppLink: props.appLinks?.series\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"TzZuL\"};","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { Rating } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.scss';\n\ninterface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return '';\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${styles.rowWidth} ${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3 `}>\n <div className='d-flex justify-content-center align-items-center text-white'>\n <SvgContainer svgName={cvSvgLibrary.Search} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<Rating[]>): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating);\n \n return (\n <>\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nexport function HeadingWidgetTemplate(props: WidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cta\":\"nA9th\",\"banner\":\"b5ljD\",\"bannerImage\":\"dj_1H\",\"blurb\":\"UBcVE\",\"presentations\":\"fGBlR\",\"bannerContent\":\"lkPfM\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={styles.bannerImage} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} px-3`}>\n <h2 className='text-white h4 clamp-1'>\n {props.name}\n </h2>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Classification, EntitySetting } from 'libs/shared/interfaces';\n\nexport function HeroBannerWidgetTemplate(\n props: WidgetTemplateProps<Classification[] | EntitySetting<boolean>[]>\n): JSX.Element {\n return <ClassificationHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"iCyo4\",\"bannerContent\":\"cgv_6\",\"cta\":\"BXwH2\"};","import React from 'react';\n\nimport styles from '../hero-banner.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","export enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <h2 className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </h2>\n {props.metadata.cta?.text && (\n <IconButton svgName={cvSvgLibrary.NewWindow} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Presentation[]>): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <h2 className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </h2>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nexport function HeroBannerSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[] | Presentation[]>\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n case WidgetTypeId.Presentations:\n return <PresentationsHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Presentation[]>)} />;\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n }\n}","import React from 'react';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-thumbnail-small.scss';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport function HeroThumbnailSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={style}>\n {props.name &&\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white h4 clamp-1'>\n {props.name}\n </h2>\n </div>\n }\n \n <div className='btn btn-outline-dark me-3'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"LPw_x\",\"bannerImage\":\"UJ8IR\"};","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large'\n}\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = size === ProgressCircleSize.Large ? CIRCLE_WIDTH_LG : CIRCLE_WIDTH;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n \n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n \n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small;\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { EntitySetting } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './onboarding-steps-widget.scss';\n\nconst namespace = 'widgets.onboardingSteps';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDescription(\n currentScreen: OnboardingScreenId,\n currentStepNumber: number,\n totalSteps: number,\n isKdm: boolean\n): string {\n const screenConfig = OnboardingScreenConfigs[currentScreen];\n\n if (currentStepNumber === totalSteps)\n return `${getPhrase('lastStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n if (currentStepNumber === 1)\n return `${getPhrase('firstStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n return `${getPhrase('descriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: WidgetTemplateProps<EntitySetting<boolean>[]>\n): JSX.Element {\n const { getPathway, hasLoadedPathway } = useOnboardingPathway(props.appLinks?.onboardingAppLinks?.() ?? {});\n\n const pathway = hasLoadedPathway && getPathway();\n const isKdm = UserHelper.isKDM(props.jobTitle);\n\n function hideWidget(): boolean {\n if (props.isPreviewing)\n return false;\n\n if (!hasLoadedPathway)\n return true;\n\n if (props.settings?.hasCompletedOnboardingV2 || !props.settings?.hasOnboardingV2)\n return true;\n\n if (!props.hasPermissions(PermissionName.ViewOnboarding))\n return true;\n\n if (pathway.hasCompletedAllSteps)\n return true;\n\n return false;\n }\n\n if (hideWidget())\n return <div className='mb-n3' />;\n\n function getAnalyticsPayload() {\n if (props.isPreviewing)\n return {};\n\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n const previousScreenId = currentNode?.previous;\n\n return {\n currentScreen: screenConfig?.id,\n nextScreen: nextScreenId,\n previousScreen: previousScreenId,\n progress: OnboardingPathwayHelper.getProgress(pathway),\n ...OnboardingPathwayHelper.getOnboardingScreenStates(pathway)\n };\n }\n\n const analyticsData = getAnalyticsPayload();\n\n function getProgress() {\n if (props.isPreviewing) {\n return {\n overallPercentage: 75,\n totalScreens: 8,\n currentStepNumber: 6\n };\n }\n\n const progress = OnboardingPathwayHelper.getProgress(pathway);\n\n if (progress.overallPercentage === 0) {\n return {\n ...progress,\n // Never starting the user at 0%\n overallPercentage: 10\n };\n }\n\n return progress;\n }\n\n const { overallPercentage, totalScreens, currentStepNumber } = getProgress();\n\n return (\n <div className={`rounded-3 bg-light-yellow border border-2 border-dark position-relative d-flex align-items-center ${styles.container}`}>\n <div className={`${styles.leftPanel}`}>\n <div className={styles.percentageContainer}>\n <PercentageIndicator\n percentage={Math.round(overallPercentage) / 100}\n layout={PercentageIndicatorLayout.LabelInside}\n scoreThresholds={{\n HIGH: 0.75,\n MODERATE: 0\n }}\n />\n </div>\n\n <div>\n <h2 className='h4'>\n {props.isPreviewing\n ? OnboardingScreenConfigs['select-videos']?.getWidgetHeading(isKdm)\n : OnboardingScreenConfigs[pathway.currentScreen]?.getWidgetHeading(isKdm)}\n </h2>\n <div className={styles.descriptionContainer}>\n <SvgContainer svgName={cvSvgLibrary.ArrowRight} className='svg-container me-1' />\n <p className={styles.description}>\n {getDescription(\n props.isPreviewing ? 'select-videos' : pathway.currentScreen,\n currentStepNumber,\n totalScreens,\n isKdm\n )}\n </p>\n </div>\n </div>\n </div>\n\n <div\n className={`align-items-center justify-content-end h-100 ${styles.rightPanel}`}\n style={{ backgroundImage: `url('${props.imageUrls?.onboardingTeacherBackground}')` }}\n >\n <AppLink\n appLink={props.appLinks?.onboardingStep?.(pathway.currentScreen)}\n className={`btn btn-dark btn-lg ${styles.button}`}\n analyticsData={analyticsData}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.User,\n location: LocationContext.OnboardingStepsWidget,\n descriptor: OnboardingDescriptor.FinishPersonalising\n }}\n >\n <Text namespace={namespace} phrase='completeSetup' />\n </AppLink>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"leftPanel\":\"zmH98\",\"rightPanel\":\"w05om\",\"description\":\"ypP5M\",\"container\":\"QU4re\",\"button\":\"CHWcH\",\"descriptionContainer\":\"dTKo5\",\"percentageContainer\":\"T9LAC\"};","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='lg' childComponent={PartialWidgetItem} />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoTypes, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './popout-video-widget-item.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n canFavourite: CanFavouriteFunc;\n setFavourite: FavouriteFunc;\n presentationAudiences: PresentationAudience[];\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n getSubTextAppLink?: (video: Video) => Core.AppLink;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, getSubTextAppLink, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n type={breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n video={video}\n appLink={props.getAppLink(video)}\n subTextAppLink={VideoHelper.isVideo(video) && getSubTextAppLink?.(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n canFavourite={props.canFavourite}\n setFavourite={props.setFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n yearGroups={props.yearGroups}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"JSM4l\",\"largeRowWidth\":\"YYpNz\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n yearGroups: props.yearGroups,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n subTextType: props.subTextType\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='sm' childComponent={PartialWidgetItem} />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n let appLink = props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n if (props.widgetTypeId === WidgetTypeId.ContinueWatching && props.appLinks?.watchHistory)\n appLink = props.appLinks?.watchHistory?.();\n\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n yearGroups: props.yearGroups,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n subTextType: props.subTextType\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={appLink}\n />\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"largeSeriesItem\":\"HZ00X\",\"smallSeriesItem\":\"PQ2sv\",\"partialLoading\":\"hMoHO\"};","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './series-widget-item.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = () => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n />\n </AppLink>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"slidingSubjectSmall\":\"fgIje\",\"slidingSubjectLarge\":\"CJwKL\",\"heading\":\"P16Yg\",\"posterContainer\":\"VtrLt\",\"partialLoading\":\"IgCcl\",\"labelContainer\":\"ujwlj\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem, TallSubjectWidgetItemProps } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListMediumWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget<TallSubjectWidgetItemProps>\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: WidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, WidgetType } from 'libs/shared/interfaces';\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <div>\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}","import React from 'react';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const video = props.content[0];\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n yearGroups={props.yearGroups}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"OZATG\",\"container\":\"hcAU2\",\"large\":\"Tbieu\",\"small\":\"mGGrd\",\"content\":\"VtzxT\",\"top\":\"jrY7R\",\"title\":\"yAgR6\",\"description\":\"RjJ7O\",\"cover\":\"TJ7Sl\",\"descriptionText\":\"yzmvY\",\"button\":\"hGi43\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './subject-thumbnail-widget-item.scss';\n\nconst namespace = 'shared.subjectThumbnailWidgetItem';\n\ninterface SubjectWidgetContentProps extends SubjectThumbnailWidgetItemProps {}\n\nfunction SubjectWidgetContent(props: SubjectWidgetContentProps): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.data.cover?.url, { size: ImageSize.Small });\n const thumbnailUrl = ImageHelper.createUrl(props.data.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = props.data.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n return (\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container} ${props.isLarge ? styles.large : styles.small}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h3 className={`${styles.title} h4 ${props.isLarge ? 'text-nowrap text-truncate' : 'text-wrap clamp-3'}`}>{props.data.name}</h3>\n\n {props.isLarge && (\n <div className={`text-start ${styles.description}`}>\n <p className={styles.descriptionText}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={`${!props.appLink && 'cursor-default'} btn btn-outline-dark`}>\n {LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!thumbnailUrl && !!coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface SubjectThumbnailWidgetItemProps {\n data: Classification;\n appLink?: Core.AppLink;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction SubjectThumbnailWidgetItem(props: SubjectThumbnailWidgetItemProps): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name,\n presentationId: props.data?.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SubjectWidgetContent {...props} />\n </AppLink>\n );\n\n return <SubjectWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(SubjectThumbnailWidgetItem);\n\nexport { Memoized as SubjectThumbnailWidgetItem };","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col key={c.id} sm={12} md={6} className='px-1 pb-2'>\n <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n isLarge\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"partialThumbnail\":\"HwejH\",\"row\":\"hk2Ed\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"guidance\":\"uCRU1\"};","import React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.scss';\n\ntype VideoTemplateProps = WidgetTemplateProps & {\n video: VideoTypes;\n};\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(props: VideoTemplateProps): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n const subTextAppLink = VideoHelper.isVideo(props.video) && props.appLinks?.subText?.(props.video);\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n subTextAppLink={subTextAppLink}\n yearGroups={props.yearGroups}\n subTextType={props.subTextType}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <div className={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}>\n <InteractivesTag\n video={props.video}\n appLink={props.appLinks?.videoType?.(props.video, { scrollToPosition: PlayPageAnchor.Interactives })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n <ResourcesTag\n video={props.video}\n appLink={props.appLinks?.videoType?.(props.video, { scrollToPosition: PlayPageAnchor.Resources })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(props: WidgetTemplateProps<VideoTypes[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {props.content.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"KItVW\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col key={c.id} lg={4} md={6} sm={6} xs={12} className='px-1 pb-2'>\n <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"ymfwY\",\"container\":\"EkoYD\",\"content\":\"SSmWX\",\"top\":\"vEXH2\",\"title\":\"bMbF2\",\"description\":\"gDFxm\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);","import React from 'react';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.scss';\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const video = props.content[0];\n const containerRef = React.useRef();\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n });\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.subTextType}\n video={video}\n appLink={props.appLinks?.subText?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <h3 className='h4 mb-0'>\n {video.name}\n <RestrictionPadlock\n video={video}\n yearGroups={props.yearGroups}\n />\n </h3>\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <div className={`d-flex mt-2 ${styles.guidance}`}>\n <InteractivesTag\n video={video}\n appLink={props.appLinks?.videoType?.(video, { scrollToPosition: PlayPageAnchor.Interactives })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n <ResourcesTag\n video={video}\n appLink={props.appLinks?.videoType?.(video, { scrollToPosition: PlayPageAnchor.Resources })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </div>\n )}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"RmYET\",\"guidance\":\"EQXKD\",\"seriesTitleBox\":\"zmtsM\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Company, Video } from 'libs/shared/interfaces';\n\nexport function ThumbnailVerticalListWidgetTemplate(props: WidgetTemplateProps<Video[]>) {\n return (\n <>\n <WidgetHeader\n name={!props.metadata.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && props.description}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n getSubTextAppLink={(company: Company) => props.appLinks?.company?.(company)}\n hasPermissions={props.hasPermissions}\n subTextType='productionCompany'\n getPreviewQuestionsAppLink={() => null}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"TTPKV\",\"avatar\":\"nF3tK\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './author-reviewer-widget-template.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <div className={`${styles.card} h-100 rounded-2 d-flex flex-column`}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Small)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svgName={props.type === 'reviewer' ? cvSvgLibrary.Verified : cvSvgLibrary.Edit}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-1 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n options={{ date: DateHelper.format(props.datePublished, 'DD/MM/YYYY') }}\n />\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n options={{ date: DateHelper.format(props.datePublished, 'DD/MM/YYYY') }}\n />\n &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n options={{ date: DateHelper.format(props.lastUpdated, 'DD/MM/YYYY') }}\n />\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport function AuthorReviewerWidgetTemplate(props: WidgetTemplateProps<AuthorWidgetContent[]>): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className={`partial-loading-background mb-1`} style={{ width: '90%', height: '21px' }} />\n <div className={`partial-loading-background`} style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className={`partial-loading-background mb-1`} style={{ width: '100%', height: '1rem' }} />\n <div className={`partial-loading-background mb-1`} style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className={`partial-loading-background`} style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}","import * as marked from 'marked';\n\nimport styles from './markdown-helper.scss';\n\nconst MARKDOWN_LINK_CLASS = 'markdown-link';\n\nexport const MarkdownHelper = {\n isLink(element: HTMLElement): boolean {\n return element.classList.contains(MARKDOWN_LINK_CLASS);\n },\n\n getSeoWidgetRenderer() {\n const Renderer = new marked.Renderer();\n\n // Open links in a new tab\n Renderer.link = function(href: string, title: string, text: string) {\n return `<a href=\"${href}\" target=\"_blank\" class=\"info-link ${MARKDOWN_LINK_CLASS}\">${text}</a>`;\n };\n\n Renderer.list = function(body: string) {\n return `<ul class=\"${styles.ul}\">${body}</ul>`;\n };\n\n return Renderer;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"ul\":\"TIGbB\"};","import React from 'react';\nimport * as marked from 'marked';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { Faq } from 'libs/shared/interfaces';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './question-widget-template.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\nexport function QuestionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n // Answer should be expanded for anon by default so Google can read it.\n const shouldExpandInitially = props.isBot;\n\n const [ height, setHeight ] = React.useState(shouldExpandInitially ? '100%' : DEFAULT_HEIGHT);\n const [ isExpanded, setIsExpanded ] = React.useState<boolean>(shouldExpandInitially);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!shouldExpandInitially);\n\n const [ markdown, setMarkdown ] = React.useState(marked(answer, { renderer: MarkdownHelper.getSeoWidgetRenderer() }));\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n question,\n answer\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(answer || '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [answer]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!question || !markdown)\n return <></>;\n\n return (\n <DivButton className={`${styles.question} rounded-3`} onClick={onToggleExpander}>\n <div className='pb-2'>\n <div className='float-end rounded-circle bg-white'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{question}</h2>\n </div>\n\n <div\n className={styles.description}\n style={{ height }}\n >\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n >\n </p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"KGthN\",\"partialQuestion\":\"QrLg2\",\"description\":\"sxdDe\"};","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"G1OXf\",\"padding\":\"Jg3am\",\"partialQuestion\":\"tWUKI\",\"description\":\"z5LRc\"};","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}","import React from 'react';\nimport * as marked from 'marked';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { Faq } from 'libs/shared/interfaces';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './question-accordion-widget-template.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n faq: Faq;\n index: number;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const shouldExpandInitially = props.isBot;\n\n const [ isExpanded, setIsExpanded ] = React.useState(shouldExpandInitially);\n const [ height, setHeight ] = React.useState(shouldExpandInitially ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState(marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() }));\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [props.faq?.answer]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n return (\n <DivButton onClick={onToggleExpander} className={`${styles.question} rounded-2`}>\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal'>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n >\n <p\n className={`mb-0 py-1`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n >\n </p>\n \n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n\nexport function QuestionAccordionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): JSX.Element {\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Series, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-widget-item-v2.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n getSubTextAppLink: (series: Series) => Core.AppLink;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n presentationAudiences: PresentationAudience[];\n subTextType: VideoSubTextType;\n imageCdnUrl: string;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n type='static'\n appLink={props.getAppLink(props.data)}\n subTextAppLink={VideoHelper.isVideo(props.data) && props.getSubTextAppLink?.(props.data.series)}\n imageOptions={{ size: props.thumbnailSize }}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n subTextType={props.subTextType}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"YY2CD\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n DownloadHelper.downloadResource(props.data, props.analyticsData, props.analyticsOptions);\n }\n\n return <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\n return (\n <FixedWidget<MultimediaWidgetItemProps>\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n getSubTextAppLink: props.appLinks?.series,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n subTextType: 'series'\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { OnboardingStepsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PartialFixedWidgetProps } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { cvSvgLibrary, SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { AuthorReviewerWidgetTemplate } from '../components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from '../components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ProductId } from '../enums/ProductId';\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: WidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialFixedWidgetProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (targetType: DashboardTargetType, product: ProductId, widgetTypeId: WidgetTypeId) => boolean,\n className: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailHeroMedia,\n predicate: targetType => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListMedium,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListSmall,\n predicate: (targetType, product, widgetId) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFeaturedMedia,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedPillListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedPillListXSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverSlidingPillListSmall,\n predicate: (targetType, product, widgetId) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedTileList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateFeaturedThumbnailSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBanner,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.OnboardingSteps]: {\n getComponent: () => OnboardingStepsWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateOnboardingSteps,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBannerSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroThumbnailSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListXLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEditableCoverFixedPillListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeading,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateAuthorReviewer,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestion,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestionAccordion,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListMediaLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: cvSvgLibrary.WidgetTemplateFilterSlidingPillListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCircleLogoSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEventIconSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailVerticalList,\n predicate: (targetType, product) => {\n if (!(product === ProductId.StreamableLearning)) return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListLarge,\n predicate: () => false,\n className: ''\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"KjaI4\"};","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeroThumbnail\":\"P3cF6\",\"partialVideoTitleText\":\"ZRdlu\",\"partialDescription\":\"MoPit\",\"details\":\"J5CAD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nexport function PartialCoverFixedTileListWidgetTemplate(): JSX.Element {\n return (\n <>\n <PartialWidgetHeader />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport styles from '../featured-sliding-heading.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget hideDescription hideHeading/>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"pRXSM\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} lg={4} md={6} sm={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"SNBRD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLoadingHeading\":\"hjdMb\"};","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../question-widget-template.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialFilterSlidingPillListSmall(): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader hideDescription={true} />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className={`col px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3 pb-5`} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-circle-logo-sliding-list.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"KbaRB\",\"logoWrapper\":\"uVZyX\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader hideDescription />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='lg' />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"anchor\":\"FRyJT\",\"widgetHighlight\":\"e4uXN\",\"blinker\":\"e7d4o\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\ninterface CommonWidgetContainerViewProps extends Omit<WidgetTemplateProps, 'content'> {\n id: string;\n name: string;\n templateId: WidgetTemplate;\n dashboardTarget?: DashboardTargetType;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n}\n\ntype PropsWithFetch = CommonWidgetContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonWidgetContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype Props = PropsWithFetch | PropsWithoutFetch;\n\nexport function WidgetContainerView(props: Props): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content, unfilteredContent } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n lazyWidget.data?.preferences\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(video, { ...options, contextId: props.id });\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const PartialTemplate = WidgetTemplateConfig[props.templateId].partialLoading;\n const Template = WidgetTemplateConfig[props.templateId].getComponent(props.widgetTypeId);\n const widgetTemplateClass = WidgetTemplateConfig[props.templateId].className;\n\n if (!showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <div className={props.isScrollToTargetWidget ? `${styles.widgetHighlight} py-2 px-3 rounded-3` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n content={content}\n unfilteredContent={unfilteredContent}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"FFgf3\",\"imageTypeResource\":\"z4O5p\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { Link, Resource } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { BaseImage } from '../image/BaseImage';\n\nimport styles from './resource-thumbnail.scss';\n\n// Used for both PDFs and Links where we don't know the image ratio\nconst DYNAMIC_RATIO_IMAGE_OPTIONS: ImageOptions = {\n width: 200,\n resizeType: ResizeType.Cover\n};\n\nfunction getThumbnailUrl(imageCdnUrl: string, resource: Resource | Link): string {\n const imageType = getImageType(resource);\n\n // Use the thumbnail if defined\n if ('thumbnail' in resource && resource.thumbnail?.url)\n return ImageHelper.createUrl(resource.thumbnail?.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n \n const previewUrl = UrlHelper.safeUrlConcat(imageCdnUrl, '/v1/previews');\n\n if (!MasterTypeHelper.isResource(resource))\n return ImageHelper.createResourceImage(previewUrl, resource.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n\n if (imageType === ImageType.Pdf) {\n return resource.metadata.type === ResourceFileType.Pdf\n ? ImageHelper.createResourceImage(previewUrl, resource.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS })\n : ImageHelper.createResourceImage(previewUrl, resource.pdf?.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n }\n\n if (resource.metadata.type !== ResourceFileType.Zip)\n return ImageHelper.createUrl(resource.url, { size: ImageSize.Medium, resizeType: ResizeType.Cover });\n\n return '/images/zip-resource.png';\n}\n\nfunction getImageType(resource: Resource | Link): ImageType {\n if (!MasterTypeHelper.isResource(resource))\n return ImageType.Link;\n\n if (resource.metadata.type === ResourceFileType.Pdf || resource.pdf?.url)\n return ImageType.Pdf;\n\n return ImageType.Thumbnails;\n}\n\ninterface ResourceThumbnailProps {\n imageCdnUrl: string;\n resource: Resource | Link;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n}\n\nexport function ResourceThumbnail(props: ResourceThumbnailProps): JSX.Element {\n let metadata = null;\n let rotation = 0;\n\n if (MasterTypeHelper.isResource(props.resource)) {\n metadata = props.resource.metadata;\n rotation = props.resource.thumbnail?.metadata?.rotation ?? 0;\n }\n\n const thumbnailUrl = getThumbnailUrl(props.imageCdnUrl, props.resource);\n\n return (\n <BaseImage\n data={thumbnailUrl}\n imageType={getImageType(props.resource)}\n imageStyle={{ transform: `rotate(${rotation}deg)` }}\n alt={props.resource.name}\n errorFallbackImageSrc={props.imageErrorFallbackUrl}\n imageClassName={metadata?.type === ResourceFileType.Image ? `${styles.imageTypeResource} ${styles.imageStyle}` : ''}\n preload={props.preloadImage}\n preventLoad={!props.preloadImage}\n >\n &nbsp;\n </BaseImage>\n );\n}","import { ResourceType } from 'libs/shared/interfaces';\n\nexport const ResourceHelper = {\n getResourceTypeName(resourceType: ResourceType): string {\n switch (resourceType) {\n case 'additional-materials':\n return 'Additional Materials';\n\n case 'atom-guide':\n return 'ATOM Guide';\n\n case 'teacher-pack':\n return 'Teacher Pack';\n\n case 'student-activity':\n return 'Student Activity';\n\n default:\n return 'N/A';\n }\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"I9E5O\",\"item\":\"tqUFn\",\"dashboard\":\"o7j7p\",\"playPage\":\"V2RwX\",\"aspectRatio\":\"OnJDH\",\"outerContainer\":\"CIFy7\",\"innerContainer\":\"oUZPD\",\"actions\":\"jzGAm\",\"titleBelow\":\"Cpjs3\",\"thumbnailContainer\":\"EDiGi\",\"titleAbove\":\"e9ejn\",\"teacherPack\":\"_tdVE\",\"text\":\"g5NWS\",\"hoverState\":\"xRYhX\",\"atomGuide\":\"X39wU\",\"studentActivity\":\"X9pMl\",\"additionalMaterials\":\"qRVUo\",\"userUploaded\":\"_18JaV\",\"imageTypeResource\":\"KYtZL\",\"download\":\"fbb_e\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nfunction useCanPreview(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (e: React.MouseEvent<HTMLElement>, resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n}\n\nResourceTile.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTile(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => props.onClickDownload(e, props.data as Resource)}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {!!props.data?.metadata?.resourceType && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemProps extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItem = React.memo(function(props: ResourceWidgetItemProps): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreview(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block ${props.titlePosition === 'above' ? 'no-decoration' : ''}`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTile {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTile {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTile {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};"],"names":["getPhrase","LanguageService","CalendarCellDate","props","isToday","DateHelper","date","dateClassName","notCurrentMonth","isHovering","hasEvent","className","delay","ref","CalendarEvents","sliderStep","setSliderStep","multiEvents","eventsOnDay","length","displayedEvent","find","e","idx","multiDayEvent","endDate","backgroundColor","getBackgroundColor","content","hardCodedEvent","getHardCodedEvent","iconUrl","getIconUrl","coverUrl","getCoverUrl","isComingSoon","status","ClassificationStatus","hasInitialized","setClassName","randomNumber","Math","floor","random","window","setTimeout","setHasInitialized","setHoveredEvent","hoveredEvent","specialEventId","analyticsData","presentationId","eventCount","eventId","map","join","topicId","id","eventStatus","getAnalyticsData","analyticsOptions","actionType","entity","location","formatAnalyticDataDate","getBgImageClassName","isMultiEventDate","onClick","AnalyticsHelper","AppLink","appLink","getEventsListAppLink","getTopicAppLink","name","getAppLink","ComingSoonTag","onlyIcon","hideDay","style","LazyImage","src","alt","backgroundImage","SpecialEventHelper","startDate","title","DivButton","stopPropagation","preventDefault","s","action","SvgContainer","svgName","SliderDots","sliderLength","size","onSliderDotClick","i","CalendarDay","namespace","Tooltip","spanHackClassName","spanHack","GenericCalendarDate","theme","border","background","label","body","type","getBodyClass","text","month","getDisplayDate","slice","getEventsInMonth","calendarEvents","filter","getOrdinalDate","useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","EmojiText","emoji","children","FormButtons","formikProps","canSubmit","variant","disabled","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","field","values","fieldName","limit","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","entries","value","useFormikContextWrapper","PartialVideoList","Array","numVideos","fill","_","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","CircleLogoWidgetItem","logoUrl","ImageHelper","logo","url","colourClass","getBgColorClass","CircleLogoSlidingListWidgetTemplate","FixedWidget","description","contents","WidgetContents","collection","childComponent","extraChildComponentProps","imageCdnUrl","prefetched","hideBleedingContent","showHighlight","hideButtons","getChildAppLink","company","FeedbackFormValidationSchema","shape","feedbackInput","max","FeedbackForm","state","setState","alerts","formData","onDone","error","IconButton","autoFocus","rows","placeholder","spellCheck","CoverFixedPillListXSmallWidgetTemplate","classification","cover","sm","lg","onSubmitFeedback","descriptor","CoverFixedTileListWidgetTemplate","WidgetHeader","p","presentationAudiences","audiences","playlist","itemStyle","getTotalVideos","reduce","sum","cur","totalVideos","getSubtitleFromTotalVideos","CoverSlidingPillListSmallWidgetTemplate","extraContent","imageId","HardCoded","getExtraItem","isClassificationLatestReleasedWidget","DynamicWidget","allTopics","classificationLatestReleases","partialLoadingComponent","PartialSubjectWidgetItem","heading","getSubtitle","undefined","EditableSubjectWidgetItem","wrapperClassName","textClassName","multiline","visibility","isDragging","isVisible","dragAttributes","dragListeners","ToggleSwitch","on","onToggleVisibility","tooltipText","canToggle","showStateWhenDisabled","EditableCoverFixedPillListSmallWidgetTemplate","isEditing","setIsEditing","setShowSpinner","WidgetHelper","preferences","unfilteredContent","isFollowingNothing","every","c","followers","initialPreferences","acc","current","index","preference","hidden","persistedPreferences","setPersistedPreferences","setPreferences","currentSubjects","sort","a","b","showExploreAllTopics","some","getItemIndex","findIndex","newPreferences","hasEditedPreferences","exploreAllSubjectsItem","canManagePreferences","hasLocalPermissions","Button","SpinnerButton","oldPreferences","updatePreferences","widgetTypeId","then","SubjectWidgetItem","SortableContainerWrapper","ids","getDragOverlay","onSortStart","event","toString","active","workflowPhase","onSortEnd","over","oldIndex","newIndex","ReorderHelper","reorderedItems","item","vertical","SortableItemWrapper","childProps","CalendarWidgetItem","backgroundSecondary","Date","monthQuery","events","SpecialEventWidgetItem","otherProps","colour","startDateTime","endDateTime","icon","classificationId","classificationName","EventIconSlidingListWidgetTemplate","widgetItems","contentType","rawOrderedEvents","livestream","localeCompare","now","today","tomorrow","nextWeekStart","nextWeekEnd","thisMonthStart","thisMonthEnd","nextMonthStart","nextMonthEnd","laterMonthStart","laterMonthEnd","eventGroupingMap","Map","addEventToGroup","eventRecord","has","group","currentMergedEvent","get","set","monthLabel","day","mergedEvents","eventGrouping","dateItem","appLinkMonth","appLinkYear","push","getWidgetItems","calendar","calendarMonth","VideoWidgetItem","video","subTextAppLink","context","thumbnailSize","preloadImage","transform","onHover","width","VideoThumbnail","imageOptions","preload","setFavourite","canFavourite","hovering","companyLogoFallbackUrl","subTextType","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","v","videoType","seriesAppLink","series","limitTotalItems","hideName","RatingWidgetItem","ratingsLength","code","VideoDetailsHelper","S","FilterSlidingPillListSmallWidgetTemplate","maxRating","TopicsHelper","learningLevel","PresentationLearningLevel","ratings","rating","HeadingWidgetTemplate","ClassificationHeroBannerSmallWidgetTemplate","ArrayHelper","banner","fallbackBaseUrl","fallbackCategoryName","cta","HeroBannerWidgetTemplate","PartialHeroBannerWidgetTemplate","HeadingSize","HeadingColor","ButtonIcon","H1","H2","H3","H4","H5","H6","Dark","White","NewWindow","BOOTSTRAP_CLASS_MAP","BlurbHeroBannerSmallWidgetTemplate","headingSize","theming","headingColor","WidgetTypeId","href","openInNewTab","PresentationsHeroBannerSmallWidgetTemplate","canView","PermissionName","getPresentationLink","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","presentationName","discover","prefix","HeroBannerSmallWidgetTemplate","PartialHeroBannerSmallWidgetTemplate","HeroThumbnailSmallWidgetTemplate","thumbnailUrl","thumbnail","ScoreThresholdDefaults","HIGH","MODERATE","ProgressCircleSize","PercentageIndicatorLayout","CIRCLE_WIDTH","CIRCLE_WIDTH_LG","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","getCircleRadius","Large","strokeWidth","getCircleClassName","percentage","scoreThresholds","getColouredLabelClassName","getCircleContainerClassName","isPending","ProgressCircle","circle","radius","r","baseVal","circumference","PI","offset","strokeDasharray","strokeDashoffset","PercentageIndicator","percentageToFixed","toFixed","getPercentageToFixed","layout","LabelInside","Small","customLabel","round","LabelOnly","LabelBefore","CircleOnly","OnboardingStepsWidgetTemplate","onboardingAppLinks","pathway","isKdm","UserHelper","isPreviewing","settings","hasCompletedOnboardingV2","hasOnboardingV2","hideWidget","screenConfig","OnboardingScreenConfigs","currentNode","nextScreenId","next","previousScreenId","previous","nextScreen","previousScreen","progress","OnboardingPathwayHelper","getAnalyticsPayload","overallPercentage","currentStepNumber","getProgress","getWidgetHeading","totalSteps","getWidgetDescription","getDescription","imageUrls","onboardingTeacherBackground","onboardingStep","PartialWidgetItem","colSize","paddingBottom","height","PopoutVideoWidgetItem","getSubTextAppLink","videoAudiences","subjectPresentationAudiences","mergedAudience","textPosition","ThumbnailTextPosition","VideoHelper","audience","hideRating","hideDuration","yearGroups","hideTitle","showVideoGuidance","PopoutThumbnailSlidingListLargeWidgetTemplate","hideWidgetHeading","hideWidgetDescription","subText","hideObjectTitle","hideSeries","hideObjectSeries","widgetVideoList","PopoutThumbnailSlidingListSmallWidgetTemplate","watchHistory","SeriesWidgetItem","SeriesTallPoster","PosterSlidingListLargeWidgetTemplate","PartialLoadingItem","PartialTallSubjectWidget","itemCount","md","items","PartialWidgetHeader","TallSubjectWidgetItem","BaseImage","tallPoster","imageType","imageClassName","ImageFallback","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","PartialVideoGuidanceTag","PartialVideoGuidance","ThumbnailFeaturedMediaWidgetTemplate","HeroVideo","getVideoAppLink","hideInteractiveBadge","SubjectWidgetContent","isLarge","Memoized","comingSoon","ThumbnailFixedListLargeWidgetTemplate","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","containerRef","ThumbnailText","InteractivesTag","scrollToPosition","PlayPageAnchor","ResourcesTag","ThumbnailFixedListMediaLargeWidgetTemplate","ThumbnailFixedListSmallWidgetTemplate","ThumbnailFixedListXLargeWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","canNavigate","VideoSubText","RestrictionPadlock","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","ThumbnailVerticalListWidgetTemplate","VideoList","videos","getPreviewQuestionsAppLink","PersonCard","person","firstName","lastName","bio","datePublished","lastUpdated","AuthorReviewerWidgetTemplate","reviewer","author","PartialPersonCard","MARKDOWN_LINK_CLASS","MarkdownHelper","isLink","element","classList","contains","getSeoWidgetRenderer","Renderer","marked","link","list","DEFAULT_HEIGHT","QuestionWidgetTemplate","question","answer","shouldExpandInitially","isBot","setHeight","isExpanded","setIsExpanded","shouldClamp","setShouldClamp","renderer","markdown","setMarkdown","timeoutRef","invisibleRef","collapse","newMarkdown","fakeEl","target","getSelection","document","createElement","innerHTML","appendChild","clientHeight","removeChild","clearTimeout","dangerouslySetInnerHTML","__html","PartialQuestion","Question","faq","questionIndex","add","QuestionAccordionWidgetTemplate","VideoWidgetItemV2","MultimediaWidgetItem","ResourceWidgetItem","R","onClickDownload","MasterTypeHelper","DownloadHelper","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","imageErrorFallbackUrl","resourceThumbnailFallbackImageUrl","titlePosition","actionBehaviour","resource","parentId","WidgetTemplateConfig","WidgetTemplate","getComponent","partialLoading","predicate","targetType","includes","product","ProductId","widgetId","CoverFixedPillListLargeWidgetTemplate","itemClassName","hideDescription","hideHeading","PARTIAL_SUBJECTS","maxWidth","itemsCount","totalItems","xl","xxl","WidgetContainerView","scrollToRef","shouldLazyLoad","lazyLoad","prevent","partialLoadingRef","inView","willFetch","getContentRequest","lazyWidget","templateId","isEmpty","isArray","isEmptyWidget","shouldHideWidget","setIsEmpty","isScrollToTargetWidget","scrollIntoView","behavior","block","contextId","dashboardTarget","widgetIndex","widgetName","showPartialLoadingComponent","PartialTemplate","Template","widgetTemplateClass","el","headingElementRef","hasTableOfContents","DYNAMIC_RATIO_IMAGE_OPTIONS","resizeType","getImageType","ResourceFileType","pdf","ResourceThumbnail","rotation","previewUrl","UrlHelper","getThumbnailUrl","imageStyle","errorFallbackImageSrc","preventLoad","ResourceHelper","getResourceTypeName","resourceType","ResourceTile","isResource","MasterType","baseClass","getColour","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","hideTypeBadge","TypeBadge","typeId","TitleSubText","canPreview","logAction","tileProps","SeoConstants","downloadRef","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","display","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/8906-2f6b5e4c5c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/calendar-cell-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell-date/CalendarCellDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/calendar-events.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-events/CalendarEvents.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/calendar-day.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-day/CalendarDay.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts","file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/components/emoji-text/emoji-text.scss","file:///app/packages/libs/shared/src/components/emoji-text/EmojiText.tsx","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","file:///app/packages/libs/shared/src/components/feedback-form/feedback-form.scss","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackForm.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetThemingConstants.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/hero-thumbnail-small.scss","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/onboarding-steps-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/subject-thumbnail-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/utils/markdown-helper/MarkdownHelper.ts","file:///app/packages/libs/shared/src/utils/markdown-helper/markdown-helper.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetTemplateConfig.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/widget-container-view.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/resource-thumbnail/resource-thumbnail.scss","file:///app/packages/libs/shared/src/components/resource-thumbnail/ResourceThumbnail.tsx","file:///app/packages/libs/shared/src/utils/ResourceHelper.ts","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/ResourceWidgetItem.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"cellDate\":\"qcD_n\",\"label\":\"sp6Gw\",\"isHovering\":\"_6xWx\",\"numberWrapper\":\"KZfe0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './calendar-cell-date.scss';\n\nconst namespace = 'specialEventCalendar.calendarCellDate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CalendarCellDateProps {\n date: Date;\n notCurrentMonth: boolean;\n hasEvent?: boolean;\n className?: string;\n isHovering?: boolean;\n}\n\nexport function CalendarCellDate(props: CalendarCellDateProps): JSX.Element {\n const isToday = DateHelper.isToday(props.date);\n\n let dateClassName = `${styles.cellDate} d-flex flex-nowrap`;\n if (isToday)\n dateClassName += ' bg-dark text-white';\n if (props.notCurrentMonth && !props.isHovering)\n dateClassName += ' text-secondary';\n if (props.hasEvent)\n dateClassName += ' text-white';\n if (props.className)\n dateClassName += ` ${props.className}`;\n \n const numberClassName = 'd-flex text-center justify-content-center align-items-center flex-shrink-0';\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({ delay: 250 });\n\n return (\n <div className={`${dateClassName} ${isHovering ? styles.isHovering : ''}`} ref={ref}>\n <div className={`${styles.numberWrapper} ${numberClassName}`}>\n {DateHelper.format(props.date, 'D')}\n </div>\n {isToday && (\n <div className={`${styles.label} justify-content-start align-items-center`}>\n {getPhrase('today')}\n </div>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hardcodedCover\":\"ByD0q\",\"tag\":\"ZHW8B\",\"date\":\"AKOWh\",\"backgroundImage\":\"RDtch\",\"eventCard\":\"YtMiS\",\"wrapper\":\"ylxwf\",\"left\":\"iTqxB\",\"right\":\"bUUXX\",\"noAnimation\":\"oZacR\",\"cover\":\"kpH3Y\",\"tagWrap\":\"KvlZ8\",\"appear\":\"xlSdc\",\"displayDate\":\"rkBJb\",\"title\":\"c4_Kj\",\"titleText\":\"nRMvg\",\"circle\":\"wu4hg\",\"active\":\"tbdFj\",\"arrow\":\"omZKz\",\"bottomBar\":\"hxKUP\",\"bottomPlaceholder\":\"dzeZ7\",\"multiEventFilter\":\"dSxjc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SliderDots } from 'libs/shared/components/slider-dots/SliderDots';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-events.scss';\n\ntype CalendarEventsProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarEvents(props: CalendarEventsProps): JSX.Element {\n const { sliderStep, setSliderStep } = props;\n\n const multiEvents = props.eventsOnDay.length > 1;\n const displayedEvent = props.eventsOnDay.find((e, idx) => idx === sliderStep);\n const multiDayEvent = !!displayedEvent.endDate;\n\n const backgroundColor = props.getBackgroundColor?.(displayedEvent.content);\n\n const hardCodedEvent = props.getHardCodedEvent?.(displayedEvent.content);\n\n const iconUrl = props.getIconUrl?.(displayedEvent.content);\n const coverUrl = props.getCoverUrl?.(displayedEvent.content);\n\n const isComingSoon = displayedEvent.content.status === ClassificationStatus.ComingSoon;\n\n const [ className, setClassName ] = React.useState(!props.hasInitialized ? '' : styles.appear);\n\n React.useEffect(() => {\n if (!props.hasInitialized) {\n // a random number between 400 and 1000\n const randomNumber = Math.floor(Math.random() * 600 + 400);\n window.setTimeout(() => {\n setClassName(styles.appear);\n window.setTimeout(() => {\n props.setHasInitialized(true);\n }, 400);\n }, randomNumber);\n }\n }, [props.hasInitialized]);\n\n React.useEffect(() => {\n if (props.isHovering) {\n props.setHoveredEvent(displayedEvent);\n }\n }, [ props.isHovering, displayedEvent ]);\n \n React.useEffect(() => {\n return () => {\n if (props.isHovering && props.hoveredEvent?.specialEventId === displayedEvent.specialEventId) {\n props.setHoveredEvent(null);\n }\n };\n }, [ props.isHovering, props.hoveredEvent, displayedEvent ]);\n\n function getAppLink(): Core.AppLink {\n if (multiEvents)\n return props.getEventsListAppLink?.();\n\n if (isComingSoon)\n return null;\n\n return props.getTopicAppLink?.(displayedEvent.content.id, displayedEvent.name);\n }\n\n function getAnalyticsData() {\n const analyticsData: HashObject = {\n date: DateHelper.format(props.date, 'YYYY-MM-DD'),\n presentationId: props.presentationId,\n eventCount: props.eventsOnDay.length\n };\n\n if (multiEvents) {\n analyticsData.eventId = props.eventsOnDay.map(e => e.specialEventId).join(',');\n analyticsData.topicId = props.eventsOnDay.map(e => e.content.id).join(',');\n } else {\n analyticsData.eventId = displayedEvent.specialEventId;\n analyticsData.topicId = displayedEvent.content.id;\n analyticsData.eventStatus = displayedEvent.content.status;\n }\n return analyticsData;\n }\n\n const analyticsData = getAnalyticsData();\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarDay\n };\n\n function formatAnalyticDataDate(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n\n function getBgImageClassName(): string {\n const defaultClassName = `${props.className} ${className} `;\n\n const classes = [\n hardCodedEvent ? `${styles.hardcodedCover} position-absolute` : styles.backgroundImage,\n iconUrl ? 'my-auto' : styles.cover,\n isComingSoon ? styles.comingSoon : '',\n props.hasInitialized ? styles.noAnimation : '',\n props.isHovering ? `rounded-3` : '',\n props.isMultiEventDate ? styles.multiEventFilter : '',\n 'company' in displayedEvent.content ? 'rounded-circle' : ''\n ];\n\n return defaultClassName + classes.join(' ');\n }\n\n return (\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={getAppLink()}\n className='d-flex justify-content-end'\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div className={`${styles.tagWrap} p-1`}>\n {isComingSoon && (\n <ComingSoonTag className={`justify-content-center p-0 rounded-circle ${styles.tag} ${className}`} onlyIcon />\n )}\n </div>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n className={`${styles.date} ${className}`}\n isHovering={props.isHovering}\n hasEvent\n />\n )}\n\n <div className={`postion-relative ${styles.wrapper}`}>\n <div\n style={{ backgroundColor } }\n className={`position-absolute d-flex flex-column justify-content-end align-items-center text-white px-1 pt-2 pb-1 ${styles.eventCard} ${className} ${props.isHovering ? 'rounded-3' : ''} ${props.isMultiEventDate ? styles.multiEventFilter : ''} ${props.className}`}\n >\n {iconUrl\n ? <LazyImage src={iconUrl} alt={displayedEvent.content.name} className={getBgImageClassName()} />\n : <div\n style={{ backgroundImage: `url('${coverUrl}')` }}\n className={getBgImageClassName()}\n />\n }\n {multiDayEvent && (\n <div className={`${styles.displayDate}`}>\n {SpecialEventHelper.getDisplayDate(displayedEvent.startDate, displayedEvent.endDate)}\n </div>\n )}\n <div className={`text-center ${styles.title} ${multiEvents ? 'mb-1' : 'mb-2'}`}>\n <div className={`${styles.titleText} ${props.isHovering ? 'mb-0' : 'clamp-2'} h6`} title={displayedEvent.name}>{displayedEvent.name}</div>\n </div>\n\n {(multiEvents && sliderStep !== 0) && (\n <div className={`position-absolute bg-white rounded-circle ${styles.left}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s - 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'previous', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronLeft}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && sliderStep !== props.eventsOnDay.length - 1 && (\n <div className={`position-absolute bg-white rounded-circle ${styles.right}`}>\n <DivButton\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setSliderStep(s => s + 1);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'next', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}>\n <SvgContainer\n svgName={cvSvgLibrary.ChevronRight}\n className={`d-inline-block svg-container text-dark ${styles.arrow}`}\n />\n </DivButton>\n </div>\n )}\n\n {multiEvents && (\n <div className={`d-flex ${styles.bottomBar} ${multiEvents ? '' : styles.bottomPlaceholder}`}>\n <SliderDots\n sliderStep={sliderStep}\n sliderLength={props.eventsOnDay.length}\n size='sm'\n className={`${props.isHovering ? 'mb-2' : 'mb-1'}`}\n onSliderDotClick={i => {\n setSliderStep(i);\n AnalyticsHelper.logUserAction({ date: formatAnalyticDataDate(props.date), action: 'jump', eventCount: props.eventsOnDay.length }, analyticsOptions);\n }}\n />\n </div>\n )}\n </div>\n </div>\n </AppLink>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"nsEjO\",\"multiEventCell\":\"vvFYj\",\"fadeIn\":\"BX0cX\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarCellDate } from 'libs/shared/apps/calendar/components/calendar-cell-date/CalendarCellDate';\nimport { CalendarEvents } from 'libs/shared/apps/calendar/components/calendar-events/CalendarEvents';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverableProps } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-day.scss';\n\ntype CalendarDayProps = HoverableProps & CalendarCellProps;\n\nexport function CalendarDay(props: CalendarDayProps) {\n const isMultiEventDate = React.useMemo(\n () =>\n props.hoveredEvent?.endDate &&\n !DateHelper.isSame(props.date, props.hoveredEvent?.startDate) &&\n DateHelper.isBetween(\n DateHelper.format(props.date, 'YYYY-MM-DD'),\n props.hoveredEvent?.startDate,\n props.hoveredEvent?.endDate\n ),\n [props.hoveredEvent]\n );\n const backgroundColor = props.hoveredEvent ? props.getBackgroundColor?.(props.hoveredEvent.content) : null;\n\n return (\n <div className={`${styles.cell} fw-semibold`}>\n {!props.hideDay && (\n <CalendarCellDate\n date={props.date}\n notCurrentMonth={props.notCurrentMonth}\n />\n )}\n {isMultiEventDate && (\n <div style={{ backgroundColor }} className={styles.multiEventCell}></div>\n )}\n {props.eventsOnDay?.length > 0 && <CalendarEvents {...props} isMultiEventDate={isMultiEventDate} />}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n \n // same month event\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n }\n};","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, CurrentUser, PlaylistCollection, Presentation, User } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { PlaylistCollectionIdentifier } from '../../playlists/interfaces';\n\nexport interface GetPathwayOptions {\n jobTitleOverride?: JobTitles;\n preferredPresentationOverride?: Presentation;\n}\n\nexport function useOnboardingPathway(appLinks: OnboardingScreenAppLinks) {\n const [ hasPlaylist, setHasPlaylist ] = useViewModel<boolean>('has:playlist', null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n\n const presentations = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Subject)\n );\n const preferredPresentation = Flight.useBasicFetch<Presentation>(\n ClassificationRequests.presentation(PresentationType.Subject)\n );\n const curriculums = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Curriculum)\n );\n const playlists = Flight.useBasicFetch<PlaylistCollection>(\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier())\n );\n const preferredSubjects = Flight.useBasicFetch<Classification[]>(\n PreferenceRequests.mySubjectPreferences()\n );\n const { hasPermissions } = usePermissions();\n\n React.useEffect(() => {\n if (!playlists.hasCompleted)\n return;\n\n if (hasPlaylist !== !!playlists.data?.data?.length)\n setHasPlaylist(!!playlists.data?.data?.length);\n }, [playlists.hasCompleted]);\n\n const hasLoadedPathway = (\n currentUser.hasCompleted &&\n user.hasCompleted &&\n presentations.hasCompleted &&\n curriculums.hasCompleted &&\n preferredPresentation.hasCompleted &&\n playlists.hasCompleted &&\n preferredSubjects.hasCompleted &&\n hasPlaylist !== null\n );\n\n const { userSettings } = useSettings(null);\n\n function getPathway(options: GetPathwayOptions = {}): OnboardingPathway {\n const jobTitle = options.jobTitleOverride || user.data?.userProfile?.metadata?.jobTitle;\n const presentation = options.preferredPresentationOverride || preferredPresentation.data;\n\n if (!hasLoadedPathway) {\n return {\n screens: {},\n currentScreen: null,\n totalScreens: 0,\n totalScreensInProgressBar: 0,\n hasCompletedAllSteps: false\n };\n }\n\n return OnboardingPathwayHelper.getOnboardingPathway({\n jobTitle,\n userSettings: userSettings.data,\n presentations: presentations.data,\n curriculums: curriculums.data,\n preferredSubjects: preferredSubjects.data,\n preferredPresentation: presentation,\n appLink: ContextService.getCurrentRoute().appLink,\n appLinks,\n masterUser: user.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"emoji\":\"d86p2\"};","import React from 'react';\n\nimport styles from './emoji-text.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n imageCdnUrl?: string;\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`rounded-circle w-100 h-100 ${styles.logo} ${colourClass}`}\n style={{ backgroundImage: `url(${logoUrl})` }}\n >\n </div>\n </AppLink>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"logoItem\":\"z6iYz\",\"logo\":\"vt0gx\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function CircleLogoSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});","// extracted by mini-css-extract-plugin\nexport default {\"promptContainer\":\"A_kCD\",\"text\":\"UFm9h\",\"form\":\"na9Vb\"};","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string; },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch (ex) {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svgName={cvSvgLibrary.ThumbsUp}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svgName={cvSvgLibrary.ThumbsDown}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageContainer\":\"ZMjnx\",\"image\":\"SsxEf\",\"background\":\"MtcB3\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.scss';\n\nexport function CoverFixedPillListXSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {props.name}\n </h2>\n\n <Row className={`mb-2 w-100`}>\n {props.content.map(classification => {\n const coverUrl = ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n\n return (\n <Col key={classification.id} xs={12} sm={6} lg={4}>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='d-flex align-items-center mb-2'\n >\n <div className={`${styles.imageContainer} me-2`}>\n <div className={`${styles.image} rounded`} style={{ backgroundImage: `url('${coverUrl}')` }} />\n </div>\n <div>\n {classification.name}\n </div>\n </AppLink>\n </Col>\n );\n })}\n </Row>\n </div>\n\n <FeedbackForm onSubmit={props.onSubmitFeedback} />\n </>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function CoverFixedTileListWidgetTemplate(props: WidgetTemplateProps<Playlist[]>): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col key={p.id} xs={6} sm={4} lg={3} className={`px-1 pb-2 columns-of-five`}>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={{\n ...props.analyticsOptions,\n ...analyticsOptions\n }}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\ninterface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: WidgetTemplateProps, content: CoverItemContent[]) {\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<CoverItemContent[]>): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget\n ? props.appLinks?.classificationLatestReleases?.(data)\n : props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n getSubtitle={\n isClassificationLatestReleasedWidget\n ? getSubtitleFromTotalVideos\n : undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svgName={cvSvgLibrary.Hamburger} />\n </div>\n <div className={wrapperClassName}>\n <h3 className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'}`}>\n {props.data.name}\n </h3>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classification, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(props.content, props.preferences);\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content.sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing\n ? content.map((c, index) => ({ id: c.id, hidden: true, index }))\n : Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll'),\n cover: props.presentation.cover\n } as Classification;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n if (!currentSubjects.length)\n return <></>;\n\n return (\n <div>\n <div className={`d-flex flex-wrap align-items-center justify-content-between`}>\n <div className='col'>\n <div className={'d-flex justify-content-between w-100 no-wrap flex-row mb-2'}>\n <h2 className='h4 mb-0 align-self-end flex-shrink-0'>\n {isEditing ? LanguageService.getPhrase(namespace, 'updating') : props.name}\n </h2>\n {(!isEditing && canManagePreferences) && (\n <DivButton className='hover-text-underline' onClick={() => setIsEditing(true)}>\n {LanguageService.getPhrase(namespace, 'edit')}\n </DivButton>\n )}\n </div>\n\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className={`d-flex align-items-start`}>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n <Row className='mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col className='position-relative pb-2 px-1' key={props.presentation.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={exploreAllSubjectsItem}\n getChildAppLink={() => props.appLinks?.allTopics?.(props.presentation.id)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n multiline\n />\n </Col>\n )}\n\n <SortableContainerWrapper\n ids={currentSubjects.map(c => c.id)}\n getDragOverlay={getDragOverlay}\n onSortStart={onSortStart}\n onSortEnd={onSortEnd}\n vertical={false}\n >\n {currentSubjects.map(c => {\n return (\n <Col className='position-relative pb-2 px-1' key={c.id} sm={6} lg={4}>\n <>\n {isEditing ? (\n <SortableItemWrapper\n id={c.id}\n childComponent={EditableSubjectWidgetItem}\n childProps={{\n data: c,\n onToggleVisibility,\n isVisible: isVisible(c),\n isDragging: false,\n canToggle: (\n !isVisible(c) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n ),\n multiline: true\n }}\n />\n ) : (\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n multiline\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"K1Ce4\",\"headingContainer\":\"XpN94\"};","// extracted by mini-css-extract-plugin\nexport default {\"dateItemContainer\":\"Hrx2m\",\"container\":\"k2Xse\"};","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`text-decoration-none my-2 mx-1 rounded-3 d-block position-relative`}\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\ntype SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification, hardCodedEvent?: HashObject): string {\n return hardCodedEvent\n ? ImageHelper.createUrl((hardCodedEvent.iconUrl), { size: ImageSize.Medium })\n : ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification, getHardCodedEvent(classification))}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup;\n startDate: string;\n endDate: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n event: CalendarEvent<CalendarEventContent>;\n label: string;\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month')\n ? DateHelper.format(nextWeekStart, 'MMMM')\n : `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: WidgetTemplateProps<CalendarEvent<CalendarEventContent>[]>\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './video-widget-item.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n subTextAppLink?: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n presentationAudiences?: PresentationAudience[];\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, subTextAppLink, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={video}\n type='expandable'\n appLink={props.getAppLink(video)}\n subTextAppLink={subTextAppLink}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hovering={isHovering}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"hovering\":\"x7nyG\",\"transition\":\"A7FeL\",\"rowWidth\":\"eo8oY\",\"largeRowWidth\":\"lhqxB\"};","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"eSMIx\",\"partialBanner\":\"layDP\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.scss';\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n seriesAppLink: props.appLinks?.series\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"TzZuL\"};","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { Rating } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.scss';\n\ninterface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return '';\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${styles.rowWidth} ${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3 `}>\n <div className='d-flex justify-content-center align-items-center text-white'>\n <SvgContainer svgName={cvSvgLibrary.Search} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<Rating[]>): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating);\n \n return (\n <>\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nexport function HeadingWidgetTemplate(props: WidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"cta\":\"nA9th\",\"banner\":\"b5ljD\",\"bannerImage\":\"dj_1H\",\"blurb\":\"UBcVE\",\"presentations\":\"fGBlR\",\"bannerContent\":\"lkPfM\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={styles.bannerImage} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} px-3`}>\n <h2 className='text-white h4 clamp-1'>\n {props.name}\n </h2>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Classification, EntitySetting } from 'libs/shared/interfaces';\n\nexport function HeroBannerWidgetTemplate(\n props: WidgetTemplateProps<Classification[] | EntitySetting<boolean>[]>\n): JSX.Element {\n return <ClassificationHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"iCyo4\",\"bannerContent\":\"cgv_6\",\"cta\":\"BXwH2\"};","import React from 'react';\n\nimport styles from '../hero-banner.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","export enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <h2 className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </h2>\n {props.metadata.cta?.text && (\n <IconButton svgName={cvSvgLibrary.NewWindow} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Presentation[]>): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <h2 className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </h2>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nexport function HeroBannerSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[] | Presentation[]>\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n case WidgetTypeId.Presentations:\n return <PresentationsHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Presentation[]>)} />;\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n }\n}","import React from 'react';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-thumbnail-small.scss';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport function HeroThumbnailSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={style}>\n {props.name &&\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white h4 clamp-1'>\n {props.name}\n </h2>\n </div>\n }\n \n <div className='btn btn-outline-dark me-3'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"LPw_x\",\"bannerImage\":\"UJ8IR\"};","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large'\n}\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = size === ProgressCircleSize.Large ? CIRCLE_WIDTH_LG : CIRCLE_WIDTH;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n \n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n \n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small;\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { EntitySetting } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './onboarding-steps-widget.scss';\n\nconst namespace = 'widgets.onboardingSteps';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDescription(\n currentScreen: OnboardingScreenId,\n currentStepNumber: number,\n totalSteps: number,\n isKdm: boolean\n): string {\n const screenConfig = OnboardingScreenConfigs[currentScreen];\n\n if (currentStepNumber === totalSteps)\n return `${getPhrase('lastStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n if (currentStepNumber === 1)\n return `${getPhrase('firstStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n return `${getPhrase('descriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: WidgetTemplateProps<EntitySetting<boolean>[]>\n): JSX.Element {\n const { getPathway, hasLoadedPathway } = useOnboardingPathway(props.appLinks?.onboardingAppLinks?.() ?? {});\n\n const pathway = hasLoadedPathway && getPathway();\n const isKdm = UserHelper.isKDM(props.jobTitle);\n\n function hideWidget(): boolean {\n if (props.isPreviewing)\n return false;\n\n if (!hasLoadedPathway)\n return true;\n\n if (props.settings?.hasCompletedOnboardingV2 || !props.settings?.hasOnboardingV2)\n return true;\n\n if (!props.hasPermissions(PermissionName.ViewOnboarding))\n return true;\n\n if (pathway.hasCompletedAllSteps)\n return true;\n\n return false;\n }\n\n if (hideWidget())\n return <div className='mb-n3' />;\n\n function getAnalyticsPayload() {\n if (props.isPreviewing)\n return {};\n\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n const previousScreenId = currentNode?.previous;\n\n return {\n currentScreen: screenConfig?.id,\n nextScreen: nextScreenId,\n previousScreen: previousScreenId,\n progress: OnboardingPathwayHelper.getProgress(pathway),\n ...OnboardingPathwayHelper.getOnboardingScreenStates(pathway)\n };\n }\n\n const analyticsData = getAnalyticsPayload();\n\n function getProgress() {\n if (props.isPreviewing) {\n return {\n overallPercentage: 75,\n totalScreens: 8,\n currentStepNumber: 6\n };\n }\n\n const progress = OnboardingPathwayHelper.getProgress(pathway);\n\n if (progress.overallPercentage === 0) {\n return {\n ...progress,\n // Never starting the user at 0%\n overallPercentage: 10\n };\n }\n\n return progress;\n }\n\n const { overallPercentage, totalScreens, currentStepNumber } = getProgress();\n\n return (\n <div className={`rounded-3 bg-light-yellow border border-2 border-dark position-relative d-flex align-items-center ${styles.container}`}>\n <div className={`${styles.leftPanel}`}>\n <div className={styles.percentageContainer}>\n <PercentageIndicator\n percentage={Math.round(overallPercentage) / 100}\n layout={PercentageIndicatorLayout.LabelInside}\n scoreThresholds={{\n HIGH: 0.75,\n MODERATE: 0\n }}\n />\n </div>\n\n <div>\n <h2 className='h4'>\n {props.isPreviewing\n ? OnboardingScreenConfigs['select-videos']?.getWidgetHeading(isKdm)\n : OnboardingScreenConfigs[pathway.currentScreen]?.getWidgetHeading(isKdm)}\n </h2>\n <div className={styles.descriptionContainer}>\n <SvgContainer svgName={cvSvgLibrary.ArrowRight} className='svg-container me-1' />\n <p className={styles.description}>\n {getDescription(\n props.isPreviewing ? 'select-videos' : pathway.currentScreen,\n currentStepNumber,\n totalScreens,\n isKdm\n )}\n </p>\n </div>\n </div>\n </div>\n\n <div\n className={`align-items-center justify-content-end h-100 ${styles.rightPanel}`}\n style={{ backgroundImage: `url('${props.imageUrls?.onboardingTeacherBackground}')` }}\n >\n <AppLink\n appLink={props.appLinks?.onboardingStep?.(pathway.currentScreen)}\n className={`btn btn-dark btn-lg ${styles.button}`}\n analyticsData={analyticsData}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.User,\n location: LocationContext.OnboardingStepsWidget,\n descriptor: OnboardingDescriptor.FinishPersonalising\n }}\n >\n <Text namespace={namespace} phrase='completeSetup' />\n </AppLink>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"leftPanel\":\"zmH98\",\"rightPanel\":\"w05om\",\"description\":\"ypP5M\",\"container\":\"QU4re\",\"button\":\"CHWcH\",\"descriptionContainer\":\"dTKo5\",\"percentageContainer\":\"T9LAC\"};","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='lg' childComponent={PartialWidgetItem} />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoTypes, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './popout-video-widget-item.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n canFavourite: CanFavouriteFunc;\n setFavourite: FavouriteFunc;\n presentationAudiences: PresentationAudience[];\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n getSubTextAppLink?: (video: Video) => Core.AppLink;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, getSubTextAppLink, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n type={breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n video={video}\n appLink={props.getAppLink(video)}\n subTextAppLink={VideoHelper.isVideo(video) && getSubTextAppLink?.(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n canFavourite={props.canFavourite}\n setFavourite={props.setFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n yearGroups={props.yearGroups}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"JSM4l\",\"largeRowWidth\":\"YYpNz\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n yearGroups: props.yearGroups,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n subTextType: props.subTextType\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3`} style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='sm' childComponent={PartialWidgetItem} />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n let appLink = props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n if (props.widgetTypeId === WidgetTypeId.ContinueWatching && props.appLinks?.watchHistory)\n appLink = props.appLinks?.watchHistory?.();\n\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n yearGroups: props.yearGroups,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n subTextType: props.subTextType\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={appLink}\n />\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"largeSeriesItem\":\"HZ00X\",\"smallSeriesItem\":\"PQ2sv\",\"partialLoading\":\"hMoHO\"};","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './series-widget-item.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = () => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n />\n </AppLink>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"slidingSubjectSmall\":\"fgIje\",\"slidingSubjectLarge\":\"CJwKL\",\"heading\":\"P16Yg\",\"posterContainer\":\"VtrLt\",\"partialLoading\":\"IgCcl\",\"labelContainer\":\"ujwlj\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem, TallSubjectWidgetItemProps } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListMediumWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget<TallSubjectWidgetItemProps>\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: WidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, WidgetType } from 'libs/shared/interfaces';\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <div>\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}","import React from 'react';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const video = props.content[0];\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n yearGroups={props.yearGroups}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"OZATG\",\"container\":\"hcAU2\",\"large\":\"Tbieu\",\"small\":\"mGGrd\",\"content\":\"VtzxT\",\"top\":\"jrY7R\",\"title\":\"yAgR6\",\"description\":\"RjJ7O\",\"cover\":\"TJ7Sl\",\"descriptionText\":\"yzmvY\",\"button\":\"hGi43\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './subject-thumbnail-widget-item.scss';\n\nconst namespace = 'shared.subjectThumbnailWidgetItem';\n\ninterface SubjectWidgetContentProps extends SubjectThumbnailWidgetItemProps {}\n\nfunction SubjectWidgetContent(props: SubjectWidgetContentProps): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.data.cover?.url, { size: ImageSize.Small });\n const thumbnailUrl = ImageHelper.createUrl(props.data.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = props.data.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n return (\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container} ${props.isLarge ? styles.large : styles.small}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h3 className={`${styles.title} h4 ${props.isLarge ? 'text-nowrap text-truncate' : 'text-wrap clamp-3'}`}>{props.data.name}</h3>\n\n {props.isLarge && (\n <div className={`text-start ${styles.description}`}>\n <p className={styles.descriptionText}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={`${!props.appLink && 'cursor-default'} btn btn-outline-dark`}>\n {LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!thumbnailUrl && !!coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface SubjectThumbnailWidgetItemProps {\n data: Classification;\n appLink?: Core.AppLink;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction SubjectThumbnailWidgetItem(props: SubjectThumbnailWidgetItemProps): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name,\n presentationId: props.data?.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SubjectWidgetContent {...props} />\n </AppLink>\n );\n\n return <SubjectWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(SubjectThumbnailWidgetItem);\n\nexport { Memoized as SubjectThumbnailWidgetItem };","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col key={c.id} sm={12} md={6} className='px-1 pb-2'>\n <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n isLarge\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"partialThumbnail\":\"HwejH\",\"row\":\"hk2Ed\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"guidance\":\"uCRU1\"};","import React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.scss';\n\ntype VideoTemplateProps = WidgetTemplateProps & {\n video: VideoTypes;\n};\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(props: VideoTemplateProps): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n const subTextAppLink = VideoHelper.isVideo(props.video) && props.appLinks?.subText?.(props.video);\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n subTextAppLink={subTextAppLink}\n yearGroups={props.yearGroups}\n subTextType={props.subTextType}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <div className={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}>\n <InteractivesTag\n video={props.video}\n appLink={props.appLinks?.videoType?.(props.video, { scrollToPosition: PlayPageAnchor.Interactives })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n <ResourcesTag\n video={props.video}\n appLink={props.appLinks?.videoType?.(props.video, { scrollToPosition: PlayPageAnchor.Resources })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(props: WidgetTemplateProps<VideoTypes[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {props.content.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"KItVW\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col key={c.id} lg={4} md={6} sm={6} xs={12} className='px-1 pb-2'>\n <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"ymfwY\",\"container\":\"EkoYD\",\"content\":\"SSmWX\",\"top\":\"vEXH2\",\"title\":\"bMbF2\",\"description\":\"gDFxm\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);","import React from 'react';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.scss';\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const video = props.content[0];\n const containerRef = React.useRef();\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n });\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.subTextType}\n video={video}\n appLink={props.appLinks?.subText?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <h3 className='h4 mb-0'>\n {video.name}\n <RestrictionPadlock\n video={video}\n yearGroups={props.yearGroups}\n />\n </h3>\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <div className={`d-flex mt-2 ${styles.guidance}`}>\n <InteractivesTag\n video={video}\n appLink={props.appLinks?.videoType?.(video, { scrollToPosition: PlayPageAnchor.Interactives })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n <ResourcesTag\n video={video}\n appLink={props.appLinks?.videoType?.(video, { scrollToPosition: PlayPageAnchor.Resources })}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </div>\n )}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"RmYET\",\"guidance\":\"EQXKD\",\"seriesTitleBox\":\"zmtsM\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Company, Video } from 'libs/shared/interfaces';\n\nexport function ThumbnailVerticalListWidgetTemplate(props: WidgetTemplateProps<Video[]>) {\n return (\n <>\n <WidgetHeader\n name={!props.metadata.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && props.description}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n getSubTextAppLink={(company: Company) => props.appLinks?.company?.(company)}\n hasPermissions={props.hasPermissions}\n subTextType='productionCompany'\n getPreviewQuestionsAppLink={() => null}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"TTPKV\",\"avatar\":\"nF3tK\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './author-reviewer-widget-template.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <div className={`${styles.card} h-100 rounded-2 d-flex flex-column`}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Small)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svgName={props.type === 'reviewer' ? cvSvgLibrary.Verified : cvSvgLibrary.Edit}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-1 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n options={{ date: DateHelper.format(props.datePublished, 'DD/MM/YYYY') }}\n />\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n options={{ date: DateHelper.format(props.datePublished, 'DD/MM/YYYY') }}\n />\n &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n options={{ date: DateHelper.format(props.lastUpdated, 'DD/MM/YYYY') }}\n />\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport function AuthorReviewerWidgetTemplate(props: WidgetTemplateProps<AuthorWidgetContent[]>): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className={`partial-loading-background mb-1`} style={{ width: '90%', height: '21px' }} />\n <div className={`partial-loading-background`} style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className={`partial-loading-background mb-1`} style={{ width: '100%', height: '1rem' }} />\n <div className={`partial-loading-background mb-1`} style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className={`partial-loading-background`} style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}","import * as marked from 'marked';\n\nimport styles from './markdown-helper.scss';\n\nconst MARKDOWN_LINK_CLASS = 'markdown-link';\n\nexport const MarkdownHelper = {\n isLink(element: HTMLElement): boolean {\n return element.classList.contains(MARKDOWN_LINK_CLASS);\n },\n\n getSeoWidgetRenderer() {\n const Renderer = new marked.Renderer();\n\n // Open links in a new tab\n Renderer.link = function(href: string, title: string, text: string) {\n return `<a href=\"${href}\" target=\"_blank\" class=\"info-link ${MARKDOWN_LINK_CLASS}\">${text}</a>`;\n };\n\n Renderer.list = function(body: string) {\n return `<ul class=\"${styles.ul}\">${body}</ul>`;\n };\n\n return Renderer;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"ul\":\"TIGbB\"};","import React from 'react';\nimport * as marked from 'marked';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { Faq } from 'libs/shared/interfaces';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './question-widget-template.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\nexport function QuestionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n // Answer should be expanded for anon by default so Google can read it.\n const shouldExpandInitially = props.isBot;\n\n const [ height, setHeight ] = React.useState(shouldExpandInitially ? '100%' : DEFAULT_HEIGHT);\n const [ isExpanded, setIsExpanded ] = React.useState<boolean>(shouldExpandInitially);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!shouldExpandInitially);\n\n const [ markdown, setMarkdown ] = React.useState(marked(answer, { renderer: MarkdownHelper.getSeoWidgetRenderer() }));\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n question,\n answer\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(answer || '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [answer]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!question || !markdown)\n return <></>;\n\n return (\n <DivButton className={`${styles.question} rounded-3`} onClick={onToggleExpander}>\n <div className='pb-2'>\n <div className='float-end rounded-circle bg-white'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{question}</h2>\n </div>\n\n <div\n className={styles.description}\n style={{ height }}\n >\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n >\n </p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"KGthN\",\"partialQuestion\":\"QrLg2\",\"description\":\"sxdDe\"};","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"G1OXf\",\"padding\":\"Jg3am\",\"partialQuestion\":\"tWUKI\",\"description\":\"z5LRc\"};","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}","import React from 'react';\nimport * as marked from 'marked';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { Faq } from 'libs/shared/interfaces';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './question-accordion-widget-template.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n faq: Faq;\n index: number;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const shouldExpandInitially = props.isBot;\n\n const [ isExpanded, setIsExpanded ] = React.useState(shouldExpandInitially);\n const [ height, setHeight ] = React.useState(shouldExpandInitially ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState(marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() }));\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [props.faq?.answer]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n return (\n <DivButton onClick={onToggleExpander} className={`${styles.question} rounded-2`}>\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal'>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n >\n <p\n className={`mb-0 py-1`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n >\n </p>\n \n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n\nexport function QuestionAccordionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): JSX.Element {\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Series, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-widget-item-v2.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n getSubTextAppLink: (series: Series) => Core.AppLink;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n presentationAudiences: PresentationAudience[];\n subTextType: VideoSubTextType;\n imageCdnUrl: string;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n type='static'\n appLink={props.getAppLink(props.data)}\n subTextAppLink={VideoHelper.isVideo(props.data) && props.getSubTextAppLink?.(props.data.series)}\n imageOptions={{ size: props.thumbnailSize }}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n subTextType={props.subTextType}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"YY2CD\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n DownloadHelper.downloadResource(props.data, props.analyticsData, props.analyticsOptions);\n }\n\n return <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\n return (\n <FixedWidget<MultimediaWidgetItemProps>\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n getSubTextAppLink: props.appLinks?.series,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n subTextType: 'series'\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { OnboardingStepsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PartialFixedWidgetProps } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { cvSvgLibrary, SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { AuthorReviewerWidgetTemplate } from '../components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from '../components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from '../components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ProductId } from '../enums/ProductId';\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: WidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialFixedWidgetProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (targetType: DashboardTargetType, product: ProductId, widgetTypeId: WidgetTypeId) => boolean,\n className: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailHeroMedia,\n predicate: targetType => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListMedium,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListSmall,\n predicate: (targetType, product, widgetId) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFeaturedMedia,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedPillListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedPillListXSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverSlidingPillListSmall,\n predicate: (targetType, product, widgetId) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedTileList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateFeaturedThumbnailSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBanner,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.OnboardingSteps]: {\n getComponent: () => OnboardingStepsWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateOnboardingSteps,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBannerSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroThumbnailSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListXLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEditableCoverFixedPillListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeading,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateAuthorReviewer,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestion,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestionAccordion,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListMediaLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListLarge,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: cvSvgLibrary.WidgetTemplateFilterSlidingPillListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCircleLogoSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEventIconSlidingList,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailVerticalList,\n predicate: (targetType, product) => {\n if (!(product === ProductId.StreamableLearning)) return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: (targetType, product) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListLarge,\n predicate: () => false,\n className: ''\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"KjaI4\"};","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeroThumbnail\":\"P3cF6\",\"partialVideoTitleText\":\"ZRdlu\",\"partialDescription\":\"MoPit\",\"details\":\"J5CAD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nexport function PartialCoverFixedTileListWidgetTemplate(): JSX.Element {\n return (\n <>\n <PartialWidgetHeader />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport styles from '../featured-sliding-heading.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget hideDescription hideHeading/>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"pRXSM\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} lg={4} md={6} sm={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"SNBRD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLoadingHeading\":\"hjdMb\"};","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../question-widget-template.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialFilterSlidingPillListSmall(): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader hideDescription={true} />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className={`col px-1`}>\n <div className={`d-inline-block w-100 partial-loading-background rounded-3 pb-5`} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-circle-logo-sliding-list.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"KbaRB\",\"logoWrapper\":\"uVZyX\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader hideDescription />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(): JSX.Element {\n return (\n <PartialFixedWidget size='lg' />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"anchor\":\"FRyJT\",\"widgetHighlight\":\"e4uXN\",\"blinker\":\"e7d4o\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\ninterface CommonWidgetContainerViewProps extends Omit<WidgetTemplateProps, 'content'> {\n id: string;\n name: string;\n templateId: WidgetTemplate;\n dashboardTarget?: DashboardTargetType;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n}\n\ntype PropsWithFetch = CommonWidgetContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonWidgetContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype Props = PropsWithFetch | PropsWithoutFetch;\n\nexport function WidgetContainerView(props: Props): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content, unfilteredContent } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n lazyWidget.data?.preferences\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(video, { ...options, contextId: props.id });\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const PartialTemplate = WidgetTemplateConfig[props.templateId].partialLoading;\n const Template = WidgetTemplateConfig[props.templateId].getComponent(props.widgetTypeId);\n const widgetTemplateClass = WidgetTemplateConfig[props.templateId].className;\n\n if (!showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <div className={props.isScrollToTargetWidget ? `${styles.widgetHighlight} py-2 px-3 rounded-3` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n content={content}\n unfilteredContent={unfilteredContent}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"FFgf3\",\"imageTypeResource\":\"z4O5p\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { Link, Resource } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { BaseImage } from '../image/BaseImage';\n\nimport styles from './resource-thumbnail.scss';\n\n// Used for both PDFs and Links where we don't know the image ratio\nconst DYNAMIC_RATIO_IMAGE_OPTIONS: ImageOptions = {\n width: 200,\n resizeType: ResizeType.Cover\n};\n\nfunction getThumbnailUrl(imageCdnUrl: string, resource: Resource | Link): string {\n const imageType = getImageType(resource);\n\n // Use the thumbnail if defined\n if ('thumbnail' in resource && resource.thumbnail?.url)\n return ImageHelper.createUrl(resource.thumbnail?.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n \n const previewUrl = UrlHelper.safeUrlConcat(imageCdnUrl, '/v1/previews');\n\n if (!MasterTypeHelper.isResource(resource))\n return ImageHelper.createResourceImage(previewUrl, resource.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n\n if (imageType === ImageType.Pdf) {\n return resource.metadata.type === ResourceFileType.Pdf\n ? ImageHelper.createResourceImage(previewUrl, resource.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS })\n : ImageHelper.createResourceImage(previewUrl, resource.pdf?.url, { ...DYNAMIC_RATIO_IMAGE_OPTIONS });\n }\n\n if (resource.metadata.type !== ResourceFileType.Zip)\n return ImageHelper.createUrl(resource.url, { size: ImageSize.Medium, resizeType: ResizeType.Cover });\n\n return '/images/zip-resource.png';\n}\n\nfunction getImageType(resource: Resource | Link): ImageType {\n if (!MasterTypeHelper.isResource(resource))\n return ImageType.Link;\n\n if (resource.metadata.type === ResourceFileType.Pdf || resource.pdf?.url)\n return ImageType.Pdf;\n\n return ImageType.Thumbnails;\n}\n\ninterface ResourceThumbnailProps {\n imageCdnUrl: string;\n resource: Resource | Link;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n}\n\nexport function ResourceThumbnail(props: ResourceThumbnailProps): JSX.Element {\n let metadata = null;\n let rotation = 0;\n\n if (MasterTypeHelper.isResource(props.resource)) {\n metadata = props.resource.metadata;\n rotation = props.resource.thumbnail?.metadata?.rotation ?? 0;\n }\n\n const thumbnailUrl = getThumbnailUrl(props.imageCdnUrl, props.resource);\n\n return (\n <BaseImage\n data={thumbnailUrl}\n imageType={getImageType(props.resource)}\n imageStyle={{ transform: `rotate(${rotation}deg)` }}\n alt={props.resource.name}\n errorFallbackImageSrc={props.imageErrorFallbackUrl}\n imageClassName={metadata?.type === ResourceFileType.Image ? `${styles.imageTypeResource} ${styles.imageStyle}` : ''}\n preload={props.preloadImage}\n preventLoad={!props.preloadImage}\n >\n &nbsp;\n </BaseImage>\n );\n}","import { ResourceType } from 'libs/shared/interfaces';\n\nexport const ResourceHelper = {\n getResourceTypeName(resourceType: ResourceType): string {\n switch (resourceType) {\n case 'additional-materials':\n return 'Additional Materials';\n\n case 'atom-guide':\n return 'ATOM Guide';\n\n case 'teacher-pack':\n return 'Teacher Pack';\n\n case 'student-activity':\n return 'Student Activity';\n\n default:\n return 'N/A';\n }\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"I9E5O\",\"item\":\"tqUFn\",\"dashboard\":\"o7j7p\",\"playPage\":\"V2RwX\",\"aspectRatio\":\"OnJDH\",\"outerContainer\":\"CIFy7\",\"innerContainer\":\"oUZPD\",\"actions\":\"jzGAm\",\"titleBelow\":\"Cpjs3\",\"thumbnailContainer\":\"EDiGi\",\"titleAbove\":\"e9ejn\",\"teacherPack\":\"_tdVE\",\"text\":\"g5NWS\",\"hoverState\":\"xRYhX\",\"atomGuide\":\"X39wU\",\"studentActivity\":\"X9pMl\",\"additionalMaterials\":\"qRVUo\",\"userUploaded\":\"_18JaV\",\"imageTypeResource\":\"KYtZL\",\"download\":\"fbb_e\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nfunction useCanPreview(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (e: React.MouseEvent<HTMLElement>, resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n}\n\nResourceTile.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTile(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => props.onClickDownload(e, props.data as Resource)}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {!!props.data?.metadata?.resourceType && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemProps extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItem = React.memo(function(props: ResourceWidgetItemProps): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreview(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block ${props.titlePosition === 'above' ? 'no-decoration' : ''}`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTile {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTile {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTile {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};"],"names":["getPhrase","LanguageService","CalendarCellDate","props","isToday","DateHelper","date","dateClassName","notCurrentMonth","isHovering","hasEvent","className","delay","ref","CalendarEvents","sliderStep","setSliderStep","multiEvents","eventsOnDay","length","displayedEvent","find","e","idx","multiDayEvent","endDate","backgroundColor","getBackgroundColor","content","hardCodedEvent","getHardCodedEvent","iconUrl","getIconUrl","coverUrl","getCoverUrl","isComingSoon","status","ClassificationStatus","hasInitialized","setClassName","randomNumber","Math","floor","random","window","setTimeout","setHasInitialized","setHoveredEvent","hoveredEvent","specialEventId","analyticsData","presentationId","eventCount","eventId","map","join","topicId","id","eventStatus","getAnalyticsData","analyticsOptions","actionType","entity","location","formatAnalyticDataDate","getBgImageClassName","isMultiEventDate","onClick","AnalyticsHelper","AppLink","appLink","getEventsListAppLink","getTopicAppLink","name","getAppLink","ComingSoonTag","onlyIcon","hideDay","style","LazyImage","src","alt","backgroundImage","SpecialEventHelper","startDate","title","DivButton","stopPropagation","preventDefault","s","action","SvgContainer","svgName","SliderDots","sliderLength","size","onSliderDotClick","i","CalendarDay","namespace","Tooltip","spanHackClassName","spanHack","GenericCalendarDate","theme","border","background","label","body","type","getBodyClass","text","month","getDisplayDate","slice","getEventsInMonth","calendarEvents","filter","getOrdinalDate","useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","EmojiText","emoji","children","FormButtons","formikProps","canSubmit","variant","disabled","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","field","values","fieldName","limit","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","entries","value","useFormikContextWrapper","PartialVideoList","Array","numVideos","fill","_","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","CircleLogoWidgetItem","logoUrl","ImageHelper","logo","url","colourClass","getBgColorClass","CircleLogoSlidingListWidgetTemplate","FixedWidget","description","contents","WidgetContents","collection","childComponent","extraChildComponentProps","imageCdnUrl","prefetched","hideBleedingContent","showHighlight","hideButtons","getChildAppLink","company","FeedbackFormValidationSchema","shape","feedbackInput","max","FeedbackForm","state","setState","alerts","formData","onDone","error","IconButton","autoFocus","rows","placeholder","spellCheck","CoverFixedPillListXSmallWidgetTemplate","classification","cover","sm","lg","onSubmitFeedback","descriptor","CoverFixedTileListWidgetTemplate","WidgetHeader","p","presentationAudiences","audiences","playlist","itemStyle","getTotalVideos","reduce","sum","cur","totalVideos","getSubtitleFromTotalVideos","CoverSlidingPillListSmallWidgetTemplate","extraContent","imageId","HardCoded","getExtraItem","isClassificationLatestReleasedWidget","DynamicWidget","allTopics","classificationLatestReleases","partialLoadingComponent","PartialSubjectWidgetItem","heading","getSubtitle","undefined","EditableSubjectWidgetItem","wrapperClassName","textClassName","multiline","visibility","isDragging","isVisible","dragAttributes","dragListeners","ToggleSwitch","on","onToggleVisibility","tooltipText","canToggle","showStateWhenDisabled","EditableCoverFixedPillListSmallWidgetTemplate","isEditing","setIsEditing","setShowSpinner","WidgetHelper","preferences","unfilteredContent","isFollowingNothing","every","c","followers","initialPreferences","acc","current","index","preference","hidden","persistedPreferences","setPersistedPreferences","setPreferences","currentSubjects","sort","a","b","showExploreAllTopics","some","getItemIndex","findIndex","newPreferences","hasEditedPreferences","exploreAllSubjectsItem","canManagePreferences","hasLocalPermissions","Button","SpinnerButton","oldPreferences","updatePreferences","widgetTypeId","then","SubjectWidgetItem","SortableContainerWrapper","ids","getDragOverlay","onSortStart","event","toString","active","workflowPhase","onSortEnd","over","oldIndex","newIndex","ReorderHelper","reorderedItems","item","vertical","SortableItemWrapper","childProps","CalendarWidgetItem","backgroundSecondary","Date","monthQuery","events","SpecialEventWidgetItem","otherProps","colour","startDateTime","endDateTime","icon","classificationId","classificationName","EventIconSlidingListWidgetTemplate","widgetItems","contentType","rawOrderedEvents","livestream","localeCompare","now","today","tomorrow","nextWeekStart","nextWeekEnd","thisMonthStart","thisMonthEnd","nextMonthStart","nextMonthEnd","laterMonthStart","laterMonthEnd","eventGroupingMap","Map","addEventToGroup","eventRecord","has","group","currentMergedEvent","get","set","monthLabel","day","mergedEvents","eventGrouping","dateItem","appLinkMonth","appLinkYear","push","getWidgetItems","calendar","calendarMonth","VideoWidgetItem","video","subTextAppLink","context","thumbnailSize","preloadImage","transform","onHover","width","VideoThumbnail","imageOptions","preload","setFavourite","canFavourite","hovering","companyLogoFallbackUrl","subTextType","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","v","videoType","seriesAppLink","series","limitTotalItems","hideName","RatingWidgetItem","ratingsLength","code","VideoDetailsHelper","S","FilterSlidingPillListSmallWidgetTemplate","maxRating","TopicsHelper","learningLevel","PresentationLearningLevel","ratings","rating","HeadingWidgetTemplate","ClassificationHeroBannerSmallWidgetTemplate","ArrayHelper","banner","fallbackBaseUrl","fallbackCategoryName","cta","HeroBannerWidgetTemplate","PartialHeroBannerWidgetTemplate","HeadingSize","HeadingColor","ButtonIcon","H1","H2","H3","H4","H5","H6","Dark","White","NewWindow","BOOTSTRAP_CLASS_MAP","BlurbHeroBannerSmallWidgetTemplate","headingSize","theming","headingColor","WidgetTypeId","href","openInNewTab","PresentationsHeroBannerSmallWidgetTemplate","canView","PermissionName","getPresentationLink","appLinkOptions","middlewareOptions","presentationSlug","vanitySlug","presentationName","discover","prefix","HeroBannerSmallWidgetTemplate","PartialHeroBannerSmallWidgetTemplate","HeroThumbnailSmallWidgetTemplate","thumbnailUrl","thumbnail","ScoreThresholdDefaults","HIGH","MODERATE","ProgressCircleSize","PercentageIndicatorLayout","CIRCLE_WIDTH","CIRCLE_WIDTH_LG","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","getCircleRadius","Large","strokeWidth","getCircleClassName","percentage","scoreThresholds","getColouredLabelClassName","getCircleContainerClassName","isPending","ProgressCircle","circle","radius","r","baseVal","circumference","PI","offset","strokeDasharray","strokeDashoffset","PercentageIndicator","percentageToFixed","toFixed","getPercentageToFixed","layout","LabelInside","Small","customLabel","round","LabelOnly","LabelBefore","CircleOnly","OnboardingStepsWidgetTemplate","onboardingAppLinks","pathway","isKdm","UserHelper","isPreviewing","settings","hasCompletedOnboardingV2","hasOnboardingV2","hideWidget","screenConfig","OnboardingScreenConfigs","currentNode","nextScreenId","next","previousScreenId","previous","nextScreen","previousScreen","progress","OnboardingPathwayHelper","getAnalyticsPayload","overallPercentage","currentStepNumber","getProgress","getWidgetHeading","totalSteps","getWidgetDescription","getDescription","imageUrls","onboardingTeacherBackground","onboardingStep","PartialWidgetItem","colSize","paddingBottom","height","PopoutVideoWidgetItem","getSubTextAppLink","videoAudiences","subjectPresentationAudiences","mergedAudience","textPosition","ThumbnailTextPosition","VideoHelper","audience","hideRating","hideDuration","yearGroups","hideTitle","showVideoGuidance","PopoutThumbnailSlidingListLargeWidgetTemplate","hideWidgetHeading","hideWidgetDescription","subText","hideObjectTitle","hideSeries","hideObjectSeries","widgetVideoList","PopoutThumbnailSlidingListSmallWidgetTemplate","watchHistory","SeriesWidgetItem","SeriesTallPoster","PosterSlidingListLargeWidgetTemplate","PartialLoadingItem","PartialTallSubjectWidget","itemCount","md","items","PartialWidgetHeader","TallSubjectWidgetItem","BaseImage","tallPoster","imageType","imageClassName","ImageFallback","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","PartialVideoGuidanceTag","PartialVideoGuidance","ThumbnailFeaturedMediaWidgetTemplate","HeroVideo","getVideoAppLink","hideInteractiveBadge","SubjectWidgetContent","isLarge","Memoized","comingSoon","ThumbnailFixedListLargeWidgetTemplate","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","containerRef","ThumbnailText","InteractivesTag","scrollToPosition","PlayPageAnchor","ResourcesTag","ThumbnailFixedListMediaLargeWidgetTemplate","ThumbnailFixedListSmallWidgetTemplate","ThumbnailFixedListXLargeWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","canNavigate","VideoSubText","RestrictionPadlock","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","ThumbnailVerticalListWidgetTemplate","VideoList","videos","getPreviewQuestionsAppLink","PersonCard","person","firstName","lastName","bio","datePublished","lastUpdated","AuthorReviewerWidgetTemplate","reviewer","author","PartialPersonCard","MARKDOWN_LINK_CLASS","MarkdownHelper","isLink","element","classList","contains","getSeoWidgetRenderer","Renderer","marked","link","list","DEFAULT_HEIGHT","QuestionWidgetTemplate","question","answer","shouldExpandInitially","isBot","setHeight","isExpanded","setIsExpanded","shouldClamp","setShouldClamp","renderer","markdown","setMarkdown","timeoutRef","invisibleRef","collapse","newMarkdown","fakeEl","target","getSelection","document","createElement","innerHTML","appendChild","clientHeight","removeChild","clearTimeout","dangerouslySetInnerHTML","__html","PartialQuestion","Question","faq","questionIndex","add","QuestionAccordionWidgetTemplate","VideoWidgetItemV2","MultimediaWidgetItem","ResourceWidgetItem","R","onClickDownload","MasterTypeHelper","DownloadHelper","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","imageErrorFallbackUrl","resourceThumbnailFallbackImageUrl","titlePosition","actionBehaviour","resource","parentId","WidgetTemplateConfig","WidgetTemplate","getComponent","partialLoading","predicate","targetType","includes","product","ProductId","widgetId","CoverFixedPillListLargeWidgetTemplate","itemClassName","hideDescription","hideHeading","PARTIAL_SUBJECTS","maxWidth","itemsCount","totalItems","xl","xxl","WidgetContainerView","scrollToRef","shouldLazyLoad","lazyLoad","prevent","partialLoadingRef","inView","willFetch","getContentRequest","lazyWidget","templateId","isEmpty","isArray","isEmptyWidget","shouldHideWidget","setIsEmpty","isScrollToTargetWidget","scrollIntoView","behavior","block","contextId","dashboardTarget","widgetIndex","widgetName","showPartialLoadingComponent","PartialTemplate","Template","widgetTemplateClass","el","headingElementRef","hasTableOfContents","DYNAMIC_RATIO_IMAGE_OPTIONS","resizeType","getImageType","ResourceFileType","pdf","ResourceThumbnail","rotation","previewUrl","UrlHelper","getThumbnailUrl","imageStyle","errorFallbackImageSrc","preventLoad","ResourceHelper","getResourceTypeName","resourceType","ResourceTile","isResource","MasterType","baseClass","getColour","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","hideTypeBadge","TypeBadge","typeId","TitleSubText","canPreview","logAction","tileProps","SeoConstants","downloadRef","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","display","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize"],"sourceRoot":""}