@clickview/lite 0.103.1 → 0.103.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +271 -271
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{igSDXA6g.chunk.js → 1WHinyQW.chunk.js} +2 -2
- package/dist/scripts/{igSDXA6g.chunk.js.map → 1WHinyQW.chunk.js.map} +1 -1
- package/dist/scripts/{kMWvzbRv2.chunk.js → B1ag1ah72.chunk.js} +2 -2
- package/dist/scripts/{kMWvzbRv2.chunk.js.map → B1ag1ah72.chunk.js.map} +1 -1
- package/dist/scripts/{D2_GYzlb.chunk.js → B6Pc3q-u.chunk.js} +2 -2
- package/dist/scripts/{D2_GYzlb.chunk.js.map → B6Pc3q-u.chunk.js.map} +1 -1
- package/dist/scripts/{sCuSDiER2.chunk.js → BPbjSFkC2.chunk.js} +2 -2
- package/dist/scripts/{sCuSDiER2.chunk.js.map → BPbjSFkC2.chunk.js.map} +1 -1
- package/dist/scripts/{CNm_4jj62.chunk.js → BZFomoIH2.chunk.js} +2 -2
- package/dist/scripts/BZFomoIH2.chunk.js.map +1 -0
- package/dist/scripts/{CW_rYB-i2.chunk.js → BazdM9Ah2.chunk.js} +2 -2
- package/dist/scripts/{CW_rYB-i2.chunk.js.map → BazdM9Ah2.chunk.js.map} +1 -1
- package/dist/scripts/{BcPrUEuC2.chunk.js → CNPnPJMp2.chunk.js} +2 -2
- package/dist/scripts/{BcPrUEuC2.chunk.js.map → CNPnPJMp2.chunk.js.map} +1 -1
- package/dist/scripts/{Dd23z1_x2.chunk.js → CUp7_5gE2.chunk.js} +2 -2
- package/dist/scripts/{Dd23z1_x2.chunk.js.map → CUp7_5gE2.chunk.js.map} +1 -1
- package/dist/scripts/{C-zUHAyD.chunk.js → CajcIz6S.chunk.js} +2 -2
- package/dist/scripts/{C-zUHAyD.chunk.js.map → CajcIz6S.chunk.js.map} +1 -1
- package/dist/scripts/{Drx3PvJj.chunk.js → Cc9f2ux0.chunk.js} +2 -2
- package/dist/scripts/{Drx3PvJj.chunk.js.map → Cc9f2ux0.chunk.js.map} +1 -1
- package/dist/scripts/Cj_F4Lv92.chunk.js +2 -0
- package/dist/scripts/{C8l37H7t2.chunk.js.map → Cj_F4Lv92.chunk.js.map} +1 -1
- package/dist/scripts/{DFrz_upP2.chunk.js → CtBGtgb32.chunk.js} +2 -2
- package/dist/scripts/{DFrz_upP2.chunk.js.map → CtBGtgb32.chunk.js.map} +1 -1
- package/dist/scripts/{BpiZZWnJ2.chunk.js → CtWAorP42.chunk.js} +2 -2
- package/dist/scripts/{BpiZZWnJ2.chunk.js.map → CtWAorP42.chunk.js.map} +1 -1
- package/dist/scripts/{C3Qd_bbV2.chunk.js → D8mi6CVp2.chunk.js} +2 -2
- package/dist/scripts/{C3Qd_bbV2.chunk.js.map → D8mi6CVp2.chunk.js.map} +1 -1
- package/dist/scripts/{3K2h5K5-.chunk.js → DJfIirut.chunk.js} +2 -2
- package/dist/scripts/{3K2h5K5-.chunk.js.map → DJfIirut.chunk.js.map} +1 -1
- package/dist/scripts/{Cc63s6rS2.chunk.js → DaaQ5htA2.chunk.js} +2 -2
- package/dist/scripts/{Cc63s6rS2.chunk.js.map → DaaQ5htA2.chunk.js.map} +1 -1
- package/dist/scripts/{CHwPLUZK.chunk.js → DkFP4cXM.chunk.js} +2 -2
- package/dist/scripts/{CHwPLUZK.chunk.js.map → DkFP4cXM.chunk.js.map} +1 -1
- package/dist/scripts/{izXlxhJf.chunk.js → Dzy1nQk7.chunk.js} +2 -2
- package/dist/scripts/{izXlxhJf.chunk.js.map → Dzy1nQk7.chunk.js.map} +1 -1
- package/dist/scripts/{DGy8Ldlr.chunk.js → FIUOppmy.chunk.js} +2 -2
- package/dist/scripts/{DGy8Ldlr.chunk.js.map → FIUOppmy.chunk.js.map} +1 -1
- package/dist/scripts/{CPBvCqVK.chunk.js → H511PXuG.chunk.js} +2 -2
- package/dist/scripts/{CPBvCqVK.chunk.js.map → H511PXuG.chunk.js.map} +1 -1
- package/dist/scripts/{D8Op6EUa2.chunk.js → IYIY9hIU2.chunk.js} +2 -2
- package/dist/scripts/{D8Op6EUa2.chunk.js.map → IYIY9hIU2.chunk.js.map} +1 -1
- package/dist/scripts/{app-BHlllGhO.js → app-DvYKGw_S.js} +3 -3
- package/dist/scripts/{app-BHlllGhO.js.map → app-DvYKGw_S.js.map} +1 -1
- package/dist/scripts/{2HZlmQRs2.chunk.js → lJ6ZVpyv2.chunk.js} +2 -2
- package/dist/scripts/{2HZlmQRs2.chunk.js.map → lJ6ZVpyv2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/C8l37H7t2.chunk.js +0 -2
- package/dist/scripts/CNm_4jj62.chunk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C-zUHAyD.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/animated-border.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/AnimatedBorder.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsDownSvg.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsUpSvg.tsx","../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../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.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/feedback-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../libs/shared/src/enums/PartnerType.ts","../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../libs/shared/src/constants/WidgetTemplateConfig.ts","../../../../libs/shared/src/components/widgets/curated-widgets/widget-container-view.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx"],"sourcesContent":[":local {\n .animatedBorder {\n position: relative;\n padding: 0.25rem;\n border-radius: 1rem;\n background: linear-gradient(\n 90deg,\n #ff6ec4,\n #7873f5,\n #4facfe,\n #00f2fe,\n #4facfe,\n #7873f5,\n #ff6ec4\n );\n background-size: 200% 200%;\n animation: borderRotate 3s ease infinite;\n box-sizing: border-box;\n }\n\n .animatedBorderContent {\n background-color: white;\n border-radius: 0.875rem;\n overflow: hidden;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n\n @keyframes :local(borderRotate) {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n}","import React from 'react';\n\nimport styles from './animated-border.module.scss';\n\ninterface AnimatedBorderProps {\n enabled: boolean;\n children: React.ReactNode;\n}\n\nexport function AnimatedBorder({ enabled, children }: AnimatedBorderProps): JSX.Element {\n if (!enabled) {\n return <>{children}</>;\n }\n\n return (\n <div className={styles.animatedBorder}>\n <div className={`${styles.animatedBorderContent} p-2`}>\n {children}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\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 { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\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 <PersonCardWrapper person={props.person}>\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.Medium)}\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 svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n \n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n \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-2 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div className={styles.time}>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n /> <time dateTime={props.datePublished}>{DateHelper.format(props.datePublished, DATE_FORMATTER)}</time>\n • \n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): 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}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.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}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\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.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\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 const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\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={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isUpselling?: boolean;\n\n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n isUpselling={props.isUpselling}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): 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 name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\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';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.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}\n","import React from 'react';\n\nexport function ThumbsDownSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M19.4 4.362h-3.119a.6.6 0 0 0-.6.6v.233l-1.774-.705a1.8 1.8 0 0 0-.67-.128H6.731a1.82 1.82 0 0 0-1.798 1.572l-.916 6.804a1.815 1.815 0 0 0 1.797 2.057h3.833l.82 3.173a2.23 2.23 0 0 0 2.155 1.67c1.487 0 2.53-1.33 2.147-2.81l-.361-1.401a1.02 1.02 0 0 1 .61-1.202l.663-.263v.233a.6.6 0 0 0 .6.6H19.4a.6.6 0 0 0 .6-.6V4.962a.6.6 0 0 0-.6-.6m-3.719 8.309-1.106.439a2.22 2.22 0 0 0-1.33 2.617l.363 1.401c.174.676-.22 1.26-.915 1.307a1.03 1.03 0 0 1-1.065-.767l-.936-3.623a.6.6 0 0 0-.58-.45H5.813a.613.613 0 0 1-.608-.697l.916-6.804a.616.616 0 0 1 .609-.532h6.506q.118 0 .227.044l2.217.88zm3.119.924h-1.919V5.562H18.8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ThumbsUpSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.6 19.638h3.119a.6.6 0 0 0 .6-.6v-.233l1.774.704q.323.128.67.129h6.506a1.82 1.82 0 0 0 1.798-1.572l.916-6.804a1.815 1.815 0 0 0-1.797-2.057h-3.833l-.82-3.173a2.23 2.23 0 0 0-2.155-1.67c-1.487 0-2.53 1.33-2.147 2.81l.362 1.401a1.02 1.02 0 0 1-.61 1.202l-.664.263v-.233a.6.6 0 0 0-.6-.6H4.6a.6.6 0 0 0-.6.6v9.233a.6.6 0 0 0 .6.6m3.719-8.309 1.106-.439a2.22 2.22 0 0 0 1.33-2.617l-.363-1.401c-.174-.676.22-1.26.915-1.307.495-.033.941.289 1.065.767l.936 3.624a.6.6 0 0 0 .58.45h4.298c.373 0 .658.328.608.696l-.916 6.804a.616.616 0 0 1-.609.532h-6.506a.6.6 0 0 1-.227-.044l-2.217-.88zM5.2 10.405h1.919v8.033H5.2z'\n fill='currentColor'\n />\n </svg>\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});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","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 { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.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 {\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 svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\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}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\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.module.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.coverFixedPillListXSmall');\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n isUpselling?: boolean;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {\n props.isUpselling ?\n getPhrase('upsellHeading', { smartCount: props.content.length }) :\n props.name\n }\n </h2>\n\n <Row as='ul' className='list-unstyled 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 as='li' 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 {!props.isUpselling && <FeedbackForm onSubmit={props.onSubmitFeedback} />}\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.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}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { Playlist, PresentationAudience } 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 interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' 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={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\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\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface 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: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\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 interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \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 id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\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\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n \n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos,\n WidgetTypeId.SearchClickViewLive\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\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}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\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 { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.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 svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\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});\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\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 { 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 { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n\n reminderComponent?: JSX.Element;\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\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] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .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', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n props.presentation.learningLevel,\n props.presentation.type\n )\n }\n } as Classification;\n\n const presentationsSwitchSubjectsItems: PresentationSwitchItem[] = props.availablePresentations ?\n props.availablePresentations.filter(presentation => presentation.id !== props.presentation?.id)\n .map(presentation => {\n return {\n id: presentation.id,\n name: LanguageService.getPhrase(namespace, 'changeTo', { name: presentation.name }),\n cover: presentation.cover,\n vanitySlug: presentation.vanitySlug,\n description: presentation.description,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n presentation.learningLevel,\n presentation.type\n )\n }\n } as PresentationSwitchItem;\n }) :\n [];\n // only show presentation switch if there are more than one other presentaitons and with domain option enabled when it's not editing\n const showPresentationSwitch = !isEditing\n && presentationsSwitchSubjectsItems.length > 0\n && props.settings?.hasTopicDirectories;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n const analyticsOptions = {\n location: LocationContext.EditableSubjectPreferencesWidget\n };\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 {!!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 {!isEditing && React.isValidElement(props.reminderComponent) && props.reminderComponent}\n\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col as='li' 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={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n shouldHighlight={() => props.settings?.hasTopicDirectories}\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 as='li' 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={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n showNewVideosCount={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","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.module.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}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","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.module.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 responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type 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): string {\n // in sliding widget we use icon from classification\n return 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)}\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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\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 { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\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.add(now, 1, 'year'), '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 interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n isUpselling?: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\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 id={props.id}\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 isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n prefetched\n />\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\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}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, 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={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\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 { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): 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 id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): 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\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","import { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\ninterface FeedbackWidgetContent {\n text: string;\n ctaText: string;\n}\n\n/**\n * Only REQUEST_VIDEO is wired up on the widget for now.\n * Uncomment an option below once its copy is confirmed and the widget should support it.\n */\nexport const FEEDBACK_WIDGET_CONTENT: Partial<Record<FeedbackOption, FeedbackWidgetContent>> = {\n [FeedbackOption.REQUEST_VIDEO]: {\n text: 'Did you find what you were looking for?',\n ctaText: 'Request a video'\n }\n\n // [FeedbackOption.REQUEST_LIVESTREAM]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.SUGGEST_IMPROVEMENT]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.REPORT_BUG]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.GIVE_PRAISE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.RAISE_ISSUE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.OTHER]: {\n // text: '',\n // ctaText: ''\n // }\n};\n",":local {\n .icon {\n height: 2rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { FEEDBACK_WIDGET_CONTENT } from './FeedbackWidgetContent';\n\nimport styles from './feedback-widget-template.module.scss';\n\nexport interface FeedbackWidgetTemplateProps {\n name?: string;\n content: HashObject[]; // We need to have content on every widget template\n metadata?: {\n feedbackType?: FeedbackOption\n };\n appLinks?: {\n giveFeedback?: (option: FeedbackOption) => Core.AppLink\n };\n imageUrls: {\n telescope: string\n };\n}\n\nexport function FeedbackWidgetTemplate(props: FeedbackWidgetTemplateProps): JSX.Element {\n const feedbackType = props.metadata?.feedbackType ?? FeedbackOption.REQUEST_VIDEO;\n const feedbackContent = FEEDBACK_WIDGET_CONTENT[feedbackType];\n\n return (\n <div className='d-flex align-items-center justify-content-center flex-wrap gap-3 p-3'>\n <div className='d-flex align-items-center gap-2'>\n <img src={props.imageUrls?.telescope} className={`img-fluid ${styles.icon}`} />\n <span>{props.name || feedbackContent?.text}</span>\n </div>\n\n <AppLink\n appLink={props.appLinks?.giveFeedback?.(feedbackType)}\n className='btn btn-outline-dark'\n >\n {feedbackContent?.ctaText}\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialFeedbackWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between flex-wrap gap-3 p-3 bg-light rounded-3'>\n <div className='partial-loading-background' style={{ width: '18rem', height: '1.5rem', maxWidth: '60%' }} />\n <div className='partial-loading-background' style={{ width: '9rem', height: '2.5rem', borderRadius: '0.375rem' }} />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\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 { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface 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 styles.rowWidth;\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={`${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 text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\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 extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): 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\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\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}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): 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}\n","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 \n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n \n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const 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={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\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 </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.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}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport 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 TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\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 BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\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 '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\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 { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): 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 <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} 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}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","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 { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.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={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): 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 location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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 { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): 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 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 <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\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 PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\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: 'presentationId' in classification && classification.presentationId\n };\n\n const 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 <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\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}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n isUpselling={props.isUpselling}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","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 { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.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 = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, 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 { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\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.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: 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 hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\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';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.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}\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.module.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}\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 PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } 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 interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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, Presentation, PresentationAudience, 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: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\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 interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\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 { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.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}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\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 { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.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\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = ' ';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\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\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 async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(markdown) }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.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}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \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 [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.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 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 async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\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 async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\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 id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n "\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n "\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} /> \n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <> {getPhrase('or')} </> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\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';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\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}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\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.module.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}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\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 { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\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 analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } 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';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(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={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n isUpselling?: boolean;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n isUpselling={props.isUpselling}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\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}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): 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 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","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","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.module.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);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\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 { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\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 = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\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 commonVideoProps={props.commonVideoProps}\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.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(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 <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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';\nimport { DownloadAllResourcesButton } from '../../components/download-all-resources-button/DownloadAllResourcesButton';\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>, resource: Resource): void {\n e.preventDefault();\n e.stopPropagation();\n DownloadHelper.downloadResource(resource, props.analyticsData, props.analyticsOptions);\n }\n\n return (\n <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />\n );\n}\n\nexport interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n\n onDownloadAllClick?: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n const downloadableResources = props.content.filter(MasterTypeHelper.isResource);\n // all content should be resource to be able to download in bulk\n const showDownloadAll = canViewResources &&\n downloadableResources.length > 0 && downloadableResources.length === props.content.length;\n\n return (\n <div className='widget-hover-reveal-boundary'>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n headerRightComponent={showDownloadAll ? (\n <DownloadAllResourcesButton\n resources={downloadableResources}\n fileName={`${props.name}-resources`}\n analyticsData={props.analyticsData}\n onDownloadAllClick={props.onDownloadAllClick}\n revealOnHover\n />\n ) : undefined}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeedbackCtaSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 14'>\n <path d='M2 0h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2z' fill='currentColor' />\n <path d='M18 5h56a2 2 0 0 1 0 4H18a2 2 0 0 1 0-4z' fill='currentColor' />\n <path\n fillRule='evenodd'\n d='M84 1h27a6 6 0 0 1 0 12H84a6 6 0 0 1 0-12zm0 2h27a4 4 0 0 1 0 8H84a4 4 0 0 1 0-8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { 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 { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\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 { FeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate';\nimport { PartialFeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate';\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 { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\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 { 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 { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\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 { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\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 { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\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 { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\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 { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\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 { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplateFeedbackCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\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 DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\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: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\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 DashboardTargetType.PartnerProfile\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: WidgetTemplateThumbnailFeaturedMediaSvg,\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.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\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.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\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: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === 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: WidgetTemplateCoverFixedTileListSvg,\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: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\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.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\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.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\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.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\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: WidgetTemplateThumbnailFixedListLargeSvg,\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 DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\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: WidgetTemplateEditableCoverFixedPillListSmallSvg,\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: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\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: WidgetTemplateQuestionSvg,\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: WidgetTemplateQuestionAccordionSvg,\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.FeedbackCta]: {\n getComponent: () => FeedbackWidgetTemplate,\n partialLoading: PartialFeedbackWidgetTemplate,\n icon: WidgetTemplateFeedbackCtaSvg,\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: WidgetTemplateThumbnailFixedListMediaLargeSvg,\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: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\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.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\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: WidgetTemplateCircleLogoSlidingListSvg,\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.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\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 DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [ DashboardTargetType.Classification, DashboardTargetType.PartnerProfile ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\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: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n",":local {\n .anchor {\n scroll-margin-top: 4.18rem;\n }\n\n .widgetHighlight {\n animation: blinker 4s linear 1;\n border-radius: $border-radius-lg;\n position: relative;\n z-index: 1;\n background-color: white;\n }\n\n @keyframes :local(blinker) {\n from {\n box-shadow: 0 0 1.75rem $blue;\n }\n to {\n box-shadow: none;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnimatedBorder } from 'libs/shared/components/widgets/curated-widgets/components/animated-border/AnimatedBorder';\nimport { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllPartnerProfileWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } 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 { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.module.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\n/**\n * Type mapping from DashboardTargetType to their corresponding Widget Template Props\n * This makes it easy to extract the correct widget template type based on dashboard target\n */\nexport type DashboardTargetToWidgetTemplateMap = {\n [DashboardTargetType.Classification]: AllClassificationWidgetTemplates,\n [DashboardTargetType.Discover]: AllDiscoverWidgetTemplates,\n [DashboardTargetType.Company]: AllCompanyWidgetTemplates,\n [DashboardTargetType.MoviesAndTv]: AllMoviesAndTvWidgetTemplates,\n [DashboardTargetType.Search]: AllSearchWidgetTemplates,\n [DashboardTargetType.PartnerProfile]: AllPartnerProfileWidgetTemplates,\n [DashboardTargetType.DiscoverPartnerProfiles]: AllPartnerProfileWidgetTemplates,\n // Add defaults for other dashboard targets that don't have specific templates\n [DashboardTargetType.ClassificationDirectory]: AllClassificationWidgetTemplates,\n [DashboardTargetType.ClassificationCurriculum]: AllClassificationWidgetTemplates,\n [DashboardTargetType.PartnerProfileHub]: AllPartnerProfileWidgetTemplates\n};\n\n/**\n * Helper type to extract widget template props for a specific dashboard target\n */\nexport type WidgetTemplatePropsForTarget<T extends DashboardTargetType> =\n T extends keyof DashboardTargetToWidgetTemplateMap ?\n DashboardTargetToWidgetTemplateMap[T] :\n AllWidgetTemplateProps;\n\ninterface BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n /**\n * This is different from `settings` props \n * which is union of all settings used \n * within different widgets. \n */\n settingsHash?: SettingsHash;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, itemName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n className?: string;\n hasLocalPermissions?: HasLocalPermissionsFunc;\n isUpselling?: boolean;\n}\n\ntype WidgetContainerViewPropsForTarget<T extends DashboardTargetType> =\n BaseWidgetContainerViewProps &\n Omit<WidgetTemplatePropsForTarget<T>, 'content' | 'metadata'> &\n { widgetCollection?: T };\n\ntype ClassificationWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Classification>;\ntype DiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Discover>;\ntype CompanyWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Company>;\ntype MoviesAndTvWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.MoviesAndTv>;\ntype SearchWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Search>;\ntype PartnerProfileDashboardWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.PartnerProfile>;\ntype PartnerProfileDiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.DiscoverPartnerProfiles>;\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps |\n PartnerProfileDashboardWidgetContainerViewProps |\n PartnerProfileDiscoverWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request,\n content?: never\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent,\n getContentRequest?: never\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const isWidgetEnabled = CuratedDashboardHelper.isWidgetTypeEnabled(\n props.widgetTypeId,\n props?.settingsHash,\n props?.dashboardTarget\n );\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = isWidgetEnabled && FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && isWidgetEnabled && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\n );\n\n const name = lazyWidget.data?.name || props.name;\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 function onClickRemoveItem(itemId: string, itemName: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, itemName, props.id, props.widgetTypeId);\n }\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(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\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: name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const template = WidgetTemplateConfig[props.templateId];\n\n if (!template || !showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n \n const PartialTemplate = template.partialLoading;\n const Template = template.getComponent(props.widgetTypeId);\n const widgetTemplateClass = classNames(template.className, props.className);\n\n const hasNewVideoHighlight = props.isEditing && props.metadata.aiAddedVideo;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <AnimatedBorder enabled={hasNewVideoHighlight}>\n <div className={props.isScrollToTargetWidget ? `py-2 px-3 rounded-3 ${styles.widgetHighlight}` : ''}>\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 name={name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n name={name}\n content={content}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n onClickRemoveItem={onClickRemoveItem}\n />\n )}\n </div>\n </AnimatedBorder>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CajcIz6S.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/animated-border.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/AnimatedBorder.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsDownSvg.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsUpSvg.tsx","../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../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.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetContent.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/feedback-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../libs/shared/src/components/series-tall-poster/series-tall-poster.module.scss","../../../../libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../libs/shared/src/enums/PartnerType.ts","../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/apps/subjects/components/hero-video/hero-video.module.scss","../../../../libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../libs/shared/src/constants/WidgetTemplateConfig.ts","../../../../libs/shared/src/components/widgets/curated-widgets/widget-container-view.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx"],"sourcesContent":[":local {\n .animatedBorder {\n position: relative;\n padding: 0.25rem;\n border-radius: 1rem;\n background: linear-gradient(\n 90deg,\n #ff6ec4,\n #7873f5,\n #4facfe,\n #00f2fe,\n #4facfe,\n #7873f5,\n #ff6ec4\n );\n background-size: 200% 200%;\n animation: borderRotate 3s ease infinite;\n box-sizing: border-box;\n }\n\n .animatedBorderContent {\n background-color: white;\n border-radius: 0.875rem;\n overflow: hidden;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n\n @keyframes :local(borderRotate) {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n}","import React from 'react';\n\nimport styles from './animated-border.module.scss';\n\ninterface AnimatedBorderProps {\n enabled: boolean;\n children: React.ReactNode;\n}\n\nexport function AnimatedBorder({ enabled, children }: AnimatedBorderProps): JSX.Element {\n if (!enabled) {\n return <>{children}</>;\n }\n\n return (\n <div className={styles.animatedBorder}>\n <div className={`${styles.animatedBorderContent} p-2`}>\n {children}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\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 { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\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 <PersonCardWrapper person={props.person}>\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.Medium)}\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 svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n \n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n \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-2 flex-grow-1'>\n {props.person.bio}\n </p>\n\n <div className={styles.time}>\n {props.type === 'reviewer' ? (\n <>\n <Text\n namespace={namespace}\n phrase='reviewed'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n ) : (\n <>\n <Text\n namespace={namespace}\n phrase='published'\n /> <time dateTime={props.datePublished}>{DateHelper.format(props.datePublished, DATE_FORMATTER)}</time>\n • \n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): 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}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.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}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\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.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\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 const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\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={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isUpselling?: boolean;\n\n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n isUpselling={props.isUpselling}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): 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 name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\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';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.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}\n","import React from 'react';\n\nexport function ThumbsDownSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M19.4 4.362h-3.119a.6.6 0 0 0-.6.6v.233l-1.774-.705a1.8 1.8 0 0 0-.67-.128H6.731a1.82 1.82 0 0 0-1.798 1.572l-.916 6.804a1.815 1.815 0 0 0 1.797 2.057h3.833l.82 3.173a2.23 2.23 0 0 0 2.155 1.67c1.487 0 2.53-1.33 2.147-2.81l-.361-1.401a1.02 1.02 0 0 1 .61-1.202l.663-.263v.233a.6.6 0 0 0 .6.6H19.4a.6.6 0 0 0 .6-.6V4.962a.6.6 0 0 0-.6-.6m-3.719 8.309-1.106.439a2.22 2.22 0 0 0-1.33 2.617l.363 1.401c.174.676-.22 1.26-.915 1.307a1.03 1.03 0 0 1-1.065-.767l-.936-3.623a.6.6 0 0 0-.58-.45H5.813a.613.613 0 0 1-.608-.697l.916-6.804a.616.616 0 0 1 .609-.532h6.506q.118 0 .227.044l2.217.88zm3.119.924h-1.919V5.562H18.8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ThumbsUpSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.6 19.638h3.119a.6.6 0 0 0 .6-.6v-.233l1.774.704q.323.128.67.129h6.506a1.82 1.82 0 0 0 1.798-1.572l.916-6.804a1.815 1.815 0 0 0-1.797-2.057h-3.833l-.82-3.173a2.23 2.23 0 0 0-2.155-1.67c-1.487 0-2.53 1.33-2.147 2.81l.362 1.401a1.02 1.02 0 0 1-.61 1.202l-.664.263v-.233a.6.6 0 0 0-.6-.6H4.6a.6.6 0 0 0-.6.6v9.233a.6.6 0 0 0 .6.6m3.719-8.309 1.106-.439a2.22 2.22 0 0 0 1.33-2.617l-.363-1.401c-.174-.676.22-1.26.915-1.307.495-.033.941.289 1.065.767l.936 3.624a.6.6 0 0 0 .58.45h4.298c.373 0 .658.328.608.696l-.916 6.804a.616.616 0 0 1-.609.532h-6.506a.6.6 0 0 1-.227-.044l-2.217-.88zM5.2 10.405h1.919v8.033H5.2z'\n fill='currentColor'\n />\n </svg>\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});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","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 { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.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 {\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 svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\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}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\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.module.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.coverFixedPillListXSmall');\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n isUpselling?: boolean;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {\n props.isUpselling ?\n getPhrase('upsellHeading', { smartCount: props.content.length }) :\n props.name\n }\n </h2>\n\n <Row as='ul' className='list-unstyled 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 as='li' 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 {!props.isUpselling && <FeedbackForm onSubmit={props.onSubmitFeedback} />}\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.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}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { Playlist, PresentationAudience } 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 interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' 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={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\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\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface 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: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\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 interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \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 id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\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\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n \n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos,\n WidgetTypeId.SearchClickViewLive\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\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}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\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 { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.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 svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\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});\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\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 { 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 { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n\n reminderComponent?: JSX.Element;\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\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] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .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', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n props.presentation.learningLevel,\n props.presentation.type\n )\n }\n } as Classification;\n\n const presentationsSwitchSubjectsItems: PresentationSwitchItem[] = props.availablePresentations ?\n props.availablePresentations.filter(presentation => presentation.id !== props.presentation?.id)\n .map(presentation => {\n return {\n id: presentation.id,\n name: LanguageService.getPhrase(namespace, 'changeTo', { name: presentation.name }),\n cover: presentation.cover,\n vanitySlug: presentation.vanitySlug,\n description: presentation.description,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(\n presentation.learningLevel,\n presentation.type\n )\n }\n } as PresentationSwitchItem;\n }) :\n [];\n // only show presentation switch if there are more than one other presentaitons and with domain option enabled when it's not editing\n const showPresentationSwitch = !isEditing\n && presentationsSwitchSubjectsItems.length > 0\n && props.settings?.hasTopicDirectories;\n\n const canManagePreferences = props.hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences);\n\n const analyticsOptions = {\n location: LocationContext.EditableSubjectPreferencesWidget\n };\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 {!!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 {!isEditing && React.isValidElement(props.reminderComponent) && props.reminderComponent}\n\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {showExploreAllTopics && (\n <Col as='li' 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={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n shouldHighlight={() => props.settings?.hasTopicDirectories}\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 as='li' 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={analyticsOptions}\n multiline\n highlightOnHover={props.settings?.hasTopicDirectories}\n showNewVideosCount={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","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.module.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}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","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.module.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 responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type 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): string {\n // in sliding widget we use icon from classification\n return 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)}\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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\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 { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\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.add(now, 1, 'year'), '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 interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n isUpselling?: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\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 id={props.id}\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 isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n prefetched\n />\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\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}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, 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={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\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 { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): 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 id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): 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\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","import { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\ninterface FeedbackWidgetContent {\n text: string;\n ctaText: string;\n}\n\n/**\n * Only REQUEST_VIDEO is wired up on the widget for now.\n * Uncomment an option below once its copy is confirmed and the widget should support it.\n */\nexport const FEEDBACK_WIDGET_CONTENT: Partial<Record<FeedbackOption, FeedbackWidgetContent>> = {\n [FeedbackOption.REQUEST_VIDEO]: {\n text: 'Did you find what you were looking for?',\n ctaText: 'Request a video'\n }\n\n // [FeedbackOption.REQUEST_LIVESTREAM]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.SUGGEST_IMPROVEMENT]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.REPORT_BUG]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.GIVE_PRAISE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.RAISE_ISSUE]: {\n // text: '',\n // ctaText: ''\n // },\n // [FeedbackOption.OTHER]: {\n // text: '',\n // ctaText: ''\n // }\n};\n",":local {\n .icon {\n height: 2rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport { FEEDBACK_WIDGET_CONTENT } from './FeedbackWidgetContent';\n\nimport styles from './feedback-widget-template.module.scss';\n\nexport interface FeedbackWidgetTemplateProps {\n name?: string;\n content: HashObject[]; // We need to have content on every widget template\n metadata?: {\n feedbackType?: FeedbackOption\n };\n appLinks?: {\n giveFeedback?: (option: FeedbackOption) => Core.AppLink\n };\n imageUrls: {\n telescope: string\n };\n}\n\nexport function FeedbackWidgetTemplate(props: FeedbackWidgetTemplateProps): JSX.Element {\n const feedbackType = props.metadata?.feedbackType ?? FeedbackOption.REQUEST_VIDEO;\n const feedbackContent = FEEDBACK_WIDGET_CONTENT[feedbackType];\n\n return (\n <div className='d-flex align-items-center justify-content-center flex-wrap gap-3 p-3'>\n <div className='d-flex align-items-center gap-2'>\n <img src={props.imageUrls?.telescope} className={`img-fluid ${styles.icon}`} />\n <span>{props.name || feedbackContent?.text}</span>\n </div>\n\n <AppLink\n appLink={props.appLinks?.giveFeedback?.(feedbackType)}\n className='btn btn-outline-dark'\n >\n {feedbackContent?.ctaText}\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialFeedbackWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex align-items-center justify-content-between flex-wrap gap-3 p-3 bg-light rounded-3'>\n <div className='partial-loading-background' style={{ width: '18rem', height: '1.5rem', maxWidth: '60%' }} />\n <div className='partial-loading-background' style={{ width: '9rem', height: '2.5rem', borderRadius: '0.375rem' }} />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\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 { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface 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 styles.rowWidth;\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={`${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 text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\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 extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): 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\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\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}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): 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}\n","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 \n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n \n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const 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={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\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 </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.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}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport 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 TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\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 BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\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 '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\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 { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): 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 <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} 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}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","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 { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.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={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): 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 location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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 { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): 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 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 <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\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 PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\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: 'presentationId' in classification && classification.presentationId\n };\n\n const 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 <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\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}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n isUpselling={props.isUpselling}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\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(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n isUpselling?: boolean;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n isUpselling={props.isUpselling}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","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 { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.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 = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .labelContainerOverlay {\n :global(.rating-badge) {\n @include thumbnail-poster-badge;\n }\n }\n\n .hoverActive {\n transform: translate3D(0, -1px, 0) scale(1.01);\n transition: all .1s ease;\n\n &:after {\n content: '';\n\n position: absolute;\n top: 0;\n left: -(map-get($spacers, 1));\n right: -(map-get($spacers, 1));\n bottom: 0;\n\n margin: 0 map-get($spacers, 1);\n\n border-radius: $border-radius-lg;\n }\n }\n\n .mask {\n z-index: 2;\n position: absolute;\n bottom: map-get($spacers, 2);\n right: 0;\n left: 0;\n\n max-height: calc(100% - (map-get($spacers, 2) * 2));\n \n @include media('<=lg') {\n padding: map-get($spacers, 3) map-get($spacers, 1);\n }\n\n .largeHoverTitle {\n font-size: $h4-font-size;\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media('<=md') {\n font-size: $h6-font-size;\n margin-bottom: map-get($spacers, 1);\n }\n\n @include media('<=sm') {\n font-size: $h5-font-size;\n }\n }\n\n .smallHoverTitle {\n font-size: $h5-font-size;\n\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h6-font-size;\n }\n\n @include media('<=md') {\n @include clamp(5);\n }\n }\n\n .description {\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n }\n\n .largeHoverDescription {\n @include clamp(11);\n\n @include media('<=xl') {\n @include clamp(9);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n\n &.hasTableOfContents {\n @include clamp(7);\n\n @include media('<=xl') {\n @include clamp(5);\n }\n @include media(\"<=1003px\") {\n @include clamp(4);\n }\n @include media('<=lg') {\n @include clamp(7);\n }\n @include media(\"<=878px\") {\n @include clamp(4);\n }\n }\n }\n\n .smallHoverDescription {\n @include clamp(8);\n\n @include media('<=xl') {\n @include clamp(8);\n font-size: 12px;\n }\n\n @include media('<=md') {\n @include clamp(6);\n }\n @include media('<=sm') {\n @include clamp(9);\n }\n } \n }\n}","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\n\nimport styles from './series-tall-poster.module.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n <div className={`${styles.labelContainerOverlay}`}>\n {props.mergedAudience ?\n <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/> :\n <Badge type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} className='mt-2' />\n }\n </div>\n </div>\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\n {displayAudience ?\n <AudienceLabel audience={mergedAudience} className='bg-white text-dark' border='dark' /> :\n <Badge className='text-shadow' type={BadgeType.Rating} data={SeriesHelper.getRating(props.series)} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, 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 { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\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.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: 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 hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\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';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.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}\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.module.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}\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 PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } 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 interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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, Presentation, PresentationAudience, 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: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\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 interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\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}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\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 { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.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}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\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 { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.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\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = ' ';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\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\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 async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(markdown) }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.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}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \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 [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.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 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 async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\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 async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\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 id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n "\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n "\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} /> \n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <> {getPhrase('or')} </> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\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';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\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}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\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.module.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}\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialSeriesText {\n width: 6.25rem;\n height: 1rem;\n }\n\n .partialVideoTitleText {\n width: 16rem;\n height: 2rem;\n }\n\n .partialBadge {\n width: 4rem;\n height: 1rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 4rem;\n }\n\n .partialSubject {\n width: 6.25rem;\n height: 1.5rem;\n }\n\n .partialHeading {\n height: 1.5rem;\n width: 8.4375rem;\n }\n\n .guidance {\n position: absolute;\n bottom: 0;\n gap: map-get($spacers, 1);\n\n @include media(\"<md\") {\n position: relative;\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .description {\n @include clamp(4);\n \n @include media(\"<xl\") {\n @include clamp(3);\n }\n \n @include media(\"<md\") {\n display: none;\n }\n }\n\n .details {\n @include media(\"<md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.module.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n hideInteractiveBadge?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n titleClassName?: string;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n commonVideoProps: CommonVideoProps;\n showNewVideoIndicator?: boolean;\n}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n });\n\n const containerRef = React.useRef(null);\n \n if (!props.video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={props.getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.commonVideoProps.subTextType}\n appLink={props.commonVideoProps.getSubTextAppLink?.(props.video)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n yearGroups={props.commonVideoProps.yearGroups}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={props.getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n showNewVideoIndicator={props.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!props.hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={props.video.interactives} />}\n <Badge type={ BadgeType.Rating } data={VideoHelper.getRating(props.video)} />\n <Badge type={ BadgeType.ProductionYear } data={props.video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{props.video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\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 { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\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 analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } 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';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\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};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(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={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\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 { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n isUpselling?: boolean;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n isUpselling={props.isUpselling}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\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}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\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 { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): 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 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","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","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.module.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);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\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 { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\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 = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\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 commonVideoProps={props.commonVideoProps}\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.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(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 <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\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 commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\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 { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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';\nimport { DownloadAllResourcesButton } from '../../components/download-all-resources-button/DownloadAllResourcesButton';\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>, resource: Resource): void {\n e.preventDefault();\n e.stopPropagation();\n DownloadHelper.downloadResource(resource, props.analyticsData, props.analyticsOptions);\n }\n\n return (\n <ResourceWidgetItem {...props} location='dashboard' onClickDownload={onClickDownload} />\n );\n}\n\nexport interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n\n onDownloadAllClick?: (resources: Resource[], fileName: string, analyticsData?: HashObject) => void;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n const downloadableResources = props.content.filter(MasterTypeHelper.isResource);\n // all content should be resource to be able to download in bulk\n const showDownloadAll = canViewResources &&\n downloadableResources.length > 0 && downloadableResources.length === props.content.length;\n\n return (\n <div className='widget-hover-reveal-boundary'>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={MultimediaWidgetItem}\n headerRightComponent={showDownloadAll ? (\n <DownloadAllResourcesButton\n resources={downloadableResources}\n fileName={`${props.name}-resources`}\n analyticsData={props.analyticsData}\n onDownloadAllClick={props.onDownloadAllClick}\n revealOnHover\n />\n ) : undefined}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeedbackCtaSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 14'>\n <path d='M2 0h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2z' fill='currentColor' />\n <path d='M18 5h56a2 2 0 0 1 0 4H18a2 2 0 0 1 0-4z' fill='currentColor' />\n <path\n fillRule='evenodd'\n d='M84 1h27a6 6 0 0 1 0 12H84a6 6 0 0 1 0-12zm0 2h27a4 4 0 0 1 0 8H84a4 4 0 0 1 0-8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { 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 { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\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 { FeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/FeedbackWidgetTemplate';\nimport { PartialFeedbackWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/feedback/partial-loading/PartialFeedbackWidgetTemplate';\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 { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\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 { 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 { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\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 { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\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 { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\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 { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\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 { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\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 { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplateFeedbackCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateFeedbackCtaSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\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 DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\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: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\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 DashboardTargetType.PartnerProfile\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: WidgetTemplateThumbnailFeaturedMediaSvg,\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.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\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.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\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: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === 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: WidgetTemplateCoverFixedTileListSvg,\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: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\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.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\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.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\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.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\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: WidgetTemplateThumbnailFixedListLargeSvg,\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 DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\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: WidgetTemplateEditableCoverFixedPillListSmallSvg,\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: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\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: WidgetTemplateQuestionSvg,\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: WidgetTemplateQuestionAccordionSvg,\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.FeedbackCta]: {\n getComponent: () => FeedbackWidgetTemplate,\n partialLoading: PartialFeedbackWidgetTemplate,\n icon: WidgetTemplateFeedbackCtaSvg,\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: WidgetTemplateThumbnailFixedListMediaLargeSvg,\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: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\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.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\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: WidgetTemplateCircleLogoSlidingListSvg,\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.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\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 DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [ DashboardTargetType.Classification, DashboardTargetType.PartnerProfile ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\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: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n",":local {\n .anchor {\n scroll-margin-top: 4.18rem;\n }\n\n .widgetHighlight {\n animation: blinker 4s linear 1;\n border-radius: $border-radius-lg;\n position: relative;\n z-index: 1;\n background-color: white;\n }\n\n @keyframes :local(blinker) {\n from {\n box-shadow: 0 0 1.75rem $blue;\n }\n to {\n box-shadow: none;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnimatedBorder } from 'libs/shared/components/widgets/curated-widgets/components/animated-border/AnimatedBorder';\nimport { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllPartnerProfileWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } 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 { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.module.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\n/**\n * Type mapping from DashboardTargetType to their corresponding Widget Template Props\n * This makes it easy to extract the correct widget template type based on dashboard target\n */\nexport type DashboardTargetToWidgetTemplateMap = {\n [DashboardTargetType.Classification]: AllClassificationWidgetTemplates,\n [DashboardTargetType.Discover]: AllDiscoverWidgetTemplates,\n [DashboardTargetType.Company]: AllCompanyWidgetTemplates,\n [DashboardTargetType.MoviesAndTv]: AllMoviesAndTvWidgetTemplates,\n [DashboardTargetType.Search]: AllSearchWidgetTemplates,\n [DashboardTargetType.PartnerProfile]: AllPartnerProfileWidgetTemplates,\n [DashboardTargetType.DiscoverPartnerProfiles]: AllPartnerProfileWidgetTemplates,\n // Add defaults for other dashboard targets that don't have specific templates\n [DashboardTargetType.ClassificationDirectory]: AllClassificationWidgetTemplates,\n [DashboardTargetType.ClassificationCurriculum]: AllClassificationWidgetTemplates,\n [DashboardTargetType.PartnerProfileHub]: AllPartnerProfileWidgetTemplates\n};\n\n/**\n * Helper type to extract widget template props for a specific dashboard target\n */\nexport type WidgetTemplatePropsForTarget<T extends DashboardTargetType> =\n T extends keyof DashboardTargetToWidgetTemplateMap ?\n DashboardTargetToWidgetTemplateMap[T] :\n AllWidgetTemplateProps;\n\ninterface BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n /**\n * This is different from `settings` props \n * which is union of all settings used \n * within different widgets. \n */\n settingsHash?: SettingsHash;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, itemName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n className?: string;\n hasLocalPermissions?: HasLocalPermissionsFunc;\n isUpselling?: boolean;\n}\n\ntype WidgetContainerViewPropsForTarget<T extends DashboardTargetType> =\n BaseWidgetContainerViewProps &\n Omit<WidgetTemplatePropsForTarget<T>, 'content' | 'metadata'> &\n { widgetCollection?: T };\n\ntype ClassificationWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Classification>;\ntype DiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Discover>;\ntype CompanyWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Company>;\ntype MoviesAndTvWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.MoviesAndTv>;\ntype SearchWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Search>;\ntype PartnerProfileDashboardWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.PartnerProfile>;\ntype PartnerProfileDiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.DiscoverPartnerProfiles>;\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps |\n PartnerProfileDashboardWidgetContainerViewProps |\n PartnerProfileDiscoverWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request,\n content?: never\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent,\n getContentRequest?: never\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const isWidgetEnabled = CuratedDashboardHelper.isWidgetTypeEnabled(\n props.widgetTypeId,\n props?.settingsHash,\n props?.dashboardTarget\n );\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = isWidgetEnabled && FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && isWidgetEnabled && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\n );\n\n const name = lazyWidget.data?.name || props.name;\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 function onClickRemoveItem(itemId: string, itemName: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, itemName, props.id, props.widgetTypeId);\n }\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(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\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: name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const template = WidgetTemplateConfig[props.templateId];\n\n if (!template || !showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n \n const PartialTemplate = template.partialLoading;\n const Template = template.getComponent(props.widgetTypeId);\n const widgetTemplateClass = classNames(template.className, props.className);\n\n const hasNewVideoHighlight = props.isEditing && props.metadata.aiAddedVideo;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <AnimatedBorder enabled={hasNewVideoHighlight}>\n <div className={props.isScrollToTargetWidget ? `py-2 px-3 rounded-3 ${styles.widgetHighlight}` : ''}>\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 name={name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n name={name}\n content={content}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n onClickRemoveItem={onClickRemoveItem}\n />\n )}\n </div>\n </AnimatedBorder>\n </div>\n );\n}\n"],"mappings":"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"}
|