@clickview/lite 0.58.1 → 0.58.2-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/1041-29107d9409-lite.chunk.js +2 -0
- package/dist/scripts/1041-29107d9409-lite.chunk.js.map +1 -0
- package/dist/scripts/{1080-563b65eb58-lite.chunk.js → 1080-48ce32d627-lite.chunk.js} +2 -2
- package/dist/scripts/1080-48ce32d627-lite.chunk.js.map +1 -0
- package/dist/scripts/{1169-f2120c91cc-lite.chunk.js → 1169-1443c8a778-lite.chunk.js} +2 -2
- package/dist/scripts/1169-1443c8a778-lite.chunk.js.map +1 -0
- package/dist/scripts/143-efbc6a41c5-lite.chunk.js +2 -0
- package/dist/scripts/143-efbc6a41c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{170-94b806dc73-lite.chunk.js → 170-233a87b708-lite.chunk.js} +3 -3
- package/dist/scripts/170-233a87b708-lite.chunk.js.map +1 -0
- package/dist/scripts/2015-d1bc58c0eb-lite.chunk.js +2 -0
- package/dist/scripts/2015-d1bc58c0eb-lite.chunk.js.map +1 -0
- package/dist/scripts/204-4f5b47b73f-lite.chunk.js +2 -0
- package/dist/scripts/204-4f5b47b73f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2153-7663eb7803-lite.chunk.js → 2153-02090c64f8-lite.chunk.js} +2 -2
- package/dist/scripts/2153-02090c64f8-lite.chunk.js.map +1 -0
- package/dist/scripts/2215-39ee2a2b3f-lite.chunk.js +2 -0
- package/dist/scripts/2215-39ee2a2b3f-lite.chunk.js.map +1 -0
- package/dist/scripts/{2340-d1548f6362-lite.chunk.js → 2340-62c86fabb2-lite.chunk.js} +2 -2
- package/dist/scripts/2340-62c86fabb2-lite.chunk.js.map +1 -0
- package/dist/scripts/2571-c280e72eff-lite.chunk.js +2 -0
- package/dist/scripts/2571-c280e72eff-lite.chunk.js.map +1 -0
- package/dist/scripts/{4013-3d2edd41fb-lite.chunk.js → 4013-2aff1769f5-lite.chunk.js} +3 -3
- package/dist/scripts/4013-2aff1769f5-lite.chunk.js.map +1 -0
- package/dist/scripts/{490-002054a946-lite.chunk.js → 490-62ca33b520-lite.chunk.js} +2 -2
- package/dist/scripts/490-62ca33b520-lite.chunk.js.map +1 -0
- package/dist/scripts/4944-a780ed2439-lite.chunk.js +2 -0
- package/dist/scripts/4944-a780ed2439-lite.chunk.js.map +1 -0
- package/dist/scripts/{5220-40dd0842b5-lite.chunk.js → 5220-e0074ed079-lite.chunk.js} +3 -3
- package/dist/scripts/5220-e0074ed079-lite.chunk.js.map +1 -0
- package/dist/scripts/{5224-09e451b12f-lite.chunk.js → 5224-53cabe5c40-lite.chunk.js} +2 -2
- package/dist/scripts/5224-53cabe5c40-lite.chunk.js.map +1 -0
- package/dist/scripts/{5836-f212660b94-lite.chunk.js → 5836-03975cbcf8-lite.chunk.js} +2 -2
- package/dist/scripts/5836-03975cbcf8-lite.chunk.js.map +1 -0
- package/dist/scripts/{5936-f1e642e93f-lite.chunk.js → 5936-71d764494c-lite.chunk.js} +2 -2
- package/dist/scripts/5936-71d764494c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6118-d069072bb6-lite.chunk.js → 6118-e4ebf5a2c1-lite.chunk.js} +2 -2
- package/dist/scripts/6118-e4ebf5a2c1-lite.chunk.js.map +1 -0
- package/dist/scripts/{6263-c665ac8df6-lite.chunk.js → 6263-fca75a8668-lite.chunk.js} +2 -2
- package/dist/scripts/6263-fca75a8668-lite.chunk.js.map +1 -0
- package/dist/scripts/{6599-c87f4f5ec1-lite.chunk.js → 6599-d8f1b255c5-lite.chunk.js} +3 -3
- package/dist/scripts/6599-d8f1b255c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{6741-1ee9b683c7-lite.chunk.js → 6741-638b658087-lite.chunk.js} +3 -3
- package/dist/scripts/6741-638b658087-lite.chunk.js.map +1 -0
- package/dist/scripts/6934-5688ca7ce7-lite.chunk.js +2 -0
- package/dist/scripts/6934-5688ca7ce7-lite.chunk.js.map +1 -0
- package/dist/scripts/{7234-d1a173cb25-lite.chunk.js → 7234-8664150dd4-lite.chunk.js} +2 -2
- package/dist/scripts/7234-8664150dd4-lite.chunk.js.map +1 -0
- package/dist/scripts/{7556-69f8cb3b20-lite.chunk.js → 7556-276466341c-lite.chunk.js} +3 -3
- package/dist/scripts/7556-276466341c-lite.chunk.js.map +1 -0
- package/dist/scripts/{7709-57c48d288e-lite.chunk.js → 7709-adf3f9328f-lite.chunk.js} +2 -2
- package/dist/scripts/7709-adf3f9328f-lite.chunk.js.map +1 -0
- package/dist/scripts/{839-f8478d27f8-lite.chunk.js → 839-aaf4cad363-lite.chunk.js} +1 -1
- package/dist/scripts/{839-f8478d27f8-lite.chunk.js.map → 839-aaf4cad363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9139-456a0f14a5-lite.chunk.js → 9139-e8c1a686af-lite.chunk.js} +2 -2
- package/dist/scripts/9139-e8c1a686af-lite.chunk.js.map +1 -0
- package/dist/scripts/{9173-e03b30b436-lite.chunk.js → 9173-90aa484be4-lite.chunk.js} +2 -2
- package/dist/scripts/9173-90aa484be4-lite.chunk.js.map +1 -0
- package/dist/scripts/9284-c0cee27d0e-lite.chunk.js +2 -0
- package/dist/scripts/9284-c0cee27d0e-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js → 9395-355efbc0e7-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js.map → 9395-355efbc0e7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-45aa51744b-lite.chunk.js → 953-b3b777612b-lite.chunk.js} +3 -3
- package/dist/scripts/{953-45aa51744b-lite.chunk.js.map → 953-b3b777612b-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-22b3c87b82.min.js +3 -0
- package/dist/scripts/bundle-22b3c87b82.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1080-563b65eb58-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-f2120c91cc-lite.chunk.js.map +0 -1
- package/dist/scripts/143-4ea7a69434-lite.chunk.js +0 -2
- package/dist/scripts/143-4ea7a69434-lite.chunk.js.map +0 -1
- package/dist/scripts/170-94b806dc73-lite.chunk.js.map +0 -1
- package/dist/scripts/204-2b19b80cc1-lite.chunk.js +0 -2
- package/dist/scripts/204-2b19b80cc1-lite.chunk.js.map +0 -1
- package/dist/scripts/2153-7663eb7803-lite.chunk.js.map +0 -1
- package/dist/scripts/2215-5e8af1456d-lite.chunk.js +0 -2
- package/dist/scripts/2215-5e8af1456d-lite.chunk.js.map +0 -1
- package/dist/scripts/2340-d1548f6362-lite.chunk.js.map +0 -1
- package/dist/scripts/3525-45e28232cf-lite.chunk.js +0 -2
- package/dist/scripts/3525-45e28232cf-lite.chunk.js.map +0 -1
- package/dist/scripts/4013-3d2edd41fb-lite.chunk.js.map +0 -1
- package/dist/scripts/490-002054a946-lite.chunk.js.map +0 -1
- package/dist/scripts/4944-b565b5c501-lite.chunk.js +0 -2
- package/dist/scripts/4944-b565b5c501-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-40dd0842b5-lite.chunk.js.map +0 -1
- package/dist/scripts/5224-09e451b12f-lite.chunk.js.map +0 -1
- package/dist/scripts/5836-f212660b94-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-f1e642e93f-lite.chunk.js.map +0 -1
- package/dist/scripts/6118-d069072bb6-lite.chunk.js.map +0 -1
- package/dist/scripts/6263-c665ac8df6-lite.chunk.js.map +0 -1
- package/dist/scripts/6599-c87f4f5ec1-lite.chunk.js.map +0 -1
- package/dist/scripts/6741-1ee9b683c7-lite.chunk.js.map +0 -1
- package/dist/scripts/6934-1f439ec9a2-lite.chunk.js +0 -2
- package/dist/scripts/6934-1f439ec9a2-lite.chunk.js.map +0 -1
- package/dist/scripts/7234-d1a173cb25-lite.chunk.js.map +0 -1
- package/dist/scripts/7556-69f8cb3b20-lite.chunk.js.map +0 -1
- package/dist/scripts/7709-57c48d288e-lite.chunk.js.map +0 -1
- package/dist/scripts/8813-1e58ad1895-lite.chunk.js +0 -2
- package/dist/scripts/8813-1e58ad1895-lite.chunk.js.map +0 -1
- package/dist/scripts/9139-456a0f14a5-lite.chunk.js.map +0 -1
- package/dist/scripts/9173-e03b30b436-lite.chunk.js.map +0 -1
- package/dist/scripts/9284-80c3abfe62-lite.chunk.js +0 -2
- package/dist/scripts/9284-80c3abfe62-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-7da429ea24.min.js +0 -3
- package/dist/scripts/bundle-7da429ea24.min.js.map +0 -1
- /package/dist/css/{3525-lite-6ab6e749cb.chunk.css → 1041-lite-6ab6e749cb.chunk.css} +0 -0
- /package/dist/css/{8813-lite-6ab6e749cb.chunk.css → 2015-lite-6ab6e749cb.chunk.css} +0 -0
- /package/dist/scripts/{170-94b806dc73-lite.chunk.js.LICENSE.txt → 170-233a87b708-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4013-3d2edd41fb-lite.chunk.js.LICENSE.txt → 4013-2aff1769f5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-40dd0842b5-lite.chunk.js.LICENSE.txt → 5220-e0074ed079-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6599-c87f4f5ec1-lite.chunk.js.LICENSE.txt → 6599-d8f1b255c5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-1ee9b683c7-lite.chunk.js.LICENSE.txt → 6741-638b658087-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7556-69f8cb3b20-lite.chunk.js.LICENSE.txt → 7556-276466341c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-70cd9ae3a1-lite.chunk.js.LICENSE.txt → 9395-355efbc0e7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-45aa51744b-lite.chunk.js.LICENSE.txt → 953-b3b777612b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-7da429ea24.min.js.LICENSE.txt → bundle-22b3c87b82.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7556-69f8cb3b20-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/components/emoji-text/emoji-text.scss","file:///app/packages/libs/shared/src/components/emoji-text/EmojiText.tsx","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/components/resource-thumbnail/resource-thumbnail.scss","file:///app/packages/libs/shared/src/components/resource-thumbnail/ResourceThumbnail.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","file:///app/packages/libs/shared/src/components/feedback-form/feedback-form.scss","file:///app/packages/libs/shared/src/components/feedback-form/FeedbackForm.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetThemingConstants.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/onboarding-steps/onboarding-steps-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/utils/markdown-helper/MarkdownHelper.ts","file:///app/packages/libs/shared/src/utils/markdown-helper/markdown-helper.scss","file:///app/packages/libs/shared/src/components/expandable-question/expandable-question.scss","file:///app/packages/libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","file:///app/packages/libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/subject-thumbnail-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/constants/WidgetTemplateConfig.ts","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/widget-container-view.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/resource-widget-item/ResourceWidgetItem.tsx","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/utils/ResourceHelper.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <> </>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingPathway, OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, CurrentUser, PlaylistCollection, Presentation, User } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { PlaylistCollectionIdentifier } from '../../playlists/interfaces';\n\nexport interface GetPathwayOptions {\n jobTitleOverride?: JobTitles;\n preferredPresentationOverride?: Presentation;\n}\n\nexport function useOnboardingPathway(appLinks: OnboardingScreenAppLinks) {\n const [ hasPlaylist, setHasPlaylist ] = useViewModel<boolean>('has:playlist', null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n\n const presentations = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Subject)\n );\n const preferredPresentation = Flight.useBasicFetch<Presentation>(\n ClassificationRequests.presentation(PresentationType.Subject)\n );\n const curriculums = Flight.useBasicFetch<Presentation[]>(\n ClassificationRequests.availablePresentations(PresentationType.Curriculum)\n );\n const playlists = Flight.useBasicFetch<PlaylistCollection>(\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier())\n );\n const preferredSubjects = Flight.useBasicFetch<Classification[]>(\n PreferenceRequests.mySubjectPreferences()\n );\n const { hasPermissions } = usePermissions();\n\n React.useEffect(() => {\n if (!playlists.hasCompleted)\n return;\n\n if (hasPlaylist !== !!playlists.data?.data?.length)\n setHasPlaylist(!!playlists.data?.data?.length);\n }, [playlists.hasCompleted]);\n\n const hasLoadedPathway = (\n currentUser.hasCompleted &&\n user.hasCompleted &&\n presentations.hasCompleted &&\n curriculums.hasCompleted &&\n preferredPresentation.hasCompleted &&\n playlists.hasCompleted &&\n preferredSubjects.hasCompleted &&\n hasPlaylist !== null\n );\n\n const { userSettings } = useSettings(null);\n\n function getPathway(options: GetPathwayOptions = {}): OnboardingPathway {\n const jobTitle = options.jobTitleOverride || user.data?.userProfile?.metadata?.jobTitle;\n const presentation = options.preferredPresentationOverride || preferredPresentation.data;\n\n if (!hasLoadedPathway) {\n return {\n screens: {},\n currentScreen: null,\n totalScreens: 0,\n totalScreensInProgressBar: 0,\n hasCompletedAllSteps: false\n };\n }\n\n return OnboardingPathwayHelper.getOnboardingPathway({\n jobTitle,\n userSettings: userSettings.data,\n presentations: presentations.data,\n curriculums: curriculums.data,\n preferredSubjects: preferredSubjects.data,\n preferredPresentation: presentation,\n appLink: ContextService.getCurrentRoute().appLink,\n appLinks,\n masterUser: user.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"emoji\":\"d86p2\"};","import React from 'react';\n\nimport styles from './emoji-text.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span> </span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'> <Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} aria-errormessage={`${fieldProps.name}Error`} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback id={`${fieldProps.name}Error`} type='invalid' role='status'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n \n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n \n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small;\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large'\n}\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = size === ProgressCircleSize.Large ? CIRCLE_WIDTH_LG : CIRCLE_WIDTH;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"FFgf3\",\"imageTypeResource\":\"z4O5p\",\"fallBackImage\":\"Xy4zX\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { Link, Resource } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { BaseImage } from '../image/BaseImage';\n\nimport styles from './resource-thumbnail.scss';\n\n// Used for both PDFs and Links where we don't know the image ratio\nconst DYNAMIC_RATIO_IMAGE_OPTIONS: ImageOptions = {\n width: 200,\n resizeType: ResizeType.Cover\n};\n\nfunction getThumbnailUrl(\n imageCdnUrl: string,\n resource: Resource | Link,\n dynamicRatioImageOptions: ImageOptions = DYNAMIC_RATIO_IMAGE_OPTIONS\n): string {\n const imageType = getImageType(resource);\n\n // Use the thumbnail if defined\n if ('thumbnail' in resource && resource.thumbnail?.url)\n return ImageHelper.createUrl(resource.thumbnail?.url, { ...dynamicRatioImageOptions });\n \n const previewUrl = UrlHelper.safeUrlConcat(imageCdnUrl, '/v1/previews');\n\n if (!MasterTypeHelper.isResource(resource))\n return ImageHelper.createResourceImage(previewUrl, resource.url, { ...dynamicRatioImageOptions });\n\n if (imageType === ImageType.Pdf) {\n return resource.metadata.type === ResourceFileType.Pdf\n ? ImageHelper.createResourceImage(previewUrl, resource.url, { ...dynamicRatioImageOptions })\n : ImageHelper.createResourceImage(previewUrl, resource.pdf?.url, { ...dynamicRatioImageOptions });\n }\n\n if (resource.metadata.type !== ResourceFileType.Zip)\n return ImageHelper.createUrl(resource.url, { size: ImageSize.Medium, resizeType: ResizeType.Cover });\n\n return '/images/zip-resource.png';\n}\n\nfunction getImageType(resource: Resource | Link): ImageType {\n if (!MasterTypeHelper.isResource(resource))\n return ImageType.Link;\n\n if (resource.metadata.type === ResourceFileType.Pdf || resource.pdf?.url)\n return ImageType.Pdf;\n\n return ImageType.Thumbnails;\n}\n\ninterface ResourceThumbnailProps {\n imageCdnUrl: string;\n resource: Resource | Link;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nexport function ResourceThumbnail(props: ResourceThumbnailProps): JSX.Element {\n let metadata = null;\n let rotation = 0;\n\n if (MasterTypeHelper.isResource(props.resource)) {\n metadata = props.resource.metadata;\n rotation = props.resource.thumbnail?.metadata?.rotation ?? 0;\n }\n\n const thumbnailUrl = getThumbnailUrl(props.imageCdnUrl, props.resource, props.dynamicRatioImageOptions);\n\n return (\n <BaseImage\n data={thumbnailUrl}\n imageType={getImageType(props.resource)}\n imageStyle={{ transform: `rotate(${rotation}deg)` }}\n alt={props.resource.name}\n errorFallbackImageSrc={props.imageErrorFallbackUrl}\n errorFallbackImageClassName={styles.fallBackImage}\n imageClassName={metadata?.type === ResourceFileType.Image ? `${styles.imageTypeResource} ${styles.imageStyle}` : ''}\n preload={props.preloadImage}\n preventLoad={!props.preloadImage}\n >\n </BaseImage>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"TTPKV\",\"avatar\":\"nF3tK\",\"time\":\"lwnZl\"};","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 { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './author-reviewer-widget-template.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface 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 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 blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={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.Small)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svgName={props.type === 'reviewer' ? cvSvgLibrary.Verified : cvSvgLibrary.Edit}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n \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 function AuthorReviewerWidgetTemplate(props: WidgetTemplateProps<AuthorWidgetContent[]>): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className={`partial-loading-background mb-1`} style={{ width: '90%', height: '21px' }} />\n <div className={`partial-loading-background`} style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className={`partial-loading-background mb-1`} style={{ width: '100%', height: '1rem' }} />\n <div className={`partial-loading-background mb-1`} style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className={`partial-loading-background`} style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n imageCdnUrl?: string;\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`rounded-circle w-100 h-100 ${styles.logo} ${colourClass}`}\n style={{ backgroundImage: `url(${logoUrl})` }}\n >\n </div>\n </AppLink>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"logoItem\":\"z6iYz\",\"logo\":\"vt0gx\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function CircleLogoSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n 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 imageCdnUrl: props.imageCdnUrl\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});","// extracted by mini-css-extract-plugin\nexport default {\"promptContainer\":\"A_kCD\",\"text\":\"UFm9h\",\"form\":\"na9Vb\"};","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string; },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch (ex) {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svgName={cvSvgLibrary.ThumbsUp}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svgName={cvSvgLibrary.ThumbsDown}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageContainer\":\"ZMjnx\",\"image\":\"SsxEf\",\"background\":\"MtcB3\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.scss';\n\nexport function CoverFixedPillListXSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {props.name}\n </h2>\n\n <Row 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 <FeedbackForm onSubmit={props.onSubmitFeedback} />\n </>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function CoverFixedTileListWidgetTemplate(props: WidgetTemplateProps<Playlist[]>): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row 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={{\n ...props.analyticsOptions,\n ...analyticsOptions\n }}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { 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\ninterface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: WidgetTemplateProps, content: CoverItemContent[]) {\n if (\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 function CoverSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<CoverItemContent[]>): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function 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 analyticsOptions={props.analyticsOptions}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svgName={cvSvgLibrary.Hamburger} />\n </div>\n <div className={wrapperClassName}>\n <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});","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classification, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { 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.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 function EditableCoverFixedPillListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences\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.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(props.presentation.learningLevel)\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(presentation.learningLevel)\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 ...props.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\n {!!props.description && !isEditing && (\n <p className='text-truncate description mb-2'>{props.description}</p>\n )}\n {isEditing && (\n <p className='description mb-2'><Text namespace={namespace} phrase='editingDescription' /></p>\n )}\n </div>\n\n {(isEditing && canManagePreferences) && (\n <div className={`d-flex align-items-start`}>\n <Button variant='link' className='me-2' onClick={onClickCancel}>\n <Text namespace={namespace} phrase='cancel' />\n </Button>\n <SpinnerButton variant='dark' onClick={onClickSavePreferences} showSpinner={showSpinner} disabled={!hasEditedPreferences}>\n <Text namespace={namespace} phrase='update' />\n </SpinnerButton>\n </div>\n )}\n </div>\n\n <Row 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={props.settings?.hasTopicDirectories}\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.id)}\n getChildAppLinkOptions={() => ({\n middlewareOptions: { presentationSlug: item?.vanitySlug }\n })}\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}","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"K1Ce4\",\"headingContainer\":\"XpN94\"};","// extracted by mini-css-extract-plugin\nexport default {\"dateItemContainer\":\"Hrx2m\",\"container\":\"k2Xse\"};","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`text-decoration-none my-2 mx-1 rounded-3 d-block position-relative`}\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\ntype SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): 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}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.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 function EventIconSlidingListWidgetTemplate(\n props: WidgetTemplateProps<CalendarEvent<CalendarEventContent>[]>\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n 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 analyticsOptions={props.analyticsOptions}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n prefetched\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './video-widget-item.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n subTextAppLink?: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n presentationAudiences?: PresentationAudience[];\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n isPlugin: boolean;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, subTextAppLink, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={video}\n type='expandable'\n appLink={props.getAppLink(video)}\n subTextAppLink={subTextAppLink}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hovering={isHovering}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n isPlugin={props.isPlugin}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"hovering\":\"x7nyG\",\"transition\":\"A7FeL\",\"rowWidth\":\"eo8oY\",\"largeRowWidth\":\"lhqxB\"};","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"eSMIx\",\"partialBanner\":\"layDP\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.scss';\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n 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 setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n seriesAppLink: props.appLinks?.series\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"TzZuL\"};","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { Rating } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.scss';\n\ninterface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return '';\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${styles.rowWidth} ${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svgName={cvSvgLibrary.Search} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(props: WidgetTemplateProps<Rating[]>): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating);\n \n return (\n <>\n <FixedWidget\n 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 analyticsOptions={props.analyticsOptions}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nexport function HeadingWidgetTemplate(props: WidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"iCyo4\",\"bannerContent\":\"cgv_6\",\"cta\":\"BXwH2\"};","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 { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.scss';\n\nexport function HeroBannerWidgetTemplate(props: WidgetTemplateProps<Classification[]>): 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 ...props.analyticsOptions,\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={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}","import React from 'react';\n\nimport styles from '../hero-banner.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import { cvSvgLibrary } from '../utils/SvgHelper';\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, string> = {\n [ButtonIcon.NewWindow]: cvSvgLibrary.NewWindow,\n [ButtonIcon.TopicDirectory]: cvSvgLibrary.Grid,\n [ButtonIcon.TopicNewReleases]: cvSvgLibrary.Sparkle,\n [ButtonIcon.CuratedTopic]: cvSvgLibrary.Rectangles\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","// extracted by mini-css-extract-plugin\nexport default {\"cta\":\"nA9th\",\"banner\":\"b5ljD\",\"bannerImage\":\"dj_1H\",\"blurb\":\"UBcVE\",\"presentations\":\"fGBlR\",\"bannerContent\":\"lkPfM\"};","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svgName={cvSvgLibrary.NewWindow} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"MQAsk\",\"bannerImage\":\"Sk9ox\"};","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 { WidgetMetadata } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetMetadata['cta'];\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 svgName={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\ninterface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetMetadata['cta'];\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 { 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 { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <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}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(props: WidgetTemplateProps<Presentation[]>): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\n\nexport function HeroBannerSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[] | Presentation[]>\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n case WidgetTypeId.Presentations:\n return <PresentationsHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Presentation[]>)} />;\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...(props as WidgetTemplateProps<Classification[]>)} />;\n }\n}","import React from 'react';\n\nimport styles from '../hero-banner-small.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}","import React from 'react';\n\nimport { 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 { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport function HeroBlockColourSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): 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 ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n 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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { 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 { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport function HeroThumbnailSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n 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: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, OnboardingDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { OnboardingScreenConfigs } from 'libs/shared/apps/onboarding/constants/OnboardingScreenConfigs';\nimport { useOnboardingPathway } from 'libs/shared/apps/onboarding/hooks/useOnboardingPathway';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { EntitySetting } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './onboarding-steps-widget.scss';\n\nconst namespace = 'widgets.onboardingSteps';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDescription(\n currentScreen: OnboardingScreenId,\n currentStepNumber: number,\n totalSteps: number,\n isKdm: boolean\n): string {\n const screenConfig = OnboardingScreenConfigs[currentScreen];\n\n if (currentStepNumber === totalSteps)\n return `${getPhrase('lastStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n if (currentStepNumber === 1)\n return `${getPhrase('firstStepDescriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n\n return `${getPhrase('descriptionPrefix')} ${screenConfig?.getWidgetDescription(isKdm)}`;\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: WidgetTemplateProps<EntitySetting<boolean>[]>\n): JSX.Element {\n const { getPathway, hasLoadedPathway } = useOnboardingPathway(props.appLinks?.onboardingAppLinks?.() ?? {});\n\n const pathway = hasLoadedPathway && getPathway();\n const isKdm = UserHelper.isKDM(props.jobTitle);\n\n function hideWidget(): boolean {\n if (props.isPreviewing)\n return false;\n\n if (!hasLoadedPathway)\n return true;\n\n if (props.settings?.hasCompletedOnboardingV2 || !props.settings?.hasOnboardingV2)\n return true;\n\n if (!props.hasPermissions(PermissionName.ViewOnboarding))\n return true;\n\n if (pathway.hasCompletedAllSteps)\n return true;\n\n return false;\n }\n\n if (hideWidget())\n return <div className='mb-n3' />;\n\n function getAnalyticsPayload() {\n if (props.isPreviewing)\n return {};\n\n const screenConfig = OnboardingScreenConfigs[pathway.currentScreen];\n const currentNode = pathway.screens[pathway.currentScreen];\n const nextScreenId = currentNode?.next;\n const previousScreenId = currentNode?.previous;\n\n return {\n currentScreen: screenConfig?.id,\n nextScreen: nextScreenId,\n previousScreen: previousScreenId,\n progress: OnboardingPathwayHelper.getProgress(pathway),\n ...OnboardingPathwayHelper.getOnboardingScreenStates(pathway)\n };\n }\n\n const analyticsData = getAnalyticsPayload();\n\n function getProgress() {\n if (props.isPreviewing) {\n return {\n overallPercentage: 75,\n totalScreens: 8,\n currentStepNumber: 6\n };\n }\n\n const progress = OnboardingPathwayHelper.getProgress(pathway);\n\n if (progress.overallPercentage === 0) {\n return {\n ...progress,\n // Never starting the user at 0%\n overallPercentage: 10\n };\n }\n\n return progress;\n }\n\n const { overallPercentage, totalScreens, currentStepNumber } = getProgress();\n\n return (\n <div className={`rounded-3 bg-light-yellow border border-2 border-dark position-relative d-flex align-items-center ${styles.container}`}>\n <div className={`${styles.leftPanel}`}>\n <div className={styles.percentageContainer}>\n <PercentageIndicator\n percentage={Math.round(overallPercentage) / 100}\n layout={PercentageIndicatorLayout.LabelInside}\n scoreThresholds={{\n HIGH: 0.75,\n MODERATE: 0\n }}\n />\n </div>\n\n <div>\n <h2 className='h4'>\n {props.isPreviewing\n ? OnboardingScreenConfigs['select-videos']?.getWidgetHeading(isKdm)\n : OnboardingScreenConfigs[pathway.currentScreen]?.getWidgetHeading(isKdm)}\n </h2>\n <div className={styles.descriptionContainer}>\n <SvgContainer svgName={cvSvgLibrary.ArrowRight} className='svg-container me-1' />\n <p className={styles.description}>\n {getDescription(\n props.isPreviewing ? 'select-videos' : pathway.currentScreen,\n currentStepNumber,\n totalScreens,\n isKdm\n )}\n </p>\n </div>\n </div>\n </div>\n\n <div\n className={`align-items-center justify-content-end h-100 ${styles.rightPanel}`}\n style={{ backgroundImage: `url('${props.imageUrls?.onboardingTeacherBackground}')` }}\n >\n <AppLink\n appLink={props.appLinks?.onboardingStep?.(pathway.currentScreen)}\n className={`btn btn-dark btn-lg ${styles.button}`}\n analyticsData={analyticsData}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.User,\n location: LocationContext.OnboardingStepsWidget,\n descriptor: OnboardingDescriptor.FinishPersonalising\n }}\n >\n <Text namespace={namespace} phrase='completeSetup' />\n </AppLink>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"leftPanel\":\"zmH98\",\"rightPanel\":\"w05om\",\"description\":\"ypP5M\",\"container\":\"QU4re\",\"button\":\"CHWcH\",\"descriptionContainer\":\"dTKo5\",\"percentageContainer\":\"T9LAC\"};","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\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}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: WidgetTemplateProps<VideoWidgetTemplateContent>\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\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 setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n yearGroups: props.yearGroups,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n subTextType: props.subTextType,\n isPlugin: props.isPlugin,\n getClassroomGuideAppLink: props.appLinks?.classroomGuide,\n getResourceGuidanceAppLink: props.appLinks?.resourceGuidance,\n getInteractiveGuidanceAppLink: props.appLinks?.interactiveGuidance,\n showNewVideoIndicator: props.settings?.hasTopicDirectories\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={\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 />\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}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem, PopoutVideoWidgetItemProps } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: WidgetTemplateProps<VideoWidgetTemplateContent>\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <FixedWidget<PopoutVideoWidgetItemProps>\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 setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n presentationAudiences: props.audiences,\n getSubTextAppLink: props.appLinks?.subText,\n imageCdnUrl: props.imageCdnUrl,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n yearGroups: props.yearGroups,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n companyLogoFallbackUrl: props.companyLogoFallbackUrl,\n subTextType: props.subTextType,\n preventPopout: props.preventPopout,\n isPlugin: props.isPlugin,\n getClassroomGuideAppLink: props.appLinks?.classroomGuide,\n getResourceGuidanceAppLink: props.appLinks?.resourceGuidance,\n getInteractiveGuidanceAppLink: props.appLinks?.interactiveGuidance,\n showNewVideoIndicator: props.settings?.hasTopicDirectories\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={\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 />\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"largeSeriesItem\":\"HZ00X\",\"smallSeriesItem\":\"PQ2sv\",\"partialLoading\":\"hMoHO\"};","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (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};","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n 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}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n 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 prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"slidingSubjectSmall\":\"fgIje\",\"slidingSubjectLarge\":\"CJwKL\",\"heading\":\"P16Yg\",\"posterContainer\":\"VtrLt\",\"partialLoading\":\"IgCcl\",\"labelContainer\":\"ujwlj\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem, TallSubjectWidgetItemProps } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function PosterSlidingListMediumWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget<TallSubjectWidgetItemProps>\n 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 analyticsOptions={props.analyticsOptions}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: WidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: WidgetTemplateProps<Classification[]>\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n 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 analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, WidgetType } from 'libs/shared/interfaces';\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <div>\n <FixedWidget\n 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 analyticsOptions={props.analyticsOptions}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import * as marked from 'marked';\n\nimport styles from './markdown-helper.scss';\n\nconst MARKDOWN_LINK_CLASS = 'markdown-link';\n\nexport const MarkdownHelper = {\n isLink(element: HTMLElement): boolean {\n return element.classList.contains(MARKDOWN_LINK_CLASS);\n },\n\n getSeoWidgetRenderer() {\n const Renderer = new marked.Renderer();\n\n // Open links in a new tab\n Renderer.link = function(href: string, title: string, text: string) {\n return `<a href=\"${href}\" target=\"_blank\" class=\"info-link ${MARKDOWN_LINK_CLASS}\">${text}</a>`;\n };\n\n Renderer.list = function(body: string) {\n return `<ul class=\"${styles.ul}\">${body}</ul>`;\n };\n\n return Renderer;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"ul\":\"TIGbB\"};","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"r4X_X\",\"partialQuestion\":\"aE9qQ\",\"description\":\"dVLkj\"};","import React from 'react';\nimport * as marked from 'marked';\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 { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './expandable-question.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\n const [ markdown, setMarkdown ] = React.useState(\n marked(props.answer, { renderer: MarkdownHelper.getSeoWidgetRenderer() })\n );\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 function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(props.answer || '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current)\n return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.question || !markdown)\n return <></>;\n\n return (\n <DivButton className={`${styles.question} rounded-3`} onClick={onToggleExpander}>\n <div className='pb-2'>\n <div className='float-end rounded-circle bg-white'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div\n className={styles.description}\n style={{ height }}\n >\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\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\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nexport function QuestionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): 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 analyticsOptions={props.analyticsOptions}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"G1OXf\",\"padding\":\"Jg3am\",\"partialQuestion\":\"tWUKI\",\"description\":\"z5LRc\"};","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}","import React from 'react';\nimport * as marked from 'marked';\n\nimport { 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 { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { Faq } from 'libs/shared/interfaces';\nimport { MarkdownHelper } from 'libs/shared/utils/markdown-helper/MarkdownHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { WidgetTemplateProps } from '../../WidgetProps';\n\nimport styles from './question-accordion-widget-template.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ 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(marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() }));\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (MarkdownHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n const newMarkdown = marked(props.faq?.answer ?? '', { renderer: MarkdownHelper.getSeoWidgetRenderer() });\n\n if (markdown === newMarkdown)\n return;\n\n if (markdown && isExpanded)\n collapse();\n\n setMarkdown(newMarkdown);\n }, [props.faq?.answer]);\n\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current)\n return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n return (\n <DivButton onClick={onToggleExpander} className={`${styles.question} rounded-2`}>\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svgName={isExpanded ? cvSvgLibrary.Minus : cvSvgLibrary.Plus} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal'>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n >\n <p\n className={`mb-0 py-1`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n\nexport function QuestionAccordionWidgetTemplate(props: WidgetTemplateProps<Faq[]>): JSX.Element {\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.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}","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}","import React from 'react';\n\nimport { 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 { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(\n props: WidgetTemplateProps<VideoWidgetTemplateContent>\n): 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 subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n yearGroups={props.yearGroups}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getInteractiveGuidanceAppLink={props.appLinks?.interactiveGuidance}\n getResourceGuidanceAppLink={props.appLinks?.resourceGuidance}\n getClassroomGuideAppLink={props.appLinks?.classroomGuide}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"OZATG\",\"container\":\"hcAU2\",\"large\":\"Tbieu\",\"small\":\"mGGrd\",\"content\":\"VtzxT\",\"top\":\"jrY7R\",\"title\":\"yAgR6\",\"description\":\"RjJ7O\",\"cover\":\"TJ7Sl\",\"button\":\"hGi43\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './subject-thumbnail-widget-item.scss';\n\nconst namespace = 'shared.subjectThumbnailWidgetItem';\n\ninterface SubjectWidgetContentProps extends SubjectThumbnailWidgetItemProps {}\n\nfunction SubjectWidgetContent(props: SubjectWidgetContentProps): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.data.cover?.url, { size: ImageSize.Small });\n const thumbnailUrl = ImageHelper.createUrl(props.data.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = props.data.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n return (\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container} ${props.isLarge ? styles.large : styles.small}`}\n style={style}\n >\n <div className={`${styles.content} ${props.isLarge ? '' : 'justify-content-center'}`}>\n <div className={`${styles.top}`}>\n <p className={`${styles.title} h3 text-shadow ${props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'}`} title={props.data.name}>{props.data.name}</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={`${!props.appLink && 'cursor-default'} btn btn-outline-dark`}>\n {LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!thumbnailUrl && !!coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface SubjectThumbnailWidgetItemProps {\n data: Classification;\n appLink?: Core.AppLink;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction SubjectThumbnailWidgetItem(props: SubjectThumbnailWidgetItemProps): JSX.Element {\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name,\n presentationId: props.data?.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SubjectWidgetContent {...props} />\n </AppLink>\n );\n\n return <SubjectWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(SubjectThumbnailWidgetItem);\n\nexport { Memoized as SubjectThumbnailWidgetItem };","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader\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 <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n isLarge\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"partialThumbnail\":\"HwejH\",\"row\":\"hk2Ed\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.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};","// extracted by mini-css-extract-plugin\nexport default {\"guidance\":\"uCRU1\",\"responsiveGuidance\":\"iwav4\"};","import React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.scss';\n\ntype VideoTemplateProps = WidgetTemplateProps & {\n video: VideoTypes;\n isPlugin: boolean;\n};\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(props: VideoTemplateProps): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n const subTextAppLink = VideoHelper.isVideo(props.video) && props.appLinks?.subText?.(props.video);\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n isPlugin={props.isPlugin}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n subTextAppLink={subTextAppLink}\n yearGroups={props.yearGroups}\n subTextType={props.subTextType}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n getClassroomGuideAppLink={props.appLinks?.classroomGuide}\n getResourceGuidanceAppLink={props.appLinks?.resourceGuidance}\n getInteractiveGuidanceAppLink={props.appLinks?.interactiveGuidance}\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}","import React from 'react';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: WidgetTemplateProps<VideoWidgetTemplateContent>\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","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"KItVW\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectThumbnailWidgetItem } from 'libs/shared/components/widgets/items/subject-thumbnail-widget-item/SubjectThumbnailWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function ThumbnailFixedListSmallWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n function getContent(): Classification[] {\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 />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map(c => {\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <SubjectThumbnailWidgetItem\n data={c}\n appLink={props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"ymfwY\",\"container\":\"EkoYD\",\"content\":\"SSmWX\",\"top\":\"vEXH2\",\"title\":\"bMbF2\",\"description\":\"gDFxm\"};","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { 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 { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.scss';\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: WidgetTemplateProps<VideoWidgetTemplateContent>): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef();\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n });\n\n const 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 subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n isPlugin={props.isPlugin}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.subTextType}\n video={video}\n appLink={props.appLinks?.subText?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.yearGroups}\n textClassName='h4'\n showNewVideoIndicator={showNewVideoIndicator}\n headingClassName='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n getClassroomGuideAppLink={props.appLinks?.classroomGuide}\n getResourceGuidanceAppLink={props.appLinks?.resourceGuidance}\n getInteractiveGuidanceAppLink={props.appLinks?.interactiveGuidance}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n />\n )}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"RmYET\",\"guidance\":\"EQXKD\",\"responsiveGuidance\":\"RoK8y\",\"seriesTitleBox\":\"zmtsM\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n 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 setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n return (\n <FixedWidget\n 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 setFavourite: props.setFavourite,\n canFavourite: props.canFavourite\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Series, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-widget-item-v2.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n getSubTextAppLink: (series: Series) => Core.AppLink;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n presentationAudiences: PresentationAudience[];\n subTextType: VideoSubTextType;\n imageCdnUrl: string;\n isPlugin: boolean;\n}\n\nexport const VideoWidgetItemV2 = React.memo(function(props: VideoWidgetItemV2Props): JSX.Element {\n const videoAudiences = props.data?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${styles.rowWidth}`}>\n <VideoThumbnail\n video={props.data}\n type='static'\n appLink={props.getAppLink(props.data)}\n subTextAppLink={VideoHelper.isVideo(props.data) && props.getSubTextAppLink?.(props.data.series)}\n imageOptions={{ size: props.thumbnailSize }}\n preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n subTextType={props.subTextType}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n isPlugin={props.isPlugin}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"YY2CD\"};","import React from 'react';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Resource, Video, WidgetType } from 'libs/shared/interfaces';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ResourceWidgetItem, ResourceWidgetItemProps } from '../../../items/resource-widget-item/ResourceWidgetItem';\nimport { VideoWidgetItemV2, VideoWidgetItemV2Props } from '../../../items/video-widget-item/v2/VideoWidgetItemV2';\n\ntype MultimediaWidgetItemProps = VideoWidgetItemV2Props & ResourceWidgetItemProps;\n\nfunction MultimediaWidgetItem(props: MultimediaWidgetItemProps): JSX.Element {\n if (VideoHelper.isVideoType(props.data)) {\n return <VideoWidgetItemV2 {...props} />;\n }\n\n function onClickDownload(e: React.MouseEvent<HTMLElement>, 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 function ThumbnailSlidingListSmallV2WidgetTemplate(props: WidgetTemplateProps<Video[]>): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\n return (\n <FixedWidget<MultimediaWidgetItemProps>\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 extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n getSubTextAppLink: props.appLinks?.series,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n subTextType: 'series',\n isPlugin: props.isPlugin\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { Company, Video } from 'libs/shared/interfaces';\n\nexport function ThumbnailVerticalListWidgetTemplate(props: WidgetTemplateProps<Video[]>) {\n return (\n <>\n <WidgetHeader\n name={!props.metadata.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && props.description}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n getSubTextAppLink={(company: Company) => props.appLinks?.company?.(company)}\n hasPermissions={props.hasPermissions}\n subTextType={props.subTextType}\n getPreviewQuestionsAppLink={() => null}\n presentationAudiences={props.audiences}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.appLinks?.classroomGuide}\n getResourceGuidanceAppLink={props.appLinks?.resourceGuidance}\n getInteractiveGuidanceAppLink={props.appLinks?.interactiveGuidance}\n />\n </>\n );\n}","import { 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 { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { 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 { OnboardingStepsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/onboarding-steps/OnboardingStepsWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { 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 { 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 { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { 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 { PartialWidgetTemplateProps, WidgetTemplateProps } 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 { DashboardTargetType } from 'libs/shared/interfaces';\nimport { cvSvgLibrary, SvgIcon } from 'libs/shared/utils/SvgHelper';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: WidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean,\n className: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailHeroMedia,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListMedium,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePosterSlidingListSmall,\n predicate: ({ targetType, 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 ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFeaturedMedia,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverFixedPillListLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateStatsCoverFixedPillListLarge,\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: cvSvgLibrary.WidgetTemplateCoverFixedPillListXSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCoverSlidingPillListSmall,\n predicate: ({ targetType, 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: cvSvgLibrary.WidgetTemplateCoverFixedTileList,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateFeaturedThumbnailSlidingList,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBanner,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.OnboardingSteps]: {\n getComponent: () => OnboardingStepsWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateOnboardingSteps,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBannerSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroThumbnailSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeroBlockColourSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationVideos\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListXLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEditableCoverFixedPillListSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateHeading,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateAuthorReviewer,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestion,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateQuestionAccordion,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailFixedListMediaLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListLarge,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplatePopoutThumbnailSlidingListSmall,\n predicate: ({ targetType, product, 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 ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: cvSvgLibrary.WidgetTemplateFilterSlidingPillListSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateCircleLogoSlidingList,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateEventIconSlidingList,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailVerticalList,\n predicate: ({ targetType, product }) => {\n if (!(product === ProductId.StreamableLearning)) return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListSmall,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: cvSvgLibrary.WidgetTemplateThumbnailSlidingListLarge,\n predicate: () => false,\n className: ''\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"details\":\"KjaI4\"};","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeroThumbnail\":\"P3cF6\",\"partialVideoTitleText\":\"ZRdlu\",\"partialDescription\":\"MoPit\",\"details\":\"J5CAD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\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}","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}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\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}","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}","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.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}","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}","import React from 'react';\n\nimport { 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}","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.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}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"pRXSM\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\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} lg={4} md={6} sm={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"subjectItem\":\"SNBRD\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className={`position-relative mb-2`}>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLoadingHeading\":\"hjdMb\"};","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n \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}","import React from 'react';\n\nimport styles from '../question-widget-template.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"KGthN\",\"partialQuestion\":\"QrLg2\",\"description\":\"sxdDe\"};","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}","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.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}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"KbaRB\",\"logoWrapper\":\"uVZyX\"};","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\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}","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\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}","// extracted by mini-css-extract-plugin\nexport default {\"anchor\":\"FRyJT\",\"widgetHighlight\":\"e4uXN\",\"blinker\":\"e7d4o\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\ninterface CommonWidgetContainerViewProps extends Omit<WidgetTemplateProps, 'content'> {\n id: string;\n name: string;\n templateId: WidgetTemplate;\n dashboardTarget?: DashboardTargetType;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n}\n\ntype PropsWithFetch = CommonWidgetContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonWidgetContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype Props = PropsWithFetch | PropsWithoutFetch;\n\nexport function WidgetContainerView(props: Props): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content, unfilteredContent } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(video, { ...options, contextId: props.id });\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const PartialTemplate = WidgetTemplateConfig[props.templateId].partialLoading;\n const Template = WidgetTemplateConfig[props.templateId].getComponent(props.widgetTypeId);\n const widgetTemplateClass = WidgetTemplateConfig[props.templateId].className;\n\n if (!showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <div className={props.isScrollToTargetWidget ? `${styles.widgetHighlight} py-2 px-3 rounded-3` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n </div>\n ) : (\n <Template\n {...props}\n appLinks={appLinks}\n content={content}\n unfilteredContent={unfilteredContent}\n preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n highlightOnHover={props.settings?.hasTopicDirectories}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"isNew\":\"KLRzE\",\"newVideos\":\"xozwy\",\"badge\":\"NWZxu\",\"icon\":\"G9W_I\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport styles from './subject-stats-badge.scss';\n\ntype ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n classification: Classification;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n const { dashboardNewVideosCount, childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0)\n return 'new-videos';\n\n return null;\n }\n\n const badgeType = getBadgeType();\n\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {badgeType === 'coming-soon' && (\n <SvgContainer\n svgName={cvSvgLibrary.TimerSmall}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}","import * as 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 { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svgName={cvSvgLibrary.BellFilled}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svgName={cvSvgLibrary.Bell}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className={`h6 mb-0 clamp-2 mt-1`}>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge classification={props.classification} />\n </div>\n </AppLink>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoTypes, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './popout-video-widget-item.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n canFavourite: CanFavouriteFunc;\n setFavourite: FavouriteFunc;\n presentationAudiences: PresentationAudience[];\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n getSubTextAppLink?: (video: Video) => Core.AppLink;\n getInteractiveGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink: (id: string, type: MasterType) => Core.AppLink;\n preventPopout?: boolean;\n isPlugin: boolean;\n showNewVideoIndicator?: boolean;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, getSubTextAppLink, context, thumbnailSize, preloadImage, presentationAudiences } = props;\n \n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const breakpoints = useBreakpoints();\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div className={`px-1 flex-shrink-0 position-relative ${width}`}>\n <VideoThumbnail\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n video={video}\n appLink={props.getAppLink(video)}\n subTextAppLink={VideoHelper.isVideo(video) && getSubTextAppLink?.(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n canFavourite={props.canFavourite}\n setFavourite={props.setFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n yearGroups={props.yearGroups}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n isPlugin={props.isPlugin}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n showNewVideoIndicator={props.showNewVideoIndicator}\n />\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"JSM4l\",\"largeRowWidth\":\"YYpNz\"};","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"I9E5O\",\"item\":\"tqUFn\",\"dashboard\":\"o7j7p\",\"playPage\":\"V2RwX\",\"aspectRatio\":\"OnJDH\",\"outerContainer\":\"CIFy7\",\"innerContainer\":\"oUZPD\",\"actions\":\"jzGAm\",\"titleBelow\":\"Cpjs3\",\"thumbnailContainer\":\"EDiGi\",\"titleAbove\":\"e9ejn\",\"teacherPack\":\"_tdVE\",\"text\":\"g5NWS\",\"hoverState\":\"xRYhX\",\"atomGuide\":\"X39wU\",\"studentActivity\":\"X9pMl\",\"additionalMaterials\":\"qRVUo\",\"userUploaded\":\"_18JaV\",\"imageTypeResource\":\"KYtZL\",\"download\":\"fbb_e\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nfunction useCanPreview(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (e: React.MouseEvent<HTMLElement>, resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n}\n\nResourceTile.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTile(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => props.onClickDownload(e, props.data as Resource)}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemProps extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItem = React.memo(function(props: ResourceWidgetItemProps): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreview(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTile {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTile {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTile {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTile {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { ResourceType } from 'libs/shared/interfaces';\n\nexport const ResourceHelper = {\n getResourceTypeName(resourceType: ResourceType): string {\n switch (resourceType) {\n case 'additional-materials':\n return 'Additional Materials';\n\n case 'atom-guide':\n return 'ATOM Guide';\n\n case 'teacher-pack':\n return 'Teacher Pack';\n\n case 'student-activity':\n return 'Student Activity';\n\n default:\n return 'N/A';\n }\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"wzt8R\",\"bellContainer\":\"X7Jgx\",\"bell\":\"HoKe4\",\"followed\":\"Pdmdk\",\"bellOutline\":\"bEQDk\",\"cover\":\"luOU3\",\"fallbackImage\":\"ReXqz\",\"subText\":\"p0kUV\"};"],"names":["GenericCalendarDate","props","AppLink","appLink","getAppLink","className","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","id","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","length","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","EmojiText","emoji","children","namespace","FormButtons","formikProps","canSubmit","variant","disabled","size","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","field","values","fieldName","limit","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","entries","value","useFormikContextWrapper","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","circumference","Math","PI","offset","percentage","style","strokeDasharray","strokeDashoffset","toString","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","customLabel","LabelOnly","LabelBefore","CircleOnly","ProgressCircleSize","CIRCLE_WIDTH","CIRCLE_WIDTH_LG","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","getCircleRadius","width","Large","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","DYNAMIC_RATIO_IMAGE_OPTIONS","resizeType","getImageType","resource","MasterTypeHelper","ResourceFileType","pdf","url","ResourceThumbnail","rotation","thumbnail","thumbnailUrl","imageCdnUrl","dynamicRatioImageOptions","imageType","ImageHelper","previewUrl","UrlHelper","getThumbnailUrl","BaseImage","imageStyle","transform","alt","errorFallbackImageSrc","imageErrorFallbackUrl","errorFallbackImageClassName","imageClassName","preload","preloadImage","preventLoad","PartialVideoList","Array","numVideos","fill","map","_","i","allowBulkActions","PartialVideoItem","breakpoints","useBreakpoints","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","DATE_FORMATTER","PersonCardWrapper","person","blogUrl","ArticleHelper","blogSlug","href","target","AnalyticsHelper","firstName","lastName","imageId","entity","location","actionType","PersonCard","src","bio","dateTime","lastUpdated","DateHelper","datePublished","AuthorReviewerWidgetTemplate","content","reviewer","author","PartialPersonCard","height","CircleLogoWidgetItem","logoUrl","logo","colourClass","getBgColorClass","backgroundImage","CircleLogoSlidingListWidgetTemplate","FixedWidget","description","contents","WidgetContents","collection","childComponent","extraChildComponentProps","prefetched","hideBleedingContent","showHighlight","hideButtons","getChildAppLink","company","FeedbackFormValidationSchema","shape","feedbackInput","max","LanguageService","FeedbackForm","state","setState","alerts","formData","onDone","error","IconButton","autoFocus","rows","placeholder","spellCheck","CoverFixedPillListXSmallWidgetTemplate","classification","coverUrl","cover","sm","lg","onSubmitFeedback","descriptor","CoverFixedTileListWidgetTemplate","WidgetHeader","p","presentationAudiences","audiences","playlist","itemStyle","getTotalVideos","reduce","sum","cur","totalVideos","getSubtitleFromTotalVideos","CoverSlidingPillListSmallWidgetTemplate","extraContent","settings","hasTopicDirectories","backgroundColor","HardCoded","getExtraItem","isClassificationLatestReleasedWidget","DynamicWidget","classificationDirectory","allTopics","classificationLatestReleases","partialLoadingComponent","PartialSubjectWidgetItem","heading","headingAppLink","TopicsHelper","widgetTypeId","WidgetTypeId","templateId","WidgetTemplate","getHeadingAppLink","getSubtitle","undefined","childComponentProps","highlightOnHover","shouldHighlight","EditableSubjectWidgetItem","wrapperClassName","textClassName","multiline","visibility","isDragging","isVisible","dragAttributes","dragListeners","ToggleSwitch","on","onToggleVisibility","tooltipText","canToggle","showStateWhenDisabled","EditableCoverFixedPillListSmallWidgetTemplate","isEditing","setIsEditing","setShowSpinner","WidgetHelper","isPreviewing","preferences","unfilteredContent","isFollowingNothing","every","c","followers","initialPreferences","acc","current","index","preference","hidden","persistedPreferences","setPersistedPreferences","setPreferences","currentSubjects","filter","sort","a","b","showExploreAllTopics","some","getItemIndex","findIndex","newPreferences","hasEditedPreferences","exploreAllSubjectsItem","learningLevel","presentationsSwitchSubjectsItems","availablePresentations","vanitySlug","showPresentationSwitch","canManagePreferences","hasLocalPermissions","DivButton","Button","SpinnerButton","oldPreferences","updatePreferences","then","SubjectWidgetItem","SortableContainerWrapper","ids","getDragOverlay","find","onSortStart","event","s","active","workflowPhase","onSortEnd","over","oldIndex","newIndex","ReorderHelper","reorderedItems","item","vertical","SortableItemWrapper","childProps","showNewVideosCount","discover","getChildAppLinkOptions","middlewareOptions","presentationSlug","presentationId","presentationDescription","CalendarWidgetItem","backgroundSecondary","CalendarDay","isHovering","date","Date","startDate","notCurrentMonth","monthQuery","eventsOnDay","events","sliderStep","hoveredEvent","isMultiEventDate","getBackgroundColor","getIconUrl","hasInitialized","responsiveText","hideDay","SpecialEventWidgetItem","otherProps","colour","startDateTime","endDateTime","icon","getHardCodedEvent","specialEventId","endDate","classificationId","classificationName","getPhrase","EventIconSlidingListWidgetTemplate","widgetItems","contentType","rawOrderedEvents","livestream","localeCompare","now","today","tomorrow","nextWeekStart","nextWeekEnd","thisMonthStart","thisMonthEnd","nextMonthStart","nextMonthEnd","laterMonthStart","laterMonthEnd","eventGroupingMap","Map","addEventToGroup","eventRecord","has","group","currentMergedEvent","get","set","monthLabel","day","mergedEvents","eventGrouping","dateItem","appLinkMonth","appLinkYear","push","getWidgetItems","calendar","calendarMonth","VideoWidgetItem","video","subTextAppLink","context","thumbnailSize","onHover","VideoThumbnail","imageOptions","setFavourite","canFavourite","hovering","companyLogoFallbackUrl","subTextType","isPlugin","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","v","videoType","seriesAppLink","series","limitTotalItems","hideName","RatingWidgetItem","ratingsLength","code","VideoDetailsHelper","S","FilterSlidingPillListSmallWidgetTemplate","maxRating","PresentationLearningLevel","ratings","rating","HeadingWidgetTemplate","HeroBannerWidgetTemplate","ArrayHelper","banner","fallbackBaseUrl","fallbackCategoryName","md","cta","PartialHeroBannerWidgetTemplate","HeadingSize","HeadingColor","ButtonIcon","H1","H2","H3","H4","H5","H6","Dark","White","NewWindow","BUTTON_ICON_MAP","TopicDirectory","TopicNewReleases","CuratedTopic","BOOTSTRAP_CLASS_MAP","BlurbHeroBannerSmallWidgetTemplate","headingSize","theming","headingColor","openInNewTab","HeroBannerButton","ClassificationHeroBannerSmall","ClassificationHeroBannerSmallWidgetTemplate","backgroundSize","PresentationsHeroBannerSmallWidgetTemplate","canView","PermissionName","getPresentationLink","appLinkOptions","presentationName","prefix","slice","HeroBannerSmallWidgetTemplate","PartialHeroBannerSmallWidgetTemplate","HeroBlockColourSmallWidgetTemplate","getCustomCtaAppLink","HeroThumbnailSmallWidgetTemplate","OnboardingStepsWidgetTemplate","onboardingAppLinks","pathway","isKdm","UserHelper","hasCompletedOnboardingV2","hasOnboardingV2","hideWidget","screenConfig","OnboardingScreenConfigs","currentNode","nextScreenId","next","previousScreenId","previous","nextScreen","previousScreen","progress","OnboardingPathwayHelper","getAnalyticsPayload","overallPercentage","currentStepNumber","getProgress","getWidgetHeading","totalSteps","getWidgetDescription","getDescription","imageUrls","onboardingTeacherBackground","onboardingStep","PartialWidgetItem","colSize","paddingBottom","PopoutThumbnailSlidingListLargeWidgetTemplate","widgetConfig","WidgetTypeIdConfig","videos","hideWidgetHeading","hideWidgetDescription","PopoutVideoWidgetItem","getSubTextAppLink","subText","yearGroups","hideTitle","hideObjectTitle","hideSeries","hideObjectSeries","showVideoGuidance","VideoHelper","getClassroomGuideAppLink","classroomGuide","getResourceGuidanceAppLink","resourceGuidance","getInteractiveGuidanceAppLink","interactiveGuidance","showNewVideoIndicator","getCollectionAppLink","widgetVideoList","PopoutThumbnailSlidingListSmallWidgetTemplate","preventPopout","SeriesWidgetItem","SeriesTallPoster","hasTableOfContents","PosterSlidingListLargeWidgetTemplate","PartialLoadingItem","PartialTallSubjectWidget","itemCount","items","PartialWidgetHeader","TallSubjectWidgetItem","tallPoster","ImageFallback","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","MARKDOWN_LINK_CLASS","MarkdownHelper","isLink","element","classList","contains","getSeoWidgetRenderer","Renderer","marked","link","list","DEFAULT_HEIGHT","TRANSITION_TIME","ExpandableQuestion","isBot","storage","isExpanded","setIsExpanded","setHeight","shouldClamp","setShouldClamp","answer","renderer","markdown","setMarkdown","timeoutRef","invisibleRef","visibleRef","collapse","window","setTimeout","newMarkdown","clientHeight","question","e","fakeEl","getSelection","document","createElement","innerHTML","appendChild","removeChild","clearTimeout","dangerouslySetInnerHTML","__html","QuestionWidgetTemplate","PartialQuestion","Question","faq","questionIndex","add","QuestionAccordionWidgetTemplate","PartialSubjectStatsWidgetItem","flexBasis","PartialVideoGuidanceTag","PartialVideoGuidance","ThumbnailFeaturedMediaWidgetTemplate","HeroVideo","getVideoAppLink","hideInteractiveBadge","SubjectWidgetContent","isLarge","Memoized","isComingSoon","status","ClassificationStatus","comingSoon","ThumbnailFixedListLargeWidgetTemplate","xl","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","containerRef","mergedAudience","subjectPresentationAudiences","textPosition","ThumbnailTextPosition","audience","hideRating","ThumbnailText","VideoItemGuidance","responsiveClassName","ThumbnailFixedListMediaLargeWidgetTemplate","ThumbnailFixedListSmallWidgetTemplate","ThumbnailFixedListXLargeWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","canNavigate","VideoSubText","VideoTitle","headingClassName","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","VideoWidgetItemV2","videoAudiences","hideDuration","MultimediaWidgetItem","ResourceWidgetItem","R","onClickDownload","preventDefault","stopPropagation","DownloadHelper","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","resourceThumbnailFallbackImageUrl","titlePosition","actionBehaviour","parentId","ThumbnailVerticalListWidgetTemplate","VideoList","getPreviewQuestionsAppLink","WidgetTemplateConfig","getComponent","partialLoading","predicate","targetType","includes","idx","product","ProductId","widgetId","CoverFixedPillListLargeWidgetTemplate","StatsCoverFixedPillListLargeWidgetTemplate","itemClassName","hideDescription","hideHeading","PARTIAL_SUBJECTS","maxWidth","isTopLevelClassification","itemsCount","totalItems","xxl","WidgetContainerView","scrollToRef","shouldLazyLoad","lazyLoad","prevent","partialLoadingRef","inView","willFetch","getContentRequest","lazyWidget","isEmpty","isArray","isEmptyWidget","shouldHideWidget","setIsEmpty","isScrollToTargetWidget","scrollIntoView","behavior","block","contextId","dashboardTarget","widgetIndex","widgetName","showPartialLoadingComponent","PartialTemplate","Template","widgetTemplateClass","el","headingElementRef","SubjectStatsBadge","newVideoCount","dashboardNewVideosCount","childDashboardNewVideoCount","badgeType","getBadgeType","baseClass","getBadgeClass","smartCount","getBadgeText","SubjectStatsWidgetItem","hasLoadedImage","setHasLoadedImage","isFollowing","dashboardResourceCount","childDashboardResourceCount","dashboardVideoCount","childDashboardVideoCount","childClassificationCount","videoCount","resourceCount","getSubtext","extraClasses","onLoad","canFollowTopics","onToggleFollowClassification","ResourceTile","isResource","MasterType","resourceType","getColour","containerClass","applyHoverState","getInnerContainerClass","Tooltip","thumbnailContainerClass","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","canPreview","logAction","tileProps","SeoConstants","ScoreThresholdDefaults","ScoreThresholdInsights","downloadRef","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","display","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getResourceTypeName"],"sourceRoot":""}
|