@clickview/lite 0.66.0 → 0.66.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{3213-lite-cb4033f861.chunk.css → 3213-lite-24e5a4e0cf.chunk.css} +1 -1
  3. package/dist/css/{6323-lite-eafd72293e.chunk.css → 6323-lite-7ccecffdd7.chunk.css} +1 -1
  4. package/dist/scripts/{1820-e6bd311eaa-lite.chunk.js → 1820-46c4ab5902-lite.chunk.js} +2 -2
  5. package/dist/scripts/1820-46c4ab5902-lite.chunk.js.map +1 -0
  6. package/dist/scripts/{2564-083fc69568-lite.chunk.js → 2564-a318fce2de-lite.chunk.js} +3 -3
  7. package/dist/scripts/{2564-083fc69568-lite.chunk.js.map → 2564-a318fce2de-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/{3213-6ad828521d-lite.chunk.js → 3213-914780fd39-lite.chunk.js} +1 -1
  9. package/dist/scripts/{3213-6ad828521d-lite.chunk.js.map → 3213-914780fd39-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/{6323-2b357eba10-lite.chunk.js → 6323-7ad35ef07e-lite.chunk.js} +2 -2
  11. package/dist/scripts/{6323-2b357eba10-lite.chunk.js.map → 6323-7ad35ef07e-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/{bundle-f8d76d5c8e.min.js → bundle-6bcf4b37bb.min.js} +3 -3
  13. package/dist/scripts/{bundle-f8d76d5c8e.min.js.map → bundle-6bcf4b37bb.min.js.map} +1 -1
  14. package/package.json +1 -1
  15. package/dist/scripts/1820-e6bd311eaa-lite.chunk.js.map +0 -1
  16. /package/dist/scripts/{2564-083fc69568-lite.chunk.js.LICENSE.txt → 2564-a318fce2de-lite.chunk.js.LICENSE.txt} +0 -0
  17. /package/dist/scripts/{6323-2b357eba10-lite.chunk.js.LICENSE.txt → 6323-7ad35ef07e-lite.chunk.js.LICENSE.txt} +0 -0
  18. /package/dist/scripts/{bundle-f8d76d5c8e.min.js.LICENSE.txt → bundle-6bcf4b37bb.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/6323-2b357eba10-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/hero-video/hero-video.scss","file:///app/packages/libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","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/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.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/series-tall-poster/series-tall-poster.scss","file:///app/packages/libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.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/RatingWidgetItem.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/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/ClassificationHeroBannerSmall.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/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/PartialSeriesList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.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/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/ExpandableQuestion.tsx","file:///app/packages/libs/shared/src/components/expandable-question/expandable-question.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-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/thumbnail-widget-item/ThumbnailWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.scss","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/ThumbnailFixedListMediaLargeWidgetTemplateItem.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/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","file:///app/packages/libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.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/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/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/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/apps/playlists/components/playlist-list/playlist.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["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 { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\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, Customer, 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 const customer = Flight.useBasicFetch<Customer>(\n currentUser.data?.isAuthenticated && CustomerRequests.customer(currentUser.data.customerId)\n );\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 customer.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 customer: customer.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._isClickViewCurated?.value)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._isClickViewCurated?.value)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h5 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h5>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeroThumbnail\":\"z0_Sm\",\"partialSeriesText\":\"xuWtC\",\"partialVideoTitleText\":\"fXYdC\",\"partialBadge\":\"FlUpr\",\"partialDescription\":\"YgWxP\",\"partialSubject\":\"QBKwQ\",\"partialHeading\":\"S__E9\",\"guidance\":\"Ax9h2\",\"responsiveGuidance\":\"s3W_4\",\"description\":\"zejMP\",\"details\":\"MRyVe\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText, VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n subTextAppLink: Core.AppLink;\n hideInteractiveBadge?: boolean;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n newDurationStyle?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n yearGroups: YearGroup[];\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n imageCdnUrl: string;\n isPlugin: boolean;\n showNewVideoIndicator?: boolean;\n titleClassName?: string;\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}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const { video, presentationAudiences, getVideoAppLink, subTextAppLink, hideInteractiveBadge } = props;\n\n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(video)\n });\n\n const containerRef = React.useRef();\n \n if (!video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n appLink={getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n newDurationStyle={props.newDurationStyle}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.subTextType}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n appLink={subTextAppLink}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n yearGroups={props.yearGroups}\n showNewVideoIndicator={props.showNewVideoIndicator}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={video.interactives} />}\n <Badge type={ BadgeType.Rating } data={video.rating} />\n <Badge type={ BadgeType.ProductionYear } data={video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"emoji\":\"d86p2\"};","import React from 'react';\n\nimport styles from './emoji-text.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\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 = ObjectHelper.get(values, props.fieldName as string);\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} 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}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\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 size?: ProgressCircleSize;\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.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\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 ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\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 (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\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 {\"labelContainer\":\"ieonz\",\"hoverActive\":\"vqHCl\",\"mask\":\"qEOPN\",\"largeHoverTitle\":\"ZYApF\",\"smallHoverTitle\":\"qcfHO\",\"description\":\"jnkdI\",\"largeHoverDescription\":\"Uh4gM\",\"hasTableOfContents\":\"RdHkK\",\"smallHoverDescription\":\"TiqqV\"};","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-tall-poster.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n\n {props.mergedAudience\n ? <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/>\n : <Badge type={BadgeType.Rating} data={props.series.rating} className='mt-2' />\n }\n </div>\n\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white text-shadow ${styles.labelContainer}`}>\n {displayAudience\n ? <AudienceLabel audience={mergedAudience} border='white' />\n : <Badge type={BadgeType.Rating} data={props.series.rating} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: Playlist | Series;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\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 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 &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-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 &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","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 { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.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 const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"logoItem\":\"z6iYz\",\"logo\":\"vt0gx\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n appLinks: {\n company: (company: Company) => Core.AppLink;\n }\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\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 { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.scss';\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n }\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`px-1 pb-2 columns-of-five`}>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classificationLatestReleases: (classification: Classification) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget\n ? props.appLinks?.classificationLatestReleases?.(data)\n : props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget\n ? getSubtitleFromTotalVideos\n : undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean;\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing\n ? content.map((c, index) => ({ id: c.id, hidden: true, index }))\n : Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.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 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={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item.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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup;\n startDate: string;\n endDate: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n event: CalendarEvent<CalendarEventContent>;\n label: string;\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month')\n ? DateHelper.format(nextWeekStart, 'MMMM')\n : `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink;\n calendarMonth: (month: string, year?: string) => Core.AppLink;\n livestream: (livestream: Livestream) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n 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';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, CuratedDashboardAppLink, FavouriteFunc, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink;\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n latestReleases: () => Core.AppLink;\n }\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n seriesAppLink: props.appLinks?.series\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\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 { 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}","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"TzZuL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating);\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","// 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 { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}","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 { 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, WidgetCta } 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 interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svgName={cvSvgLibrary.NewWindow} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svgName={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","// 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';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string;\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n \n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}","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 { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink;\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n }\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n };\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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 { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\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 { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\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 interface OnboardingStepsWidgetTemplateProps {\n content: EntitySetting<boolean>[];\n appLinks: {\n onboardingAppLinks: () => OnboardingScreenAppLinks;\n onboardingStep: (step: OnboardingScreenId) => Core.AppLink;\n };\n jobTitle: JobTitles;\n isPreviewing: boolean;\n settings: {\n hasOnboardingV2: boolean;\n hasCompletedOnboardingV2: boolean;\n };\n hasPermissions: HasPermissionsFunc;\n imageUrls: {\n onboardingTeacherBackground: string;\n }\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: OnboardingStepsWidgetTemplateProps\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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n };\n appLinks: {\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n };\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n isPlugin: boolean;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n }\n onClickRemoveItem: (videoId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string): void {\n props.onClickRemoveItem?.(videoId, props.id, props.widgetTypeId);\n }\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.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 onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : ''\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n />\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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\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 { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, Classification, FavouriteFunc, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n watchHistory: () => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n }\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n preventPopout?: boolean;\n isPlugin: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n }\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string): void {\n props.onClickRemoveItem?.(videoId, props.id, props.widgetTypeId);\n }\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 onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : ''\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n />\n );\n}\n","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.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}","// extracted by mini-css-extract-plugin\nexport default {\"largeSeriesItem\":\"HZ00X\",\"smallSeriesItem\":\"PQ2sv\",\"partialLoading\":\"hMoHO\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\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 { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem, 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 interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget<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 />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string;\n text: string;\n appLink: CuratedDashboardAppLink;\n }\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import 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 parse(markdown: string): string {\n if (!markdown)\n return '';\n\n return marked(markdown, {\n renderer: this.getSeoWidgetRenderer(),\n breaks: true\n });\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, ordered: boolean) {\n const tagName = ordered ? 'ol' : 'ul';\n\n return `<${tagName} class=\"${styles.list}\">${body}</${tagName}>`;\n };\n\n Renderer.heading = function(text: string, level: 1 | 2 | 3 | 4 | 5 | 6) {\n const headingClassMap = {\n 1: 'h1',\n 2: 'h2',\n 3: 'h6',\n 4: 'h6',\n 5: 'h6',\n 6: 'h6'\n };\n\n return `<h${level} class=\"${headingClassMap[level]}\">${text}</h${level}>`;\n };\n\n return Renderer;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"LTJss\"};","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { 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(MarkdownHelper.parse(props.answer));\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 = MarkdownHelper.parse(props.answer);\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}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"r4X_X\",\"partialQuestion\":\"aE9qQ\",\"description\":\"dVLkj\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}","// 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';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { 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 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 \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(MarkdownHelper.parse(props.faq.answer));\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 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 = MarkdownHelper.parse(props.faq?.answer);\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 interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n };\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n yearGroups: YearGroup[];\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n imageCdnUrl: string;\n isPlugin: boolean;\n settings: {\n hasTopicDirectories: boolean\n }\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={props.analyticsData}\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}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={`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 {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p className={`${styles.title} h3 text-shadow ${(props.isLarge || props.data?.preTitle) ? '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 {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"YtffT\",\"container\":\"gKcbE\",\"large\":\"Ldth1\",\"small\":\"z6ZxE\",\"content\":\"aOotU\",\"top\":\"w5WZ1\",\"title\":\"bSXFz\",\"preTitle\":\"ReAEa\",\"description\":\"XjSFw\",\"cover\":\"liG0R\",\"button\":\"c28_J\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","// 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};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n companyLogoFallbackUrl: string;\n yearGroups: YearGroup[];\n subTextType: VideoSubTextType;\n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): 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={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}","// extracted by mini-css-extract-plugin\nexport default {\"guidance\":\"uCRU1\",\"responsiveGuidance\":\"iwav4\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\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 { MasterType } from 'libs/shared/enums/MasterType';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n companyLogoFallbackUrl: string;\n yearGroups: YearGroup[];\n subTextType: VideoSubTextType;\n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"KItVW\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small })\n },\n appLink: options.appLinks?.company?.(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n company: (playlist: Company) => Core.AppLink;\n },\n seeMoreLink: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map(c => {\n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: props.analyticsData,\n availablePresentations: props.availablePresentations\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n metadata: {\n cta: WidgetCta\n }\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","// 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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText, VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n companyLogoFallbackUrl: string;\n isPlugin: boolean;\n subTextType: VideoSubTextType;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n\n appLinks: {\n subText: (video: Video) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): 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 = {\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 showNewVideoIndicator={showNewVideoIndicator}\n titleSize='h4'\n className='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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, FavouriteFunc, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, FavouriteFunc, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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 interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n imageCdnUrl: string;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n isPlugin: boolean;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, Company, FavouriteFunc, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n subTextType: VideoSubTextType;\n isPlugin: boolean;\n audiences: PresentationAudience[];\n canFavourite: CanFavouriteFunc;\n setFavourite: FavouriteFunc;\n companyLogoFallbackUrl: string;\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n company: (company: Company) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n searchSettings: () => Core.AppLink;\n searchHome: (filters?: HashObject) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getSubTextAppLink(video: Video) {\n if (props.subTextType === 'series') {\n return props.appLinks?.series(video?.series);\n }\n\n if (props.subTextType === 'productionCompany') {\n return props.appLinks?.company?.(video);\n }\n }\n\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n \n return (\n <>\n <WidgetHeader\n name={!props.metadata.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n getSubTextAppLink={getSubTextAppLink}\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 canFavourite={props.canFavourite}\n setFavourite={props.setFavourite}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n />\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: {libraryId?: string, sort?: string}) => Core.AppLink;\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(f => {\n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n series: (series: Series) => Core.AppLink,\n },\n \n description: string;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Small\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\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 { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { cvSvgLibrary, SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean,\n className: string;\n}\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 * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: 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 &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../question-widget-template.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","// 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 { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } 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 BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n}\n\ntype ClassificationWidgetContainerViewProps = Omit<AllClassificationWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Classification; }\n\ntype DiscoverWidgetContainerViewProps = Omit<AllDiscoverWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Discover; }\n\ntype CompanyWidgetContainerViewProps = Omit<AllCompanyWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Company; }\n\ntype MoviesAndTvWidgetContainerViewProps = Omit<AllMoviesAndTvWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.MoviesAndTv; }\n\ntype SearchWidgetContainerViewProps = Omit<AllSearchWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Search; }\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const 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 } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\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 function onClickRemoveItem(itemId: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, props.id, props.widgetTypeId);\n }\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: 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 preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n onClickRemoveItem={onClickRemoveItem}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\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 onClickRemoveItem: (videoId: string) => void;\n removeButtonTooltip?: string;\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 onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem) && (() => props.onClickRemoveItem(video.id))}\n removeButtonTooltip={props.removeButtonTooltip}\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});","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\"};","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 {\"playlistItem\":\"CaRJx\",\"playlistItemGradient\":\"BI7p2\",\"playlistMetadata\":\"eDk1l\",\"partialHeading\":\"w4lWh\",\"ownerAvatarContainer\":\"JImqE\"};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","id","customer","customerId","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","length","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","appLink","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","PartialPlaylistList","props","PARTIAL_PLAYLISTS","Array","numItems","className","itemClassName","showHeading","map","p","idx","key","xs","sm","lg","defaultProps","namespace","PlaylistCount","count","playlist","videos","interactives","clips","getCount","Number","isNaN","Text","phrase","smartCount","PlaylistOwnerAvatar","_liteOwner","_isClickViewCurated","value","ClickViewAvatar","toString","url","avatar","Avatar","imageUrl","imageCdnUrl","initials","UserHelper","name","surname","PlaylistItem","ImageHelper","cover","size","resizeType","audiences","subjectPresentationAudiences","mergedAudience","presentationAudiences","showImage","showFallbackImage","bgColourClassNames","getBgColorClass","itemStyle","analyticsData","analyticsOptions","entity","AppLink","title","contentModifiedDate","LanguageService","timeago","DateHelper","getTitle","BaseImage","alt","ImageFallback","type","showCount","titleClassName","AudienceLabel","audienceLabelClass","audience","border","showOwner","actionType","location","descriptor","PlaylistList","as","extraPlaylistItem","itemContainerClassName","getPlaylistAppLink","itemTitleClassName","HeroVideo","video","getVideoAppLink","subTextAppLink","hideInteractiveBadge","videoAudiences","AnalyticsHelper","VideoHelper","containerRef","Row","Col","md","ref","VideoThumbnail","imageOptions","textPosition","ThumbnailTextPosition","setFavourite","canFavourite","badgePosition","newDurationStyle","hideRating","companyLogoFallbackUrl","subTextType","isPlugin","VideoSubText","VideoItemTitle","titleSize","yearGroups","showNewVideoIndicator","clampLevel","VideoItemActions","BadgeListContainer","Badge","rating","productionYear","description","showVideoGuidance","VideoItemGuidance","getClassroomGuideAppLink","getResourceGuidanceAppLink","getInteractiveGuidanceAppLink","containerClassName","responsiveClassName","EmojiText","emoji","children","FormButtons","formikProps","canSubmit","variant","disabled","showSpinner","isSubmitting","submitText","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","values","field","ObjectHelper","fieldName","limit","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","Spinner","animation","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","tooltipPlacement","tooltipSpanHack","maxLength","errorMessage","role","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","entries","useFormikContextWrapper","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","actions","getFolderActions","DragDropMoveWrapper","draggable","drag","droppable","drop","dropStye","dragStyle","getAppLink","imageType","imageClassName","extraClasses","Actions","actionsDropdownClassName","dropdownToggleSvgSize","PercentageIndicatorLayout","ProgressCircle","circle","radius","r","baseVal","circumference","Math","PI","offset","percentage","style","strokeDasharray","strokeDashoffset","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","customLabel","LabelOnly","LabelBefore","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","DYNAMIC_RATIO_IMAGE_OPTIONS","getImageType","resource","MasterTypeHelper","ResourceFileType","pdf","ResourceThumbnail","rotation","dynamicRatioImageOptions","previewUrl","getThumbnailUrl","imageStyle","transform","errorFallbackImageSrc","imageErrorFallbackUrl","errorFallbackImageClassName","preload","preloadImage","preventLoad","SeriesTallPosterHoverOverlay","isSmall","series","hasTableOfContents","SeriesTallPoster","hoverRef","isHovering","displayAudience","tallPoster","imageClass","BaseCollectionThumbnailTitle","CollectionThumbnailTitle","CollectionThumbnail","firstVideo","collectionVideos","collection","typeId","MasterType","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","subText","preventFocus","showMask","hoverText","hideMask","hideDuration","hideVideoTypeBadge","showVideoCount","TitleSubText","titleAppLink","DATE_FORMATTER","PersonCardWrapper","person","blogUrl","ArticleHelper","blogSlug","href","target","firstName","lastName","imageId","PersonCard","src","bio","dateTime","lastUpdated","datePublished","AuthorReviewerWidgetTemplate","content","reviewer","author","PartialPersonCard","height","CircleLogoWidgetItem","logoUrl","logo","logoBgColor","colour","colourClass","logoStyle","backgroundImage","backgroundColor","CircleLogoSlidingListWidgetTemplate","FixedWidget","contents","WidgetContents","childComponent","extraChildComponentProps","prefetched","hideBleedingContent","showHighlight","hideButtons","getChildAppLink","company","FeedbackFormValidationSchema","shape","feedbackInput","max","FeedbackForm","state","setState","alerts","formData","onDone","error","IconButton","autoFocus","rows","placeholder","spellCheck","CoverFixedPillListXSmallWidgetTemplate","classification","coverUrl","onSubmitFeedback","CoverFixedTileListWidgetTemplate","WidgetHeader","getTotalVideos","reduce","sum","cur","totalVideos","getSubtitleFromTotalVideos","CoverSlidingPillListSmallWidgetTemplate","extraContent","settings","hasTopicDirectories","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","isTertiaryCustomerWithoutExchange","discover","getChildAppLinkOptions","middlewareOptions","presentationSlug","presentationId","presentationDescription","CalendarWidgetItem","theme","backgroundSecondary","CalendarDay","date","Date","startDate","notCurrentMonth","monthQuery","eventsOnDay","events","sliderStep","hoveredEvent","isMultiEventDate","getBackgroundColor","getIconUrl","hasInitialized","responsiveText","hideDay","SpecialEventWidgetItem","otherProps","GenericCalendarDate","month","body","text","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","background","calendar","calendarMonth","VideoWidgetItem","context","thumbnailSize","onHover","hovering","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","v","videoType","seriesAppLink","limitTotalItems","hideName","RatingWidgetItem","ratingsLength","code","VideoDetailsHelper","S","FilterSlidingPillListSmallWidgetTemplate","maxRating","PresentationLearningLevel","ratings","HeadingWidgetTemplate","HeroBannerWidgetTemplate","breakpoints","useBreakpoints","banner","fallbackBaseUrl","fallbackCategoryName","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","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","hideWidgetHeading","hideWidgetDescription","PopoutVideoWidgetItem","getSubTextAppLink","hideTitle","hideObjectTitle","hideSeries","hideObjectSeries","classroomGuide","resourceGuidance","interactiveGuidance","onClickRemoveItem","videoId","removeButtonTooltip","getCollectionAppLink","widgetVideoList","VideoCountBadge","childDashboardNewVideoCount","SubjectStatsBadge","badgeType","newVideoCount","PopoutThumbnailSlidingListSmallWidgetTemplate","preventPopout","headingBadgeComponent","SeriesWidgetItem","PosterSlidingListLargeWidgetTemplate","PartialLoadingItem","PartialTallSubjectWidget","itemCount","items","i","PartialWidgetHeader","TallSubjectWidgetItem","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","MARKDOWN_LINK_CLASS","MarkdownHelper","isLink","element","classList","contains","parse","markdown","renderer","this","getSeoWidgetRenderer","breaks","Renderer","link","list","ordered","tagName","level","DEFAULT_HEIGHT","ExpandableQuestion","isBot","storage","isExpanded","setIsExpanded","setHeight","shouldClamp","setShouldClamp","answer","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","ThumbnailWidgetContent","fallbackBackgroundColor","isLarge","preTitle","buttonText","Memoized","ThumbnailFixedListLargeWidgetTemplate","xl","baseProps","isComingSoon","status","ClassificationStatus","comingSoon","getThumbnailWidgetItemProps","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","ThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplate","ThumbnailFixedListSmallWidgetTemplate","showSeeMoreLink","seeMoreLink","includes","thumbnailWidgetItemProps","itemPresentationName","itemPresentation","getPresentationName","ThumbnailFixedListXLargeWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","canNavigate","VideoTitle","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","MultimediaWidgetItem","VideoWidgetItemV2","ResourceWidgetItem","R","onClickDownload","preventDefault","stopPropagation","DownloadHelper","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","resourceThumbnailFallbackImageUrl","titlePosition","actionBehaviour","parentId","SearchExchangeArchiveDescription","ThumbnailVerticalListWidgetTemplate","searchSettings","VideoList","getPreviewQuestionsAppLink","ThumbnailFixedListFolderSmallWidgetTemplate","libraryId","libraries","ThumbnailFixedListMediaSmallWidgetTemplate","subTextMap","hoverTextMap","collectionAppLink","WidgetTemplateConfig","getComponent","partialLoading","predicate","targetType","product","ProductId","widgetId","CoverFixedPillListLargeWidgetTemplate","fill","_","StatsCoverFixedPillListLargeWidgetTemplate","hideDescription","hideHeading","PARTIAL_SUBJECTS","maxWidth","isTopLevelClassification","itemsCount","totalItems","xxl","PartialVideoList","numVideos","WidgetContainerView","scrollToRef","removedItemIds","setRemovedItemIds","shouldLazyLoad","lazyLoad","prevent","partialLoadingRef","inView","willFetch","getContentRequest","lazyWidget","isEmpty","isArray","isEmptyWidget","shouldHideWidget","setIsEmpty","isScrollToTargetWidget","scrollIntoView","behavior","block","contextId","includeContext","dashboardTarget","widgetIndex","widgetName","showPartialLoadingComponent","PartialTemplate","Template","widgetTemplateClass","el","headingElementRef","itemId","onClickRemove","ResourceTile","isResource","resourceType","baseClass","getColour","containerClass","applyHoverState","getInnerContainerClass","Tooltip","thumbnailContainerClass","hideTypeBadge","TypeBadge","ResourceHelper","canPreview","logAction","tileProps","SeoConstants","ScoreThresholdDefaults","ScoreThresholdInsights","downloadRef","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","display","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getResourceTypeName","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","test","parseInt","trim","replace","format","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","abs","floor","unit"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/6323-7ad35ef07e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/onboarding/hooks/useOnboardingPathway.ts","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/hero-video/hero-video.scss","file:///app/packages/libs/shared/src/apps/subjects/components/hero-video/HeroVideo.tsx","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/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.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/series-tall-poster/series-tall-poster.scss","file:///app/packages/libs/shared/src/components/series-tall-poster/SeriesTallPoster.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.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/RatingWidgetItem.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/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/ClassificationHeroBannerSmall.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/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/PartialSeriesList.tsx","file:///app/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.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/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/ExpandableQuestion.tsx","file:///app/packages/libs/shared/src/components/expandable-question/expandable-question.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/question-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/thumbnail-widget-item/ThumbnailWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.scss","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/ThumbnailFixedListMediaLargeWidgetTemplateItem.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/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","file:///app/packages/libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.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/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/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/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/apps/playlists/components/playlist-list/playlist.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["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 { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\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, Customer, 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 const customer = Flight.useBasicFetch<Customer>(\n currentUser.data?.isAuthenticated && CustomerRequests.customer(currentUser.data.customerId)\n );\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 customer.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 customer: customer.data,\n hasPlaylist,\n hasPermissions,\n currentUser: currentUser.data\n });\n }\n\n return {\n getPathway,\n hasLoadedPathway\n };\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className='text-shadow font-size-sm'>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._isClickViewCurated?.value)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._isClickViewCurated?.value)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h5 className={`mb-0 ${props.titleClassName || ''}`}><span className='text-shadow clamp-2'>{props.data.name}</span></h5>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row as='ul' className='list-unstyled mx-n1'>\n {props.extraPlaylistItem && (\n <Col as='li' key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialHeroThumbnail\":\"z0_Sm\",\"partialSeriesText\":\"xuWtC\",\"partialVideoTitleText\":\"fXYdC\",\"partialBadge\":\"FlUpr\",\"partialDescription\":\"YgWxP\",\"partialSubject\":\"QBKwQ\",\"partialHeading\":\"S__E9\",\"guidance\":\"Ax9h2\",\"responsiveGuidance\":\"s3W_4\",\"description\":\"zejMP\",\"details\":\"MRyVe\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText, VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './hero-video.scss';\n\ninterface HeroVideoProps {\n video: Video;\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n getVideoAppLink: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink;\n subTextAppLink: Core.AppLink;\n hideInteractiveBadge?: boolean;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n newDurationStyle?: boolean;\n badgePosition?: 'thumbnail' | 'info-panel';\n yearGroups: YearGroup[];\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n imageCdnUrl: string;\n isPlugin: boolean;\n showNewVideoIndicator?: boolean;\n titleClassName?: string;\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}\n\nHeroVideo.defaultProps = {\n newDurationStyle: true,\n badgePosition: 'thumbnail'\n};\n\nexport function HeroVideo(props: HeroVideoProps): JSX.Element {\n const { video, presentationAudiences, getVideoAppLink, subTextAppLink, hideInteractiveBadge } = props;\n\n const videoAudiences = video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, presentationAudiences);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n location: LocationContext.ClassificationHero,\n entity: VideoHelper.getAnalyticsEntity(video)\n });\n\n const containerRef = React.useRef();\n \n if (!video)\n return <></>;\n\n return (\n <Row>\n <Col xs={12} md={6}>\n <div ref={containerRef} >\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n appLink={getVideoAppLink?.(props.video, {})}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n audience={props.badgePosition === 'thumbnail' ? mergedAudience : null}\n newDurationStyle={props.newDurationStyle}\n hideRating={props.badgePosition === 'thumbnail' ? !!mergedAudience : true}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n />\n </div>\n </Col>\n <Col xs={12} md={6} className={`${styles.details} position-relative`}>\n <div className='d-flex justify-content-between'>\n <div className='overflow-hidden'>\n <VideoSubText\n type={props.subTextType}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n appLink={subTextAppLink}\n className='text-reset clamp-1'\n />\n <VideoItemTitle\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n appLink={getVideoAppLink?.(props.video, {})}\n titleSize='h4'\n yearGroups={props.yearGroups}\n showNewVideoIndicator={props.showNewVideoIndicator}\n titleClassName={props.titleClassName}\n clampLevel={2}\n />\n </div>\n <VideoItemActions\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={video}\n />\n </div>\n\n {props.badgePosition === 'info-panel' && (\n <BadgeListContainer className='pb-1'>\n {!hideInteractiveBadge && <Badge type={ BadgeType.Interactive } data={video.interactives} />}\n <Badge type={ BadgeType.Rating } data={video.rating} />\n <Badge type={ BadgeType.ProductionYear } data={video.productionYear} />\n </BadgeListContainer>\n )}\n\n <p className='mb-1'><span className={styles.description}>{video.description}</span></p>\n \n {props.badgePosition === 'info-panel' && (\n <AudienceLabel\n audience={mergedAudience}\n className='mt-1'\n border='dark'\n />\n )}\n\n {props.showVideoGuidance && (\n <VideoItemGuidance\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n containerClassName={`d-flex ${styles.guidance}`}\n responsiveClassName={styles.responsiveGuidance}\n />\n )}\n </Col>\n </Row>\n );\n}\n\nexport function PartialHeroVideo(): JSX.Element {\n return (\n <>\n <div className={`partial-loading-background mb-2 ${styles.partialHeading}`} />\n <div className='row pb-3'>\n <div className='col-6 p1'>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </div>\n <div className='col-6 p1'>\n <div className={`partial-loading-background mb-1 ${styles.partialSeriesText}`}></div>\n <div className={`partial-loading-background my-1 ${styles.partialVideoTitleText}`}></div>\n <div className='d-flex'>\n <div className={`partial-loading-background my-1 me-1 ${styles.partialBadge}`}></div>\n <div className={`partial-loading-background my-1 ms-1 ${styles.partialBadge}`}></div>\n </div>\n <div className={`partial-loading-background my-1 ${styles.partialDescription}`}></div>\n <div className={`partial-loading-background mt-2 ${styles.partialSubject}`}></div>\n </div>\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"emoji\":\"d86p2\"};","import React from 'react';\n\nimport styles from './emoji-text.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\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 = ObjectHelper.get(values, props.fieldName as string);\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} 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}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\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 size?: ProgressCircleSize;\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.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\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 ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\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 (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\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 {\"labelContainer\":\"ieonz\",\"hoverActive\":\"vqHCl\",\"mask\":\"qEOPN\",\"largeHoverTitle\":\"ZYApF\",\"smallHoverTitle\":\"qcfHO\",\"description\":\"jnkdI\",\"largeHoverDescription\":\"Uh4gM\",\"hasTableOfContents\":\"RdHkK\",\"smallHoverDescription\":\"TiqqV\"};","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-tall-poster.scss';\n\ninterface SeriesTallPosterHoverOverlay {\n series: Series;\n mergedAudience: PresentationAudience;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nfunction SeriesTallPosterHoverOverlay(props: SeriesTallPosterHoverOverlay): JSX.Element {\n return (\n <div className={`py-3 mx-2 px-2 rounded bg-white text-center ${styles.mask} d-flex flex-column align-items-center`}>\n <h3 className={`fw-semibold mb-0 ${styles.hoverTitle} ${props.isSmall ? styles.smallHoverTitle : styles.largeHoverTitle}`}>\n <span className='clamp-3'>\n {props.series.name}\n </span>\n </h3>\n\n {!!props.series.description && (\n <p className={`${props.hasTableOfContents ? styles.hasTableOfContents : ''} ${styles.hoverDescription} ${props.isSmall ? styles.smallHoverDescription : styles.largeHoverDescription} mb-0`}>{props.series.description}</p>\n )}\n\n {props.mergedAudience\n ? <AudienceLabel audience={props.mergedAudience} border='dark' className='mt-2 w-fit'/>\n : <Badge type={BadgeType.Rating} data={props.series.rating} className='mt-2' />\n }\n </div>\n\n );\n}\n\ninterface SeriesTallPosterMaskProps {\n series: Series;\n presentationAudiences: PresentationAudience[];\n preloadImage: boolean;\n imageClass?: string;\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesTallPoster(props: SeriesTallPosterMaskProps): JSX.Element {\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>({ className: styles.hoverActive });\n \n const audiences = props.series && props.series.subjectPresentationAudiences &&\n props.series.subjectPresentationAudiences.data || [];\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n const displayAudience = !!(audiences && audiences.length && mergedAudience);\n\n return (\n <div ref={hoverRef}>\n <BaseImage\n data={props.series.tallPoster}\n alt={props.series.name}\n imageType={ImageType.TallPosters}\n preload={props.preloadImage}\n imageOptions={{ size: ImageSize.Large }}\n imageClassName={props.imageClass ? props.imageClass : 'rounded-3'}\n >\n {isHovering && (\n <SeriesTallPosterHoverOverlay\n isSmall={props.isSmall}\n series={props.series}\n mergedAudience={audiences && audiences.length ? mergedAudience : null}\n hasTableOfContents={props.hasTableOfContents}\n />\n )}\n \n <ImageFallback type={ImageFallbackType.Series} />\n <div className={`position-absolute text-white text-shadow ${styles.labelContainer}`}>\n {displayAudience\n ? <AudienceLabel audience={mergedAudience} border='white' />\n : <Badge type={BadgeType.Rating} data={props.series.rating} />\n }\n </div>\n </BaseImage>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: Playlist | Series;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\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 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 &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n ) : (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='authoredBy' />\n &nbsp;\n {props.person.firstName} {props.person.lastName}\n </span>\n )}\n </h2>\n <div>\n {props.person.title}\n </div>\n </div>\n </div>\n\n <p className='mb-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 &nbsp;&bull;&nbsp;\n <Text\n namespace={namespace}\n phrase='lastUpdated'\n /> <time dateTime={props.lastUpdated}>{DateHelper.format(props.lastUpdated, DATE_FORMATTER)}</time>\n </>\n )}\n </div>\n </PersonCardWrapper>\n );\n}\n\nexport interface AuthorReviewerWidgetTemplateProps {\n imageCdnUrl: string;\n content: AuthorWidgetContent[];\n}\n\nexport function AuthorReviewerWidgetTemplate(props: AuthorReviewerWidgetTemplateProps): JSX.Element {\n const {\n reviewer,\n author,\n lastUpdated,\n datePublished\n } = props.content[0];\n\n if (!author || !reviewer)\n return <></>;\n\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='author'\n person={author}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PersonCard\n type='reviewer'\n person={reviewer}\n imageCdnUrl={props.imageCdnUrl}\n datePublished={datePublished}\n lastUpdated={lastUpdated}\n />\n </div>\n </div>\n );\n}","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 { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.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 const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"logoItem\":\"z6iYz\",\"logo\":\"vt0gx\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n appLinks: {\n company: (company: Company) => Core.AppLink;\n }\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\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 { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.scss';\n\nexport interface CoverFixedPillListXSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n onSubmitFeedback: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function CoverFixedPillListXSmallWidgetTemplate(\n props: CoverFixedPillListXSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <h2 className='h5'>\n {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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n }\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className={`px-1 pb-2 columns-of-five`}>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classificationLatestReleases: (classification: Classification) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget\n ? props.appLinks?.classificationLatestReleases?.(data)\n : props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget\n ? getSubtitleFromTotalVideos\n : undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean;\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing\n ? content.map((c, index) => ({ id: c.id, hidden: true, index }))\n : Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.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 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={\n props.settings?.hasTopicDirectories &&\n !props.isTertiaryCustomerWithoutExchange\n }\n />\n )}\n </>\n </Col>\n );\n })}\n </SortableContainerWrapper>\n\n {showPresentationSwitch && presentationsSwitchSubjectsItems.map(item => {\n return (\n <Col as='li' className='position-relative pb-2 px-1' key={item.id} sm={6} lg={4}>\n <SubjectWidgetItem\n data={item}\n getChildAppLink={() => props.appLinks?.discover?.(item.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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup;\n startDate: string;\n endDate: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n event: CalendarEvent<CalendarEventContent>;\n label: string;\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month')\n ? DateHelper.format(nextWeekStart, 'MMMM')\n : `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink;\n calendarMonth: (month: string, year?: string) => Core.AppLink;\n livestream: (livestream: Livestream) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n}\n\nexport function EventIconSlidingListWidgetTemplate(\n props: EventIconSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetItems = React.useMemo(() => getWidgetItems(props.content, props.contentType), [props.content]);\n const theme = getTheme(props.contentType);\n\n function getTheme(contentType: CalendarEventContentType): CalendarTheme {\n switch (contentType) {\n case CalendarEventContentType.Livestream:\n return {\n background: 'bg-light-green',\n border: 'border-light-green',\n backgroundSecondary: 'bg-light-blue'\n };\n default:\n return {\n background: 'bg-light-blue',\n border: 'border-light-blue',\n backgroundSecondary: 'bg-light-yellow'\n };\n }\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n appLink={props.appLinks?.calendar?.()}\n type={WidgetType.Row}\n contents={WidgetContents.SpecialEvents}\n getChildAppLink={(item: CalendarEvent<CalendarEventContent> | DateWidgetItem) => {\n if (item.type === 'date-widget-item')\n return props.appLinks?.calendarMonth?.(item.appLinkMonth, item.appLinkYear);\n\n if (item.type === 'Livestream')\n return props.appLinks?.livestream?.(item.content as Livestream);\n\n return props.appLinks?.classification?.(item.content as Classification);\n }}\n collection={widgetItems}\n childComponent={SpecialEventWidgetItem}\n extraChildComponentProps={{ theme }}\n analyticsData={props.analyticsData}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n 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';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, CuratedDashboardAppLink, FavouriteFunc, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string;\n appLink: CuratedDashboardAppLink;\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n latestReleases: () => Core.AppLink;\n }\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n seriesAppLink: props.appLinks?.series\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\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 { 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}","// extracted by mini-css-extract-plugin\nexport default {\"rowWidth\":\"TzZuL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating);\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}","// 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 { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}","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 { 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, WidgetCta } 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 interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svgName={cvSvgLibrary.NewWindow} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svgName={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","// 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';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n\n metadata: {\n cta: WidgetCta;\n }\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string;\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n }\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n \n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}","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 { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink;\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n }\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n discover: (presentationId?: string) => Core.AppLink;\n };\n metadata: {\n imageId: string;\n theming: {\n headingSize: HeadingSize;\n headingColor: HeadingColor;\n },\n cta: WidgetCta\n }\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\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 { OnboardingScreenAppLinks } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenAppLinks';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { OnboardingPathwayHelper } from 'libs/shared/apps/onboarding/utils/OnboardingPathwayHelper';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\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 { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\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 interface OnboardingStepsWidgetTemplateProps {\n content: EntitySetting<boolean>[];\n appLinks: {\n onboardingAppLinks: () => OnboardingScreenAppLinks;\n onboardingStep: (step: OnboardingScreenId) => Core.AppLink;\n };\n jobTitle: JobTitles;\n isPreviewing: boolean;\n settings: {\n hasOnboardingV2: boolean;\n hasCompletedOnboardingV2: boolean;\n };\n hasPermissions: HasPermissionsFunc;\n imageUrls: {\n onboardingTeacherBackground: string;\n }\n}\n\nexport function OnboardingStepsWidgetTemplate(\n props: OnboardingStepsWidgetTemplateProps\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 { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n };\n appLinks: {\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n };\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n isPlugin: boolean;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n }\n onClickRemoveItem: (videoId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string): void {\n props.onClickRemoveItem?.(videoId, props.id, props.widgetTypeId);\n }\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.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 onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : ''\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n />\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 { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\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 { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, Classification, FavouriteFunc, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n watchHistory: () => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n hideObjectTitle: boolean;\n hideObjectSeries: boolean;\n }\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n preventPopout?: boolean;\n isPlugin: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n }\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string): void {\n props.onClickRemoveItem?.(videoId, props.id, props.widgetTypeId);\n }\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 onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId)\n ? LanguageService.getPhrase(namespace, 'removeFromWatchHistory')\n : ''\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content)\n ?? props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n />\n );\n}\n","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.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}","// extracted by mini-css-extract-plugin\nexport default {\"largeSeriesItem\":\"HZ00X\",\"smallSeriesItem\":\"PQ2sv\",\"partialLoading\":\"hMoHO\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\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 { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem, 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 interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget<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 />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId\n ? ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium)\n : ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string;\n text: string;\n appLink: CuratedDashboardAppLink;\n }\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink;\n allTopics: (presentationId?: string) => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink;\n }\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}","import 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 parse(markdown: string): string {\n if (!markdown)\n return '';\n\n return marked(markdown, {\n renderer: this.getSeoWidgetRenderer(),\n breaks: true\n });\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, ordered: boolean) {\n const tagName = ordered ? 'ol' : 'ul';\n\n return `<${tagName} class=\"${styles.list}\">${body}</${tagName}>`;\n };\n\n Renderer.heading = function(text: string, level: 1 | 2 | 3 | 4 | 5 | 6) {\n const headingClassMap = {\n 1: 'h1',\n 2: 'h2',\n 3: 'h6',\n 4: 'h6',\n 5: 'h6',\n 6: 'h6'\n };\n\n return `<h${level} class=\"${headingClassMap[level]}\">${text}</h${level}>`;\n };\n\n return Renderer;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"LTJss\"};","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { 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(MarkdownHelper.parse(props.answer));\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 = MarkdownHelper.parse(props.answer);\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}","// extracted by mini-css-extract-plugin\nexport default {\"question\":\"r4X_X\",\"partialQuestion\":\"aE9qQ\",\"description\":\"dVLkj\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}","// 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';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { 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 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 \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(MarkdownHelper.parse(props.faq.answer));\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 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 = MarkdownHelper.parse(props.faq?.answer);\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 interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}","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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n };\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n yearGroups: YearGroup[];\n companyLogoFallbackUrl: string;\n subTextType: VideoSubTextType;\n imageCdnUrl: string;\n isPlugin: boolean;\n settings: {\n hasTopicDirectories: boolean\n }\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n subTextAppLink={props.appLinks?.subText?.(video)}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={props.analyticsData}\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}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={`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 {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p className={`${styles.title} h3 text-shadow ${(props.isLarge || props.data?.preTitle) ? '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 {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"YtffT\",\"container\":\"gKcbE\",\"large\":\"Ldth1\",\"small\":\"z6ZxE\",\"content\":\"aOotU\",\"top\":\"w5WZ1\",\"title\":\"bSXFz\",\"preTitle\":\"ReAEa\",\"description\":\"XjSFw\",\"cover\":\"liG0R\",\"button\":\"c28_J\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n }\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","// 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};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n companyLogoFallbackUrl: string;\n yearGroups: YearGroup[];\n subTextType: VideoSubTextType;\n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): 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={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}","// extracted by mini-css-extract-plugin\nexport default {\"guidance\":\"uCRU1\",\"responsiveGuidance\":\"iwav4\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\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 { MasterType } from 'libs/shared/enums/MasterType';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n subText: (video: Video) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n companyLogoFallbackUrl: string;\n yearGroups: YearGroup[];\n subTextType: VideoSubTextType;\n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"KItVW\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small })\n },\n appLink: options.appLinks?.company?.(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n company: (playlist: Company) => Core.AppLink;\n },\n seeMoreLink: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map(c => {\n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: props.analyticsData,\n availablePresentations: props.availablePresentations\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n };\n metadata: {\n cta: WidgetCta\n }\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","// 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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText, VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n companyLogoFallbackUrl: string;\n isPlugin: boolean;\n subTextType: VideoSubTextType;\n yearGroups: YearGroup[];\n hasPermissions: HasPermissionsFunc;\n\n appLinks: {\n subText: (video: Video) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n }\n\n settings: {\n hasTopicDirectories: boolean;\n }\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): 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 = {\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 showNewVideoIndicator={showNewVideoIndicator}\n titleSize='h4'\n className='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 { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, FavouriteFunc, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, FavouriteFunc, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\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 interface ThumbnailSlidingListSmallV2WidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n hasLocalPermissions: HasLocalPermissionsFunc;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n imageCdnUrl: string;\n resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n isPlugin: boolean;\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink;\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink;\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink;\n }\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): 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 appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, Company, FavouriteFunc, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n subTextType: VideoSubTextType;\n isPlugin: boolean;\n audiences: PresentationAudience[];\n canFavourite: CanFavouriteFunc;\n setFavourite: FavouriteFunc;\n companyLogoFallbackUrl: string;\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n series: (series: Series) => Core.AppLink;\n company: (company: Company) => Core.AppLink;\n classroomGuide: (id: string, type: MasterType) => Core.AppLink;\n resourceGuidance: (id: string, type: MasterType) => Core.AppLink;\n interactiveGuidance: (id: string, type: MasterType) => Core.AppLink;\n searchSettings: () => Core.AppLink;\n searchHome: (filters?: HashObject) => Core.AppLink;\n };\n metadata: {\n hideWidgetHeading: boolean;\n hideWidgetDescription: boolean;\n };\n settings: {\n hasTopicDirectories: boolean;\n };\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getSubTextAppLink(video: Video) {\n if (props.subTextType === 'series') {\n return props.appLinks?.series(video?.series);\n }\n\n if (props.subTextType === 'productionCompany') {\n return props.appLinks?.company?.(video);\n }\n }\n\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n \n return (\n <>\n <WidgetHeader\n name={!props.metadata.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n getSubTextAppLink={getSubTextAppLink}\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 canFavourite={props.canFavourite}\n setFavourite={props.setFavourite}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n />\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: {libraryId?: string, sort?: string}) => Core.AppLink;\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(f => {\n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink;\n series: (series: Series) => Core.AppLink,\n },\n \n description: string;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string} = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Small\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\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 { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { cvSvgLibrary, SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from '../components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId)=>((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean,\n className: string;\n}\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 * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: 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 &nbsp;\n </div>\n <div className='partial-loading-background description curated-widget-description' style={{ width: '21rem', height: '1.3125rem', maxWidth: '90%' }}>\n &nbsp;\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport styles from '../question-widget-template.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}","// 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 { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } 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 BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n}\n\ntype ClassificationWidgetContainerViewProps = Omit<AllClassificationWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Classification; }\n\ntype DiscoverWidgetContainerViewProps = Omit<AllDiscoverWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Discover; }\n\ntype CompanyWidgetContainerViewProps = Omit<AllCompanyWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Company; }\n\ntype MoviesAndTvWidgetContainerViewProps = Omit<AllMoviesAndTvWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.MoviesAndTv; }\n\ntype SearchWidgetContainerViewProps = Omit<AllSearchWidgetTemplates, 'content' | 'metadata'> &\n { widgetCollection?: DashboardTargetType.Search; }\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request;\n content?: never;\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent;\n getContentRequest?: never;\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const 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 } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\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 function onClickRemoveItem(itemId: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, props.id, props.widgetTypeId);\n }\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: 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 preferences={lazyWidget.data?.preferences}\n analyticsData={analyticsData}\n showHighlight={props.isScrollToTargetWidget}\n isPreviewing={props.isPreviewing}\n onClickRemoveItem={onClickRemoveItem}\n />\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\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 onClickRemoveItem: (videoId: string) => void;\n removeButtonTooltip?: string;\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 onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem) && (() => props.onClickRemoveItem(video.id))}\n removeButtonTooltip={props.removeButtonTooltip}\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});","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\"};","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 {\"playlistItem\":\"CaRJx\",\"playlistItemGradient\":\"BI7p2\",\"playlistMetadata\":\"eDk1l\",\"partialHeading\":\"w4lWh\",\"ownerAvatarContainer\":\"JImqE\"};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["useOnboardingPathway","appLinks","hasPlaylist","setHasPlaylist","currentUser","user","data","isAuthenticated","id","customer","customerId","presentations","preferredPresentation","curriculums","playlists","preferredSubjects","hasPermissions","hasCompleted","length","hasLoadedPathway","userSettings","getPathway","options","jobTitle","jobTitleOverride","userProfile","metadata","presentation","preferredPresentationOverride","appLink","masterUser","screens","currentScreen","totalScreens","totalScreensInProgressBar","hasCompletedAllSteps","PartialPlaylistList","props","PARTIAL_PLAYLISTS","Array","numItems","className","itemClassName","showHeading","map","p","idx","key","xs","sm","lg","defaultProps","namespace","PlaylistCount","count","playlist","videos","interactives","clips","getCount","Number","isNaN","Text","phrase","smartCount","PlaylistOwnerAvatar","_liteOwner","_isClickViewCurated","value","ClickViewAvatar","toString","url","avatar","Avatar","imageUrl","imageCdnUrl","initials","UserHelper","name","surname","PlaylistItem","ImageHelper","cover","size","resizeType","audiences","subjectPresentationAudiences","mergedAudience","presentationAudiences","showImage","showFallbackImage","bgColourClassNames","getBgColorClass","itemStyle","analyticsData","analyticsOptions","entity","AppLink","title","contentModifiedDate","LanguageService","timeago","DateHelper","getTitle","BaseImage","alt","ImageFallback","type","showCount","titleClassName","AudienceLabel","audienceLabelClass","audience","border","showOwner","actionType","location","descriptor","PlaylistList","as","extraPlaylistItem","itemContainerClassName","getPlaylistAppLink","itemTitleClassName","HeroVideo","video","getVideoAppLink","subTextAppLink","hideInteractiveBadge","videoAudiences","AnalyticsHelper","VideoHelper","containerRef","Row","Col","md","ref","VideoThumbnail","imageOptions","textPosition","ThumbnailTextPosition","setFavourite","canFavourite","badgePosition","newDurationStyle","hideRating","companyLogoFallbackUrl","subTextType","isPlugin","VideoSubText","VideoItemTitle","titleSize","yearGroups","showNewVideoIndicator","clampLevel","VideoItemActions","BadgeListContainer","Badge","rating","productionYear","description","showVideoGuidance","VideoItemGuidance","getClassroomGuideAppLink","getResourceGuidanceAppLink","getInteractiveGuidanceAppLink","containerClassName","responsiveClassName","EmojiText","emoji","children","FormButtons","formikProps","canSubmit","variant","disabled","showSpinner","isSubmitting","submitText","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","values","field","ObjectHelper","fieldName","limit","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","Spinner","animation","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","tooltipPlacement","tooltipSpanHack","maxLength","errorMessage","role","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","entries","useFormikContextWrapper","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","actions","getFolderActions","DragDropMoveWrapper","draggable","drag","droppable","drop","dropStye","dragStyle","getAppLink","imageType","imageClassName","extraClasses","Actions","actionsDropdownClassName","dropdownToggleSvgSize","PercentageIndicatorLayout","ProgressCircle","circle","radius","r","baseVal","circumference","Math","PI","offset","percentage","style","strokeDasharray","strokeDashoffset","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","customLabel","LabelOnly","LabelBefore","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","DYNAMIC_RATIO_IMAGE_OPTIONS","getImageType","resource","MasterTypeHelper","ResourceFileType","pdf","ResourceThumbnail","rotation","dynamicRatioImageOptions","previewUrl","getThumbnailUrl","imageStyle","transform","errorFallbackImageSrc","imageErrorFallbackUrl","errorFallbackImageClassName","preload","preloadImage","preventLoad","SeriesTallPosterHoverOverlay","isSmall","series","hasTableOfContents","SeriesTallPoster","hoverRef","isHovering","displayAudience","tallPoster","imageClass","BaseCollectionThumbnailTitle","CollectionThumbnailTitle","CollectionThumbnail","firstVideo","collectionVideos","collection","typeId","MasterType","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","subText","preventFocus","showMask","hoverText","hideMask","hideDuration","hideVideoTypeBadge","showVideoCount","TitleSubText","titleAppLink","DATE_FORMATTER","PersonCardWrapper","person","blogUrl","ArticleHelper","blogSlug","href","target","firstName","lastName","imageId","PersonCard","src","bio","dateTime","lastUpdated","datePublished","AuthorReviewerWidgetTemplate","content","reviewer","author","PartialPersonCard","height","CircleLogoWidgetItem","logoUrl","logo","logoBgColor","colour","colourClass","logoStyle","backgroundImage","backgroundColor","CircleLogoSlidingListWidgetTemplate","FixedWidget","contents","WidgetContents","childComponent","extraChildComponentProps","prefetched","hideBleedingContent","showHighlight","hideButtons","getChildAppLink","company","FeedbackFormValidationSchema","shape","feedbackInput","max","FeedbackForm","state","setState","alerts","formData","onDone","error","IconButton","autoFocus","rows","placeholder","spellCheck","CoverFixedPillListXSmallWidgetTemplate","classification","coverUrl","onSubmitFeedback","CoverFixedTileListWidgetTemplate","WidgetHeader","getTotalVideos","reduce","sum","cur","totalVideos","getSubtitleFromTotalVideos","CoverSlidingPillListSmallWidgetTemplate","extraContent","settings","hasTopicDirectories","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","isTertiaryCustomerWithoutExchange","discover","getChildAppLinkOptions","middlewareOptions","presentationSlug","presentationId","presentationDescription","CalendarWidgetItem","theme","backgroundSecondary","CalendarDay","date","Date","startDate","notCurrentMonth","monthQuery","eventsOnDay","events","sliderStep","hoveredEvent","isMultiEventDate","getBackgroundColor","getIconUrl","hasInitialized","responsiveText","hideDay","SpecialEventWidgetItem","otherProps","GenericCalendarDate","month","body","text","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","background","calendar","calendarMonth","VideoWidgetItem","context","thumbnailSize","onHover","hovering","FeaturedThumbnailSlidingListWidgetTemplate","widgetAppLink","bannerBackgroundUrl","v","videoType","seriesAppLink","limitTotalItems","hideName","RatingWidgetItem","ratingsLength","code","VideoDetailsHelper","S","FilterSlidingPillListSmallWidgetTemplate","maxRating","PresentationLearningLevel","ratings","HeadingWidgetTemplate","HeroBannerWidgetTemplate","breakpoints","useBreakpoints","banner","fallbackBaseUrl","fallbackCategoryName","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","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","hideWidgetHeading","hideWidgetDescription","PopoutVideoWidgetItem","getSubTextAppLink","hideTitle","hideObjectTitle","hideSeries","hideObjectSeries","classroomGuide","resourceGuidance","interactiveGuidance","onClickRemoveItem","videoId","removeButtonTooltip","getCollectionAppLink","widgetVideoList","VideoCountBadge","childDashboardNewVideoCount","SubjectStatsBadge","badgeType","newVideoCount","PopoutThumbnailSlidingListSmallWidgetTemplate","preventPopout","headingBadgeComponent","SeriesWidgetItem","PosterSlidingListLargeWidgetTemplate","PartialLoadingItem","PartialTallSubjectWidget","itemCount","items","i","PartialWidgetHeader","TallSubjectWidgetItem","PosterSlidingListMediumWidgetTemplate","EXPLORE_ALL_TOPICS_ID","ClassificationPosterSlidingListSmallWidgetTemplate","SeriesPosterSlidingListSmallWidgetTemplate","MARKDOWN_LINK_CLASS","MarkdownHelper","isLink","element","classList","contains","parse","markdown","renderer","this","getSeoWidgetRenderer","breaks","Renderer","link","list","ordered","tagName","level","DEFAULT_HEIGHT","ExpandableQuestion","isBot","storage","isExpanded","setIsExpanded","setHeight","shouldClamp","setShouldClamp","answer","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","ThumbnailWidgetContent","fallbackBackgroundColor","isLarge","preTitle","buttonText","Memoized","ThumbnailFixedListLargeWidgetTemplate","xl","baseProps","isComingSoon","status","ClassificationStatus","comingSoon","getThumbnailWidgetItemProps","PartialThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplateItem","videoAppLink","ThumbnailText","ThumbnailFixedListMediaLargeWidgetTemplate","ThumbnailFixedListSmallWidgetTemplate","showSeeMoreLink","seeMoreLink","includes","thumbnailWidgetItemProps","itemPresentationName","itemPresentation","getPresentationName","ThumbnailFixedListXLargeWidgetTemplate","ThumbnailHeroMediaWidgetTemplate","hasSubText","canNavigate","VideoTitle","ThumbnailSlidingListLargeWidgetTemplate","ThumbnailSlidingListSmallWidgetTemplate","MultimediaWidgetItem","VideoWidgetItemV2","ResourceWidgetItem","R","onClickDownload","preventDefault","stopPropagation","DownloadHelper","ThumbnailSlidingListSmallV2WidgetTemplate","canViewResources","resourceThumbnailFallbackImageUrl","titlePosition","actionBehaviour","parentId","SearchExchangeArchiveDescription","ThumbnailVerticalListWidgetTemplate","searchSettings","VideoList","getPreviewQuestionsAppLink","ThumbnailFixedListFolderSmallWidgetTemplate","libraryId","libraries","ThumbnailFixedListMediaSmallWidgetTemplate","subTextMap","hoverTextMap","collectionAppLink","WidgetTemplateConfig","getComponent","partialLoading","predicate","targetType","product","ProductId","widgetId","CoverFixedPillListLargeWidgetTemplate","fill","_","StatsCoverFixedPillListLargeWidgetTemplate","hideDescription","hideHeading","PARTIAL_SUBJECTS","maxWidth","isTopLevelClassification","itemsCount","totalItems","xxl","PartialVideoList","numVideos","WidgetContainerView","scrollToRef","removedItemIds","setRemovedItemIds","shouldLazyLoad","lazyLoad","prevent","partialLoadingRef","inView","willFetch","getContentRequest","lazyWidget","isEmpty","isArray","isEmptyWidget","shouldHideWidget","setIsEmpty","isScrollToTargetWidget","scrollIntoView","behavior","block","contextId","includeContext","dashboardTarget","widgetIndex","widgetName","showPartialLoadingComponent","PartialTemplate","Template","widgetTemplateClass","el","headingElementRef","itemId","onClickRemove","ResourceTile","isResource","resourceType","baseClass","getColour","containerClass","applyHoverState","getInnerContainerClass","Tooltip","thumbnailContainerClass","hideTypeBadge","TypeBadge","ResourceHelper","canPreview","logAction","tileProps","SeoConstants","ScoreThresholdDefaults","ScoreThresholdInsights","downloadRef","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","display","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getResourceTypeName","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","test","parseInt","trim","replace","format","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","abs","floor","unit"],"sourceRoot":""}