@clickview/streamable-learning 0.48.0-rc.1 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/.vite/manifest.json +605 -605
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{CN8PeBwg.chunk.js → BIisq8ZO.chunk.js} +2 -2
  5. package/dist/scripts/{CN8PeBwg.chunk.js.map → BIisq8ZO.chunk.js.map} +1 -1
  6. package/dist/scripts/{BaMNOAYj2.chunk.js → BWU6_pPN2.chunk.js} +2 -2
  7. package/dist/scripts/{BaMNOAYj2.chunk.js.map → BWU6_pPN2.chunk.js.map} +1 -1
  8. package/dist/scripts/{BvJXPFoz2.chunk.js → BcZFo9Vw2.chunk.js} +2 -2
  9. package/dist/scripts/{BvJXPFoz2.chunk.js.map → BcZFo9Vw2.chunk.js.map} +1 -1
  10. package/dist/scripts/Bd2bbHru.chunk.js +1 -0
  11. package/dist/scripts/{CkYqp83j.chunk.js → BfNy0Hvk.chunk.js} +2 -2
  12. package/dist/scripts/{CkYqp83j.chunk.js.map → BfNy0Hvk.chunk.js.map} +1 -1
  13. package/dist/scripts/{D0SYGnyF.chunk.js → BivP7X20.chunk.js} +2 -2
  14. package/dist/scripts/{D0SYGnyF.chunk.js.map → BivP7X20.chunk.js.map} +1 -1
  15. package/dist/scripts/{BihZ4r0z2.chunk.js → BjbY4Fbp2.chunk.js} +3 -3
  16. package/dist/scripts/{BihZ4r0z2.chunk.js.map → BjbY4Fbp2.chunk.js.map} +1 -1
  17. package/dist/scripts/{DO8_mR5i2.chunk.js → BmxcE73n2.chunk.js} +2 -2
  18. package/dist/scripts/{DO8_mR5i2.chunk.js.map → BmxcE73n2.chunk.js.map} +1 -1
  19. package/dist/scripts/{bycmewy72.chunk.js → BnEMhkEE2.chunk.js} +2 -2
  20. package/dist/scripts/{bycmewy72.chunk.js.map → BnEMhkEE2.chunk.js.map} +1 -1
  21. package/dist/scripts/{jWpq99N3.chunk.js → Buc8GegC.chunk.js} +2 -2
  22. package/dist/scripts/{jWpq99N3.chunk.js.map → Buc8GegC.chunk.js.map} +1 -1
  23. package/dist/scripts/{CrCAJmt6.chunk.js → Byczy1lS.chunk.js} +2 -2
  24. package/dist/scripts/{CrCAJmt6.chunk.js.map → Byczy1lS.chunk.js.map} +1 -1
  25. package/dist/scripts/{BZOcEcTA2.chunk.js → C2itEpvc2.chunk.js} +2 -2
  26. package/dist/scripts/{BZOcEcTA2.chunk.js.map → C2itEpvc2.chunk.js.map} +1 -1
  27. package/dist/scripts/{smdLElLq.chunk.js → CEFKXxac.chunk.js} +2 -2
  28. package/dist/scripts/{smdLElLq.chunk.js.map → CEFKXxac.chunk.js.map} +1 -1
  29. package/dist/scripts/{B-qOny0I2.chunk.js → CEYjJAp52.chunk.js} +2 -2
  30. package/dist/scripts/{B-qOny0I2.chunk.js.map → CEYjJAp52.chunk.js.map} +1 -1
  31. package/dist/scripts/{CNJrD44-2.chunk.js → CJSc4YDq2.chunk.js} +2 -2
  32. package/dist/scripts/{CNJrD44-2.chunk.js.map → CJSc4YDq2.chunk.js.map} +1 -1
  33. package/dist/scripts/{Br0Uc4GG.chunk.js → CKUA5J3R.chunk.js} +2 -2
  34. package/dist/scripts/{Br0Uc4GG.chunk.js.map → CKUA5J3R.chunk.js.map} +1 -1
  35. package/dist/scripts/{CWFInhB82.chunk.js → CYrzupmS2.chunk.js} +2 -2
  36. package/dist/scripts/{CWFInhB82.chunk.js.map → CYrzupmS2.chunk.js.map} +1 -1
  37. package/dist/scripts/{Llxar-VU.chunk.js → CcGYZb9f.chunk.js} +2 -2
  38. package/dist/scripts/{Llxar-VU.chunk.js.map → CcGYZb9f.chunk.js.map} +1 -1
  39. package/dist/scripts/{BTYwcYPL2.chunk.js → CeQGaFi-2.chunk.js} +2 -2
  40. package/dist/scripts/{BTYwcYPL2.chunk.js.map → CeQGaFi-2.chunk.js.map} +1 -1
  41. package/dist/scripts/{D7tastET2.chunk.js → Cr3Blj6H2.chunk.js} +2 -2
  42. package/dist/scripts/{D7tastET2.chunk.js.map → Cr3Blj6H2.chunk.js.map} +1 -1
  43. package/dist/scripts/{Dr1flAez.chunk.js → CxCkwLio.chunk.js} +2 -2
  44. package/dist/scripts/{Dr1flAez.chunk.js.map → CxCkwLio.chunk.js.map} +1 -1
  45. package/dist/scripts/{DyT1OGvP2.chunk.js → Cxj75Dqe2.chunk.js} +2 -2
  46. package/dist/scripts/{DyT1OGvP2.chunk.js.map → Cxj75Dqe2.chunk.js.map} +1 -1
  47. package/dist/scripts/{CsC3VVvE2.chunk.js → D-VNmhoM2.chunk.js} +2 -2
  48. package/dist/scripts/{CsC3VVvE2.chunk.js.map → D-VNmhoM2.chunk.js.map} +1 -1
  49. package/dist/scripts/{CKdklY2o2.chunk.js → D2FqnK9m2.chunk.js} +2 -2
  50. package/dist/scripts/{CKdklY2o2.chunk.js.map → D2FqnK9m2.chunk.js.map} +1 -1
  51. package/dist/scripts/{qcrBN1zR2.chunk.js → D3sdyN2Q2.chunk.js} +2 -2
  52. package/dist/scripts/{qcrBN1zR2.chunk.js.map → D3sdyN2Q2.chunk.js.map} +1 -1
  53. package/dist/scripts/{Ce1TZZdV2.chunk.js → D6IzS-bj2.chunk.js} +2 -2
  54. package/dist/scripts/{Ce1TZZdV2.chunk.js.map → D6IzS-bj2.chunk.js.map} +1 -1
  55. package/dist/scripts/{B703cBe72.chunk.js → D8g6nOG92.chunk.js} +2 -2
  56. package/dist/scripts/{B703cBe72.chunk.js.map → D8g6nOG92.chunk.js.map} +1 -1
  57. package/dist/scripts/{CCoZQmgX.chunk.js → DCKKwz9L.chunk.js} +2 -2
  58. package/dist/scripts/{CCoZQmgX.chunk.js.map → DCKKwz9L.chunk.js.map} +1 -1
  59. package/dist/scripts/{DIavEegC.chunk.js → DL4UFxRK.chunk.js} +2 -2
  60. package/dist/scripts/{DIavEegC.chunk.js.map → DL4UFxRK.chunk.js.map} +1 -1
  61. package/dist/scripts/{C5i1HsPp2.chunk.js → DLofRa642.chunk.js} +2 -2
  62. package/dist/scripts/{C5i1HsPp2.chunk.js.map → DLofRa642.chunk.js.map} +1 -1
  63. package/dist/scripts/{B5jBIPaP.chunk.js → DMZ--ok1.chunk.js} +2 -2
  64. package/dist/scripts/{B5jBIPaP.chunk.js.map → DMZ--ok1.chunk.js.map} +1 -1
  65. package/dist/scripts/{CUUUI6pl.chunk.js → DQFcbMMk.chunk.js} +2 -2
  66. package/dist/scripts/{CUUUI6pl.chunk.js.map → DQFcbMMk.chunk.js.map} +1 -1
  67. package/dist/scripts/{Dj4AeYQQ2.chunk.js → DVeqPzBe2.chunk.js} +2 -2
  68. package/dist/scripts/{Dj4AeYQQ2.chunk.js.map → DVeqPzBe2.chunk.js.map} +1 -1
  69. package/dist/scripts/{CGxa1Jzq.chunk.js → DWerltCT.chunk.js} +2 -2
  70. package/dist/scripts/{CGxa1Jzq.chunk.js.map → DWerltCT.chunk.js.map} +1 -1
  71. package/dist/scripts/{CbLL7dIz2.chunk.js → DatscYpA2.chunk.js} +2 -2
  72. package/dist/scripts/{CbLL7dIz2.chunk.js.map → DatscYpA2.chunk.js.map} +1 -1
  73. package/dist/scripts/{DwzBzBlI2.chunk.js → DkaGC5IU2.chunk.js} +2 -2
  74. package/dist/scripts/{DwzBzBlI2.chunk.js.map → DkaGC5IU2.chunk.js.map} +1 -1
  75. package/dist/scripts/{BLrjbrp8.chunk.js → DqZWSPDJ.chunk.js} +2 -2
  76. package/dist/scripts/{BLrjbrp8.chunk.js.map → DqZWSPDJ.chunk.js.map} +1 -1
  77. package/dist/scripts/{BKnxYKDu2.chunk.js → Dql-1E6g2.chunk.js} +2 -2
  78. package/dist/scripts/{BKnxYKDu2.chunk.js.map → Dql-1E6g2.chunk.js.map} +1 -1
  79. package/dist/scripts/{B7iwtSij.chunk.js → DuBHin02.chunk.js} +2 -2
  80. package/dist/scripts/{B7iwtSij.chunk.js.map → DuBHin02.chunk.js.map} +1 -1
  81. package/dist/scripts/{BpgHKWR52.chunk.js → QMuFwiiF2.chunk.js} +2 -2
  82. package/dist/scripts/{BpgHKWR52.chunk.js.map → QMuFwiiF2.chunk.js.map} +1 -1
  83. package/dist/scripts/{Ces-KTwe.chunk.js → U_sIlzAD.chunk.js} +2 -2
  84. package/dist/scripts/{Ces-KTwe.chunk.js.map → U_sIlzAD.chunk.js.map} +1 -1
  85. package/dist/scripts/{ACTQklJQ.chunk.js → WLyOm9Lj.chunk.js} +2 -2
  86. package/dist/scripts/{ACTQklJQ.chunk.js.map → WLyOm9Lj.chunk.js.map} +1 -1
  87. package/dist/scripts/{DR80oZtZ.chunk.js → Ymq7JLkU.chunk.js} +2 -2
  88. package/dist/scripts/{DR80oZtZ.chunk.js.map → Ymq7JLkU.chunk.js.map} +1 -1
  89. package/dist/scripts/{app-BIigh9wv.js → app-gjHxcZG3.js} +4 -4
  90. package/dist/scripts/app-gjHxcZG3.js.map +1 -0
  91. package/dist/scripts/{CNmmq34f.chunk.js → djRnI462.chunk.js} +2 -2
  92. package/dist/scripts/{CNmmq34f.chunk.js.map → djRnI462.chunk.js.map} +1 -1
  93. package/dist/scripts/{oTYyWWB-.chunk.js → e2K2YU7z.chunk.js} +2 -2
  94. package/dist/scripts/{oTYyWWB-.chunk.js.map → e2K2YU7z.chunk.js.map} +1 -1
  95. package/dist/scripts/{BxypZGPK.chunk.js → fnfhCa1P.chunk.js} +2 -2
  96. package/dist/scripts/{BxypZGPK.chunk.js.map → fnfhCa1P.chunk.js.map} +1 -1
  97. package/dist/scripts/{BsAo7Lri2.chunk.js → iyIL3kim2.chunk.js} +2 -2
  98. package/dist/scripts/{BsAo7Lri2.chunk.js.map → iyIL3kim2.chunk.js.map} +1 -1
  99. package/dist/scripts/{DK3xia1t.chunk.js → kfFYr9dc.chunk.js} +2 -2
  100. package/dist/scripts/{DK3xia1t.chunk.js.map → kfFYr9dc.chunk.js.map} +1 -1
  101. package/dist/scripts/{BXJetawx2.chunk.js → kts5xiiM2.chunk.js} +2 -2
  102. package/dist/scripts/{BXJetawx2.chunk.js.map → kts5xiiM2.chunk.js.map} +1 -1
  103. package/dist/scripts/{tYi-sUb22.chunk.js → lLAYbgAy2.chunk.js} +2 -2
  104. package/dist/scripts/{tYi-sUb22.chunk.js.map → lLAYbgAy2.chunk.js.map} +1 -1
  105. package/dist/scripts/{BCBfXCYM2.chunk.js → p9ukva5a2.chunk.js} +2 -2
  106. package/dist/scripts/{BCBfXCYM2.chunk.js.map → p9ukva5a2.chunk.js.map} +1 -1
  107. package/dist/scripts/{DKnZ8BaN.chunk.js → wOeN2ls0.chunk.js} +2 -2
  108. package/dist/scripts/{DKnZ8BaN.chunk.js.map → wOeN2ls0.chunk.js.map} +1 -1
  109. package/dist/scripts/{DU1SE31v2.chunk.js → zp2BHOp82.chunk.js} +2 -2
  110. package/dist/scripts/{DU1SE31v2.chunk.js.map → zp2BHOp82.chunk.js.map} +1 -1
  111. package/dist/scripts/{DnSy_Myx.chunk.js → zyVwH8JF.chunk.js} +2 -2
  112. package/dist/scripts/{DnSy_Myx.chunk.js.map → zyVwH8JF.chunk.js.map} +1 -1
  113. package/package.json +1 -1
  114. package/dist/scripts/C4MLxDS-.chunk.js +0 -1
  115. package/dist/scripts/app-BIigh9wv.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"oTYyWWB-.chunk.js","names":["context","AccordionContext","AccordionItemContext","AccordionContext","AccordionButton","AccordionItemContext","AccordionButton","AccordionItemContext"],"sources":["../../../../../node_modules/react-bootstrap/esm/createChainedFunction.js","../../../../../node_modules/react-bootstrap/esm/Collapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionCollapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionItemContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionBody.js","../../../../../node_modules/react-bootstrap/esm/AccordionButton.js","../../../../../node_modules/react-bootstrap/esm/AccordionHeader.js","../../../../../node_modules/react-bootstrap/esm/AccordionItem.js","../../../../../node_modules/react-bootstrap/esm/Accordion.js","../../../../libs/shared/src/images/svg/actions/MinusSvg.tsx","../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/animated-border.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/AnimatedBorder.tsx","../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsDownSvg.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsUpSvg.tsx","../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/apps/subjects/enums/ClassificationNodeType.ts","../../../../libs/shared/src/enums/PresentationLearningLevel.ts","../../../../libs/shared/src/utils/topics-helper/TopicsHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/HamburgerSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../libs/shared/src/utils/ReorderHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../libs/shared/src/images/svg/objects/SparkleSvg.tsx","../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.module.scss","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../libs/shared/src/enums/PartnerType.ts","../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/BellFilledSvg.tsx","../../../../libs/shared/src/images/svg/objects/BellSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.module.scss","../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../libs/shared/src/components/thumbnails/collection/collection-thumbnail.module.scss","../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../libs/shared/src/constants/WidgetTemplateConfig.ts","../../../../libs/shared/src/components/widgets/curated-widgets/widget-container-view.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","../../src/shared/hooks/useFetchDashboard.ts"],"sourcesContent":["/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction(...funcs) {\n return funcs.filter(f => f != null).reduce((acc, f) => {\n if (typeof f !== 'function') {\n throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');\n }\n if (acc === null) return f;\n return function chainedFunction(...args) {\n // @ts-ignore\n acc.apply(this, args);\n // @ts-ignore\n f.apply(this, args);\n };\n }, null);\n}\nexport default createChainedFunction;","import classNames from 'classnames';\nimport css from 'dom-helpers/css';\nimport React, { useMemo } from 'react';\nimport { ENTERED, ENTERING, EXITED, EXITING } from 'react-transition-group/Transition';\nimport { getChildRef } from '@restart/ui/utils';\nimport transitionEndListener from './transitionEndListener';\nimport createChainedFunction from './createChainedFunction';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst MARGINS = {\n height: ['marginTop', 'marginBottom'],\n width: ['marginLeft', 'marginRight']\n};\nfunction getDefaultDimensionValue(dimension, elem) {\n const offset = `offset${dimension[0].toUpperCase()}${dimension.slice(1)}`;\n const value = elem[offset];\n const margins = MARGINS[dimension];\n return value +\n // @ts-ignore\n parseInt(css(elem, margins[0]), 10) +\n // @ts-ignore\n parseInt(css(elem, margins[1]), 10);\n}\nconst collapseStyles = {\n [EXITED]: 'collapse',\n [EXITING]: 'collapsing',\n [ENTERING]: 'collapsing',\n [ENTERED]: 'collapse show'\n};\nconst Collapse = /*#__PURE__*/React.forwardRef(({\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n className,\n children,\n dimension = 'height',\n in: inProp = false,\n timeout = 300,\n mountOnEnter = false,\n unmountOnExit = false,\n appear = false,\n getDimensionValue = getDefaultDimensionValue,\n ...props\n}, ref) => {\n /* Compute dimension */\n const computedDimension = typeof dimension === 'function' ? dimension() : dimension;\n\n /* -- Expanding -- */\n const handleEnter = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = '0';\n }, onEnter), [computedDimension, onEnter]);\n const handleEntering = useMemo(() => createChainedFunction(elem => {\n const scroll = `scroll${computedDimension[0].toUpperCase()}${computedDimension.slice(1)}`;\n elem.style[computedDimension] = `${elem[scroll]}px`;\n }, onEntering), [computedDimension, onEntering]);\n const handleEntered = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onEntered), [computedDimension, onEntered]);\n\n /* -- Collapsing -- */\n const handleExit = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = `${getDimensionValue(computedDimension, elem)}px`;\n triggerBrowserReflow(elem);\n }, onExit), [onExit, getDimensionValue, computedDimension]);\n const handleExiting = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onExiting), [computedDimension, onExiting]);\n return /*#__PURE__*/_jsx(TransitionWrapper, {\n ref: ref,\n addEndListener: transitionEndListener,\n ...props,\n \"aria-expanded\": props.role ? inProp : null,\n onEnter: handleEnter,\n onEntering: handleEntering,\n onEntered: handleEntered,\n onExit: handleExit,\n onExiting: handleExiting,\n childRef: getChildRef(children),\n in: inProp,\n timeout: timeout,\n mountOnEnter: mountOnEnter,\n unmountOnExit: unmountOnExit,\n appear: appear,\n children: (state, innerProps) => /*#__PURE__*/React.cloneElement(children, {\n ...innerProps,\n className: classNames(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'collapse-horizontal')\n })\n });\n});\n\n// @ts-ignore\n\nexport default Collapse;","\"use client\";\n\nimport * as React from 'react';\nexport function isAccordionItemSelected(activeEventKey, eventKey) {\n return Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;\n}\nconst context = /*#__PURE__*/React.createContext({});\ncontext.displayName = 'AccordionContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport Collapse from './Collapse';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * This component accepts all of [`Collapse`'s props](/docs/utilities/transitions#collapse-1).\n */\nconst AccordionCollapse = /*#__PURE__*/React.forwardRef(({\n as: Component = 'div',\n bsPrefix,\n className,\n children,\n eventKey,\n ...props\n}, ref) => {\n const {\n activeEventKey\n } = useContext(AccordionContext);\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-collapse');\n return /*#__PURE__*/_jsx(Collapse, {\n ref: ref,\n in: isAccordionItemSelected(activeEventKey, eventKey),\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(Component, {\n children: React.Children.only(children)\n })\n });\n});\nAccordionCollapse.displayName = 'AccordionCollapse';\nexport default AccordionCollapse;","\"use client\";\n\nimport * as React from 'react';\nconst context = /*#__PURE__*/React.createContext({\n eventKey: ''\n});\ncontext.displayName = 'AccordionItemContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionBody = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-body');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n return /*#__PURE__*/_jsx(AccordionCollapse, {\n eventKey: eventKey,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionBody.displayName = 'AccordionBody';\nexport default AccordionBody;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport classNames from 'classnames';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport AccordionItemContext from './AccordionItemContext';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useAccordionButton(eventKey, onClick) {\n const {\n activeEventKey,\n onSelect,\n alwaysOpen\n } = useContext(AccordionContext);\n return e => {\n /*\n Compare the event key in context with the given event key.\n If they are the same, then collapse the component.\n */\n let eventKeyPassed = eventKey === activeEventKey ? null : eventKey;\n if (alwaysOpen) {\n if (Array.isArray(activeEventKey)) {\n if (activeEventKey.includes(eventKey)) {\n eventKeyPassed = activeEventKey.filter(k => k !== eventKey);\n } else {\n eventKeyPassed = [...activeEventKey, eventKey];\n }\n } else {\n // activeEventKey is undefined.\n eventKeyPassed = [eventKey];\n }\n }\n onSelect == null || onSelect(eventKeyPassed, e);\n onClick == null || onClick(e);\n };\n}\nconst AccordionButton = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'button',\n bsPrefix,\n className,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-button');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n const accordionOnClick = useAccordionButton(eventKey, onClick);\n const {\n activeEventKey\n } = useContext(AccordionContext);\n if (Component === 'button') {\n props.type = 'button';\n }\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n onClick: accordionOnClick,\n ...props,\n \"aria-expanded\": Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : eventKey === activeEventKey,\n className: classNames(className, bsPrefix, !isAccordionItemSelected(activeEventKey, eventKey) && 'collapsed')\n });\n});\nAccordionButton.displayName = 'AccordionButton';\nexport default AccordionButton;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionButton from './AccordionButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionHeader = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'h2',\n 'aria-controls': ariaControls,\n bsPrefix,\n className,\n children,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-header');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(AccordionButton, {\n onClick: onClick,\n \"aria-controls\": ariaControls,\n children: children\n })\n });\n});\nAccordionHeader.displayName = 'AccordionHeader';\nexport default AccordionHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n eventKey,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-item');\n const contextValue = useMemo(() => ({\n eventKey\n }), [eventKey]);\n return /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionItem.displayName = 'AccordionItem';\nexport default AccordionItem;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionBody from './AccordionBody';\nimport AccordionButton from './AccordionButton';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionContext from './AccordionContext';\nimport AccordionHeader from './AccordionHeader';\nimport AccordionItem from './AccordionItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n activeKey,\n bsPrefix,\n className,\n onSelect,\n flush,\n alwaysOpen,\n ...controlledProps\n } = useUncontrolled(props, {\n activeKey: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'accordion');\n const contextValue = useMemo(() => ({\n activeEventKey: activeKey,\n onSelect,\n alwaysOpen\n }), [activeKey, onSelect, alwaysOpen]);\n return /*#__PURE__*/_jsx(AccordionContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...controlledProps,\n className: classNames(className, prefix, flush && `${prefix}-flush`)\n })\n });\n});\nAccordion.displayName = 'Accordion';\nexport default Object.assign(Accordion, {\n Button: AccordionButton,\n Collapse: AccordionCollapse,\n Item: AccordionItem,\n Header: AccordionHeader,\n Body: AccordionBody\n});","import React from 'react';\n\nexport function MinusSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fillRule='evenodd'\n d='M7 11h10c.554 0 1 .446 1 1s-.446 1-1 1H7c-.554 0-1-.446-1-1s.446-1 1-1'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = '&nbsp;';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\n {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n }\n );\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n",":local {\n .animatedBorder {\n position: relative;\n padding: 0.25rem;\n border-radius: 1rem;\n background: linear-gradient(\n 90deg,\n #ff6ec4,\n #7873f5,\n #4facfe,\n #00f2fe,\n #4facfe,\n #7873f5,\n #ff6ec4\n );\n background-size: 200% 200%;\n animation: borderRotate 3s ease infinite;\n box-sizing: border-box;\n }\n\n .animatedBorderContent {\n background-color: white;\n border-radius: 0.875rem;\n overflow: hidden;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n\n @keyframes :local(borderRotate) {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n}","import React from 'react';\n\nimport styles from './animated-border.module.scss';\n\ninterface AnimatedBorderProps {\n enabled: boolean;\n children: React.ReactNode;\n}\n\nexport function AnimatedBorder({ enabled, children }: AnimatedBorderProps): JSX.Element {\n if (!enabled) {\n return <>{children}</>;\n }\n\n return (\n <div className={styles.animatedBorder}>\n <div className={`${styles.animatedBorderContent} p-2`}>\n {children}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.module.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, 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 video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <PersonCardWrapper person={props.person}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Medium)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &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}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className='partial-loading-background mb-1' style={{ width: '90%', height: '21px' }} />\n <div className='partial-loading-background' style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className='partial-loading-background mb-1' style={{ width: '100%', height: '1rem' }} />\n <div className='partial-loading-background mb-1' style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className='partial-loading-background' style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{}}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}\n","import React from 'react';\n\nexport function ThumbsDownSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M19.4 4.362h-3.119a.6.6 0 0 0-.6.6v.233l-1.774-.705a1.8 1.8 0 0 0-.67-.128H6.731a1.82 1.82 0 0 0-1.798 1.572l-.916 6.804a1.815 1.815 0 0 0 1.797 2.057h3.833l.82 3.173a2.23 2.23 0 0 0 2.155 1.67c1.487 0 2.53-1.33 2.147-2.81l-.361-1.401a1.02 1.02 0 0 1 .61-1.202l.663-.263v.233a.6.6 0 0 0 .6.6H19.4a.6.6 0 0 0 .6-.6V4.962a.6.6 0 0 0-.6-.6m-3.719 8.309-1.106.439a2.22 2.22 0 0 0-1.33 2.617l.363 1.401c.174.676-.22 1.26-.915 1.307a1.03 1.03 0 0 1-1.065-.767l-.936-3.623a.6.6 0 0 0-.58-.45H5.813a.613.613 0 0 1-.608-.697l.916-6.804a.616.616 0 0 1 .609-.532h6.506q.118 0 .227.044l2.217.88zm3.119.924h-1.919V5.562H18.8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ThumbsUpSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.6 19.638h3.119a.6.6 0 0 0 .6-.6v-.233l1.774.704q.323.128.67.129h6.506a1.82 1.82 0 0 0 1.798-1.572l.916-6.804a1.815 1.815 0 0 0-1.797-2.057h-3.833l-.82-3.173a2.23 2.23 0 0 0-2.155-1.67c-1.487 0-2.53 1.33-2.147 2.81l.362 1.401a1.02 1.02 0 0 1-.61 1.202l-.664.263v-.233a.6.6 0 0 0-.6-.6H4.6a.6.6 0 0 0-.6.6v9.233a.6.6 0 0 0 .6.6m3.719-8.309 1.106-.439a2.22 2.22 0 0 0 1.33-2.617l-.363-1.401c-.174-.676.22-1.26.915-1.307.495-.033.941.289 1.065.767l.936 3.624a.6.6 0 0 0 .58.45h4.298c.373 0 .658.328.608.696l-.916 6.804a.616.616 0 0 1-.609.532h-6.506a.6.6 0 0 1-.227-.044l-2.217-.88zM5.2 10.405h1.919v8.033H5.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.module.scss';\n\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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className='px-1 pb-2 columns-of-five'>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","export enum ClassificationNodeType {\n Root = 'root'\n}\n","export enum PresentationLearningLevel {\n Level_1 = 1, // Primary/Elementary School\n Level_2 = 2, // Middle School\n Level_3 = 3, // Secondary/High School\n Level_4 = 4 // Tertiary/Post-Secondary\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClassificationTab } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs';\nimport { ClassificationNodeType } from 'libs/shared/apps/subjects/enums/ClassificationNodeType';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, CuratedDashboard, DashboardTargetType, Presentation } from 'libs/shared/interfaces';\nimport { Classification } from 'libs/shared/interfaces/models/Classification';\n\nconst namespace = 'subjects.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TopicCounts {\n dashboardVideoCount: number;\n childDashboardVideoCount: number;\n\n dashboardResourceCount: number;\n childDashboardResourceCount: number;\n\n dashboardNewVideosCount: number;\n childDashboardNewVideoCount: number;\n childClassificationCount: number;\n}\n\ntype PresentationImageType = 'cover' | 'tall-poster' | 'topic-banner' | 'new-release-banner';\n\nexport const TopicsHelper = {\n isPresentation(obj: BaseObject): obj is Presentation {\n return 'learningLevel' in obj;\n },\n\n isTopicClassification(obj: BaseObject): obj is Classification {\n return obj?.type === ClassificationType.Subject;\n },\n\n getMappedPresentationLevel(presentationLevel: PresentationLearningLevel): string | PresentationLearningLevel {\n // Handle usage of both enum value and its stringified version (online vs. lite)\n return typeof presentationLevel === 'string' ?\n PresentationLearningLevel[presentationLevel] :\n presentationLevel;\n },\n\n getMappedPresentationBackgroundColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'bg-indigo';\n case PresentationLearningLevel.Level_2: return 'bg-teal';\n case PresentationLearningLevel.Level_3: return 'bg-blue';\n case PresentationLearningLevel.Level_4: return 'bg-navy';\n default: return 'bg-green';\n }\n },\n\n getMappedPresentationLightBackgroundColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'bg-light-indigo';\n case PresentationLearningLevel.Level_2: return 'bg-light-teal';\n case PresentationLearningLevel.Level_3: return 'bg-light-blue';\n case PresentationLearningLevel.Level_4: return 'bg-light-navy';\n default: return 'bg-light-green';\n }\n },\n\n getMappedPresentationBorderColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'border-indigo';\n case PresentationLearningLevel.Level_2: return 'border-teal';\n case PresentationLearningLevel.Level_3: return 'border-blue';\n case PresentationLearningLevel.Level_4: return 'border-navy';\n default: return 'border-green';\n }\n },\n\n // TODO: This should maybe live on the presentation metadata at some point instead.\n getMappedPresentationBackgroundColourCode(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return '#7A76E8';\n case PresentationLearningLevel.Level_2: return '#40BCC3';\n case PresentationLearningLevel.Level_3: return '#38A2E8';\n case PresentationLearningLevel.Level_4: return '#1B2D71';\n default: return '#5DC786';\n }\n },\n\n getPresentationLevelImage(presentationLevel: PresentationLearningLevel, imageType: PresentationImageType): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_1.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_1.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_1.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_1.TOPIC_TALL_POSTER;\n }\n\n case PresentationLearningLevel.Level_2: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_2.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_2.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_2.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_2.TOPIC_TALL_POSTER;\n }\n\n default:\n case PresentationLearningLevel.Level_3: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_3.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_3.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_3.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_3.TOPIC_TALL_POSTER;\n }\n\n case PresentationLearningLevel.Level_4: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_4.TOPIC_BANNER;\n\n if (imageType === 'cover')\n return HardCoded.Images.Level_4.TOPIC_COVER;\n }\n }\n },\n\n getExploreAllTopicsTitle(presentationName: string, presentationCount: number): string {\n if (presentationCount < TopicsConstants.MULTI_PRESENTATION_THRESHOLD)\n return getPhrase('exploreAllTopicsHeading');\n\n return getPhrase('exploreAllTopicsDynamicHeading', { presentationName });\n },\n\n getExploreAllTopicsBreadcrumb(presentationName: string, presentationCount: number): string {\n if (presentationCount < TopicsConstants.MULTI_PRESENTATION_THRESHOLD)\n return getPhrase('exploreAllTopicsHeading');\n\n return presentationName;\n },\n\n isFollowing(classification: Classification): boolean {\n return classification?.followers?.data?.length === 1;\n },\n\n isTopLevelTopic(classification: Classification): boolean {\n return !!classification?.parentIds?.includes(ClassificationNodeType.Root);\n },\n\n canHaveVideoListTab(dashboard: CuratedDashboard): boolean {\n return dashboard?.widgets?.some(w => w.metadata?.showInTableOfContents);\n },\n\n getActiveTopicTab(classification: Classification, targetType: DashboardTargetType): ClassificationTab {\n if (TopicsHelper.isTopLevelTopic(classification))\n return targetType === DashboardTargetType.Classification ? 'new-releases' : 'all-topics';\n\n return targetType === DashboardTargetType.Classification ? 'curated-topic' : 'curriculum';\n },\n\n getCounts(classification: Classification): TopicCounts {\n const childClassificationCount = classification?.metadata?.childClassificationCount ?? 0;\n\n if (!classification?.externalMetadata) {\n return {\n childClassificationCount,\n\n dashboardVideoCount: 0,\n childDashboardVideoCount: 0,\n\n dashboardResourceCount: 0,\n childDashboardResourceCount: 0,\n\n dashboardNewVideosCount: 0,\n childDashboardNewVideoCount: 0\n };\n }\n\n return {\n childClassificationCount,\n\n dashboardVideoCount: classification.externalMetadata.dashboardVideoCount || 0,\n childDashboardVideoCount: classification.externalMetadata.childDashboardVideoCount || 0,\n\n dashboardResourceCount: classification.externalMetadata.dashboardResourceCount || 0,\n childDashboardResourceCount: classification.externalMetadata.childDashboardResourceCount || 0,\n\n dashboardNewVideosCount: classification.externalMetadata.dashboardNewVideosCount || 0,\n childDashboardNewVideoCount: classification.externalMetadata.childDashboardNewVideoCount || 0\n };\n },\n\n isTertiary(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.AU_TERTIARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.UK_TERTIARY.toString()\n );\n },\n\n isNewZealandTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.NZ_PRIMARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.NZ_SECONDARY.toString()\n );\n },\n\n isCanadaTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.CA_ELEMENTARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.CA_MIDDLE.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.CA_HIGH.toString()\n );\n },\n\n isInternationalTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.INT_PRIMARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.INT_SECONDARY.toString()\n );\n },\n\n isMtv(classification: Classification): boolean {\n if (!classification?.tags?.data)\n return false;\n\n return classification.tags.data.some(t => t.tagType === TagType.Curation && t.name === CurationTag.MOVIES_AND_TV);\n },\n\n sortByLearningLevel(a: Classification, b: Classification, availablePresentations: Presentation[]): number {\n const aPresentation = availablePresentations.find(p => p?.id.toString() === a?.presentationId?.toString());\n const bPresentation = availablePresentations.find(p => p?.id.toString() === b?.presentationId?.toString());\n const aLearningLevel = PresentationLearningLevel[aPresentation?.learningLevel] as unknown as number; // ts does not play nice\n const bLearningLevel = PresentationLearningLevel[bPresentation?.learningLevel] as unknown as number;\n\n return aLearningLevel - bLearningLevel;\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget ?\n props.appLinks?.classificationLatestReleases?.(data) :\n props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nexport function HamburgerSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='nonzero'\n d='M19 15.75a.75.75 0 0 1 .102 1.493L19 17.25H5a.75.75 0 0 1-.102-1.493L5 15.75zm0-5a.75.75 0 0 1 .102 1.493L19 12.25H5a.75.75 0 0 1-.102-1.493L5 10.75zm0-5a.75.75 0 0 1 .102 1.493L19 7.25H5a.75.75 0 0 1-.102-1.493L5 5.75z'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});\n","import { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { BaseObject, ReorderRequest } from 'libs/shared/interfaces';\n\ninterface ReorderResult<T extends BaseObject> {\n reorderRequest: ReorderRequest;\n reorderedItems: T[];\n}\n\nexport const ReorderHelper = {\n reorder<T extends BaseObject>(items: T[], oldIdx: number, newIdx: number): ReorderResult<T> {\n if (oldIdx === newIdx)\n return { reorderedItems: items, reorderRequest: null };\n\n const reorderedItems: T[] = ArrayHelper.moveItem(items, oldIdx, newIdx);\n\n /**\n * If newIdx is the last idx then we set\n * destinationMemberId to null.\n */\n const destinationMemberId = newIdx < items.length - 1 ?\n reorderedItems[newIdx + 1].id :\n null;\n\n const reorderRequest: ReorderRequest = {\n sourceMemberId: reorderedItems[newIdx].id,\n destinationMemberId\n };\n\n return { reorderedItems, reorderRequest };\n },\n\n updateState(\n dataPrefix: string,\n reorderRequest: ReorderRequest,\n data: {[key: string]: HashObject }\n ): {[key: string]: HashObject } {\n const items: BaseObject[] = [];\n const updatedData = ObjectHelper.deepClone(data);\n\n const keys = [dataPrefix]; // Maintain an ordered list of keys.\n let page = data[dataPrefix];\n const pageSize = !!page && !!page.data && page.data.length;\n\n /**\n * Flatten items\n */\n while (page) {\n if (!Array.isArray(page.data))\n break;\n\n items.push(...page.data as BaseObject[]);\n\n const nextCursor = page.pagination\n && page.pagination.cursors\n && page.pagination.cursors.next;\n\n const nextKey = !!nextCursor && `${dataPrefix}:${nextCursor}`;\n\n page = nextCursor && data[nextKey];\n\n if (page)\n keys.push(nextKey);\n }\n\n if (!items.length)\n return data;\n\n /**\n * Reorder items\n */\n const removeIdx = ArrayHelper.findIndex(items, i => i.id === reorderRequest.sourceMemberId);\n\n let reorderedItems = [...items];\n\n const itemToMove = reorderedItems.splice(removeIdx, 1);\n\n const insertIdx = reorderRequest.destinationMemberId ?\n ArrayHelper.findIndex(reorderedItems, r => r.id === reorderRequest.destinationMemberId) :\n reorderedItems.length;\n\n reorderedItems.splice(insertIdx, 0, itemToMove[0]);\n\n reorderedItems = reorderedItems.map(v => ({ id: v.id }));\n\n /**\n * Paginate reordered items\n */\n keys.forEach(key => {\n const itemsToInsert = reorderedItems.splice(0, pageSize);\n updatedData[key].data = itemsToInsert;\n });\n\n return updatedData;\n }\n};\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing ?\n content.map((c, index) => ({ id: c.id, hidden: true, index })) :\n Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(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?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.module.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.module.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className='text-decoration-none my-2 mx-1 rounded-3 d-block position-relative'\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): string {\n // in sliding widget we use icon from classification\n return ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification)}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup,\n startDate: string,\n endDate: string,\n body: DateWidgetItem['body'],\n monthLabel: string,\n event: CalendarEvent<CalendarEventContent>,\n label: string\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month') ?\n DateHelper.format(nextWeekStart, 'MMMM') :\n `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n}\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}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\n }\n }\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return styles.rowWidth;\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className='col px-1'>\n <div className='d-inline-block w-100 partial-loading-background rounded-3 pb-5' />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &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}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SparkleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M16.465 11.636a.469.469 0 0 1-.897-.003 5.11 5.11 0 0 0-3.204-3.202.469.469 0 0 1 .002-.897 5.11 5.11 0 0 0 3.203-3.203.469.469 0 0 1 .897.002 5.11 5.11 0 0 0 3.203 3.202.469.469 0 0 1-.002.897 5.11 5.11 0 0 0-3.202 3.204m-1.46-4.664a6 6 0 0 1-1.343 1.011c.492.273.946.614 1.344 1.011.397.398.738.852 1.01 1.344a6 6 0 0 1 1.012-1.344 6 6 0 0 1 1.344-1.01 6 6 0 0 1-1.344-1.012 6 6 0 0 1-1.011-1.344 6 6 0 0 1-1.011 1.344m-2.104 7.345.754.25a.469.469 0 0 1 0 .89l-.754.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.913 3.81a6.1 6.1 0 0 1 1.261-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.262 6.1 6.1 0 0 1-1.262-1.852 6.1 6.1 0 0 1-1.261 1.852 6.1 6.1 0 0 1-1.852 1.261c.688.301 1.32.732 1.852 1.262a6.1 6.1 0 0 1 1.262 1.852M4.33 6.924a2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897 2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897m2.147-1.412c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964 3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964m11.495 9.865a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.47.47 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window',\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","@import '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n",":local {\n .isNew {\n color: $ultramarine;\n background-color: lighten($ultramarine, 35%);\n }\n\n .newVideos {\n color: $green;\n background-color: lighten($green, 40%);\n }\n\n .badge {\n font-size: 0.6875rem;\n }\n\n .icon {\n margin-right: 0.1rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './subject-stats-badge.module.scss';\n\nexport type ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n badgeType: ClassificationBadgeType;\n newVideoCount?: number;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (props.badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (props.badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: props.newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {props.badgeType === 'coming-soon' && (\n <SvgContainer\n svg={TimerSvg}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId ?\n ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium) :\n ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n &quot;\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n &quot;\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} />&nbsp;\n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <>&nbsp;{getPhrase('or')}&nbsp;</> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n",":local {\n $badge-size: 1.875rem;\n\n .container:hover {\n background-color: $light-blue;\n\n .bellContainer {\n display: flex;\n }\n }\n\n .bell {\n display: none;\n }\n\n .bellContainer {\n color: $dark;\n background-color: rgba($gray-200, 0.8);\n border-radius: 50%;\n z-index: 1;\n position: absolute;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n\n display: none;\n\n width: $badge-size;\n height: $badge-size;\n\n &:hover,\n &.followed {\n background-color: rgba($gray-200, 0.9);\n display: flex;\n\n .bellOutline {\n display: none;\n }\n\n .bell {\n opacity: 0.75;\n display: block;\n }\n }\n }\n\n .cover {\n height: 5rem;\n width: 5rem;\n min-width: 5rem;\n }\n\n .fallbackImage {\n height: 5rem;\n min-width: 5rem;\n border: none;\n }\n\n .subText {\n font-size: 0.6875rem;\n }\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nexport function BellFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M10.33 5.26c-1.023.373-1.72 1.155-2.158 2.369-.466 1.29-.655 3.104-.67 5.533-.002.112-.038.22-.102.305L5.08 16.56A.9.9 0 0 0 5.8 18h3.306q.049.13.112.251c.13.255.32.53.566.784.493.51 1.241.965 2.216.965s1.723-.455 2.216-.965c.246-.255.436-.53.566-.784a3 3 0 0 0 .112-.251H18.2a.9.9 0 0 0 .72-1.44l-2.32-3.093a.5.5 0 0 1-.101-.305c-.018-2.27-.214-4.07-.695-5.392-.447-1.232-1.157-2.09-2.211-2.498a1.8 1.8 0 0 0-.352-.722c-.28-.34-.7-.55-1.24-.55s-.965.208-1.261.53a1.9 1.9 0 0 0-.41.73M13.77 18a2.4 2.4 0 0 1-.274.34c-.353.365-.855.66-1.497.66s-1.144-.295-1.497-.66a2.4 2.4 0 0 1-.274-.34z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function BellSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M8.172 7.629c.438-1.214 1.135-1.996 2.157-2.369a1.9 1.9 0 0 1 .41-.73C11.037 4.208 11.462 4 12 4c.542 0 .96.21 1.241.55.182.22.291.474.352.722 1.054.409 1.764 1.266 2.211 2.498.48 1.323.677 3.122.695 5.392 0 .112.037.22.101.305l2.32 3.093A.9.9 0 0 1 18.2 18h-3.306a3 3 0 0 1-.112.251c-.13.255-.32.53-.566.784-.493.51-1.241.965-2.216.965s-1.723-.455-2.216-.965a3.3 3.3 0 0 1-.566-.784A3 3 0 0 1 9.106 18H5.8a.9.9 0 0 1-.72-1.44l2.32-3.093a.5.5 0 0 0 .101-.305c.016-2.429.205-4.243.67-5.533M18 17l-2.2-2.933a1.5 1.5 0 0 1-.301-.898c-.017-2.241-.215-3.9-.635-5.058-.411-1.134-1.016-1.738-1.854-1.981A3.6 3.6 0 0 0 12 6a4.2 4.2 0 0 0-1.115.132c-.809.223-1.381.752-1.773 1.836-.404 1.12-.595 2.79-.61 5.2-.003.321-.106.638-.302.899L6 17zm-7.771 1c.074.112.166.228.274.34.353.365.855.66 1.497.66s1.144-.295 1.497-.66c.108-.112.2-.228.274-.34z'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationBadgeType, SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.module.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n hideCounts: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon || props.hideCounts)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0 && !props.hideCounts)\n return 'new-videos';\n\n return null;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished,\n countsHidden: !!props.hideCounts\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 rounded-end-lg ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svg={BellFilledSvg}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svg={BellSvg}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className='h6 mb-0 clamp-2 mt-1'>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge badgeType={getBadgeType()} newVideoCount={newVideoCount} />\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface StatsCoverFixedPillListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n hasTableOfContents: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n appLinks: {\n classification: (classification: Classification) => Core.AppLink\n };\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n}\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(\n props: StatsCoverFixedPillListLargeWidgetTemplateProps\n): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n\n /**\n * We're currently hiding counts for tertiary customers without the exchange\n * because all counting is done by a background process that can't take the\n * current users' credentials into account. Because about half of our tertiary\n * customers don't have the exchange, and the other half do, and we use exchange\n * content on our tertiary topics, the counts will be higher for non-exchange\n * customers than they really are for them.\n * \n * This is shit and hopefully we can come up with a better solution one day\n * - Josh\n */\n hideCounts={props.isTertiaryCustomerWithoutExchange}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\n}\n","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.module.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\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.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\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 owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\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 analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\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 {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n",":local {\n .thumbnailTitle:hover {\n text-decoration: underline;\n }\n}","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.module.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",":local {\n .badge {\n height: 1.5rem;\n }\n\n .mask {\n opacity: 0;\n }\n\n .thumbnailContainer:hover {\n .mask {\n opacity: 1;\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, UserAction } 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 { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink;\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: 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 function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={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 svg={PlaySvg} 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 svg={PlaySvg} 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 svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount ?\n <span>{videoCount}</span> :\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.module.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item-v2.module.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\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 preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n type='static'\n appLink={props.getAppLink(props.data)}\n imageOptions={{ size: props.thumbnailSize }}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { 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 resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\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={MultimediaWidgetItem}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailFeaturedMediaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: WidgetTemplateCoverFixedTileListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: WidgetTemplateEditableCoverFixedPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: WidgetTemplateQuestionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: WidgetTemplateQuestionAccordionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListMediaLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateCircleLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n",":local {\n .anchor {\n scroll-margin-top: 4.18rem;\n }\n\n .widgetHighlight {\n animation: blinker 4s linear 1;\n border-radius: $border-radius-lg;\n position: relative;\n z-index: 1;\n background-color: white;\n }\n\n @keyframes :local(blinker) {\n from {\n box-shadow: 0 0 1.75rem $blue;\n }\n to {\n box-shadow: none;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnimatedBorder } from 'libs/shared/components/widgets/curated-widgets/components/animated-border/AnimatedBorder';\nimport { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllPartnerProfileWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.module.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\n/**\n * Type mapping from DashboardTargetType to their corresponding Widget Template Props\n * This makes it easy to extract the correct widget template type based on dashboard target\n */\nexport type DashboardTargetToWidgetTemplateMap = {\n [DashboardTargetType.Classification]: AllClassificationWidgetTemplates,\n [DashboardTargetType.Discover]: AllDiscoverWidgetTemplates,\n [DashboardTargetType.Company]: AllCompanyWidgetTemplates,\n [DashboardTargetType.MoviesAndTv]: AllMoviesAndTvWidgetTemplates,\n [DashboardTargetType.Search]: AllSearchWidgetTemplates,\n [DashboardTargetType.PartnerProfile]: AllPartnerProfileWidgetTemplates,\n [DashboardTargetType.DiscoverPartnerProfiles]: AllPartnerProfileWidgetTemplates,\n // Add defaults for other dashboard targets that don't have specific templates\n [DashboardTargetType.ClassificationDirectory]: AllClassificationWidgetTemplates,\n [DashboardTargetType.ClassificationCurriculum]: AllClassificationWidgetTemplates,\n [DashboardTargetType.PartnerProfileHub]: AllPartnerProfileWidgetTemplates\n};\n\n/**\n * Helper type to extract widget template props for a specific dashboard target\n */\nexport type WidgetTemplatePropsForTarget<T extends DashboardTargetType> =\n T extends keyof DashboardTargetToWidgetTemplateMap ?\n DashboardTargetToWidgetTemplateMap[T] :\n AllWidgetTemplateProps;\n\ninterface BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n /**\n * This is different from `settings` props \n * which is union of all settings used \n * within different widgets. \n */\n settingsHash?: SettingsHash;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, itemName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n className?: string;\n}\n\ntype WidgetContainerViewPropsForTarget<T extends DashboardTargetType> =\n BaseWidgetContainerViewProps &\n Omit<WidgetTemplatePropsForTarget<T>, 'content' | 'metadata'> &\n { widgetCollection?: T };\n\ntype ClassificationWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Classification>;\ntype DiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Discover>;\ntype CompanyWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Company>;\ntype MoviesAndTvWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.MoviesAndTv>;\ntype SearchWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Search>;\ntype PartnerProfileDashboardWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.PartnerProfile>;\ntype PartnerProfileDiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.DiscoverPartnerProfiles>;\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps |\n PartnerProfileDashboardWidgetContainerViewProps |\n PartnerProfileDiscoverWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request,\n content?: never\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent,\n getContentRequest?: never\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const isWidgetEnabled = CuratedDashboardHelper.isWidgetTypeEnabled(\n props.widgetTypeId,\n props?.settingsHash,\n props?.dashboardTarget\n );\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = isWidgetEnabled && FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && isWidgetEnabled && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n function onClickRemoveItem(itemId: string, itemName: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, itemName, props.id, props.widgetTypeId);\n }\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const template = WidgetTemplateConfig[props.templateId];\n\n if (!template || !showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n \n const PartialTemplate = template.partialLoading;\n const Template = template.getComponent(props.widgetTypeId);\n const widgetTemplateClass = classNames(template.className, props.className);\n\n const hasNewVideoHighlight = props.isEditing && props.metadata.aiAddedVideo;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <AnimatedBorder enabled={hasNewVideoHighlight}>\n <div className={props.isScrollToTargetWidget ? `py-2 px-3 rounded-3 ${styles.widgetHighlight}` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate\n name={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 </AnimatedBorder>\n </div>\n );\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport {\n CuratedDashboard,\n DashboardStatus,\n DashboardTargetType,\n DashboardUserType,\n Presentation\n} from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\ninterface UseFetchDashboardOptions {\n targetType: DashboardTargetType;\n dashboardId?: string;\n companyId?: string;\n classificationId?: string;\n partnerProfileSlug?: string;\n}\n\nexport function useFetchDashboard(options: UseFetchDashboardOptions) {\n const presentation = Flight.useBasicFetch<Presentation>(PresentationRequests.streamablePresentation());\n\n function shouldFetchDashboard(): boolean {\n return presentation.hasCompleted;\n }\n\n function getStatuses(): DashboardStatus[] {\n if (options.dashboardId) return [ DashboardStatus.Published, DashboardStatus.Draft ];\n\n return [DashboardStatus.Published];\n }\n\n const dashboard = Flight.useBasicFetch<CuratedDashboard>(\n shouldFetchDashboard() &&\n DashboardRequests.getDashboard(\n DashboardUserType.Any,\n getStatuses(),\n CuratedDashboardHelper.getUnknownDashboardTarget({\n targetType: options.targetType,\n presentationId: presentation.data.id,\n companyId: options.companyId,\n classificationId: options.classificationId,\n slug: options.partnerProfileSlug\n }),\n null,\n options.dashboardId\n )\n );\n\n return {\n dashboard,\n isPreviewing: !!options.dashboardId\n };\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}
1
+ {"version":3,"file":"e2K2YU7z.chunk.js","names":["context","AccordionContext","AccordionItemContext","AccordionContext","AccordionButton","AccordionItemContext","AccordionButton","AccordionItemContext"],"sources":["../../../../../node_modules/react-bootstrap/esm/createChainedFunction.js","../../../../../node_modules/react-bootstrap/esm/Collapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionCollapse.js","../../../../../node_modules/react-bootstrap/esm/AccordionItemContext.js","../../../../../node_modules/react-bootstrap/esm/AccordionBody.js","../../../../../node_modules/react-bootstrap/esm/AccordionButton.js","../../../../../node_modules/react-bootstrap/esm/AccordionHeader.js","../../../../../node_modules/react-bootstrap/esm/AccordionItem.js","../../../../../node_modules/react-bootstrap/esm/Accordion.js","../../../../libs/shared/src/images/svg/actions/MinusSvg.tsx","../../../../libs/shared/src/components/expandable-question/expandable-question.module.scss","../../../../libs/shared/src/components/expandable-question/ExpandableQuestion.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/animated-border.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/animated-border/AnimatedBorder.tsx","../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/popout-video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/thumbnail-fixed-list-search-cta-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/status/VerifiedSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/author-reviewer-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/circle-logo-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/partial-circle-logo-sliding-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/emoji-text/emoji-text.module.scss","../../../../libs/shared/src/components/emoji-text/EmojiText.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsDownSvg.tsx","../../../../libs/shared/src/images/svg/actions/ThumbsUpSvg.tsx","../../../../libs/shared/src/components/feedback-form/FeedbackFormValidationSchema.ts","../../../../libs/shared/src/components/feedback-form/feedback-form.module.scss","../../../../libs/shared/src/components/feedback-form/FeedbackForm.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/cover-fixed-pill-list-xsmall.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate.tsx","../../../../libs/shared/src/apps/subjects/enums/ClassificationNodeType.ts","../../../../libs/shared/src/enums/PresentationLearningLevel.ts","../../../../libs/shared/src/utils/topics-helper/TopicsHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/accordion-button.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/accordion-button/AccordionButton.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/curriculum-accordion-video-list.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/audience-section.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/audience-section/AudienceSection.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/HamburgerSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem.tsx","../../../../libs/shared/src/utils/ReorderHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/editable-cover-fixed-pill-list-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/partial-editable-cover-fixed-pill-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/special-event-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/video-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v1/VideoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/featured-sliding-heading.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/rating-widget-item/rating-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/rating-widget-item/RatingWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/hero-banner.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/GridSvg.tsx","../../../../libs/shared/src/images/svg/objects/RectanglesSvg.tsx","../../../../libs/shared/src/images/svg/objects/SparkleSvg.tsx","../../../../libs/shared/src/constants/WidgetThemingConstants.ts","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/hero-banner-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/classification-hero-thumbnail-small.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.module.scss","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/series-widget-item/PartialSeriesList.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/tall-subject-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/PartialTallSubjectWidget.tsx","../../../../libs/shared/src/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/question-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/question-accordion-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/hooks/useFaqJsonLd.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList.tsx","../../../../libs/shared/src/enums/PartnerType.ts","../../../../libs/shared/src/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/objects/BellFilledSvg.tsx","../../../../libs/shared/src/images/svg/objects/BellSvg.tsx","../../../../libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate.tsx","../../../../libs/shared/src/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/partial-featured-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/library-folder/library-folder.module.scss","../../../../libs/shared/src/components/library-folder/LibraryFolder.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/partial-thumbnail-fixed-list-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/thumbnail-widget-item.module.scss","../../../../libs/shared/src/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/partial-thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/thumbnail-fixed-list-media-large-widget.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/thumbnail-fixed-list-media-large-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/thumbnails/collection/title/collection-thumbnail-title.module.scss","../../../../libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","../../../../libs/shared/src/components/thumbnails/collection/collection-thumbnail.module.scss","../../../../libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/partial-thumbnail-fixed-list-small-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/thumbnail-fixed-list-x-large.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/partial-thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/thumbnail-hero-media-widget-template.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate.tsx","../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/video-widget-item-v2.module.scss","../../../../libs/shared/src/components/widgets/items/video-widget-item/v2/VideoWidgetItemV2.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeadingSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBannerSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateQuestionSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg.tsx","../../../../libs/shared/src/images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg.tsx","../../../../libs/shared/src/constants/WidgetTemplateConfig.ts","../../../../libs/shared/src/components/widgets/curated-widgets/widget-container-view.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/WidgetContainerView.tsx","../../src/shared/hooks/useFetchDashboard.ts"],"sourcesContent":["/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nfunction createChainedFunction(...funcs) {\n return funcs.filter(f => f != null).reduce((acc, f) => {\n if (typeof f !== 'function') {\n throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');\n }\n if (acc === null) return f;\n return function chainedFunction(...args) {\n // @ts-ignore\n acc.apply(this, args);\n // @ts-ignore\n f.apply(this, args);\n };\n }, null);\n}\nexport default createChainedFunction;","import classNames from 'classnames';\nimport css from 'dom-helpers/css';\nimport React, { useMemo } from 'react';\nimport { ENTERED, ENTERING, EXITED, EXITING } from 'react-transition-group/Transition';\nimport { getChildRef } from '@restart/ui/utils';\nimport transitionEndListener from './transitionEndListener';\nimport createChainedFunction from './createChainedFunction';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst MARGINS = {\n height: ['marginTop', 'marginBottom'],\n width: ['marginLeft', 'marginRight']\n};\nfunction getDefaultDimensionValue(dimension, elem) {\n const offset = `offset${dimension[0].toUpperCase()}${dimension.slice(1)}`;\n const value = elem[offset];\n const margins = MARGINS[dimension];\n return value +\n // @ts-ignore\n parseInt(css(elem, margins[0]), 10) +\n // @ts-ignore\n parseInt(css(elem, margins[1]), 10);\n}\nconst collapseStyles = {\n [EXITED]: 'collapse',\n [EXITING]: 'collapsing',\n [ENTERING]: 'collapsing',\n [ENTERED]: 'collapse show'\n};\nconst Collapse = /*#__PURE__*/React.forwardRef(({\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n className,\n children,\n dimension = 'height',\n in: inProp = false,\n timeout = 300,\n mountOnEnter = false,\n unmountOnExit = false,\n appear = false,\n getDimensionValue = getDefaultDimensionValue,\n ...props\n}, ref) => {\n /* Compute dimension */\n const computedDimension = typeof dimension === 'function' ? dimension() : dimension;\n\n /* -- Expanding -- */\n const handleEnter = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = '0';\n }, onEnter), [computedDimension, onEnter]);\n const handleEntering = useMemo(() => createChainedFunction(elem => {\n const scroll = `scroll${computedDimension[0].toUpperCase()}${computedDimension.slice(1)}`;\n elem.style[computedDimension] = `${elem[scroll]}px`;\n }, onEntering), [computedDimension, onEntering]);\n const handleEntered = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onEntered), [computedDimension, onEntered]);\n\n /* -- Collapsing -- */\n const handleExit = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = `${getDimensionValue(computedDimension, elem)}px`;\n triggerBrowserReflow(elem);\n }, onExit), [onExit, getDimensionValue, computedDimension]);\n const handleExiting = useMemo(() => createChainedFunction(elem => {\n elem.style[computedDimension] = null;\n }, onExiting), [computedDimension, onExiting]);\n return /*#__PURE__*/_jsx(TransitionWrapper, {\n ref: ref,\n addEndListener: transitionEndListener,\n ...props,\n \"aria-expanded\": props.role ? inProp : null,\n onEnter: handleEnter,\n onEntering: handleEntering,\n onEntered: handleEntered,\n onExit: handleExit,\n onExiting: handleExiting,\n childRef: getChildRef(children),\n in: inProp,\n timeout: timeout,\n mountOnEnter: mountOnEnter,\n unmountOnExit: unmountOnExit,\n appear: appear,\n children: (state, innerProps) => /*#__PURE__*/React.cloneElement(children, {\n ...innerProps,\n className: classNames(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'collapse-horizontal')\n })\n });\n});\n\n// @ts-ignore\n\nexport default Collapse;","\"use client\";\n\nimport * as React from 'react';\nexport function isAccordionItemSelected(activeEventKey, eventKey) {\n return Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;\n}\nconst context = /*#__PURE__*/React.createContext({});\ncontext.displayName = 'AccordionContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport Collapse from './Collapse';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * This component accepts all of [`Collapse`'s props](/docs/utilities/transitions#collapse-1).\n */\nconst AccordionCollapse = /*#__PURE__*/React.forwardRef(({\n as: Component = 'div',\n bsPrefix,\n className,\n children,\n eventKey,\n ...props\n}, ref) => {\n const {\n activeEventKey\n } = useContext(AccordionContext);\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-collapse');\n return /*#__PURE__*/_jsx(Collapse, {\n ref: ref,\n in: isAccordionItemSelected(activeEventKey, eventKey),\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(Component, {\n children: React.Children.only(children)\n })\n });\n});\nAccordionCollapse.displayName = 'AccordionCollapse';\nexport default AccordionCollapse;","\"use client\";\n\nimport * as React from 'react';\nconst context = /*#__PURE__*/React.createContext({\n eventKey: ''\n});\ncontext.displayName = 'AccordionItemContext';\nexport default context;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionBody = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-body');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n return /*#__PURE__*/_jsx(AccordionCollapse, {\n eventKey: eventKey,\n onEnter: onEnter,\n onEntering: onEntering,\n onEntered: onEntered,\n onExit: onExit,\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionBody.displayName = 'AccordionBody';\nexport default AccordionBody;","\"use client\";\n\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport classNames from 'classnames';\nimport AccordionContext, { isAccordionItemSelected } from './AccordionContext';\nimport AccordionItemContext from './AccordionItemContext';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useAccordionButton(eventKey, onClick) {\n const {\n activeEventKey,\n onSelect,\n alwaysOpen\n } = useContext(AccordionContext);\n return e => {\n /*\n Compare the event key in context with the given event key.\n If they are the same, then collapse the component.\n */\n let eventKeyPassed = eventKey === activeEventKey ? null : eventKey;\n if (alwaysOpen) {\n if (Array.isArray(activeEventKey)) {\n if (activeEventKey.includes(eventKey)) {\n eventKeyPassed = activeEventKey.filter(k => k !== eventKey);\n } else {\n eventKeyPassed = [...activeEventKey, eventKey];\n }\n } else {\n // activeEventKey is undefined.\n eventKeyPassed = [eventKey];\n }\n }\n onSelect == null || onSelect(eventKeyPassed, e);\n onClick == null || onClick(e);\n };\n}\nconst AccordionButton = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'button',\n bsPrefix,\n className,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-button');\n const {\n eventKey\n } = useContext(AccordionItemContext);\n const accordionOnClick = useAccordionButton(eventKey, onClick);\n const {\n activeEventKey\n } = useContext(AccordionContext);\n if (Component === 'button') {\n props.type = 'button';\n }\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n onClick: accordionOnClick,\n ...props,\n \"aria-expanded\": Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : eventKey === activeEventKey,\n className: classNames(className, bsPrefix, !isAccordionItemSelected(activeEventKey, eventKey) && 'collapsed')\n });\n});\nAccordionButton.displayName = 'AccordionButton';\nexport default AccordionButton;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionButton from './AccordionButton';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionHeader = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'h2',\n 'aria-controls': ariaControls,\n bsPrefix,\n className,\n children,\n onClick,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-header');\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix),\n children: /*#__PURE__*/_jsx(AccordionButton, {\n onClick: onClick,\n \"aria-controls\": ariaControls,\n children: children\n })\n });\n});\nAccordionHeader.displayName = 'AccordionHeader';\nexport default AccordionHeader;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionItemContext from './AccordionItemContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst AccordionItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n eventKey,\n ...props\n}, ref) => {\n bsPrefix = useBootstrapPrefix(bsPrefix, 'accordion-item');\n const contextValue = useMemo(() => ({\n eventKey\n }), [eventKey]);\n return /*#__PURE__*/_jsx(AccordionItemContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, bsPrefix)\n })\n });\n});\nAccordionItem.displayName = 'AccordionItem';\nexport default AccordionItem;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport AccordionBody from './AccordionBody';\nimport AccordionButton from './AccordionButton';\nimport AccordionCollapse from './AccordionCollapse';\nimport AccordionContext from './AccordionContext';\nimport AccordionHeader from './AccordionHeader';\nimport AccordionItem from './AccordionItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n activeKey,\n bsPrefix,\n className,\n onSelect,\n flush,\n alwaysOpen,\n ...controlledProps\n } = useUncontrolled(props, {\n activeKey: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'accordion');\n const contextValue = useMemo(() => ({\n activeEventKey: activeKey,\n onSelect,\n alwaysOpen\n }), [activeKey, onSelect, alwaysOpen]);\n return /*#__PURE__*/_jsx(AccordionContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...controlledProps,\n className: classNames(className, prefix, flush && `${prefix}-flush`)\n })\n });\n});\nAccordion.displayName = 'Accordion';\nexport default Object.assign(Accordion, {\n Button: AccordionButton,\n Collapse: AccordionCollapse,\n Item: AccordionItem,\n Header: AccordionHeader,\n Body: AccordionBody\n});","import React from 'react';\n\nexport function MinusSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fillRule='evenodd'\n d='M7 11h10c.554 0 1 .446 1 1s-.446 1-1 1H7c-.554 0-1-.446-1-1s.446-1 1-1'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &.disabled:hover {\n background-color: $gray-100;\n cursor: default !important;\n }\n\n &:hover {\n background-color: $light-blue;\n }\n\n table,\n th,\n td {\n border: 1px solid $dark;\n padding: map-get($spacers, 2);\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './expandable-question.module.scss';\n\nconst DEFAULT_HEIGHT = '1.2rem';\n\n// If you change the transition time here, please also update the transition time in the SCSS file\nconst TRANSITION_TIME = 500; // ms\n\ninterface ExpandableQuestionProps {\n id: string;\n question: string;\n answer: string;\n isBot?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function ExpandableQuestion(props: ExpandableQuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ shouldClamp, setShouldClamp ] = React.useState<boolean>(!isExpanded);\n const [ isExpandable, setIsExpandable ] = React.useState<boolean>(true);\n\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n const isMounted = useIsComponentMounted();\n\n const timeoutRef = React.useRef<number | null>(null);\n const invisibleRef = React.useRef<HTMLDivElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n\n const checkIsExpandable = React.useCallback(() => {\n if (!markdown || !invisibleRef.current) return;\n\n // Use a clone to measure full height without constraints\n const fullEl = document.createElement('p');\n fullEl.innerHTML = markdown;\n // Match styles of the visible element\n fullEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n fullEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(fullEl);\n const fullHeight = fullEl.clientHeight;\n invisibleRef.current.removeChild(fullEl);\n\n // Use a clone to measure single line height\n const singleEl = document.createElement('p');\n singleEl.innerHTML = '&nbsp;';\n singleEl.className = `mb-0 ${TopicFaqHelper.getContainerClass()}`;\n singleEl.style.visibility = 'hidden';\n\n invisibleRef.current.appendChild(singleEl);\n const singleLineHeight = singleEl.clientHeight;\n invisibleRef.current.removeChild(singleEl);\n\n setIsExpandable(fullHeight > singleLineHeight + 5);\n }, [markdown]);\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (!isExpandable) return;\n if (TopicFaqHelper.isLink(e.target as HTMLElement)) return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0) return;\n\n AnalyticsHelper.logUserAction(\n {\n ...props.analyticsData,\n question: props.question,\n answer: props.answer\n },\n {\n ...props.analyticsOptions,\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionWidget\n }\n );\n\n isExpanded ? collapse() : expand();\n }\n\n function expand(): void {\n setExpandedHeight();\n setIsExpanded(true);\n\n window.clearTimeout(timeoutRef.current);\n setShouldClamp(false);\n }\n\n function collapse(): void {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n timeoutRef.current = window.setTimeout(() => {\n setShouldClamp(true);\n }, TRANSITION_TIME);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n invisibleRef.current.appendChild(fakeEl);\n\n setHeight(`${fakeEl.clientHeight}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current) return;\n\n // Set initial state\n if (markdown === null) {\n setMarkdown(newMarkdown);\n return;\n }\n\n // Don't update if unchanged\n if (markdown === newMarkdown) return;\n\n // Collapse if expanded and the content has changed, so that the height can be recalculated\n if (markdown && isExpanded) collapse();\n\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.answer]);\n\n React.useEffect(() => {\n if (height !== '100%' || !visibleRef.current) return;\n\n setHeight(visibleRef.current.clientHeight + 'px');\n }, [height]);\n\n React.useEffect(() => {\n checkIsExpandable();\n }, [checkIsExpandable]);\n\n useResizeListener(\n () => {\n if (isExpanded) collapse();\n },\n checkIsExpandable,\n [ isExpanded, checkIsExpandable ]\n );\n\n if (!props.question || !markdown) return <></>;\n\n return (\n <DivButton\n className={classNames(\n styles.question,\n 'rounded-3',\n !isExpandable && styles.disabled\n )}\n onClick={onToggleExpander}\n >\n <div className='pb-3'>\n <div className='float-end rounded-circle bg-white'>\n {isExpandable && <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />}\n </div>\n\n <h2 className='h4 mb-0 clear-end'>{props.question}</h2>\n </div>\n\n <div className={styles.description} style={{ height }}>\n <p\n className={`mb-0 ${shouldClamp ? 'clamp-1' : ''} ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n ></p>\n\n <div ref={invisibleRef} />\n </div>\n </DivButton>\n );\n}\n",":local {\n .animatedBorder {\n position: relative;\n padding: 0.25rem;\n border-radius: 1rem;\n background: linear-gradient(\n 90deg,\n #ff6ec4,\n #7873f5,\n #4facfe,\n #00f2fe,\n #4facfe,\n #7873f5,\n #ff6ec4\n );\n background-size: 200% 200%;\n animation: borderRotate 3s ease infinite;\n box-sizing: border-box;\n }\n\n .animatedBorderContent {\n background-color: white;\n border-radius: 0.875rem;\n overflow: hidden;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n\n @keyframes :local(borderRotate) {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n}","import React from 'react';\n\nimport styles from './animated-border.module.scss';\n\ninterface AnimatedBorderProps {\n enabled: boolean;\n children: React.ReactNode;\n}\n\nexport function AnimatedBorder({ enabled, children }: AnimatedBorderProps): JSX.Element {\n if (!enabled) {\n return <>{children}</>;\n }\n\n return (\n <div className={styles.animatedBorder}>\n <div className={`${styles.animatedBorderContent} p-2`}>\n {children}\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './popout-video-widget-item.module.scss';\n\nexport interface PopoutVideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n showVideoGuidance: boolean;\n hideTitle?: boolean;\n hideSeries?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string) => void;\n removeButtonTooltip?: string;\n preventPopout?: boolean;\n showNewVideoIndicator?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport const PopoutVideoWidgetItem = React.memo(function(props: PopoutVideoWidgetItemProps): JSX.Element {\n const { data: video, 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 video={props.data}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n hideTitle={props.hideTitle}\n showVideoGuidance={props.showVideoGuidance}\n type={props.preventPopout || breakpoints.xs ? 'static' : 'popout'}\n textPosition={ThumbnailTextPosition.Below}\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n onClickRemove={FunctionHelper.isFunction(props.onClickRemoveItem)\n && (() => props.onClickRemoveItem(video.id, video.name))}\n removeButtonTooltip={props.removeButtonTooltip}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","@import '~styles/utils/include-media';\n\n:local {\n .placeholderItem {\n width: 25%;\n\n @include media('<=xl') {\n width: 33.33333%;\n }\n\n @include media('<=md') {\n width: 50%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .placeholderInner {\n cursor: pointer;\n\n &:hover .placeholderContent {\n opacity: 0.8;\n }\n }\n\n .placeholderContent {\n transition: opacity 0.2s ease;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-search-cta-template.module.scss';\n\nconst namespace = 'widgets.thumbnailFixedListSearchCtaWidgetTemplate';\n\nexport interface ThumbnailFixedListSearchCtaWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences?: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n analyticsData?: HashObject;\n\n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n onClickSearchAllVideos?: () => void;\n}\n\nconst MAX_VIDEO_ITEMS = 3;\n\nexport function ThumbnailFixedListSearchCtaWidgetTemplate(\n props: ThumbnailFixedListSearchCtaWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n const displayVideos = videos.slice(0, MAX_VIDEO_ITEMS);\n\n if (!displayVideos.length)\n return <></>;\n\n const appLink = widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name);\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={displayVideos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: undefined,\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n analyticsData={props.analyticsData}\n appLink={appLink}\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n trailingItemLength={1}\n trailingItems={\n <li className={classNames('flex-shrink-0 position-relative px-1', styles.placeholderItem)}>\n <button\n onClick={props.onClickSearchAllVideos}\n className={classNames('d-block ratio ratio-16x9 bg-light rounded-1 overflow-hidden text-decoration-none border-0 p-0 w-100', styles.placeholderInner)}\n >\n <div className={classNames('position-absolute top-0 start-0 bottom-0 end-0 d-flex flex-column align-items-center justify-content-center gap-2', styles.placeholderContent)}>\n <span className='text-center px-2 fw-semi-bold'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Small} /> {LanguageService.getPhrase(namespace, 'search')}\n </span>\n </div>\n </button>\n </li>\n }\n />\n );\n}\n","import React from 'react';\n\nexport function VerifiedSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m10.407 12.368-1.22-1.22a.49.49 0 0 0-.698.004l-.583.583a.494.494 0 0 0-.004.697l2.135 2.135c.107.108.25.154.388.142a.5.5 0 0 0 .352-.143l4.362-4.362a.494.494 0 0 0-.004-.698l-.582-.582a.495.495 0 0 0-.698-.004zm7.922-.37 1.437 1.406q.312.291.208.728a.72.72 0 0 1-.541.531l-1.957.5.551 1.936a.67.67 0 0 1-.197.729.67.67 0 0 1-.73.198l-1.935-.552-.5 1.957a.72.72 0 0 1-.53.541 1.3 1.3 0 0 1-.199.021.69.69 0 0 1-.53-.229L12 18.328l-1.405 1.436q-.292.313-.729.208a.7.7 0 0 1-.53-.541l-.5-1.957-1.937.552a.67.67 0 0 1-.728-.198.67.67 0 0 1-.198-.729l.551-1.936-1.957-.5a.72.72 0 0 1-.54-.53q-.104-.438.207-.73l1.437-1.405-1.437-1.405q-.312-.291-.208-.729a.72.72 0 0 1 .541-.53l1.957-.5-.551-1.936a.67.67 0 0 1 .198-.73.67.67 0 0 1 .728-.197l1.936.552.5-1.957a.675.675 0 0 1 .531-.531.67.67 0 0 1 .729.198L12 5.68l1.405-1.447a.7.7 0 0 1 .73-.198q.426.104.53.53l.5 1.958L17.1 5.97a.67.67 0 0 1 .729.198.67.67 0 0 1 .197.729l-.551 1.936 1.957.5a.72.72 0 0 1 .541.53q.105.438-.208.73z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .card {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .avatar {\n width: 3rem;\n min-width: 3rem;\n height: 3rem;\n }\n\n .time {\n font-size: 0.6875rem; //11px\n }\n}","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { EditSvg } from 'libs/shared/images/svg/actions/EditSvg';\nimport { VerifiedSvg } from 'libs/shared/images/svg/status/VerifiedSvg';\nimport { Author, AuthorWidgetContent } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './author-reviewer-widget-template.module.scss';\n\nconst namespace = 'shared.authorReviewerWidgetTemplate';\n\ninterface PersonCardWrapperProps {\n person: Author;\n}\n\nconst DATE_FORMATTER = 'MMMM D, YYYY';\n\nfunction PersonCardWrapper(props: React.PropsWithChildren<PersonCardWrapperProps>): JSX.Element {\n if (!props.person)\n return <></>;\n\n const className = `${styles.card} h-100 rounded-2 d-flex flex-column`;\n\n const externalUrl = props.person.externalUrl;\n const blogUrl = ArticleHelper.getAuthorBlogUrl(props.person.blogSlug);\n\n function onClickAuthorBlogLink(): void {\n AnalyticsHelper.logUserAction({\n id: props.person.id,\n firstName: props.person.firstName,\n lastName: props.person.lastName,\n imageId: props.person.imageId,\n externalUrl,\n blogUrl\n }, {\n entity: EntityType.Author,\n location: LocationContext.AuthorReviewerWidget,\n actionType: UserAction.Click\n });\n }\n\n if (!blogUrl && !externalUrl) {\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n }\n\n return (\n <a\n href={externalUrl || blogUrl}\n target='_blank'\n className={`${className} no-decoration`}\n onClick={onClickAuthorBlogLink}\n >\n {props.children}\n </a>\n );\n}\n\ninterface PersonCardProps {\n person: Author;\n imageCdnUrl: string;\n type: 'reviewer' | 'author';\n lastUpdated: string;\n datePublished: string;\n}\n\nfunction PersonCard(props: PersonCardProps): JSX.Element {\n if (!props.person)\n return <></>;\n\n return (\n <PersonCardWrapper person={props.person}>\n <div className='d-flex mb-2'>\n <div className={`${styles.avatar} rounded-circle me-2 overflow-hidden`}>\n <img\n className='img-fluid'\n src={ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Avatars, props.person.imageId, ImageSize.Medium)}\n alt={`${props.person.firstName} ${props.person.lastName}`}\n />\n </div>\n\n <div>\n <h2 className='h6 mb-0 fw-normal'>\n <SvgContainer\n className='align-middle svg-container d-inline-block'\n svg={props.type === 'reviewer' ? VerifiedSvg : EditSvg}\n />\n\n {props.type === 'reviewer' ? (\n <span className='align-middle'>\n <Text namespace={namespace} phrase='reviewedBy' />\n &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}\n","import React from 'react';\n\nimport styles from '../author-reviewer-widget-template.module.scss';\n\nfunction PartialPersonCard(): JSX.Element {\n return (\n <div className={`${styles.card} rounded-2`}>\n <div className='d-flex mb-2'>\n <div className={`partial-loading-background rounded-circle me-2 ${styles.avatar}`} />\n \n <div className='w-75'>\n <div className='partial-loading-background mb-1' style={{ width: '90%', height: '21px' }} />\n <div className='partial-loading-background' style={{ width: '65%', height: '1rem' }} />\n </div>\n </div>\n \n <div>\n <div className='partial-loading-background mb-1' style={{ width: '100%', height: '1rem' }} />\n <div className='partial-loading-background mb-1' style={{ width: '75%', height: '1rem' }} />\n </div>\n \n <div className='partial-loading-background' style={{ width: '50%', height: '1rem' }} />\n </div>\n );\n}\n\nexport function PartialAuthorReviewerWidgetTemplate(): JSX.Element {\n return (\n <div className='row mb-n3'>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n <div className='col-12 col-md-6 mb-3'>\n <PartialPersonCard />\n </div>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .logoItem {\n width: percentage(calc(1 / 8));\n\n @include media('<=lg') {\n width: percentage(calc(1 / 6));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 4));\n }\n }\n\n .logo {\n aspect-ratio: 1;\n background-size: cover;\n border: 2px solid $gray-300;\n background-clip: padding-box;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Company } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './circle-logo-widget-item.module.scss';\n\nexport interface CircleLogoWidgetItemProps extends FixedWidgetItemProps<Company> {\n}\n\nexport const CircleLogoWidgetItem = function(props: CircleLogoWidgetItemProps): JSX.Element {\n const logoUrl = ImageHelper.createUrl(props.data.logo?.url, { size: ImageSize.Medium });\n const logoBgColor = props.data.metadata?.colour;\n // fallback color\n const colourClass = getBgColorClass(props.data.name, BG_COLOUR_CLASS_NAMES);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n location: LocationContext.CircleLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Company\n };\n \n const logoStyle: React.CSSProperties = {\n backgroundImage: logoUrl ? `url('${logoUrl}')` : null,\n backgroundColor: logoBgColor\n };\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`position-relative px-1 flex-shrink-0 ${styles.logoItem}`}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={classNames('rounded-circle w-100 h-100', styles.logo, !logoBgColor && colourClass)}\n style={logoStyle}\n >\n </div>\n </AppLink>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { CircleLogoWidgetItem } from 'libs/shared/components/widgets/items/circle-logo-widget-item/CircleLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Company, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface CircleLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n imageCdnUrl: string;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n appLinks: {\n company: (company: Company) => Core.AppLink\n };\n}\n\nexport function CircleLogoSlidingListWidgetTemplate(props: CircleLogoSlidingListWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Companies}\n collection={props.content}\n childComponent={CircleLogoWidgetItem}\n extraChildComponentProps={{}}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.company}\n />\n );\n}\n",":local {\n .logo {\n aspect-ratio: 1;\n width: 90%;\n }\n .logoWrapper {\n flex: 1;\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-circle-logo-sliding-list.module.scss';\n\nexport function PartialCircleLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 8;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 4;\n }\n if (breakpoints.md) {\n itemsCount = 6;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount).fill(null).map((_, i) => {\n return (\n <div key={i} className={styles.logoWrapper}>\n <div className={`${styles.logo} h-100 d-inline-block partial-loading-background rounded-circle`} />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialLargeSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(5).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialLargeSubjectWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n",":local {\n .emoji {\n letter-spacing: map-get($spacers, 1);\n }\n}","import React from 'react';\n\nimport styles from './emoji-text.module.scss';\n\ninterface EmojiTextProps {\n emoji: string;\n}\n\nexport function EmojiText(props: React.PropsWithChildren<EmojiTextProps>): JSX.Element {\n return (\n <>\n <span className={styles.emoji}>{props.emoji}</span>\n {props.children}\n </>\n );\n}\n","import React from 'react';\n\nexport function ThumbsDownSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M19.4 4.362h-3.119a.6.6 0 0 0-.6.6v.233l-1.774-.705a1.8 1.8 0 0 0-.67-.128H6.731a1.82 1.82 0 0 0-1.798 1.572l-.916 6.804a1.815 1.815 0 0 0 1.797 2.057h3.833l.82 3.173a2.23 2.23 0 0 0 2.155 1.67c1.487 0 2.53-1.33 2.147-2.81l-.361-1.401a1.02 1.02 0 0 1 .61-1.202l.663-.263v.233a.6.6 0 0 0 .6.6H19.4a.6.6 0 0 0 .6-.6V4.962a.6.6 0 0 0-.6-.6m-3.719 8.309-1.106.439a2.22 2.22 0 0 0-1.33 2.617l.363 1.401c.174.676-.22 1.26-.915 1.307a1.03 1.03 0 0 1-1.065-.767l-.936-3.623a.6.6 0 0 0-.58-.45H5.813a.613.613 0 0 1-.608-.697l.916-6.804a.616.616 0 0 1 .609-.532h6.506q.118 0 .227.044l2.217.88zm3.119.924h-1.919V5.562H18.8z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ThumbsUpSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M4.6 19.638h3.119a.6.6 0 0 0 .6-.6v-.233l1.774.704q.323.128.67.129h6.506a1.82 1.82 0 0 0 1.798-1.572l.916-6.804a1.815 1.815 0 0 0-1.797-2.057h-3.833l-.82-3.173a2.23 2.23 0 0 0-2.155-1.67c-1.487 0-2.53 1.33-2.147 2.81l.362 1.401a1.02 1.02 0 0 1-.61 1.202l-.664.263v-.233a.6.6 0 0 0-.6-.6H4.6a.6.6 0 0 0-.6.6v9.233a.6.6 0 0 0 .6.6m3.719-8.309 1.106-.439a2.22 2.22 0 0 0 1.33-2.617l-.363-1.401c-.174-.676.22-1.26.915-1.307.495-.033.941.289 1.065.767l.936 3.624a.6.6 0 0 0 .58.45h4.298c.373 0 .658.328.608.696l-.916 6.804a.616.616 0 0 1-.609.532h-6.506a.6.6 0 0 1-.227-.044l-2.217-.88zM5.2 10.405h1.919v8.033H5.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\n\nexport const FeedbackFormValidationSchema = Yup.object().shape({\n feedbackInput: Yup.string().max(5000, () => LanguageService.getPhrase(namespace, 'tooLong'))\n});\n","@import '~styles/utils/include-media';\n:local {\n .promptContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin: 0 auto;\n\n .text {\n margin-bottom: 0;\n text-align: center;\n }\n\n @include media(\"<sm\") {\n flex-direction: column;\n\n .text {\n margin-bottom: map-get($spacers, 2);\n }\n }\n }\n\n .form {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50%;\n margin: 0 auto;\n flex-direction: column;\n\n :global(.form-group) {\n width: 100%;\n }\n\n .text {\n text-align: center;\n margin-bottom: map-get($spacers, 2);\n }\n\n @include media('<=lg') {\n width: 75%;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { ThumbsDownSvg } from 'libs/shared/images/svg/actions/ThumbsDownSvg';\nimport { ThumbsUpSvg } from 'libs/shared/images/svg/actions/ThumbsUpSvg';\n\nimport { FeedbackFormValidationSchema } from './FeedbackFormValidationSchema';\n\nimport styles from './feedback-form.module.scss';\n\nconst namespace = 'shared.feedbackForm';\n\nexport interface DashboardFeedbackData {\n type: 'positive' | 'negative';\n content: string;\n}\n\ntype FormState = 'prompt' | 'yes' | 'no' | 'done';\n\ninterface FeedbackFormProps {\n onSubmit: (feedback: DashboardFeedbackData) => Promise<void>;\n}\n\nexport function FeedbackForm(props: FeedbackFormProps): JSX.Element {\n const [ state, setState ] = React.useState<FormState>('prompt');\n\n const alerts = useAlerts();\n\n function onClickYes(): void {\n setState('yes');\n }\n\n function onClickNo(): void {\n setState('no');\n }\n\n async function onSubmit(\n formData: { feedbackInput: string },\n onDone: (options: FormSubmissionOptions) => void\n ): Promise<void> {\n try {\n await props.onSubmit({\n content: formData.feedbackInput,\n type: state === 'yes' ? 'positive' : 'negative'\n });\n \n setState('done');\n } catch {\n setState('prompt');\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n } finally {\n onDone({ reset: true });\n }\n }\n\n if (!FunctionHelper.isFunction(props.onSubmit))\n return <></>;\n\n if (state === 'prompt') {\n return (\n <div className={styles.promptContainer}>\n <p className={`fw-semibold me-2 ${styles.text}`}>\n <EmojiText emoji='🔎'>\n <Text namespace={namespace} phrase='feedbackQuestion' />\n </EmojiText>\n </p>\n\n <div className='d-flex align-items-center'>\n <IconButton\n className='btn btn-outline-dark me-2'\n onClick={onClickYes}\n svg={ThumbsUpSvg}\n >\n <Text namespace={namespace} phrase='yes' />\n </IconButton>\n\n <IconButton\n className='btn btn-outline-dark'\n onClick={onClickNo}\n svg={ThumbsDownSvg}\n >\n <Text namespace={namespace} phrase='no' />\n </IconButton>\n </div>\n </div>\n );\n }\n\n if (state === 'yes') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='👏'>\n <Text namespace={namespace} phrase='happyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'no') {\n return (\n <FormWrapper\n onSubmit={onSubmit}\n initialValues={{ feedbackInput: '' }}\n validationSchema={FeedbackFormValidationSchema}\n >\n <Form className={styles.form}>\n <p className={`fw-semibold ${styles.text}`}>\n <EmojiText emoji='😢'>\n <Text namespace={namespace} phrase='unhappyFeedback' />\n </EmojiText>\n </p>\n <FormField\n name='feedbackInput'\n as='textarea'\n autoComplete='off'\n autoFocus\n rows={4}\n placeholder={LanguageService.getPhrase(namespace, 'feedbackPlaceholder')}\n spellCheck={false}\n />\n \n <div className='d-flex justify-content-end w-100'>\n <button className='btn btn-link' onClick={() => setState('prompt')}>\n <Text namespace={namespace} phrase='back' />\n </button>\n\n <FormButtons\n variant='dark'\n submitText={LanguageService.getPhrase(namespace, 'sendFeedback')}\n />\n </div>\n </Form>\n </FormWrapper>\n );\n }\n\n if (state === 'done') {\n return (\n <p className='fw-semibold text-center'>\n <EmojiText emoji='🙌'>\n <Text namespace={namespace} phrase='thankYou' />\n </EmojiText>\n </p>\n );\n }\n\n return <></>;\n}\n",":local {\n .imageContainer {\n position: relative;\n background-position: top;\n background-size: cover;\n width: 2rem;\n height: 2rem;\n flex-shrink: 0;\n\n .image {\n width: 100%;\n height: 100%;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n }\n }\n\n .background {\n background-color: $gray-100;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DashboardFeedbackData, FeedbackForm } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './cover-fixed-pill-list-xsmall.module.scss';\n\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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from '../cover-fixed-pill-list-xsmall.module.scss';\n\nexport function PartialCoverFixedPillListXSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.background} px-4 py-3 rounded-3 mb-3`}>\n <div className='partial-loading-background mb-2' style={{ height: '1.35rem', width: '8rem' }} />\n\n <Row className={`mb-2 ${styles.row}`}>\n {Array(8).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='d-flex align-items-center mb-2'>\n <div className='partial-loading-background me-2 rounded' style={{ width: '2rem', height: '2rem' }} />\n\n <div className='partial-loading-background' style={{ width: '5rem', height: '1.3125rem' }} />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport interface CoverFixedTileListWidgetTemplateProps {\n name: string;\n description: string;\n content: Playlist[];\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink\n };\n}\n\nexport function CoverFixedTileListWidgetTemplate(props: CoverFixedTileListWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(p => (\n <Col as='li' key={p.id} xs={6} sm={4} lg={3} className='px-1 pb-2 columns-of-five'>\n <PlaylistItem\n data={p}\n presentationAudiences={props.audiences}\n appLink={props.appLinks?.playlist?.(p)}\n itemStyle='round'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n />\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverFixedTileListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialPlaylistList itemClassName='columns-of-five' />\n </>\n );\n}\n","export enum ClassificationNodeType {\n Root = 'root'\n}\n","export enum PresentationLearningLevel {\n Level_1 = 1, // Primary/Elementary School\n Level_2 = 2, // Middle School\n Level_3 = 3, // Secondary/High School\n Level_4 = 4 // Tertiary/Post-Secondary\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClassificationTab } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs';\nimport { ClassificationNodeType } from 'libs/shared/apps/subjects/enums/ClassificationNodeType';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationType } from 'libs/shared/enums/ClassificationType';\nimport { CurationTag } from 'libs/shared/enums/CurationTag';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, CuratedDashboard, DashboardTargetType, Presentation } from 'libs/shared/interfaces';\nimport { Classification } from 'libs/shared/interfaces/models/Classification';\n\nconst namespace = 'subjects.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TopicCounts {\n dashboardVideoCount: number;\n childDashboardVideoCount: number;\n\n dashboardResourceCount: number;\n childDashboardResourceCount: number;\n\n dashboardNewVideosCount: number;\n childDashboardNewVideoCount: number;\n childClassificationCount: number;\n}\n\ntype PresentationImageType = 'cover' | 'tall-poster' | 'topic-banner' | 'new-release-banner';\n\nexport const TopicsHelper = {\n isPresentation(obj: BaseObject): obj is Presentation {\n return 'learningLevel' in obj;\n },\n\n isTopicClassification(obj: BaseObject): obj is Classification {\n return obj?.type === ClassificationType.Subject;\n },\n\n getMappedPresentationLevel(presentationLevel: PresentationLearningLevel): string | PresentationLearningLevel {\n // Handle usage of both enum value and its stringified version (online vs. lite)\n return typeof presentationLevel === 'string' ?\n PresentationLearningLevel[presentationLevel] :\n presentationLevel;\n },\n\n getMappedPresentationBackgroundColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'bg-indigo';\n case PresentationLearningLevel.Level_2: return 'bg-teal';\n case PresentationLearningLevel.Level_3: return 'bg-blue';\n case PresentationLearningLevel.Level_4: return 'bg-navy';\n default: return 'bg-green';\n }\n },\n\n getMappedPresentationLightBackgroundColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'bg-light-indigo';\n case PresentationLearningLevel.Level_2: return 'bg-light-teal';\n case PresentationLearningLevel.Level_3: return 'bg-light-blue';\n case PresentationLearningLevel.Level_4: return 'bg-light-navy';\n default: return 'bg-light-green';\n }\n },\n\n getMappedPresentationBorderColourClass(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return 'border-indigo';\n case PresentationLearningLevel.Level_2: return 'border-teal';\n case PresentationLearningLevel.Level_3: return 'border-blue';\n case PresentationLearningLevel.Level_4: return 'border-navy';\n default: return 'border-green';\n }\n },\n\n // TODO: This should maybe live on the presentation metadata at some point instead.\n getMappedPresentationBackgroundColourCode(presentationLevel: PresentationLearningLevel): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: return '#7A76E8';\n case PresentationLearningLevel.Level_2: return '#40BCC3';\n case PresentationLearningLevel.Level_3: return '#38A2E8';\n case PresentationLearningLevel.Level_4: return '#1B2D71';\n default: return '#5DC786';\n }\n },\n\n getPresentationLevelImage(presentationLevel: PresentationLearningLevel, imageType: PresentationImageType): string {\n switch (TopicsHelper.getMappedPresentationLevel(presentationLevel)) {\n case PresentationLearningLevel.Level_1: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_1.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_1.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_1.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_1.TOPIC_TALL_POSTER;\n }\n\n case PresentationLearningLevel.Level_2: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_2.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_2.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_2.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_2.TOPIC_TALL_POSTER;\n }\n\n default:\n case PresentationLearningLevel.Level_3: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_3.TOPIC_BANNER;\n if (imageType === 'new-release-banner')\n return HardCoded.Images.Level_3.NEW_RELEASES_BANNER;\n if (imageType === 'cover')\n return HardCoded.Images.Level_3.TOPIC_COVER;\n if (imageType === 'tall-poster')\n return HardCoded.Images.Level_3.TOPIC_TALL_POSTER;\n }\n\n case PresentationLearningLevel.Level_4: {\n if (imageType === 'topic-banner')\n return HardCoded.Images.Level_4.TOPIC_BANNER;\n\n if (imageType === 'cover')\n return HardCoded.Images.Level_4.TOPIC_COVER;\n }\n }\n },\n\n getExploreAllTopicsTitle(presentationName: string, presentationCount: number): string {\n if (presentationCount < TopicsConstants.MULTI_PRESENTATION_THRESHOLD)\n return getPhrase('exploreAllTopicsHeading');\n\n return getPhrase('exploreAllTopicsDynamicHeading', { presentationName });\n },\n\n getExploreAllTopicsBreadcrumb(presentationName: string, presentationCount: number): string {\n if (presentationCount < TopicsConstants.MULTI_PRESENTATION_THRESHOLD)\n return getPhrase('exploreAllTopicsHeading');\n\n return presentationName;\n },\n\n isFollowing(classification: Classification): boolean {\n return classification?.followers?.data?.length === 1;\n },\n\n isTopLevelTopic(classification: Classification): boolean {\n return !!classification?.parentIds?.includes(ClassificationNodeType.Root);\n },\n\n canHaveVideoListTab(dashboard: CuratedDashboard): boolean {\n return dashboard?.widgets?.some(w => w.metadata?.showInTableOfContents);\n },\n\n getActiveTopicTab(classification: Classification, targetType: DashboardTargetType): ClassificationTab {\n if (TopicsHelper.isTopLevelTopic(classification))\n return targetType === DashboardTargetType.Classification ? 'new-releases' : 'all-topics';\n\n return targetType === DashboardTargetType.Classification ? 'curated-topic' : 'curriculum';\n },\n\n getCounts(classification: Classification): TopicCounts {\n const childClassificationCount = classification?.metadata?.childClassificationCount ?? 0;\n\n if (!classification?.externalMetadata) {\n return {\n childClassificationCount,\n\n dashboardVideoCount: 0,\n childDashboardVideoCount: 0,\n\n dashboardResourceCount: 0,\n childDashboardResourceCount: 0,\n\n dashboardNewVideosCount: 0,\n childDashboardNewVideoCount: 0\n };\n }\n\n return {\n childClassificationCount,\n\n dashboardVideoCount: classification.externalMetadata.dashboardVideoCount || 0,\n childDashboardVideoCount: classification.externalMetadata.childDashboardVideoCount || 0,\n\n dashboardResourceCount: classification.externalMetadata.dashboardResourceCount || 0,\n childDashboardResourceCount: classification.externalMetadata.childDashboardResourceCount || 0,\n\n dashboardNewVideosCount: classification.externalMetadata.dashboardNewVideosCount || 0,\n childDashboardNewVideoCount: classification.externalMetadata.childDashboardNewVideoCount || 0\n };\n },\n\n isTertiary(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.AU_TERTIARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.UK_TERTIARY.toString()\n );\n },\n\n isNewZealandTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.NZ_PRIMARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.NZ_SECONDARY.toString()\n );\n },\n\n isCanadaTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.CA_ELEMENTARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.CA_MIDDLE.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.CA_HIGH.toString()\n );\n },\n\n isInternationalTopic(presentationId: string): boolean {\n return (\n presentationId?.toString() === HardCoded.PresentationIds.INT_PRIMARY.toString() ||\n presentationId?.toString() === HardCoded.PresentationIds.INT_SECONDARY.toString()\n );\n },\n\n isMtv(classification: Classification): boolean {\n if (!classification?.tags?.data)\n return false;\n\n return classification.tags.data.some(t => t.tagType === TagType.Curation && t.name === CurationTag.MOVIES_AND_TV);\n },\n\n sortByLearningLevel(a: Classification, b: Classification, availablePresentations: Presentation[]): number {\n const aPresentation = availablePresentations.find(p => p?.id.toString() === a?.presentationId?.toString());\n const bPresentation = availablePresentations.find(p => p?.id.toString() === b?.presentationId?.toString());\n const aLearningLevel = PresentationLearningLevel[aPresentation?.learningLevel] as unknown as number; // ts does not play nice\n const bLearningLevel = PresentationLearningLevel[bPresentation?.learningLevel] as unknown as number;\n\n return aLearningLevel - bLearningLevel;\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Cover, CuratedDashboardAppLink } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst EXPLORE_ALL_TOPICS = 'explore-all-topics';\n\nexport interface CoverItemContent {\n id: string;\n name: string;\n cover: Cover;\n totalVideos?: number;\n}\n\nfunction getTotalVideos(content: CoverItemContent[]): number {\n return content.reduce((sum, cur) => sum += (cur?.totalVideos || 0), 0);\n}\n\nfunction getSubtitleFromTotalVideos(data: CoverItemContent): string {\n return data.totalVideos ? `${data.totalVideos} new video${data.totalVideos > 1 ? 's' : '' }` : '';\n}\n\nfunction getExtraItem(props: CoverSlidingPillListSmallWidgetTemplateProps, content: CoverItemContent[]) {\n if (\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationDirectory &&\n props.settings?.hasTopicDirectories\n ) {\n return {\n id: CuratedDashboardAppLink.ClassificationDirectory,\n name: `Explore all topics`,\n cover: {\n url: ImageHelper.createUrl(\n props.classification?.cover?.url,\n { size: ImageSize.Small }\n )\n },\n metadata: {\n backgroundColor: props.classification?.metadata?.backgroundColor\n }\n };\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases)\n return {\n id: CLASSIFICATION_LATEST_RELEASES,\n name: 'All new releases',\n cover: {\n url: ImageHelper.getUrlById(props.imageCdnUrl, ImageType.Covers, props.metadata.imageId, ImageSize.Medium)\n },\n totalVideos: getTotalVideos(content)\n };\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics)\n return {\n id: EXPLORE_ALL_TOPICS,\n name: 'Explore all subjects',\n cover: { url: ImageHelper.createUrl(HardCoded.Images.STREAMABLE_TOPIC_COVER, { size: ImageSize.Small }) }\n };\n}\n\nexport interface CoverSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: CoverItemContent[];\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n templateId: WidgetTemplate;\n appLinks: {\n classificationDirectory: (classification: Classification) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classificationLatestReleases: (classification: Classification) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n settings: {\n hasTopicDirectories: boolean\n };\n}\n\nexport function CoverSlidingPillListSmallWidgetTemplate(\n props: CoverSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props, props.content);\n const isClassificationLatestReleasedWidget =\n props.metadata?.appLink === CuratedDashboardAppLink.ClassificationLatestReleases;\n\n function getHeadingAppLink(): Core.AppLink {\n if (\n !props.classification ||\n !TopicsHelper.isTopLevelTopic(props.classification) ||\n props.widgetTypeId !== WidgetTypeId.Classifications ||\n props.templateId !== WidgetTemplate.CoverSlidingPillListSmall ||\n !props.settings?.hasTopicDirectories\n ) {\n return null;\n }\n\n return props.appLinks?.classificationDirectory?.(props.classification);\n }\n\n function getChildAppLink(data: any): Core.AppLink {\n if (data.id === CuratedDashboardAppLink.ClassificationDirectory)\n return props.appLinks?.classificationDirectory?.(props.classification);\n \n if (data.id === CuratedDashboardAppLink.ExploreAllTopics)\n return props.appLinks?.allTopics?.(data);\n\n return isClassificationLatestReleasedWidget ?\n props.appLinks?.classificationLatestReleases?.(data) :\n props.appLinks?.classification?.(data);\n }\n\n return (\n <DynamicWidget\n id={props.id}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n getChildAppLink={data => getChildAppLink(data)}\n childComponent={SubjectWidgetItem}\n partialLoadingComponent={PartialSubjectWidgetItem}\n heading={props.name}\n headingAppLink={getHeadingAppLink()}\n getSubtitle={\n isClassificationLatestReleasedWidget ?\n getSubtitleFromTotalVideos :\n undefined\n }\n description={props.description}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n childComponentProps={{\n highlightOnHover: props.settings?.hasTopicDirectories,\n shouldHighlight: (data: CoverItemContent) => data.id === CuratedDashboardAppLink.ClassificationDirectory\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialCoverSlidingPillListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\ninterface SearchExchangeArchiveDescriptionProps {\n appLink: Core.AppLink;\n}\n\nconst namespace = 'search.searchExchangeArchiveDescription';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SearchExchangeArchiveDescription(props: SearchExchangeArchiveDescriptionProps): JSX.Element {\n return (\n <>\n {getPhrase('searchExchangeArchiveDescription')}\n &nbsp;\n <AppLink\n appLink={props.appLink}\n className='info-link'\n >\n {getPhrase('searchExchangeArchiveLink')}\n </AppLink>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchExchangeArchiveDescription } from 'libs/shared/apps/search/components/search-exchange-archive-description/SearchExchangeArchiveDescription';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailVerticalListWidgetTemplateProps {\n widgetTypeId: WidgetTypeId;\n name: string;\n description: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n\n seeMoreLink: Core.AppLink;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean\n };\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailVerticalListWidgetTemplate(props: ThumbnailVerticalListWidgetTemplateProps) {\n function getShowSeeMoreLink(): boolean {\n return (!!props.seeMoreLink &&\n [\n WidgetTypeId.SearchExchangeArchive,\n WidgetTypeId.SearchMySchoolLibraryVideos\n ].includes(props.widgetTypeId)\n );\n }\n \n function getDescription() {\n if (props.widgetTypeId === WidgetTypeId.SearchExchangeArchive) {\n return <SearchExchangeArchiveDescription appLink={props.appLinks.searchSettings()} />;\n }\n \n return props.description;\n }\n\n return (\n <>\n <WidgetHeader\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata.hideWidgetDescription && getDescription()}\n showSeeMoreLink={getShowSeeMoreLink()}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n\n <VideoList\n videos={props.content}\n getVideoAppLink={props.appLinks?.videoType}\n hasPermissions={props.hasPermissions}\n getPreviewQuestionsAppLink={props.appLinks?.getPreviewQuestionsAppLink}\n presentationAudiences={props.audiences}\n commonVideoProps={props.commonVideoProps}\n getAnalyticsData={props.getAnalyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailVerticalListWidget,\n entity: EntityType.Video\n }}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Company, InteractiveMetadata, PresentationAudience, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { ThumbnailVerticalListWidgetTemplate } from '../thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\n\nexport interface CurriculumCodeSearchResultsWidgetTemplateProps {\n name: string;\n content: Video[];\n hasPermissions: HasPermissionsFunc;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n company: (company: Company) => Core.AppLink,\n searchSettings: () => Core.AppLink,\n searchHome: (filters?: HashObject) => Core.AppLink,\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink\n };\n metadata: {\n curriculumLeafName: string,\n curriculumLeafDescription: string\n };\n commonVideoProps: CommonVideoProps;\n settings: {\n hasTopicDirectories: boolean\n };\n getAnalyticsData: (itemIndex: number) => HashObject;\n}\n\nexport function CurriculumCodeSearchResultsWidgetTemplate(\n props: CurriculumCodeSearchResultsWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <div className='bg-gray-100 p-3 rounded-3 mb-3'>\n <h2 className='h6'>\n {props.name}\n </h2>\n <CurriculumLeaf\n code={props.metadata.curriculumLeafName}\n description={props.metadata.curriculumLeafDescription}\n id={null}\n locationContext={LocationContext.SearchCurriculumCodeWidget}\n />\n </div>\n\n <ThumbnailVerticalListWidgetTemplate\n metadata={{\n hideWidgetHeading: true,\n hideWidgetDescription: true\n }}\n name=''\n description=''\n widgetTypeId={WidgetTypeId.SearchCurriculumCode}\n hasPermissions={props.hasPermissions}\n content={props.content}\n audiences={props.audiences}\n seeMoreLink={null}\n appLinks={props.appLinks}\n commonVideoProps={props.commonVideoProps}\n badgeComponent={null}\n settings={props.settings}\n getAnalyticsData={props.getAnalyticsData}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function PartialThumbnailVerticalListWidgetTemplate() {\n return (\n <PartialVideoList numVideos={3} />\n );\n}\n","import React from 'react';\n\nimport { PartialThumbnailVerticalListWidgetTemplate } from '../../thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\n\nexport function PartialCurriculumCodeSearchResultsWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background rounded-3 mb-3 w-100' style={{ height: '5rem' }}></div>\n <PartialThumbnailVerticalListWidgetTemplate />\n </>\n );\n}\n",":local {\n .accordionButton {\n background-color: $gray-100;\n border-radius: $border-radius;\n\n &:hover {\n background-color: $light-blue;\n }\n\n &.expanded {\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}","import React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\n\nimport styles from './accordion-button.module.scss';\n\ninterface AccordionButtonProps extends React.PropsWithChildren {\n name: string;\n}\n\nexport function AccordionButton(props: AccordionButtonProps): JSX.Element {\n const { activeEventKey } = React.useContext(AccordionContext);\n \n const onClick = useAccordionButton(props.name);\n \n const isExpanded = activeEventKey === props.name;\n \n return (\n <button\n type='button'\n onClick={onClick}\n className={`w-100 p-3 ${styles.accordionButton} ${isExpanded ? styles.expanded : ''}`}\n >\n <div className='d-flex align-items-center justify-content-between'>\n <h3 className='mb-0 h5 fw-normal'>\n {props.name}\n </h3>\n\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n </div>\n </button>\n );\n}\n",":local {\n .video:not(:last-child) {\n margin-bottom: map-get($spacers, 3);\n }\n\n .thumbnail {\n flex-grow: 1;\n min-width: 8rem;\n max-width: 10rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { CurriculumNode } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './curriculum-accordion-video-list.module.scss';\n\nconst namespace = 'shared.curriculumAccordionVideoList';\n\ninterface CurriculumAccordionVideoListProps {\n outcome: CurriculumNode<CurriculumType.Leaf>;\n analyticsData: HashObject;\n getVideoAppLink: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n getOutcomeAppLink: (code: string) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n outcomeIndex: number;\n}\n\nexport function CurriculumAccordionVideoList(props: CurriculumAccordionVideoListProps): JSX.Element {\n const hasCode = !!props.outcome.name && !!props.outcome.description;\n\n return (\n <>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='alignedVideos' />\n </h4>\n\n <ul className='list-unstyled'>\n {props.outcome.videos.map((video, index) => {\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumResourcesAccordionWidget\n }\n };\n\n return (\n <li key={`${props.outcomeIndex}:${index}`} className={`${styles.video} d-flex`}>\n <div className={`${styles.thumbnail} me-2`}>\n <VideoThumbnail\n appLink={props.getVideoAppLink(video, {})}\n video={video}\n type='static'\n imageOptions={{ size: ImageSize.Medium }}\n commonVideoProps={props.commonVideoProps}\n hideDuration\n {...analyticsProps}\n />\n </div>\n\n <div className='d-flex flex-column justify-content-between'>\n <div>\n <VideoSubText\n {...analyticsProps}\n video={video}\n appLink={props.getSeriesAppLink(video.series)}\n type='series'\n />\n <VideoItemTitle\n {...analyticsProps}\n video={video}\n appLink={props.getVideoAppLink(video, {})}\n size='sm'\n titleClassName='mb-0'\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={props.commonVideoProps.showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience\n && !props.commonVideoProps.hasGuestExperience}\n />\n </div>\n\n <VideoItemGuidance\n video={video}\n getVideoAppLink={props.getVideoAppLink}\n commonVideoProps={props.commonVideoProps}\n containerClassName='d-flex justify-content-start align-items-center pt-sm-1 gap-1'\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n </div>\n </li>\n );\n })}\n </ul>\n <AppLink\n appLink={props.getOutcomeAppLink(props.outcome.name)}\n className='info-link mt-2 d-inline-block'\n >\n {hasCode ? (\n <Text namespace={namespace} phrase='viewAllVideosCode' options={{ code: props.outcome.name }} />\n ) : (\n <Text namespace={namespace} phrase='viewAllVideosNoCode' />\n )}\n </AppLink>\n </>\n );\n}\n",":local {\n .audience {\n background-color: $gray-100;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n\n .area:not(:last-child) {\n margin-bottom: map-get($spacers, 5);\n }\n\n .outcome:not(:last-child) {\n margin-bottom: map-get($spacers, 4);\n }\n}","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumLeaf } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumAccordionVideoList } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/components/curriculum-accordion-video-list/CurriculumAccordionVideoList';\nimport { CurriculumAudienceSection } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumAccordionUtils';\nimport { Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport styles from './audience-section.module.scss';\n\nconst namespace = 'shared.audienceSection';\n\ninterface AudienceSectionProps {\n audience: CurriculumAudienceSection;\n getSearchAppLink: (code: string) => Core.AppLink;\n getVideoAppLink: (obj: Video, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSeriesAppLink: (series: Series) => Core.AppLink;\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function AudienceSection(props: AudienceSectionProps): JSX.Element {\n return (\n <Accordion.Collapse eventKey={props.audience.name}>\n <div className={`${styles.audience} px-3 pb-3`}>\n <ul className='bg-white p-3 rounded-3 list-unstyled mb-0'>\n {props.audience.areas.map((area, index) => {\n return (\n <li key={index} className={styles.area}>\n <h3 className='h5 fw-normal mb-3'>{area.name}</h3>\n\n <ul className='list-unstyled'>\n {area.outcomes.map((outcome, outcomeIndex) => {\n return (\n <li key={outcomeIndex} className={styles.outcome}>\n <h4 className='h6'>\n <Text namespace={namespace} phrase='outcome' />\n </h4>\n\n <div className='pb-2'>\n <CurriculumLeaf\n id={outcome.id}\n code={outcome.name}\n description={outcome.description}\n getCodeAppLink={props.getSearchAppLink}\n locationContext={LocationContext.CurriculumResourcesAccordionWidget}\n uiContainsCodes\n />\n </div>\n\n <CurriculumAccordionVideoList\n outcome={outcome}\n analyticsData={props.analyticsData}\n getVideoAppLink={props.getVideoAppLink}\n getSeriesAppLink={props.getSeriesAppLink}\n getOutcomeAppLink={props.getSearchAppLink}\n commonVideoProps={props.commonVideoProps}\n outcomeIndex={outcomeIndex}\n />\n </li>\n );\n })}\n </ul>\n </li>\n );\n })}\n </ul>\n </div>\n </Accordion.Collapse>\n );\n}\n","import { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum, Video } from 'libs/shared/interfaces';\n\nexport type CurriculumNode<TType = CurriculumType> = Curriculum<TType> & {\n children: CurriculumNode[],\n videos: Video[]\n};\n\nexport type CurriculumAudienceSection = {\n name: string,\n areas: CurriculumAudienceArea[]\n};\n\nexport type CurriculumOutcomeSection = {\n name: string,\n description: string,\n videos: Video[]\n};\n\ntype CurriculumAudienceArea = {\n name: string,\n outcomes: CurriculumNode<CurriculumType.Leaf>[]\n};\n\nfunction getAudienceAreas(audience: CurriculumNode): CurriculumAudienceArea[] {\n const areas: Map<string, CurriculumAudienceArea> = new Map();\n\n function traverse(node: CurriculumNode, areaName: string): void {\n if (node.type === CurriculumType.Area) {\n if (areaName.length)\n areaName += ` - `;\n\n areaName += node.name;\n\n for (const child of node.children)\n traverse(child, areaName);\n\n return;\n }\n\n if (node.type === CurriculumType.Leaf) {\n if (!areas.has(areaName)) {\n areas.set(areaName, {\n name: areaName,\n outcomes: []\n });\n }\n\n areas.get(areaName).outcomes.push(node as CurriculumNode<CurriculumType.Leaf>);\n }\n }\n\n for (const area of audience.children)\n traverse(area, '');\n\n return Array.from(areas.values());\n}\n\nexport function getCurriculumAccordion(tree: CurriculumNode[]) {\n const audienceLookup: Map<string, CurriculumAudienceSection> = new Map();\n\n for (const subject of tree) {\n for (const audience of subject.children) {\n if (!audienceLookup.has(audience.name)) {\n audienceLookup.set(audience.name, {\n name: audience.name,\n areas: []\n });\n }\n\n audienceLookup.get(audience.name).areas.push(...getAudienceAreas(audience));\n }\n }\n\n return Array.from(audienceLookup.values());\n}\n","import React from 'react';\nimport { Accordion } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumData, Series, Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { AccordionButton } from './components/accordion-button/AccordionButton';\nimport { AudienceSection } from './components/audience-section/AudienceSection';\nimport { CurriculumNode, getCurriculumAccordion } from './CurriculumAccordionUtils';\n\nconst namespace = 'shared.curriculumResourcesAccordion';\n\nexport interface CurriculumResourcesAccordionWidgetTemplateProps {\n content: CurriculumNode[];\n curriculums: CurriculumData;\n appLinks: {\n editCurriculum: () => Core.AppLink,\n search: (code: string) => Core.AppLink,\n videoType: (video: Video, opts: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n commonVideoProps: CommonVideoProps;\n analyticsData: HashObject;\n}\n\nexport function CurriculumResourcesAccordionWidgetTemplate(\n props: CurriculumResourcesAccordionWidgetTemplateProps\n): JSX.Element {\n const accordion = React.useMemo(() => getCurriculumAccordion(props.content), [props.content]);\n\n return (\n <div>\n <div className='d-flex align-items-end justify-content-between mb-2'>\n <h2 className='h3 mb-0'>\n {props.curriculums.preferredCurriculum.name}\n </h2>\n\n {props.curriculums.availableCurriculums.length > 1 && (\n <AppLink appLink={props.appLinks.editCurriculum()}>\n <Text namespace={namespace} phrase='changeCurriculum' />\n </AppLink>\n )}\n </div>\n\n <Accordion className='mb-n3'>\n {accordion.map((audience, index) => {\n return (\n <div className='mb-3' key={index}>\n <AccordionButton name={audience.name} />\n <AudienceSection\n audience={audience}\n getSearchAppLink={props.appLinks.search}\n getVideoAppLink={props.appLinks.videoType}\n getSeriesAppLink={props.appLinks.series}\n commonVideoProps={props.commonVideoProps}\n analyticsData={props.analyticsData}\n />\n </div>\n );\n })}\n </Accordion>\n </div>\n );\n}\n","import React from 'react';\n\nconst Item = () => <div className='partial-loading-background mb-3 rounded-3' style={{ height: '3.5rem' }} />;\n\nexport function PartialCurriculumResourcesAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2 w-25' style={{ height: '1.7325rem' }} />\n <div className='mb-n3'>\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n <Item />\n </div>\n </>\n );\n}\n","import React from 'react';\n\nexport function HamburgerSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='nonzero'\n d='M19 15.75a.75.75 0 0 1 .102 1.493L19 17.25H5a.75.75 0 0 1-.102-1.493L5 15.75zm0-5a.75.75 0 0 1 .102 1.493L19 12.25H5a.75.75 0 0 1-.102-1.493L5 10.75zm0-5a.75.75 0 0 1 .102 1.493L19 7.25H5a.75.75 0 0 1-.102-1.493L5 5.75z'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { HamburgerSvg } from 'libs/shared/images/svg/objects/HamburgerSvg';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport styles from './cover-pill.module.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface EditableSubjectWidgetItemProps {\n data: Classification;\n onToggleVisibility: (c: Classification) => void;\n isVisible: boolean;\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n style?: HashObject;\n isDragging: boolean;\n canToggle: boolean;\n\n multiline?: boolean;\n}\n\nexport const EditableSubjectWidgetItem = React.forwardRef((\n props: EditableSubjectWidgetItemProps,\n ref: React.LegacyRef<HTMLDivElement>\n): JSX.Element => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${styles.name} h6`;\n\n if (!props.multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` clamp-3`;\n }\n\n function getToggleTooltip(): string {\n if (!props.canToggle)\n return LanguageService.getPhrase(namespace, 'cantToggle');\n\n return LanguageService.getPhrase(namespace, props.isVisible ? 'hideFromDashboard' : 'showOnDashboard');\n }\n\n if (props.style?.visibility === 'hidden') {\n return (\n <div\n ref={ref}\n className={`d-flex align-items-center position-relative clamp-2 ${styles.widgetItem} ${styles.draggingItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`border d-flex align-items-center position-relative ${styles.widgetItem}`}\n style={ObjectHelper.omit(props.style, ['visibility'])}\n >\n <div\n className={`\n ${styles.dragHandle} ms-3 d-flex justify-content-center align-items-center \n ${props.isDragging ? 'cursor-grabbing' : 'cursor-grab'} ${props.isVisible ? '' : 'text-secondary'}\n `}\n {...props.dragAttributes}\n {...props.dragListeners}\n >\n <SvgContainer svg={HamburgerSvg} />\n </div>\n <div className={wrapperClassName}>\n <label htmlFor={props.data.id} className={`${textClassName} ${props.isVisible ? '' : 'text-secondary'} mb-0`}>\n {props.data.name}\n </label>\n </div>\n\n <div className='ms-auto me-3'>\n <ToggleSwitch\n id={props.data.id}\n on={props.isVisible}\n onClick={() => props.onToggleVisibility(props.data)}\n tooltipText={getToggleTooltip()}\n disabled={!props.canToggle}\n showStateWhenDisabled\n />\n </div>\n </div>\n );\n});\n","import { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { BaseObject, ReorderRequest } from 'libs/shared/interfaces';\n\ninterface ReorderResult<T extends BaseObject> {\n reorderRequest: ReorderRequest;\n reorderedItems: T[];\n}\n\nexport const ReorderHelper = {\n reorder<T extends BaseObject>(items: T[], oldIdx: number, newIdx: number): ReorderResult<T> {\n if (oldIdx === newIdx)\n return { reorderedItems: items, reorderRequest: null };\n\n const reorderedItems: T[] = ArrayHelper.moveItem(items, oldIdx, newIdx);\n\n /**\n * If newIdx is the last idx then we set\n * destinationMemberId to null.\n */\n const destinationMemberId = newIdx < items.length - 1 ?\n reorderedItems[newIdx + 1].id :\n null;\n\n const reorderRequest: ReorderRequest = {\n sourceMemberId: reorderedItems[newIdx].id,\n destinationMemberId\n };\n\n return { reorderedItems, reorderRequest };\n },\n\n updateState(\n dataPrefix: string,\n reorderRequest: ReorderRequest,\n data: {[key: string]: HashObject }\n ): {[key: string]: HashObject } {\n const items: BaseObject[] = [];\n const updatedData = ObjectHelper.deepClone(data);\n\n const keys = [dataPrefix]; // Maintain an ordered list of keys.\n let page = data[dataPrefix];\n const pageSize = !!page && !!page.data && page.data.length;\n\n /**\n * Flatten items\n */\n while (page) {\n if (!Array.isArray(page.data))\n break;\n\n items.push(...page.data as BaseObject[]);\n\n const nextCursor = page.pagination\n && page.pagination.cursors\n && page.pagination.cursors.next;\n\n const nextKey = !!nextCursor && `${dataPrefix}:${nextCursor}`;\n\n page = nextCursor && data[nextKey];\n\n if (page)\n keys.push(nextKey);\n }\n\n if (!items.length)\n return data;\n\n /**\n * Reorder items\n */\n const removeIdx = ArrayHelper.findIndex(items, i => i.id === reorderRequest.sourceMemberId);\n\n let reorderedItems = [...items];\n\n const itemToMove = reorderedItems.splice(removeIdx, 1);\n\n const insertIdx = reorderRequest.destinationMemberId ?\n ArrayHelper.findIndex(reorderedItems, r => r.id === reorderRequest.destinationMemberId) :\n reorderedItems.length;\n\n reorderedItems.splice(insertIdx, 0, itemToMove[0]);\n\n reorderedItems = reorderedItems.map(v => ({ id: v.id }));\n\n /**\n * Paginate reordered items\n */\n keys.forEach(key => {\n const itemsToInsert = reorderedItems.splice(0, pageSize);\n updatedData[key].data = itemsToInsert;\n });\n\n return updatedData;\n }\n};\n",":local {\n .dragOverlay {\n box-shadow: 0px 5px 10px rgba($black, 0.3);\n }\n\n .headingContainer {\n height: 2.5rem; // Sets a consistent height on the heading section so that the size doesn't change when you switch to editing mode\n }\n}","import React from 'react';\nimport { Button, Col, Row } from 'react-bootstrap';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { EditableSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/EditableSubjectWidgetItem';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetPreference } from 'libs/shared/interfaces';\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './editable-cover-fixed-pill-list-small.module.scss';\n\ninterface PreferencesHash {\n [classificationId: string]: WidgetPreference;\n}\n\ninterface PresentationSwitchItem extends Classification {\n vanitySlug: string;\n}\n\nconst namespace = 'shared.editableCoverFixedPillListSmall';\n\nexport interface EditableCoverFixedPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n preferences: WidgetPreference[];\n widgetTypeId: WidgetTypeId;\n content: Classification[];\n isPreviewing: boolean;\n updatePreferences: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n availablePresentations: Presentation[];\n settings: {\n hasTopicDirectories: boolean\n };\n isTertiaryCustomerWithoutExchange: boolean;\n hasLocalPermissions: HasLocalPermissionsFunc;\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n discover: (presentationSlug: string) => Core.AppLink\n };\n}\n\nexport function EditableCoverFixedPillListSmallWidgetTemplate(\n props: EditableCoverFixedPillListSmallWidgetTemplateProps\n): JSX.Element {\n const [ isEditing, setIsEditing ] = React.useState(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const processedContent = WidgetHelper.useGetContent(\n props.content,\n props.widgetTypeId,\n props.isPreviewing,\n props.preferences,\n []\n );\n const content = processedContent.unfilteredContent as Classification[];\n\n const isFollowingNothing = React.useMemo(() => {\n return content.every(c => !c.followers?.data?.length);\n }, [content]);\n\n const initialPreferences = React.useMemo(() => {\n return content?.reduce((acc: HashObject, current, index) => {\n const preference: WidgetPreference = {\n id: current.id,\n hidden: !current.followers?.data?.length && !isFollowingNothing,\n index\n };\n\n acc[current.id] = preference;\n return acc;\n }, {}) ?? {};\n }, [ props.preferences, isFollowingNothing ]);\n\n const [ persistedPreferences, setPersistedPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n const [ preferences, setPreferences ] = React.useState<PreferencesHash>(initialPreferences);\n\n const currentSubjects = React.useMemo(() => {\n if (!isEditing) {\n return content\n .filter(c => !!persistedPreferences[c.id] && !persistedPreferences[c.id]?.hidden)\n .sort((a, b) => persistedPreferences[a.id].index - persistedPreferences[b.id].index);\n }\n\n return content\n .filter(c => !!preferences[c.id])\n .sort((a, b) => preferences[a.id].index - preferences[b.id].index);\n }, [ content, preferences, persistedPreferences, isEditing ]);\n \n const alerts = useAlerts();\n\n React.useEffect(() => {\n setIsEditing(false);\n }, [props.presentation?.id]);\n\n /**\n * The \"Explore all subjects\" option displays for users who have hidden some topics\n */\n const showExploreAllTopics = React.useMemo(() => {\n if (isEditing || !currentSubjects.length)\n return false;\n \n return Object.values(preferences).some(p => p.hidden);\n }, [ isEditing, preferences ]);\n\n async function onClickSavePreferences(): Promise<void> {\n setShowSpinner(true);\n\n const oldPreferences = isFollowingNothing ?\n content.map((c, index) => ({ id: c.id, hidden: true, index })) :\n Object.values(persistedPreferences);\n\n props.updatePreferences(props.id, props.widgetTypeId, oldPreferences, Object.values(preferences))\n .then(() => {\n setPersistedPreferences(preferences);\n setShowSpinner(false);\n setIsEditing(false);\n })\n .catch(() => {\n setShowSpinner(false);\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n });\n }\n\n function onClickCancel(): void {\n setPreferences(persistedPreferences);\n setIsEditing(false);\n }\n\n function getItemIndex(classification: Classification): number {\n if (preferences[classification.id])\n return preferences[classification.id].index;\n \n return currentSubjects.findIndex(c => c.id === classification.id);\n }\n\n function isVisible(classification: Classification): boolean {\n return !preferences[classification.id]?.hidden;\n }\n\n function onToggleVisibility(classification: Classification): void {\n const newPreferences = { ...preferences };\n\n const hidden = isVisible(classification);\n\n newPreferences[classification.id] = {\n id: classification.id,\n hidden,\n index: getItemIndex(classification)\n };\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Hide,\n descriptor: hidden ? ToggleDescriptor.On : ToggleDescriptor.Off\n });\n\n setPreferences(newPreferences);\n }\n\n function getDragOverlay(id: string): JSX.Element {\n const classification = currentSubjects.find(c => c.id === id);\n\n return (\n <div className={`bg-white rounded-3 ${styles.dragOverlay}`}>\n <EditableSubjectWidgetItem\n data={classification}\n onToggleVisibility={onToggleVisibility}\n isVisible={isVisible(classification)}\n isDragging={true}\n canToggle={\n !isVisible(classification) ||\n Object.values(preferences).filter(c => !c.hidden).length > 1\n }\n />\n </div>\n );\n }\n\n function onSortStart(event: DragStartEvent): void {\n const classification = currentSubjects.find(s => s.id.toString() === event.active.id.toString());\n const index = currentSubjects.findIndex(s => s.id.toString() === event.active.id.toString());\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n index\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Start\n });\n }\n\n function onSortEnd(event: DragEndEvent): void {\n const { active, over } = event;\n \n const oldIndex = getItemIndex({ id: active.id } as Classification);\n const newIndex = currentSubjects.findIndex(s => s.id.toString() === over.id.toString());\n \n if (oldIndex === newIndex)\n return;\n\n const classification = currentSubjects[oldIndex];\n\n if (!classification)\n return;\n\n const newPreferences = { ...preferences };\n\n const { reorderedItems } = ReorderHelper.reorder(currentSubjects, oldIndex, newIndex);\n\n reorderedItems.forEach((item, index) => {\n newPreferences[item.id] = {\n id: item.id,\n index,\n hidden: !isVisible(item)\n };\n });\n\n setPreferences(newPreferences);\n\n AnalyticsHelper.logUserAction({\n id: classification.id,\n name: classification.name,\n oldIndex,\n newIndex\n }, {\n location: LocationContext.EditableSubjectPreferencesWidget,\n entity: EntityType.Classification,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n const hasEditedPreferences = React.useMemo(() => {\n return !ObjectHelper.isEqual(initialPreferences, preferences);\n }, [ initialPreferences, preferences ]);\n\n const exploreAllSubjectsItem = {\n id: props.presentation.id,\n name: LanguageService.getPhrase(namespace, 'exploreAll', { name: props.presentation.name }),\n cover: props.availablePresentations?.find(p => p.id === props.presentation.id)?.cover ?? props.presentation.cover,\n metadata: {\n backgroundColor: TopicsHelper.getMappedPresentationBackgroundColourCode(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?.vanitySlug)}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n presentationId: item.id,\n presentationDescription: item.description\n }}\n analyticsOptions={{\n ...analyticsOptions,\n entity: EntityType.Presentation\n }}\n multiline\n highlightOnHover\n shouldHighlight={() => props.settings?.hasTopicDirectories}\n />\n </Col>\n );\n })\n }\n </Row>\n </div>\n );\n}\n",":local {\n .partialLoadingHeading {\n width: 12rem;\n height: 2rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\n\nimport styles from './partial-editable-cover-fixed-pill-list-small-widget-template.module.scss';\n\nexport function PartialEditableCoverFixedPillListSmallWidgetTemplate(): JSX.Element {\n return (\n <div className='py-2'>\n <div className={`partial-loading-background mb-2 ${styles.partialLoadingHeading}`} />\n <Row className='g-0'>\n {Array(7).fill(null).map((_, i) => (\n <Col key={i} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectWidgetItem />\n </div>\n </Col>\n ))}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .dateItemContainer {\n font-size: 1rem;\n\n @media (max-width: 650px) and (min-width: #{map-get($grid-breakpoints, sm)}) {\n font-size: 0.8rem;\n }\n\n @media (max-width: 400px) {\n font-size: 0.8rem;\n }\n }\n\n .container {\n width: 16.666667%;\n aspect-ratio: 1 / 1;\n\n &:first-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n left: -5px;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n }\n\n &:last-child {\n &::before {\n content: \"\";\n width: 5px;\n height: 100%;\n background-color: inherit;\n position: absolute;\n top: 0;\n right: -5px;\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n }\n }\n\n @include media('<=xl') {\n .container {\n width: 20%;\n }\n }\n\n @include media('<=lg') {\n .container {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .container {\n width: 33.33333%;\n }\n }\n\n @include media('<=sm') {\n .container {\n width: 50%;\n }\n }\n}","import React from 'react';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DateWidgetItem } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarEvent, CalendarEventContent, Classification, Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './special-event-widget-item.module.scss';\n\ninterface CalendarWidgetItem {\n theme?: CalendarTheme;\n analyticsData?: (content: CalendarEvent<CalendarEventContent>) => HashObject;\n analyticsOptions?: AnalyticsOptions;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n}\n\nfunction CalendarWidgetItem<T extends CalendarEventContent>(\n props: CalendarWidgetItem & FixedWidgetItemProps<CalendarEvent<T>>\n) {\n return (\n <div className={`${styles.container} position-relative flex-shrink-0 ${props.theme.backgroundSecondary}`}>\n <AppLink\n appLink={props.getAppLink(props.data)}\n className='text-decoration-none my-2 mx-1 rounded-3 d-block position-relative'\n analyticsData={props.analyticsData(props.data)}\n analyticsOptions={props.analyticsOptions}\n >\n <CalendarDay\n isHovering={false}\n date={new Date(props.data.startDate)}\n notCurrentMonth={false}\n monthQuery={null}\n eventsOnDay={[props.data]}\n events={[props.data]}\n sliderStep={0}\n presentationId={props.data.content.presentationId}\n hoveredEvent={null}\n isMultiEventDate={false}\n className='rounded-3'\n getBackgroundColor={props.getBackgroundColor}\n getIconUrl={props.getIconUrl}\n hasInitialized\n responsiveText={false}\n hideDay\n />\n </AppLink>\n </div>\n );\n}\n\nexport type SpecialEventWidgetItemProps = CalendarWidgetItem &\nFixedWidgetItemProps<CalendarEvent<CalendarEventContent> | DateWidgetItem>;\n\nexport function SpecialEventWidgetItem(\n props: SpecialEventWidgetItemProps\n): JSX.Element {\n const { data, ...otherProps } = props;\n\n if (data.type === 'date-widget-item') {\n return (\n <div className={`${styles.container} ${styles.dateItemContainer} flex-shrink-0 ${props.theme.backgroundSecondary} position-relative`}>\n <GenericCalendarDate\n month={data.month}\n body={data.body}\n label={data.label}\n getAppLink={() => props.getAppLink(data)}\n analyticsData={{\n ...props.analyticsData,\n label: data.label,\n month: data.month,\n body: data.body.text\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Url,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n className='my-2 mx-1'\n theme={props.theme}\n />\n </div>\n );\n }\n\n if (data.type === 'Livestream')\n return (\n <CalendarWidgetItem\n {...otherProps}\n data={data as CalendarEvent<Livestream>}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getIconUrl={(content: Livestream) => content.company.logo?.url}\n analyticsData={(event: CalendarEvent<Livestream>) => ({\n ...props.analyticsData,\n id: event.content.id,\n name: event.content.name,\n startDateTime: event.content.startDateTime,\n endDateTime: event.content.endDateTime\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n\n function getIconUrl(classification: Classification): string {\n // in sliding widget we use icon from classification\n return ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n \n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n return (\n <CalendarWidgetItem {...otherProps}\n data={data as CalendarEvent}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getIconUrl={(classification: Classification) => getIconUrl(classification)}\n getHardCodedEvent={getHardCodedEvent}\n analyticsData={(event: CalendarEvent<Classification>) => ({\n ...props.analyticsData,\n id: event.specialEventId,\n name: event.name,\n startDate: event.startDate,\n endDate: event.endDate,\n classificationId: event.content.id,\n classificationName: event.content.name\n })}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.SpecialEvent,\n actionType: UserAction.Click,\n location: LocationContext.EventIconSlidingListWidget\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { SpecialEventWidgetItem } from 'libs/shared/components/widgets/items/special-event-widget-item/SpecialEventWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CalendarEvent, CalendarEventContent, CalendarEventContentType, Classification, Livestream, WidgetType } from 'libs/shared/interfaces';\n\nconst namespace = 'widgets.eventIconSlidingList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DateWidgetItem {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day',\n text: string\n };\n month?: string;\n appLinkMonth: string;\n appLinkYear?: string;\n type: 'date-widget-item';\n}\n\ntype EventGroup = 'today' | 'tomorrow' | 'nextWeek' | 'thisMonth' | 'nextMonth' | 'later' | string;\n\ntype EventGroupingMap = Map<EventGroup, EventGrouping>;\n\ninterface EventGrouping {\n events: CalendarEvent<CalendarEventContent>[];\n label: string;\n body: DateWidgetItem['body'];\n monthLabel: string;\n startDate: string;\n endDate?: string;\n}\n\nfunction getWidgetItems(\n content: CalendarEvent<CalendarEventContent>[] | Livestream[],\n contentType?: CalendarEventContentType\n): (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] {\n let calendarEvents: CalendarEvent<CalendarEventContent>[];\n \n switch (contentType) {\n case CalendarEventContentType.Livestream: {\n calendarEvents = getCalendarEventLivestreams(content as Livestream[]);\n break;\n }\n default: {\n calendarEvents = content as CalendarEvent[];\n }\n }\n\n // We want to process the events in the order that they occur in.\n const rawOrderedEvents = [...calendarEvents].sort((a, b) => a.startDate.localeCompare(b.startDate));\n\n const now = new Date();\n const today = DateHelper.format(now, 'YYYY-MM-DD');\n const tomorrow = DateHelper.format(DateHelper.add(today, 1, 'day'), 'YYYY-MM-DD');\n\n /**\n * Get next Monday's date. We add 8 days to the start of the week because\n * moment's start day is Sunday instead of Monday\n */\n const nextWeekStart = DateHelper.format(DateHelper.add(DateHelper.startOf(now, 'week'), 8, 'days'), 'YYYY-MM-DD');\n const nextWeekEnd = DateHelper.format(DateHelper.add(nextWeekStart, 6, 'days'), 'YYYY-MM-DD');\n\n const thisMonthStart = DateHelper.format(DateHelper.startOf(now, 'month'), 'YYYY-MM-DD');\n const thisMonthEnd = DateHelper.format(DateHelper.endOf(now, 'month'), 'YYYY-MM-DD');\n\n const nextMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n const nextMonthEnd = DateHelper.format(DateHelper.endOf(DateHelper.add(now, 1, 'month'), 'month'), 'YYYY-MM-DD');\n\n const laterMonthStart = DateHelper.format(DateHelper.startOf(DateHelper.add(now, 2, 'month'), 'month'), 'YYYY-MM-DD');\n const laterMonthEnd = DateHelper.format(DateHelper.add(now, 1, 'year'), 'YYYY-MM-DD');\n\n // Using a map for this because we want the event ordering to be preserved\n const eventGroupingMap: EventGroupingMap = new Map();\n\n type EventRecord = {\n group: EventGroup,\n startDate: string,\n endDate: string,\n body: DateWidgetItem['body'],\n monthLabel: string,\n event: CalendarEvent<CalendarEventContent>,\n label: string\n };\n\n function getCalendarEventLivestreams(livestreams: Livestream[]): CalendarEvent<Livestream>[] {\n return livestreams.map((livestream: Livestream) => ({\n id: livestream.id,\n startDate: DateHelper.format(livestream.startDateTime, 'YYYY-MM-DD'),\n type: 'Livestream',\n name: livestream.name,\n description: livestream.description,\n content: livestream\n }));\n }\n\n function addEventToGroup(eventRecord: EventRecord): void {\n if (!eventGroupingMap.has(eventRecord.group)) {\n eventGroupingMap.set(eventRecord.group, {\n events: [eventRecord.event],\n label: eventRecord.label,\n body: eventRecord.body,\n monthLabel: eventRecord.monthLabel,\n startDate: eventRecord.startDate,\n endDate: eventRecord.endDate\n });\n return;\n }\n\n const currentMergedEvent = eventGroupingMap.get(eventRecord.group);\n eventGroupingMap.set(eventRecord.group, {\n ...currentMergedEvent,\n events: [ ...currentMergedEvent.events, eventRecord.event ]\n });\n }\n\n /**\n * Loop through every event, and identify which group it belongs to.\n */\n rawOrderedEvents.forEach(event => {\n // Today's events\n if (event.startDate <= today) {\n addEventToGroup({\n group: 'today',\n startDate: today,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(today, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(today, 'MMMM'),\n label: getPhrase('today')\n });\n return;\n }\n\n // Tomorrow's events\n if (event.startDate === tomorrow) {\n addEventToGroup({\n group: 'tomorrow',\n startDate: tomorrow,\n endDate: null,\n event,\n body: {\n text: DateHelper.format(tomorrow, 'DD'),\n type: 'day'\n },\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n label: getPhrase('tomorrow')\n });\n return;\n }\n\n // This week's events, added separately for each day\n if (event.startDate > tomorrow && event.startDate < nextWeekStart) {\n const day = DateHelper.format(event.startDate, 'dddd');\n addEventToGroup({\n group: day,\n startDate: event.startDate,\n endDate: event.endDate,\n event,\n monthLabel: DateHelper.format(event.startDate, 'MMMM'),\n body: {\n text: DateHelper.format(event.startDate, 'DD'),\n type: 'day'\n },\n label: day\n });\n return;\n }\n\n // Next week's events\n if (event.startDate >= nextWeekStart && event.startDate <= nextWeekEnd) {\n addEventToGroup({\n group: 'nextWeek',\n startDate: nextWeekStart,\n endDate: nextWeekEnd,\n event,\n // Next week may either be in the same month or in different months\n monthLabel: DateHelper.isSame(nextWeekStart, nextWeekEnd, 'month') ?\n DateHelper.format(nextWeekStart, 'MMMM') :\n `${DateHelper.format(nextWeekStart, 'MMM')} - ${DateHelper.format(nextWeekEnd, 'MMM')}`,\n body: {\n text: `${DateHelper.format(nextWeekStart, 'DD')}-${DateHelper.format(nextWeekEnd, 'DD')}`,\n type: 'range'\n },\n label: getPhrase('nextWeek')\n });\n\n return;\n }\n\n // This month's events\n if (event.startDate >= thisMonthStart && event.startDate <= thisMonthEnd) {\n addEventToGroup({\n group: 'thisMonth',\n startDate: thisMonthStart,\n endDate: thisMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('thisMonth')\n });\n return;\n }\n\n // Next month's events\n if (event.startDate >= nextMonthStart && event.startDate <= nextMonthEnd) {\n addEventToGroup({\n group: 'nextMonth',\n startDate: nextMonthStart,\n endDate: nextMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('nextMonth')\n });\n return;\n }\n\n // Later events\n if (event.startDate >= laterMonthStart && event.startDate <= laterMonthEnd) {\n addEventToGroup({\n group: 'later',\n startDate: laterMonthStart,\n endDate: laterMonthEnd,\n event,\n // We don't display the month label for events where the date card body only displays the month name\n monthLabel: '',\n body: {\n text: DateHelper.format(event.startDate, 'MMM'),\n type: 'month'\n },\n label: getPhrase('later')\n });\n }\n });\n\n const mergedEvents: (CalendarEvent<CalendarEventContent> | DateWidgetItem)[] = [];\n\n for (const eventGrouping of eventGroupingMap.values()) {\n const dateItem: DateWidgetItem = {\n label: eventGrouping.label,\n body: eventGrouping.body,\n month: eventGrouping.monthLabel,\n appLinkMonth: DateHelper.format(eventGrouping.startDate, 'MMMM'),\n appLinkYear: DateHelper.format(eventGrouping.startDate, 'YYYY'),\n type: 'date-widget-item'\n };\n\n mergedEvents.push(dateItem);\n\n eventGrouping.events.forEach(event => {\n mergedEvents.push(event);\n });\n }\n\n return mergedEvents;\n}\n\nexport interface EventIconSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n contentType: CalendarEventContentType;\n content: CalendarEvent<CalendarEventContent>[];\n appLinks: {\n calendar: () => Core.AppLink,\n calendarMonth: (month: string, year?: string) => Core.AppLink,\n livestream: (livestream: Livestream) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n}\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}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction useGetTotalItems(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg)\n return 5;\n\n if (breakpoints.xl || breakpoints.xxl)\n return 6;\n}\n\nexport function PartialEventIconSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const totalItems = useGetTotalItems();\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row g-0 mx-n1'>\n {Array(totalItems).fill(null).map((_, index) => (\n <div className='col px-1' key={index}>\n <div className='partial-loading-background rounded-3' style={{ paddingBottom: '100%' }} />\n </div>\n ))}\n </div>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .hovering {\n z-index: 10;\n border-radius: $border-radius-lg;\n position: relative;\n }\n\n .transition {\n transition: transform .2s ease;\n }\n\n .rowWidth {\n width: 25%;\n }\n\n .largeRowWidth {\n width: 33.33333%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth,\n .largeRowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth,\n .largeRowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { PresentationAudience, VideoTypes, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item.module.scss';\n\nexport interface VideoWidgetItemProps extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences?: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\n}\n\nexport const VideoWidgetItem = React.memo(function(props: VideoWidgetItemProps): JSX.Element {\n const { data: video, context, thumbnailSize, preloadImage } = props;\n\n const getScaleSize = () => {\n if (context?.type === WidgetType.LargeRow)\n return 1.1;\n\n return 1.15;\n };\n\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({\n className: styles.hovering,\n style: {\n transform: `scale(${getScaleSize()})`\n }\n });\n\n React.useEffect(() => {\n props.onHover(isHovering);\n }, [isHovering]);\n\n let width = styles.rowWidth;\n\n if (context.type === WidgetType.LargeRow)\n width = styles.largeRowWidth;\n\n return (\n <div ref={ref} className={`px-1 flex-shrink-0 position-relative ${width} ${styles.transition}`}>\n <VideoThumbnail\n video={props.data}\n type='expandable'\n appLink={props.getAppLink(video)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n hovering={isHovering}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n",":local {\n .banner {\n padding: $spacer;\n background-position: center;\n background-size: 100%;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n background-color: $gray-200;\n\n &:hover {\n opacity: 0.95;\n }\n }\n .partialBanner {\n height: 3.7rem;\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1/VideoWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CuratedDashboardAppLink, Presentation, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './featured-sliding-heading.module.scss';\n\nexport interface FeaturedThumbnailSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n imageCdnUrl: string;\n content: Video[];\n presentation: Presentation;\n metadata: {\n imageId: string,\n appLink: CuratedDashboardAppLink\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n series: (series: Series) => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n latestReleases: () => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n \n limitTotalItems?: boolean;\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function FeaturedThumbnailSlidingListWidgetTemplate(\n props: FeaturedThumbnailSlidingListWidgetTemplateProps\n): JSX.Element {\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n const bannerBackgroundUrl = (props?.imageCdnUrl && props.metadata?.imageId) ? ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Medium\n ) : '';\n\n return (\n <div>\n <AppLink\n appLink={widgetAppLink}\n style={bannerBackgroundUrl ? { backgroundImage: `url(${bannerBackgroundUrl})` } : {}}\n className={`${styles.banner} mb-2 d-flex justify-content-between no-decoration ${!props.name ? styles.partialBanner : ''}`}\n analyticsData={{\n url: AppLinkHelper.getHref(widgetAppLink)\n }}\n analyticsOptions={{\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.ContentUpdatesBanner\n }}\n >\n <h2 className='h4 text-white mb-0'>\n {props.name}\n </h2>\n </AppLink>\n <FixedWidget\n id={props.id}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n limitTotalItems={props.limitTotalItems}\n prefetched\n hideName\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from '../featured-sliding-heading.module.scss';\n\nexport function PartialFeaturedThumbnailSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div>\n <div className={`banner rounded-3 position-relative partial-loading-background ${styles.banner} ${styles.partialBanner} mb-1 `}></div>\n <PartialFixedWidget\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n hideHeading\n />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 20%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 25%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 33.33%;\n }\n }\n}","import React from 'react';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SearchSvg } from 'libs/shared/images/svg/actions/SearchSvg';\nimport { Rating } from 'libs/shared/interfaces';\nimport { VideoDetailsHelper } from 'libs/shared/utils/VideoDetailsHelper';\n\nimport styles from './rating-widget-item.module.scss';\n\nexport interface RatingWidgetItemProps extends FixedWidgetItemProps<Rating> {\n ratingsLength: number;\n}\n\nexport function RatingWidgetItem(props: RatingWidgetItemProps): JSX.Element {\n function getRatingClasses(): string {\n if (props.ratingsLength > 4)\n return styles.rowWidth;\n\n if (props.ratingsLength === 4)\n return 'col-4 col-md-3';\n\n return 'col';\n }\n \n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={`${getRatingClasses()} position-relative flex-shrink-0 px-1 mt-1 text-decoration-none`}\n analyticsData={{\n ...props.analyticsData,\n code: props.data.code,\n id: props.data.id\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: EntityType.Rating,\n actionType: UserAction.Click,\n location: LocationContext.FilterSlidingPillListSmallWidget\n }}\n >\n <div className={`${VideoDetailsHelper.mapRatingToClass(props.data.value)} py-3 rounded-3`}>\n <div className='d-flex justify-content-center align-items-center text-white text-shadow'>\n <SvgContainer svg={SearchSvg} size={SvgContainerSize.Medium} />\n <h4 className='mb-0'>{props.data.code}</h4>\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RatingWidgetItem } from 'libs/shared/components/widgets/items/rating-widget-item/RatingWidgetItem';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Presentation, Rating, WidgetType } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nfunction getMaxRatingValue(presentation: Presentation): number {\n const learningLevel = TopicsHelper.getMappedPresentationLevel(presentation.learningLevel);\n \n switch (learningLevel) {\n /**\n * Primary should only show up to PG\n */\n case PresentationLearningLevel.Level_1:\n return 64;\n\n /**\n * Older levels should filter out high ratings such as R18+\n */\n default:\n return 128;\n }\n}\n\nexport interface FilterSlidingPillListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n presentation: Presentation;\n content: Rating[];\n appLinks: {\n rating: (rating: Rating, ratings: Rating[]) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n}\n\nexport function FilterSlidingPillListSmallWidgetTemplate(\n props: FilterSlidingPillListSmallWidgetTemplateProps\n): JSX.Element {\n const maxRating = getMaxRatingValue(props.presentation);\n const ratings = props.content.filter(rating => rating.code && rating.value < maxRating && rating.code !== 'E');\n \n return (\n <>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Ratings}\n getChildAppLink={rating => props.appLinks?.rating?.(rating, ratings)}\n collection={ratings}\n childComponent={RatingWidgetItem}\n analyticsData={props.analyticsData}\n extraChildComponentProps={{ ratingsLength: ratings.length }}\n prefetched\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialFilterSlidingPillListSmall(props: PartialWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getItemCount(): number {\n if (breakpoints.xs || breakpoints.sm)\n return 3;\n\n if (breakpoints.md || breakpoints.lg)\n return 4;\n\n return 5;\n }\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription\n />\n <div className='row mx-n1'>\n {[...Array(getItemCount())].map((_, index) => (\n <div key={index} className='col px-1'>\n <div className='d-inline-block w-100 partial-loading-background rounded-3 pb-5' />\n </div>\n ))}\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport interface HeadingWidgetTemplateProps {\n name: string;\n description: string;\n content: HashObject[]; // We need to have content on every widget template\n}\n\nexport function HeadingWidgetTemplate(props: HeadingWidgetTemplateProps): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <h2 className='curated-widget-heading'>{props.name}</h2>\n {!!props.description && (\n <p className='description curated-widget-description'>{props.description}</p>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialHeadingWidgetTemplate(): JSX.Element {\n return (\n <div className='curated-widget-header'>\n <div className='partial-loading-background curated-widget-heading' style={{ height: '2.099625rem', width: '16.5rem', maxWidth: '80%' }}>\n &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}\n","@import '~styles/utils/include-media';\n:local {\n .banner {\n padding-bottom: $cv-banner-padding-bottom;\n }\n\n .bannerContent {\n position: absolute;\n top: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n max-width: 18rem;\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './hero-banner.module.scss';\n\nexport interface HeroBannerWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function HeroBannerWidgetTemplate(props: HeroBannerWidgetTemplateProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n function getBannerUrl(): string {\n const entity = ArrayHelper.first(props.content);\n\n return ImageHelper.createBannerUrl(entity.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: entity.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n function getAppLink(): Core.AppLink {\n const entity = ArrayHelper.first(props.content);\n return props.appLinks?.classification?.(entity);\n }\n\n function getHeadingClass(): string {\n let className = 'text-white clamp-2';\n\n if (breakpoints.xs || breakpoints.sm)\n className += ' h4';\n else if (breakpoints.md)\n className += ' h3';\n else\n className += ' h2';\n\n className += ' text-white';\n\n return className;\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <AppLink\n appLink={getAppLink()}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={styles.bannerContent}>\n <p className={getHeadingClass()}>\n {props.name}\n </p>\n </div>\n }\n\n {!!props.metadata?.cta?.text && (\n <div className={styles.cta}>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text}\n </div>\n </div>\n )}\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport styles from '../hero-banner.module.scss';\n\nexport function PartialHeroBannerWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nexport function GridSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M5.5 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V5.5A.5.5 0 0 0 10 5zM4 5.5A1.5 1.5 0 0 1 5.5 4H10a1.5 1.5 0 0 1 1.5 1.5V10a1.5 1.5 0 0 1-1.5 1.5H5.5A1.5 1.5 0 0 1 4 10zM14 5a.5.5 0 0 0-.5.5V10a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V5.5a.5.5 0 0 0-.5-.5zm-1.5.5A1.5 1.5 0 0 1 14 4h4.5A1.5 1.5 0 0 1 20 5.5V10a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zM4 14a1.5 1.5 0 0 1 1.5-1.5H10a1.5 1.5 0 0 1 1.5 1.5v4.5A1.5 1.5 0 0 1 10 20H5.5A1.5 1.5 0 0 1 4 18.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5H10a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5zm7 .5a1.5 1.5 0 0 1 1.5-1.5h4.5A1.5 1.5 0 0 1 20 14v4.5a1.5 1.5 0 0 1-1.5 1.5H14a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v4.5a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5V14a.5.5 0 0 0-.5-.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function RectanglesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M4 6.4C4 5.627 4.632 5 5.412 5h13.176C19.368 5 20 5.627 20 6.4v3.733c0 .774-.632 1.4-1.412 1.4H5.412c-.78 0-1.412-.626-1.412-1.4zm1.412-.467c-.26 0-.47.21-.47.467v3.733c0 .258.21.467.47.467h13.176c.26 0 .47-.209.47-.467V6.4a.47.47 0 0 0-.47-.467zM4 13.867c0-.774.632-1.4 1.412-1.4h13.176c.78 0 1.412.627 1.412 1.4V17.6c0 .773-.632 1.4-1.412 1.4H5.412C4.632 19 4 18.373 4 17.6zm1.412-.467c-.26 0-.47.209-.47.467V17.6c0 .258.21.467.47.467h13.176c.26 0 .47-.21.47-.467v-3.733a.47.47 0 0 0-.47-.467z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SparkleSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M16.465 11.636a.469.469 0 0 1-.897-.003 5.11 5.11 0 0 0-3.204-3.202.469.469 0 0 1 .002-.897 5.11 5.11 0 0 0 3.203-3.203.469.469 0 0 1 .897.002 5.11 5.11 0 0 0 3.203 3.202.469.469 0 0 1-.002.897 5.11 5.11 0 0 0-3.202 3.204m-1.46-4.664a6 6 0 0 1-1.343 1.011c.492.273.946.614 1.344 1.011.397.398.738.852 1.01 1.344a6 6 0 0 1 1.012-1.344 6 6 0 0 1 1.344-1.01 6 6 0 0 1-1.344-1.012 6 6 0 0 1-1.011-1.344 6 6 0 0 1-1.011 1.344m-2.104 7.345.754.25a.469.469 0 0 1 0 .89l-.754.251a5.11 5.11 0 0 0-3.218 3.218l-.25.754a.469.469 0 0 1-.89 0l-.251-.754a5.11 5.11 0 0 0-3.218-3.218l-.754-.25a.469.469 0 0 1 0-.89l.754-.251a5.11 5.11 0 0 0 3.218-3.218l.25-.754a.469.469 0 0 1 .89 0l.251.754a5.11 5.11 0 0 0 3.218 3.218m-3.913 3.81a6.1 6.1 0 0 1 1.261-1.852 6.1 6.1 0 0 1 1.852-1.262 6.1 6.1 0 0 1-1.852-1.262 6.1 6.1 0 0 1-1.262-1.852 6.1 6.1 0 0 1-1.261 1.852 6.1 6.1 0 0 1-1.852 1.261c.688.301 1.32.732 1.852 1.262a6.1 6.1 0 0 1 1.262 1.852M4.33 6.924a2.72 2.72 0 0 1 1.698 1.697.469.469 0 0 0 .897.002 2.72 2.72 0 0 1 1.697-1.698.469.469 0 0 0 .002-.897 2.72 2.72 0 0 1-1.698-1.697.469.469 0 0 0-.897-.002 2.72 2.72 0 0 1-1.697 1.698.469.469 0 0 0-.002.897m2.147-1.412c.258.378.586.706.964.964a3.7 3.7 0 0 0-.964.964 3.7 3.7 0 0 0-.964-.964 3.7 3.7 0 0 0 .964-.964m11.495 9.865a2.72 2.72 0 0 0 1.698 1.697.47.47 0 0 1-.002.897 2.72 2.72 0 0 0-1.697 1.698.469.469 0 0 1-.897-.002 2.72 2.72 0 0 0-1.698-1.697.469.469 0 0 1 .002-.897 2.72 2.72 0 0 0 1.697-1.698.47.47 0 0 1 .897.002m-1.413 2.145c.378.258.706.586.964.964.258-.378.586-.706.964-.964a3.7 3.7 0 0 1-.964-.964 3.7 3.7 0 0 1-.964.964'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import { NewWindowSvg } from '../images/svg/actions/NewWindowSvg';\nimport { GridSvg } from '../images/svg/objects/GridSvg';\nimport { RectanglesSvg } from '../images/svg/objects/RectanglesSvg';\nimport { SparkleSvg } from '../images/svg/objects/SparkleSvg';\n\nexport enum HeadingSize {\n H1 = 'h1',\n H2 = 'h2',\n H3 = 'h3',\n H4 = 'h4',\n H5 = 'h5',\n H6 = 'h6'\n}\n\nexport enum HeadingColor {\n Dark = 'dark',\n White = 'white'\n}\n\nexport enum ButtonIcon {\n NewWindow = 'new-window',\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport const WIDGET_THEME = {\n HEADING: {\n SIZES: [\n { value: HeadingSize.H1, name: 'Heading 1' },\n { value: HeadingSize.H2, name: 'Heading 2' },\n { value: HeadingSize.H3, name: 'Heading 3' },\n { value: HeadingSize.H4, name: 'Heading 4' },\n { value: HeadingSize.H5, name: 'Heading 5' },\n { value: HeadingSize.H6, name: 'Heading 6' }\n ],\n COLOR: [\n { value: HeadingColor.Dark, name: 'Dark' },\n { value: HeadingColor.White, name: 'White' }\n ]\n },\n BUTTON: {\n ICONS: [\n { value: ButtonIcon.NewWindow, name: 'New Window' }\n ]\n }\n};\n\nexport const BUTTON_ICON_MAP: Record<ButtonIcon, any> = {\n [ButtonIcon.NewWindow]: NewWindowSvg,\n [ButtonIcon.TopicDirectory]: GridSvg,\n [ButtonIcon.TopicNewReleases]: SparkleSvg,\n [ButtonIcon.CuratedTopic]: RectanglesSvg\n};\n\nexport const BOOTSTRAP_CLASS_MAP = {\n [HeadingSize.H1]: 'h1',\n [HeadingSize.H2]: 'h2',\n [HeadingSize.H3]: 'h3',\n [HeadingSize.H4]: 'h4',\n [HeadingSize.H5]: 'h5',\n [HeadingSize.H6]: 'h6',\n [HeadingColor.Dark]: 'text-dark',\n [HeadingColor.White]: 'text-white'\n};\n","@import '~styles/utils/include-media';\n:local {\n .cta {\n position: absolute;\n bottom: map-get($spacers, 3);\n left: map-get($spacers, 3);\n }\n\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: center;\n background-size: cover;\n\n // Blurb images are right aligned\n &.blurb {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n }\n\n // Presentations images are right aligned\n &.presentations {\n // Normal banner height\n height: 13.875rem;\n right: 0;\n background-size: auto 100%;\n background-position: right;\n\n @include media('<=lg') {\n background-position: 75%;\n }\n\n @include media('<=md') {\n background-position: 60%;\n }\n\n @include media('<=sm') {\n background-position: 0%;\n }\n }\n }\n\n .bannerContent {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n max-width: 18rem;\n display: flex;\n align-items: center;\n\n &.blurb {\n max-width: 100%;\n }\n\n &.presentations {\n max-width: 100%;\n }\n }\n\n @include media('<=lg') {\n .bannerContent {\n max-width: 16rem;\n }\n }\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BOOTSTRAP_CLASS_MAP, HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface BlurbHeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function BlurbHeroBannerSmallWidgetTemplate(props: BlurbHeroBannerSmallWidgetTemplateProps): JSX.Element {\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n const headingSize = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingSize || HeadingSize.H6];\n const headingColor = BOOTSTRAP_CLASS_MAP[props.metadata.theming?.headingColor || HeadingColor.Dark];\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.blurb} d-flex`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {props.name &&\n <div className={`${styles.bannerContent} ${props.widgetTypeId === WidgetTypeId.Blurb ? styles.blurb : ''} d-flex justify-content-between w-100 px-3`}>\n <p className={`${headingSize} ${headingColor} mb-0`}>\n {props.name}\n </p>\n {props.metadata.cta?.text && (\n <IconButton svg={NewWindowSvg} className='btn btn-dark text-nowrap' href={props.metadata.cta.href} openInNewTab>\n {props.metadata.cta.text}\n </IconButton>\n )}\n </div>\n }\n </div>\n </div>\n );\n}\n",":local {\n .banner {\n height: 5rem;\n padding-bottom: 0;\n overflow: hidden;\n position: relative;\n }\n\n .bannerImage {\n height: 100%;\n position: absolute;\n top: 50%;\n width: 100%;\n transform: translateY(-50%);\n background-repeat: no-repeat;\n\n background-position: right;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { BUTTON_ICON_MAP } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetCta } from 'libs/shared/interfaces';\n\nimport styles from './classification-hero-thumbnail-small.module.scss';\n\ninterface HeroBannerButtonProps {\n cta: WidgetCta;\n}\n\nfunction HeroBannerButton(props: HeroBannerButtonProps): JSX.Element {\n if (!props.cta?.text)\n return <div />;\n\n const className = `btn btn-outline-dark text-nowrap me-3`;\n\n if (!props.cta?.icon) {\n return (\n <div className={className}>\n {props.cta.text}\n </div>\n );\n }\n\n return (\n <IconButton\n svg={BUTTON_ICON_MAP[props.cta.icon]}\n className={className}\n openInNewTab\n >\n {props.cta.text}\n </IconButton>\n );\n}\n\nexport interface ClassificationHeroBannerSmallProps {\n appLink: Core.AppLink;\n heading: string;\n cta?: WidgetCta;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n style: React.CSSProperties;\n}\n\nexport function ClassificationHeroBannerSmall(props: ClassificationHeroBannerSmallProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} d-flex justify-content-between align-items-center`} style={props.style}>\n {!!props.heading && (\n <div className='d-flex align-items-center ps-3 h-100'>\n <h2 className='text-white text-shadow h4 clamp-1'>\n {props.heading}\n </h2>\n </div>\n )}\n \n <HeroBannerButton cta={props.cta} />\n </div>\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nexport interface ClassificationHeroBannerSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ClassificationHeroBannerSmallWidgetTemplate(\n props: ClassificationHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n function getBannerUrl(): string {\n return ImageHelper.createBannerUrl(classification.banner, {\n fallbackBaseUrl: '',\n fallbackCategoryName: classification.name,\n type: ImageType.Banners\n }, { size: ImageSize.Large });\n }\n\n const analyticsOptions = {\n location: LocationContext.Classification,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Banner\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundImage: `url('${getBannerUrl()}')`,\n backgroundSize: '100%'\n }}\n cta={props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport interface PresentationsHeroBannerSmallWidgetTemplateProps {\n name: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n content: Presentation[];\n imageCdnUrl: string;\n analyticsData?: HashObject;\n \n metadata: {\n imageId: string\n };\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink\n };\n}\n\nexport function PresentationsHeroBannerSmallWidgetTemplate(\n props: PresentationsHeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n const canView = (\n props.hasPermissions(PermissionName.ManageSubjectPreferences) ||\n props.hasLocalPermissions(LocalPermissionName.ManagePublicPresentation)\n );\n\n function getBannerUrl(): string {\n return ImageHelper.getUrlById(\n props.imageCdnUrl,\n ImageType.Banners,\n props.metadata.imageId,\n ImageSize.Large\n );\n }\n\n function getPresentationLink(presentation: Presentation): JSX.Element {\n const appLinkOptions = {\n middlewareOptions: { presentationSlug: presentation?.vanitySlug }\n };\n\n const analyticsData: HashObject = {\n ...props.analyticsData,\n id: presentation.id,\n presentationName: presentation.name\n };\n\n const analyticsOptions: AnalyticsOptions = {\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.HeroBannerSmallWidget\n };\n\n return (\n <AppLink\n className='info-link d-inline'\n appLink={props.appLinks?.discover?.()}\n appLinkOptions={appLinkOptions}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n {presentation.name}\n </AppLink>\n );\n }\n\n function getPresentations(): JSX.Element {\n if (props.content.length === 1) {\n return getPresentationLink(props.content[0]);\n }\n\n if (props.content.length === 2) {\n return <>{getPresentationLink(props.content[0])} or {getPresentationLink(props.content[1])}</>;\n }\n\n return (\n <>\n {props.content.slice(0, props.content.length - 1).map(p => {\n return <React.Fragment key={p.id}>{getPresentationLink(p)}, </React.Fragment>;\n })}\n or {getPresentationLink(ArrayHelper.last(props.content))}\n </>\n );\n }\n\n const prefix = props.name;\n\n if (!canView)\n return <></>;\n\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerImage} ${styles.presentations}`} style={{ backgroundImage: `url('${getBannerUrl()}')` }}>\n {prefix &&\n <div className={`${styles.bannerContent} ${styles.presentations} px-3`}>\n <p className='h6 mb-0'>\n {prefix} {getPresentations()}.\n </p>\n </div>\n }\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BlurbHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/BlurbHeroBannerSmallWidgetTemplate';\nimport { ClassificationHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/ClassificationHeroBannerSmallWidgetTemplate';\nimport { PresentationsHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/types/PresentationsHeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\n\nexport interface HeroBannerSmallWidgetTemplateProps {\n name: string;\n imageCdnUrl: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n\n analyticsData?: HashObject;\n\n appLinks: {\n discover: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\n// TODO: Fix this up, shouldn't have to cast\n// But it makes AllWidgetTemplateProps unknown for some reason\nexport function HeroBannerSmallWidgetTemplate(\n props: HeroBannerSmallWidgetTemplateProps\n): JSX.Element {\n switch (props.widgetTypeId) {\n case WidgetTypeId.Blurb:\n return <BlurbHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n case WidgetTypeId.Presentations:\n return (\n <PresentationsHeroBannerSmallWidgetTemplate {...props} content={props.content as Presentation[]} />\n );\n default:\n return <ClassificationHeroBannerSmallWidgetTemplate {...props} content={props.content as Classification[]} />;\n }\n}\n","import React from 'react';\n\nimport styles from '../hero-banner-small.module.scss';\n\nexport function PartialHeroBannerSmallWidgetTemplate(): JSX.Element {\n return (\n <div className={`banner rounded-3 position-relative ${styles.banner}`}>\n <div className={`${styles.bannerContent}`} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedWidgetCtaAppLink } from 'libs/shared/interfaces';\n\nexport interface HeroBlockColourSmallWidgetTemplateProps {\n name: string;\n content: Classification[];\n metadata: {\n cta: {\n appLink: CuratedWidgetCtaAppLink\n }\n };\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n classificationDirectory: (classification: Classification) => Core.AppLink\n };\n}\n\nexport function HeroBlockColourSmallWidgetTemplate(props: HeroBlockColourSmallWidgetTemplateProps): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const breakpoints = useBreakpoints();\n\n function getCustomCtaAppLink(): Core.AppLink | null {\n switch (props.metadata?.cta?.appLink) {\n case CuratedWidgetCtaAppLink.TopicDirectory:\n return props.appLinks?.classificationDirectory?.(classification);\n case CuratedWidgetCtaAppLink.CuratedTopic:\n return props.appLinks?.classification?.(classification);\n case CuratedWidgetCtaAppLink.TopicNewReleases:\n return props.appLinks?.classification?.(classification);\n }\n\n return null;\n }\n\n const analyticsData = {\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={getCustomCtaAppLink()}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={{\n backgroundColor: classification.metadata?.backgroundColor,\n backgroundSize: '100%'\n }}\n cta={breakpoints.xs ? null : props.metadata?.cta}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroBlockColourSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeroBannerSmall } from 'libs/shared/components/widgets/curated-widgets/components/classification-hero-banner-small/ClassificationHeroBannerSmall';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { HeadingColor, HeadingSize } from 'libs/shared/constants/WidgetThemingConstants';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, Presentation, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.heroThumbnailSmall';\n\nexport interface HeroThumbnailSmallWidgetTemplateProps {\n name: string;\n widgetTypeId: WidgetTypeId;\n content: Classification[] | Presentation[];\n analyticsData?: HashObject;\n \n imageCdnUrl: string;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n discover: (presentationId?: string) => Core.AppLink\n };\n metadata: {\n imageId: string,\n theming: {\n headingSize: HeadingSize,\n headingColor: HeadingColor\n },\n cta: WidgetCta\n };\n}\n\nexport function HeroThumbnailSmallWidgetTemplate(props: HeroThumbnailSmallWidgetTemplateProps): JSX.Element {\n const classification = props.content?.[0];\n\n const thumbnailUrl = 'thumbnail' in classification &&\n ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = 'metadata' in classification && classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor,\n backgroundSize: '50%'\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: 'presentationId' in classification && classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerSmallWidgetTemplate {...props} />;\n\n return (\n <ClassificationHeroBannerSmall\n heading={props.name}\n appLink={props.appLinks?.classification?.(classification)}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n style={style}\n cta={{\n text: LanguageService.getPhrase(namespace, 'buttonLabel'),\n ...(props.metadata?.cta ?? {})\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\n\nexport function PartialHeroThumbnailSmallWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerSmallWidgetTemplate />;\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { PopoutVideoWidgetItem } from '../../../items/popout-video-widget-item/PopoutVideoWidgetItem';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListLarge';\n\nexport interface PopoutThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n content: VideoWidgetTemplateContent;\n hasPermissions: HasPermissionsFunc;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n audiences: PresentationAudience[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n settings: {\n hasTopicDirectories: boolean\n };\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListLargeWidgetTemplate(\n props: PopoutThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n />\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget, PartialFixedWidgetItemProps } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nfunction PartialWidgetItem(props: PartialFixedWidgetItemProps): JSX.Element {\n return (\n <div className={`col-${props.colSize} px-1`}>\n <div className='d-inline-block w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '70%' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '80%' }}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPopoutThumbnailSlidingListSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='sm'\n childComponent={PartialWidgetItem}\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n hideHeading={props.hideHeading}\n />\n );\n}\n",":local {\n .isNew {\n color: $ultramarine;\n background-color: lighten($ultramarine, 35%);\n }\n\n .newVideos {\n color: $green;\n background-color: lighten($green, 40%);\n }\n\n .badge {\n font-size: 0.6875rem;\n }\n\n .icon {\n margin-right: 0.1rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\n\nimport styles from './subject-stats-badge.module.scss';\n\nexport type ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n badgeType: ClassificationBadgeType;\n newVideoCount?: number;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (props.badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (props.badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: props.newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {props.badgeType === 'coming-soon' && (\n <SvgContainer\n svg={TimerSvg}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { PopoutVideoWidgetItem } from 'libs/shared/components/widgets/items/popout-video-widget-item/PopoutVideoWidgetItem';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Classification, PresentationAudience, Video, VideoWidgetTemplateContent, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { SubjectStatsBadge } from '../../../items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge';\n\nconst namespace = 'widgets.popoutThumbnailSlidingListSmall';\n\nfunction VideoCountBadge(props: PopoutThumbnailSlidingListSmallWidgetTemplateProps): JSX.Element {\n if (\n props.isTertiaryCustomerWithoutExchange ||\n props.widgetTypeId !== WidgetTypeId.ClassificationLatestReleasedVideosV2 ||\n !props.classification\n ) {\n return <></>;\n }\n\n const { childDashboardNewVideoCount } = TopicsHelper.getCounts(props.classification);\n\n if (!childDashboardNewVideoCount)\n return <></>;\n\n return (\n <div className='ms-2'>\n <SubjectStatsBadge badgeType='new-videos' newVideoCount={childDashboardNewVideoCount} />\n </div>\n );\n}\n\nexport interface PopoutThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n widgetTypeId: WidgetTypeId;\n description: string;\n content: VideoWidgetTemplateContent;\n appLinks: {\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink,\n watchHistory: () => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n metadata: {\n hideWidgetHeading: boolean,\n hideWidgetDescription: boolean,\n hideObjectTitle: boolean,\n hideObjectSeries: boolean\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n preventPopout?: boolean;\n classification: Classification;\n showHighlight?: boolean;\n analyticsData?: HashObject;\n isTertiaryCustomerWithoutExchange?: boolean;\n onClickRemoveItem: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n \n isPreviewing: boolean;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function PopoutThumbnailSlidingListSmallWidgetTemplate(\n props: PopoutThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const widgetConfig = WidgetTypeIdConfig[props.widgetTypeId];\n const videos = WidgetHelper.getVideoContent(props.content);\n\n function onClickRemoveItem(videoId: string, videoName: string): void {\n props.onClickRemoveItem?.(videoId, videoName, props.id, props.widgetTypeId);\n }\n\n return (\n <FixedWidget\n id={props.id}\n name={!props.metadata?.hideWidgetHeading && props.name}\n description={!props.metadata?.hideWidgetDescription && props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={videos}\n childComponent={PopoutVideoWidgetItem}\n extraChildComponentProps={{\n presentationAudiences: props.audiences,\n hideTitle: props.metadata?.hideObjectTitle,\n hideSeries: props.metadata?.hideObjectSeries,\n showVideoGuidance: VideoHelper.showVideoGuidance(props.hasPermissions),\n preventPopout: props.preventPopout,\n showNewVideoIndicator: props.settings?.hasTopicDirectories,\n onClickRemoveItem: WidgetHelper.showRemoveButton(props.widgetTypeId) && onClickRemoveItem,\n removeButtonTooltip: WidgetHelper.showRemoveButton(props.widgetTypeId) ?\n LanguageService.getPhrase(namespace, 'removeFromWatchHistory') :\n '',\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={\n widgetConfig.getCollectionAppLink?.(props.appLinks, props.content) ??\n props.appLinks?.widgetVideoList?.(props.id, props.name)\n }\n isPreviewing={props.isPreviewing}\n widgetTypeId={props.widgetTypeId}\n headingBadgeComponent={<VideoCountBadge {...props} />}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .largeSeriesItem {\n width: 25%;\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .smallSeriesItem {\n width: percentage(calc(1 / 6));\n\n @include media('<=xl') {\n width: percentage(calc(1 / 5));\n }\n\n @include media('<=lg') {\n width: percentage(calc(1 / 4));\n }\n\n @include media('<=md') {\n width: percentage(calc(1 / 3));\n }\n\n @include media('<=sm') {\n width: percentage(calc(1 / 2));\n }\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: 200%; // 1:2 aspect ratio\n position: relative;\n }\n}","import * as React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { PartialWidgetTemplateProps } from '../../curated-widgets/WidgetProps';\n\nimport styles from './series-widget-item.module.scss';\n\nfunction useGetCount(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n return 4;\n}\n\nexport const PartialSeriesList = (props: PartialWidgetTemplateProps) => {\n const items = useGetCount();\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='row mb-n2'>\n {[...Array(items)].map((s, idx) => (\n <div key={idx} className='col-6 col-sm-4 col-md-3 col-lg-3 pb-2'>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n ))}\n </div>\n </>\n );\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport { WidgetHeader } from '../../components/header/WidgetHeader';\n\nexport interface PosterFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterFixedListLargeWidgetTemplate(\n props: PosterFixedListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <ul className='list-unstyled mx-n1 mb-n2 row'>\n {props.content.map(s => {\n return (\n <li key={s.id} className='px-1 col-lg-3 col-md-4 col-sm-6 col-xs-12'>\n <AppLink\n appLink={props.appLinks.series(s)}\n className='d-block mb-2'\n analyticsData={{\n ...props.analyticsData,\n id: s.id,\n name: s.name\n }}\n analyticsOptions={{\n entity: EntityType.Series,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster,\n location: LocationContext.PosterFixedListLargeWidget\n }}\n >\n <SeriesTallPoster\n series={s}\n presentationAudiences={props.audiences}\n preloadImage={false}\n />\n </AppLink>\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SeriesTallPoster } from 'libs/shared/components/series-tall-poster/SeriesTallPoster';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { PresentationAudience, Series } from 'libs/shared/interfaces';\n\nimport styles from './series-widget-item.module.scss';\n\nexport interface SeriesWidgetItemProps extends FixedWidgetItemProps<Series> {\n audiences: PresentationAudience[];\n isSmall?: boolean;\n hasTableOfContents?: boolean;\n}\n\nexport function SeriesWidgetItem(props: SeriesWidgetItemProps): JSX.Element {\n const { data: series } = props;\n\n /**\n * Subject audiences currently take render precedence over rating.\n * \n * This means that until we properly add productionCompanies to series, we\n * should expect only CV series to have a subject audience. Any TV series\n * from the Exchange should only have a rating. \n */\n\n const analyticsData = {\n ...props.analyticsData,\n id: series?.id,\n name: series?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Series,\n descriptor: ClickDescriptor.TallPoster\n };\n\n return (\n <AppLink\n key={series.id}\n appLink={props.getAppLink(series)}\n className={`position-relative px-1 flex-shrink-0 ${props.isSmall ? styles.smallSeriesItem : styles.largeSeriesItem} `}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <SeriesTallPoster\n series={series}\n presentationAudiences={props.audiences}\n preloadImage={props.preloadImage}\n isSmall={props.isSmall}\n hasTableOfContents={props.hasTableOfContents}\n />\n </AppLink>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n audiences: PresentationAudience[];\n hasTableOfContents: boolean;\n appLinks: {\n series: (series: Series) => Core.AppLink,\n scopedSearchHome?: (filters?: HashObject) => Core.AppLink\n };\n showHighlight?: boolean;\n analyticsData?: HashObject;\n badgeComponent: JSX.Element;\n seeMoreLink: Core.AppLink;\n}\n\nexport function PosterSlidingListLargeWidgetTemplate(\n props: PosterSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Series}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, hasTableOfContents: props.hasTableOfContents }}\n getChildAppLink={(item: Series) => props.appLinks?.series?.(item)}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n headingBadgeComponent={props.badgeComponent}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .slidingSubjectSmall {\n position: relative;\n flex: 0 0 auto;\n width: 16.6667%;\n\n @include media('<=xl') {\n width: 20%;\n }\n \n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .slidingSubjectLarge {\n position: relative;\n flex: 0 0 auto;\n width: 20%;\n\n @include media('<=lg') {\n width: 25%;\n }\n \n @include media('<=md') {\n width: 33.33333%;\n }\n \n @include media('<=sm') {\n width: 50%;\n }\n }\n\n .heading {\n z-index: 1;\n color: $gray-100;\n text-align: center;\n\n position: absolute;\n left: 0;\n right: 0;\n top: map-get($spacers, 3);\n\n font-size: $h5-font-size;\n\n // With the table of contents displaying, the font size needs to shrink to fit\n @include media('<=xl') {\n font-size: $h6-font-size;\n }\n\n @include media('<=lg') {\n font-size: $h5-font-size;\n }\n\n @include media(\"<400px\") {\n font-size: $h6-font-size;\n }\n }\n\n .posterContainer {\n position: relative;\n padding: 0 map-get($spacers, 1);\n }\n\n .partialLoading {\n width: 100%;\n padding-bottom: percentage(calc(16 / 9));\n position: relative;\n }\n\n .labelContainer {\n z-index: 1;\n bottom: map-get($spacers, 2);\n left: 50%;\n transform: translate(-50%, 0%);\n }\n}","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nfunction useGetItemCount(type: WidgetType): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xs)\n return 2;\n\n if (breakpoints.sm)\n return 3;\n\n if (breakpoints.md)\n return 4;\n\n if (breakpoints.lg || type === WidgetType.LargeRow)\n return 5;\n\n return 6;\n}\n\nconst PartialLoadingItem = (props: PartialTallSubjectWidgetProps) => (\n <div className={`${props.type === WidgetType.Row ? styles.slidingSubjectSmall : styles.slidingSubjectLarge} px-1`}>\n <div className={`${styles.partialLoading} partial-loading-background rounded-3`} />\n </div>\n);\n\ninterface PartialTallSubjectWidgetProps {\n type: WidgetType;\n}\n\nexport function PartialTallSubjectWidget(props: PartialTallSubjectWidgetProps): JSX.Element {\n const itemCount = useGetItemCount(props.type);\n\n const items = [];\n for (let i = 0; i < itemCount; i++) {\n items.push(<PartialLoadingItem key={i} type={props.type} />);\n }\n\n return (\n <div className='pb-3'>\n <PartialWidgetHeader />\n <div className='row g-0 mx-n1'>\n {items}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Classification, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\n\nimport styles from './tall-subject-widget-item.module.scss';\n\nexport interface TallSubjectWidgetItemProps extends FixedWidgetItemProps<Classification> {\n audiences: PresentationAudience[];\n}\n\nexport function TallSubjectWidgetItem(props: TallSubjectWidgetItemProps): JSX.Element {\n const { data, preloadImage } = props;\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Classification,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.TallPoster\n };\n\n function getClassName(): string {\n let className = styles.posterContainer;\n\n if (props.context.type === WidgetType.Row)\n className += ` ${styles.slidingSubjectSmall}`;\n else\n className += ` ${styles.slidingSubjectLarge}`;\n\n return className;\n }\n\n return (\n <div className={getClassName()}>\n <BaseImage\n data={data.tallPoster}\n alt={data.name}\n appLink={props.getAppLink(data)}\n imageType={ImageType.TallPosters}\n preload={preloadImage}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName='rounded-3'\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ImageFallback type={ImageFallbackType.TallSubject} />\n <h3 className={`px-2 ${styles.heading}`}>{data.name}</h3>\n </BaseImage>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListMediumWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.LargeRow} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, Video, WidgetType } from 'libs/shared/interfaces';\n\nexport interface PosterSlidingListMediumWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n}\n\nexport function PosterSlidingListMediumWidgetTemplate(props: PosterSlidingListMediumWidgetTemplateProps): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Subjects}\n collection={props.content}\n childComponent={TallSubjectWidgetItem}\n getChildAppLink={(item: Classification) => props.appLinks?.classification?.(item)}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { TallSubjectWidgetItem } from 'libs/shared/components/widgets/items/tall-subject-widget-item/TallSubjectWidgetItem';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Classification, CuratedDashboardAppLink, Presentation, PresentationAudience, WidgetType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nconst EXPLORE_ALL_TOPICS_ID = 'explore-all-topics';\n\nfunction getExtraItem(props: ClassificationPosterSlidingListSmallWidgetTemplateProps) {\n if (props.metadata?.text || props.metadata?.imageId)\n return {\n id: props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics ? EXPLORE_ALL_TOPICS_ID : '',\n name: props.metadata?.text,\n tallPoster: {\n url: props.metadata?.imageId ?\n ImageHelper.getUrlById(props.imageCdnUrl, ImageType.TallPosters, props.metadata.imageId, ImageSize.Medium) :\n ''\n }\n };\n}\n\nexport interface ClassificationPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n imageCdnUrl: string;\n audiences: PresentationAudience[];\n content: Classification[];\n metadata: {\n imageId: string,\n text: string,\n appLink: CuratedDashboardAppLink\n };\n presentation: Presentation;\n appLinks: {\n latestReleases: () => Core.AppLink,\n allTopics: (presentationId?: string) => Core.AppLink,\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function ClassificationPosterSlidingListSmallWidgetTemplate(\n props: ClassificationPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n const extraContent = getExtraItem(props);\n\n const widgetAppLink = WidgetHelper.getCustomAppLink(props);\n\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n appLink={widgetAppLink}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Subjects}\n collection={extraContent ? [ extraContent, ...props.content ] : props.content}\n childComponent={TallSubjectWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences }}\n getChildAppLink={(item: Classification) => {\n if (!item.id)\n return null;\n\n if (item.id === EXPLORE_ALL_TOPICS_ID)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return props.appLinks?.classification?.(item);\n }}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialTallSubjectWidget } from 'libs/shared/components/widgets/items/tall-subject-widget-item';\nimport { WidgetType } from 'libs/shared/interfaces';\n\nexport function PartialPosterSlidingListSmallWidgetTemplate(): JSX.Element {\n return <PartialTallSubjectWidget type={WidgetType.Row} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PresentationAudience, Series, WidgetType } from 'libs/shared/interfaces';\n\nexport interface SeriesPosterSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Series[];\n audiences: PresentationAudience[];\n appLinks: {\n series: (series: Series) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n}\n\nexport function SeriesPosterSlidingListSmallWidgetTemplate(\n props: SeriesPosterSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <div>\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.SmallSeries}\n collection={props.content}\n childComponent={SeriesWidgetItem}\n extraChildComponentProps={{ audiences: props.audiences, isSmall: true }}\n getChildAppLink={props.appLinks?.series}\n analyticsData={props.analyticsData}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n />\n </div>\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n padding: 0.75rem;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .partialQuestion {\n background-color: $gray-100;\n padding: 0.75rem;\n }\n\n .description {\n overflow: hidden;\n // If you change the transition time here, please also update the variable in the component\n transition: height 0.5s ease-in-out;\n }\n}","import React from 'react';\n\nimport styles from '../question-widget-template.module.scss';\n\nexport function PartialQuestionWidgetTemplate(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} rounded-3`}>\n <div className='mb-2 partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '100%' }}>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { Faq } from 'libs/shared/interfaces';\n\nexport interface QuestionWidgetTemplateProps {\n id: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionWidgetTemplate(props: QuestionWidgetTemplateProps): JSX.Element {\n const { question, answer } = ArrayHelper.first(props.content);\n\n return (\n <ExpandableQuestion\n id={props.id}\n answer={answer}\n question={question}\n isBot={props.isBot}\n analyticsData={props.analyticsData}\n />\n );\n}\n",":local {\n .question {\n background-color: $gray-100;\n\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .padding {\n padding: 0.75rem;\n }\n\n .partialQuestion {\n background-color: $gray-100;\n }\n\n .description {\n overflow: hidden;\n transition: height 0.5s ease-in-out;\n padding: 0 0.75rem;\n }\n}","import React from 'react';\n\nimport styles from '../question-accordion-widget-template.module.scss';\n\nfunction PartialQuestion(): JSX.Element {\n return (\n <div className={`${styles.partialQuestion} ${styles.padding} rounded-2 mb-2`}>\n <div className='partial-loading-background' style={{ height: '1.5rem', width: '75%' }}>\n </div>\n </div>\n );\n}\n\nexport function PartialQuestionAccordionWidgetTemplate(): JSX.Element {\n return (\n <>\n <div className='partial-loading-background mb-2' style={{ height: '2rem', width: '30%' }} />\n\n <div className='mb-n2'>\n <PartialQuestion />\n <PartialQuestion />\n <PartialQuestion />\n </div>\n </>\n );\n}\n","import * as React from 'react';\n\nimport { usePageMetadataContext } from 'libs/common/react/context/PageMetadataContext';\n\nimport { Faq } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\ninterface UseFaqJsonLdProps {\n faqs: Faq[];\n widgetName?: string;\n}\n\nexport function useFaqJsonLd(props: UseFaqJsonLdProps): void {\n const metadataContext = usePageMetadataContext();\n\n React.useEffect(() => {\n if (!props.faqs?.length || !metadataContext.hasProvider)\n return;\n\n async function generateFaqJsonLd() {\n // Create FAQ JSON-LD structure using PageMetadataHelper\n const faqJsonLd = await PageMetadataHelper.buildFaqJsonLd(props.faqs, props.widgetName);\n\n // Add FAQ JSON-LD to the page metadata\n metadataContext.setFaq(faqJsonLd);\n }\n\n generateFaqJsonLd();\n }, [ props.faqs, props.widgetName, metadataContext.hasProvider ]);\n}\n","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useFaqJsonLd } from 'libs/shared/hooks/useFaqJsonLd';\nimport { useIsComponentMounted } from 'libs/shared/hooks/UseIsComponentMounted';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { MinusSvg } from 'libs/shared/images/svg/actions/MinusSvg';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { Faq } from 'libs/shared/interfaces';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './question-accordion-widget-template.module.scss';\n\nconst DEFAULT_HEIGHT = '0px';\n\ninterface QuestionProps {\n id: string;\n faq: Faq;\n index: number;\n analyticsData?: HashObject;\n \n isBot: boolean;\n}\n\nfunction Question(props: QuestionProps): JSX.Element {\n // Answer should be expanded for anon by default so Google can read it.\n const [ isExpanded, setIsExpanded ] = useViewModel(`should:expand:${props.id}`, props.isBot, {\n storage: StorageType.LocalStorage\n });\n\n const [ height, setHeight ] = React.useState(isExpanded ? '100%' : DEFAULT_HEIGHT);\n const [ markdown, setMarkdown ] = React.useState<string | null>(null);\n\n const invisibleRef = React.useRef<HTMLParagraphElement>(null);\n const visibleRef = React.useRef<HTMLParagraphElement>(null);\n const isMounted = useIsComponentMounted();\n\n function onToggleExpander(e: React.MouseEvent<HTMLElement>): void {\n if (TopicFaqHelper.isLink(e.target as HTMLElement))\n return;\n\n // Don't toggle if the user is highlighting text\n if (window.getSelection().toString().length !== 0)\n return;\n\n AnalyticsHelper.logUserAction({\n ...props.analyticsData,\n ...props.faq,\n questionIndex: props.index\n }, {\n entity: EntityType.Faq,\n actionType: UserAction.Click,\n descriptor: isExpanded ? ClickDescriptor.Collapse : ClickDescriptor.Expand,\n location: LocationContext.FaqQuestionAccordionWidget\n });\n\n isExpanded ? collapse() : expand();\n }\n\n async function expand(): Promise<void> {\n setExpandedHeight();\n setIsExpanded(true);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: true });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n async function collapse(): Promise<void> {\n setHeight(DEFAULT_HEIGHT);\n setIsExpanded(false);\n\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: false });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n }\n\n function setExpandedHeight(): void {\n const fakeEl = document.createElement('p');\n fakeEl.innerHTML = markdown;\n fakeEl.style.visibility = 'hidden';\n fakeEl.classList.add('py-1');\n invisibleRef.current.appendChild(fakeEl);\n\n // 10px is subtracted as this is the padding of the description\n setHeight(`${fakeEl.clientHeight - 10}px`);\n invisibleRef.current.removeChild(fakeEl);\n }\n\n React.useEffect(() => {\n async function onUpdateMarkdown() {\n const newMarkdown = await TopicFaqHelper.parse(props.faq?.answer, { focusableLinks: isExpanded });\n\n if (!isMounted.current)\n return;\n\n setMarkdown(newMarkdown);\n\n if (isExpanded)\n setExpandedHeight();\n }\n\n onUpdateMarkdown();\n }, [props.faq?.answer]);\n\n // When we resize, we want to recalculate the height of the expanded content\n useResizeListener(() => {\n if (isExpanded)\n collapse();\n }, null, [isExpanded]);\n\n if (!props.faq?.question || !props.faq?.answer)\n return <></>;\n\n const questionId = `question-${props.id}`;\n const panelId = `answer-${props.id}`;\n\n return (\n <DivButton\n onClick={onToggleExpander}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n className={`${styles.question} rounded-2`}\n >\n <div className={`d-flex align-items-center ${styles.padding}`}>\n <div className='rounded-circle bg-white me-2'>\n <SvgContainer svg={isExpanded ? MinusSvg : PlusSvg} />\n </div>\n \n <h3 className='mb-0 font-size-normal fw-normal' id={questionId}>{props.faq.question}</h3>\n </div>\n\n <div\n className={`${styles.description}`}\n style={{ height }}\n id={panelId}\n aria-labelledby={questionId}\n aria-live='polite'\n aria-hidden={!isExpanded}\n >\n <p\n className={`mb-0 py-1 ${TopicFaqHelper.getContainerClass()}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n ref={visibleRef}\n >\n </p>\n \n <div ref={invisibleRef} aria-hidden={true} className={TopicFaqHelper.getContainerClass()} />\n </div>\n </DivButton>\n );\n}\n\nexport interface QuestionAccordionWidgetTemplateProps {\n id: string;\n name: string;\n content: Faq[];\n isBot: boolean;\n analyticsData?: HashObject;\n \n}\n\nexport function QuestionAccordionWidgetTemplate(props: QuestionAccordionWidgetTemplateProps): JSX.Element {\n useFaqJsonLd({\n faqs: props.content,\n widgetName: props.name\n });\n\n if (!props.content.length)\n return <></>;\n\n return (\n <>\n <h2 className='curated-widget-heading'>\n {props.name}\n </h2>\n\n <ul className='list-unstyled mb-n2'>\n {props.content.map((faq, index) => {\n return (\n <li className='mb-2' key={index}>\n <Question\n key={index}\n id={`${props.id}:${index}`}\n faq={faq}\n index={index}\n analyticsData={props.analyticsData}\n isBot={props.isBot}\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport function PartialRectangularLogoSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n let itemsCount = 5;\n\n const breakpoints = useBreakpoints();\n if (breakpoints.sm || breakpoints.xs) {\n itemsCount = 2;\n }\n if (breakpoints.md) {\n itemsCount = 3;\n }\n\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className='d-flex flex-no-wrap'>\n {Array(itemsCount)\n .fill(null)\n .map((_, i) => {\n return (\n <div key={i} style={{ flex: 1 }}>\n <div\n style={{ width: '90%' }}\n className='h-auto d-inline-block partial-loading-background rounded-3 ratio ratio-16x9'\n />\n <div style={{ width: '90%', height: '1.25rem' }} className='partial-loading-background mt-1' />\n </div>\n );\n })}\n </div>\n </>\n );\n}\n","/**\n * Tier of partners:\n * Spotlight: Highly curated page where we have devoted lot of time and effort\n * Curated: Lightly curated page\n * System generated: These partner profiles are generated using tools and hasn't been reviewed\n */\nexport enum PartnerType {\n SystemGenerated = 1,\n Curated = 2,\n Spotlight = 3\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { RectangularLogo } from 'libs/shared/components/rectangular-logo/RectangularLogo';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PartnerType } from 'libs/shared/enums/PartnerType';\nimport { PartnerProfile } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.rectangularLogoWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetPartnerWidgetItemOptions {\n partner: PartnerProfile;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nfunction getEntityType(partner: PartnerProfile): EntityType {\n if (partner.company)\n return EntityType.Company;\n \n return EntityType.Person;\n}\n\nfunction getTitle(partner: PartnerProfile): string {\n if (partner.partnerType === PartnerType.Spotlight)\n return getPhrase('featured', { name: partner.name });\n \n if (partner.partnerType === PartnerType.Curated)\n return getPhrase('curated', { name: partner.name });\n \n return partner.name;\n}\n\nexport function getPartnerWidgetItemProps(option: GetPartnerWidgetItemOptions): RectangularLogoWidgetItemProps {\n const { partner, appLink } = option;\n\n const analyticsData = {\n ...option.analyticsData,\n id: partner.id,\n name: partner.name,\n entity: getEntityType(partner)\n };\n\n const analyticsOptions = {\n ...option.analyticsOptions,\n location: LocationContext.RectangularLogoSlidingListWidget,\n actionType: UserAction.Click,\n entity: EntityType.Person\n };\n\n const logo: RectangularLogoWidgetItemProps['logo'] = partner._logo?.value?.url ?\n {\n url: ImageHelper.createUrl(partner._logo.value.url, { size: ImageSize.Medium }),\n bgColor: partner._colour?.value\n } :\n undefined;\n\n return {\n name: partner.name,\n logo,\n appLink,\n analyticsData,\n analyticsOptions,\n title: getTitle(partner)\n };\n}\n\ninterface RectangularLogoWidgetItemProps {\n name: string;\n appLink: Core.AppLink;\n logo?: {\n url: string,\n bgColor: string\n };\n analyticsOptions: AnalyticsOptions;\n analyticsData: HashObject;\n title?: string;\n}\n\nexport function RectangularLogoWidgetItem(props: RectangularLogoWidgetItemProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className='position-relative px-1 flex-shrink-0 col-6 col-md-3 col-lg-2'\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n title={props.title}\n >\n <RectangularLogo\n logoUrl={props.logo?.url}\n bgColor={props.logo?.bgColor}\n name={props.name}\n />\n <h2 className='h6 mt-2'>{props.name}</h2>\n </AppLink>\n );\n}\n\nexport interface RectangleLogoFixedWidgetItemProps extends FixedWidgetItemProps<PartnerProfile> {}\nexport function RectangluarLogoFixedWidgetItem(props: RectangleLogoFixedWidgetItemProps): JSX.Element {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: props.data,\n appLink: props.getAppLink(props.data)\n });\n\n return <RectangularLogoWidgetItem {...widgetProps} />;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { RectangluarLogoFixedWidgetItem } from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { PartnerProfile, WidgetType } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoSlidingListWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: PartnerProfile[];\n showHighlight?: boolean;\n analyticsData?: HashObject;\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink,\n partnerHome: () => Core.AppLink\n };\n}\n\nexport function RectangularLogoSlidingListWidgetTemplate(\n props: RectangularLogoSlidingListWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.PartnerProfiles}\n collection={props.content}\n childComponent={RectangluarLogoFixedWidgetItem}\n extraChildComponentProps={{}}\n \n prefetched\n showSeeMoreLink\n hideBleedingContent={props.showHighlight}\n analyticsData={props.analyticsData}\n getChildAppLink={props.appLinks?.partner}\n appLink={props.appLinks?.partnerHome?.()}\n />\n );\n}\n","import React from 'react';\n\nexport function PartialSearchSuggestionsBlurbWidgetTemplate(): JSX.Element {\n return (\n <div className='d-flex flex-row gap-1'>\n <div className='partial-loading-background' style={{ width: '12rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '3rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '1rem', height: '1.25rem' }}></div>\n <div className='partial-loading-background' style={{ width: '4rem', height: '1.25rem' }}></div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.searchSuggestionsBlurbWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_LENGTH = 2;\n\nexport interface SearchSuggestionsBlurbWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n searchHome: (queryParams: HashObject, options: { replace: boolean }) => Core.AppLink\n };\n}\n\ninterface SearchSuggestionQueryItemProps {\n appLink: Core.AppLink;\n name: string;\n}\n\nfunction SearchSuggestionQueryItem(props: SearchSuggestionQueryItemProps) {\n return (\n <>\n &quot;\n <AppLink appLink={props.appLink} appLinkOptions={{\n replace: true\n }}>\n <span className='text-info hover-text-underline cursor-pointer'>{props.name}</span>\n </AppLink>\n &quot;\n </>\n );\n}\n\nexport function SearchSuggestionsBlurbWidgetTemplate(props: SearchSuggestionsBlurbWidgetTemplateProps): JSX.Element {\n const suggestions = props.content.splice(0, DEFAULT_LENGTH);\n \n if (!suggestions.length)\n return <></>;\n \n return (\n <div className='rounded-2'>\n <Text phrase='prompt' namespace={namespace} />&nbsp;\n {suggestions.map((item, index) => {\n const lastItem = suggestions.length - 1 === index;\n\n return (\n <React.Fragment key={item.name}>\n <SearchSuggestionQueryItem\n appLink={props.appLinks.searchHome({ query: item.name }, { replace: false }) }\n name={item.name}\n />\n {!lastItem ? <>&nbsp;{getPhrase('or')}&nbsp;</> : '?'}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n",":local {\n $badge-size: 1.875rem;\n\n .container:hover {\n background-color: $light-blue;\n\n .bellContainer {\n display: flex;\n }\n }\n\n .bell {\n display: none;\n }\n\n .bellContainer {\n color: $dark;\n background-color: rgba($gray-200, 0.8);\n border-radius: 50%;\n z-index: 1;\n position: absolute;\n top: map-get($spacers, 1);\n right: map-get($spacers, 1);\n\n display: none;\n\n width: $badge-size;\n height: $badge-size;\n\n &:hover,\n &.followed {\n background-color: rgba($gray-200, 0.9);\n display: flex;\n\n .bellOutline {\n display: none;\n }\n\n .bell {\n opacity: 0.75;\n display: block;\n }\n }\n }\n\n .cover {\n height: 5rem;\n width: 5rem;\n min-width: 5rem;\n }\n\n .fallbackImage {\n height: 5rem;\n min-width: 5rem;\n border: none;\n }\n\n .subText {\n font-size: 0.6875rem;\n }\n}","import React from 'react';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from '../subject-stats-widget-item.module.scss';\n\nexport function PartialSubjectStatsWidgetItem(): JSX.Element {\n return (\n <div className='d-flex'>\n <div className={`${styles.cover} me-2 rounded overflow-hidden border rounded d-inline-block`}>\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n <div className='d-inline-block' style={{ flexBasis: '50%' }}>\n <div className='partial-loading-background mt-1' style={{ height: '19px', width: '100%' }} />\n <div className='partial-loading-background mt-1' style={{ height: '16.5px', width: '75%' }} />\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\nimport { PartialSubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/partial-loading/PartialSubjectStatsWidgetItem';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialStatsCoverFixedPillListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <div className='py-2'>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='g-0'>\n {Array(6).fill(null).map((_, i) => {\n return (\n <Col key={i} xs={12} sm={6} lg={4}>\n <div className='position-relative mb-2'>\n <PartialSubjectStatsWidgetItem />\n </div>\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","import React from 'react';\n\nexport function BellFilledSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M10.33 5.26c-1.023.373-1.72 1.155-2.158 2.369-.466 1.29-.655 3.104-.67 5.533-.002.112-.038.22-.102.305L5.08 16.56A.9.9 0 0 0 5.8 18h3.306q.049.13.112.251c.13.255.32.53.566.784.493.51 1.241.965 2.216.965s1.723-.455 2.216-.965c.246-.255.436-.53.566-.784a3 3 0 0 0 .112-.251H18.2a.9.9 0 0 0 .72-1.44l-2.32-3.093a.5.5 0 0 1-.101-.305c-.018-2.27-.214-4.07-.695-5.392-.447-1.232-1.157-2.09-2.211-2.498a1.8 1.8 0 0 0-.352-.722c-.28-.34-.7-.55-1.24-.55s-.965.208-1.261.53a1.9 1.9 0 0 0-.41.73M13.77 18a2.4 2.4 0 0 1-.274.34c-.353.365-.855.66-1.497.66s-1.144-.295-1.497-.66a2.4 2.4 0 0 1-.274-.34z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function BellSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M8.172 7.629c.438-1.214 1.135-1.996 2.157-2.369a1.9 1.9 0 0 1 .41-.73C11.037 4.208 11.462 4 12 4c.542 0 .96.21 1.241.55.182.22.291.474.352.722 1.054.409 1.764 1.266 2.211 2.498.48 1.323.677 3.122.695 5.392 0 .112.037.22.101.305l2.32 3.093A.9.9 0 0 1 18.2 18h-3.306a3 3 0 0 1-.112.251c-.13.255-.32.53-.566.784-.493.51-1.241.965-2.216.965s-1.723-.455-2.216-.965a3.3 3.3 0 0 1-.566-.784A3 3 0 0 1 9.106 18H5.8a.9.9 0 0 1-.72-1.44l2.32-3.093a.5.5 0 0 0 .101-.305c.016-2.429.205-4.243.67-5.533M18 17l-2.2-2.933a1.5 1.5 0 0 1-.301-.898c-.017-2.241-.215-3.9-.635-5.058-.411-1.134-1.016-1.738-1.854-1.981A3.6 3.6 0 0 0 12 6a4.2 4.2 0 0 0-1.115.132c-.809.223-1.381.752-1.773 1.836-.404 1.12-.595 2.79-.61 5.2-.003.321-.106.638-.302.899L6 17zm-7.771 1c.074.112.166.228.274.34.353.365.855.66 1.497.66s1.144-.295 1.497-.66c.108-.112.2-.228.274-.34z'\n />\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BellFilledSvg } from 'libs/shared/images/svg/objects/BellFilledSvg';\nimport { BellSvg } from 'libs/shared/images/svg/objects/BellSvg';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationBadgeType, SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.module.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n hideCounts: boolean;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n dashboardNewVideosCount,\n childDashboardNewVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n dashboardVideoCount,\n childDashboardVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n const newVideoCount = dashboardNewVideosCount + childDashboardNewVideoCount;\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n if (props.classification.status === ClassificationStatus.ComingSoon || props.hideCounts)\n return '';\n\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0 && !props.hideCounts)\n return 'new-videos';\n\n return null;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n videoCount,\n resourceCount,\n newVideoCount,\n datePublished: props.classification.datePublished,\n countsHidden: !!props.hideCounts\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 rounded-end-lg ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svg={BellFilledSvg}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svg={BellSvg}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className='h6 mb-0 clamp-2 mt-1'>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge badgeType={getBadgeType()} newVideoCount={newVideoCount} />\n </div>\n </AppLink>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport interface StatsCoverFixedPillListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n hasTableOfContents: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n appLinks: {\n classification: (classification: Classification) => Core.AppLink\n };\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n}\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(\n props: StatsCoverFixedPillListLargeWidgetTemplateProps\n): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className='position-relative pb-2' key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n\n /**\n * We're currently hiding counts for tertiary customers without the exchange\n * because all counting is done by a background process that can't take the\n * current users' credentials into account. Because about half of our tertiary\n * customers don't have the exchange, and the other half do, and we use exchange\n * content on our tertiary topics, the counts will be higher for non-exchange\n * customers than they really are for them.\n * \n * This is shit and hopefully we can come up with a better solution one day\n * - Josh\n */\n hideCounts={props.isTertiaryCustomerWithoutExchange}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialTagItemComponent() {\n return (\n <div className='me-2'>\n <PartialTagItem />\n </div>\n );\n}\n\nexport function PartialTagSlidingListWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const hasDivider = typeof props.predicate === 'function' && props.predicate() || false;\n \n return (\n <>\n <PartialDynamicWidget\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n {hasDivider &&\n <hr />\n }\n </>\n );\n}\n","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { TagWidgetItem, type TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { PartialTagItemComponent } from './partial-loading/PartialTagSlidingListWidgetTemplate';\n\nexport interface TagSlidingListWidgetTemplateProps {\n name: string;\n content: BaseObject[];\n widgetTypeId: WidgetTypeId;\n appLinks: {\n tag: (tag: BaseObject) => Core.AppLink\n };\n getSelectedItems: (type: WidgetTypeId) => BaseObject[];\n}\n\nexport function TagSlidingListWidgetTemplate(props: TagSlidingListWidgetTemplateProps): JSX.Element {\n const selectedItems = props.getSelectedItems(props.widgetTypeId);\n\n const unappliedOptions = props.content.filter(item => !selectedItems.find(s => s.id === item.id));\n\n const collection = [ ...selectedItems, ...unappliedOptions ];\n\n function onClick(tag: BaseObject) {\n AppLinkHelper.trigger(props.appLinks.tag(tag));\n }\n \n return (\n <DynamicWidget\n collection={collection}\n childComponent={(childProps: TagWidgetItemProps) => (\n <TagWidgetItem\n {...childProps}\n selectedItems={selectedItems}\n onClick={onClick}\n />\n )}\n partialLoadingComponent={PartialTagItemComponent}\n partialLoadingOptions={{\n numItems: 4\n }}\n />\n );\n}\n","import React from 'react';\n\nfunction PartialVideoGuidanceTag(): JSX.Element {\n return (\n <div\n className='partial-loading-background rounded-pill me-2'\n style={{ height: '2.5rem', width: '9.375rem' }}\n />\n );\n}\n\nexport function PartialVideoGuidance(): JSX.Element {\n return (\n <div className='d-flex align-items-center mw-100'>\n <PartialVideoGuidanceTag />\n <PartialVideoGuidanceTag />\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .partialHeroThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .partialVideoTitleText {\n width: 12rem;\n height: 1.5rem;\n }\n\n .partialDescription {\n width: 80%;\n height: 3rem;\n\n @include media(\"<=md\") {\n display: none;\n }\n }\n \n .details {\n display: flex;\n justify-content: space-between;\n height: 100%;\n flex-direction: column;\n\n @include media(\"<=md\") {\n padding-top: map-get($spacers, 2);\n }\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-featured-widget-template.module.scss';\n\nexport function PartialThumbnailFeaturedMediaWidgetTemplate(): JSX.Element {\n return (\n <>\n <Row>\n <Col xs={12} md={6}>\n <div className={`${styles.partialHeroThumbnail} partial-loading-background rounded-3`}></div>\n </Col>\n <Col xs={12} md={6}>\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </Col>\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HeroVideo } from 'libs/shared/apps/subjects/components/hero-video/HeroVideo';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nexport interface ThumbnailFeaturedMediaWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n settings: {\n hasTopicDirectories: boolean\n };\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFeaturedMediaWidgetTemplate(props: ThumbnailFeaturedMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <HeroVideo\n video={video}\n presentationAudiences={props.audiences}\n getVideoAppLink={props.appLinks?.videoType}\n analyticsData={props.analyticsData}\n hideInteractiveBadge\n showVideoGuidance={VideoHelper.showVideoGuidance(props.hasPermissions)}\n showNewVideoIndicator={props.settings?.hasTopicDirectories}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n );\n}\n",":local {\n .actions {\n background: none;\n color: $white;\n border: none;\n padding: 0;\n outline: inherit;\n border-radius: 50%;\n width: 1.5rem;\n height: 1.5rem;\n\n &:hover {\n background-color: rgba(0, 0, 0, .5);\n }\n }\n\n .actionsContainer {\n position: absolute;\n top: 0;\n right: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin-top: 0.9375rem;\n margin-right: 0.9375rem;\n z-index: 10;\n }\n\n .ownerLogo {\n position: absolute;\n top: 0;\n left: 0;\n width: 2rem;\n height: 2rem;\n margin-top: 0.9375rem;\n margin-left: 0.9375rem;\n }\n\n .dropStyle {\n box-shadow: 0 0 $focus-ring-blur 2px $gray-900;\n border-radius: $border-radius-lg;\n background: $gray-900;\n }\n\n .dragStyle {\n opacity: 0.5;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\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.module.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\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 owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url ?\n UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small }) :\n null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\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 analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\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 {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport interface ThumbnailFixedListFolderSmallWidgetTemplateProps {\n name: string;\n seeMoreLink: Core.AppLink;\n content: Folder[];\n appLinks: {\n folder: (folder: Folder, opts?: { libraryId?: string, sort?: string }) => Core.AppLink\n };\n description: string;\n widgetTypeId: WidgetTypeId;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nexport function ThumbnailFixedListFolderSmallWidgetTemplate(\n props: ThumbnailFixedListFolderSmallWidgetTemplateProps\n): JSX.Element {\n function getAppLink(folder: Folder) {\n if (props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder) {\n const libraryId = folder?.libraries?.data?.[0]?.id;\n return props.appLinks.folder(folder, { libraryId });\n }\n\n return props.appLinks.folder(folder);\n }\n\n const showOwnerLogo = props.widgetTypeId === WidgetTypeId.SearchMySchoolLibraryFolder;\n \n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map((f, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ? props.getAnalyticsData(idx) : {};\n \n return (\n <Col as='li' key={f.id} lg={3} md={4} sm={6} xs={12} className='pb-3 px-1'>\n <LibraryFolder\n folder={f}\n getAppLink={getAppLink}\n showOwnerLogo={showOwnerLogo}\n analyticsData={analyticsData}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListFolderSmallWidget\n }}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-large-widget-template.module.scss';\n\nexport function PartialThumbnailFixedListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(2)];\n\n return (\n <div>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <Row className='mx-n1'>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} sm={12} md={6} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </div>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n padding: $spacer;\n background-repeat: no-repeat;\n background-size: contain;\n background-position: right;\n\n //fallback color\n background-color: $gray-900;\n\n &.large {\n min-height: 9.7rem; // 155.2px\n }\n\n &.small {\n min-height: 7.653rem; // 122.44px\n\n >.content {\n @include media('>lg') {\n width: 70%;\n }\n }\n }\n }\n\n .content {\n width: 50%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .preTitle {\n font-size: 0.875rem;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n }\n\n .cover {\n width: 25%;\n background-size: contain;\n aspect-ratio: 1;\n margin: auto;\n }\n\n .button {\n @include media('<=md') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './thumbnail-widget-item.module.scss';\n\nconst namespace = 'shared.thumbnailWidgetItem';\n\ninterface ThumbnailWidgetContentProps extends ThumbnailWidgetItemProps {}\n\nfunction ThumbnailWidgetContent(props: ThumbnailWidgetContentProps): JSX.Element {\n const style: React.CSSProperties = {};\n\n if (props.data.fallbackBackgroundColor)\n style.backgroundColor = props.data.fallbackBackgroundColor;\n \n if (props.data.backgroundColor)\n style.backgroundColor = props.data.backgroundColor;\n\n if (props.data.thumbnailUrl)\n style.backgroundImage = `url('${props.data.thumbnailUrl}')`;\n\n return (\n <div\n className={classNames(\n 'd-flex position-relative rounded-3 h-100',\n styles.container,\n props.isLarge ? styles.large : styles.small\n )}\n style={style}\n >\n <div className={classNames(styles.content, !props.isLarge && 'justify-content-center')}>\n <div className={`${styles.top}`}>\n {props.data.preTitle && props.data.preTitle.length &&\n <p className={`${styles.preTitle} mb-1 text-white`} title={props.data.preTitle}>{props.data.preTitle}</p>\n }\n <p title={props.data.name} className={classNames(\n 'h5 text-shadow hover-text-underline',\n styles.title,\n props.isLarge ? 'mb-0 text-wrap clamp-2' : 'text-wrap clamp-3'\n )}>\n {props.data.name}\n </p>\n\n {props.isLarge && (\n <div className={`text-start text-shadow ${styles.description}`}>\n <p className='clamp-3' title={props.data.description}>{props.data.description}</p>\n </div>\n )}\n </div>\n\n {props.isLarge && (\n <div className={styles.button}>\n <div className={classNames(!props.appLink && 'cursor-default', 'btn btn-outline-dark')}>\n {props.data?.buttonText || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n )}\n </div>\n\n {!props.data.thumbnailUrl && !!props.data.coverUrl && (\n <div\n className={`${styles.cover}`}\n style={{\n backgroundImage: `url('${props.data.coverUrl}')`\n }}>\n </div>\n )}\n\n </div>\n );\n}\n\ninterface ThumbnailWidgetData {\n name: string;\n preTitle?: string;\n \n description?: string;\n coverUrl?: string;\n thumbnailUrl?: string;\n backgroundColor?: string;\n fallbackBackgroundColor?: string;\n buttonText?: string;\n}\n\nexport interface ThumbnailWidgetItemProps {\n data: ThumbnailWidgetData;\n appLink?: Core.AppLink;\n appLinkOptions?: Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction ThumbnailWidgetItem(props: ThumbnailWidgetItemProps): JSX.Element {\n if (props.appLink)\n return (\n <AppLink\n className={styles.appLink}\n appLink={props.appLink}\n appLinkOptions={props.appLinkOptions}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <ThumbnailWidgetContent {...props} />\n </AppLink>\n );\n\n return <ThumbnailWidgetContent {...props} />;\n}\n\nconst Memoized = React.memo(ThumbnailWidgetItem);\n\nexport { Memoized as ThumbnailWidgetItem };\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nconst namespace = 'shared.thumbnailFixedListLargeWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: Classification;\n appLinks: ThumbnailFixedListLargeWidgetTemplateProps['appLinks'];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium }),\n buttonText: getPhrase('exploreTopic')\n },\n appLink: options.appLinks?.classification?.(options.item),\n isLarge: true,\n analyticsData,\n analyticsOptions\n };\n}\n\nexport interface ThumbnailFixedListLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: Classification[];\n widgetTypeId: WidgetTypeId;\n isPreviewing: boolean;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n analyticsData?: HashObject;\n}\n\nexport function ThumbnailFixedListLargeWidgetTemplate(props: ThumbnailFixedListLargeWidgetTemplateProps): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {props.content.map(c => {\n return (\n <Col as='li' key={c.id} sm={12} xl={6} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...getThumbnailWidgetItemProps({\n appLinks: props.appLinks,\n item: c,\n analyticsData: props.analyticsData\n })}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .partialThumbnail {\n position: relative;\n width: 100%;\n padding-bottom: 56.25%;\n }\n\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport const PartialThumbnailFixedListMediaLargeWidgetTemplate = (props: PartialWidgetTemplateProps): JSX.Element => {\n return (\n <>\n <PartialWidgetHeader name={props.name} description={props.description} isPreviewing={props.isPreviewing} />\n <div className={`row ${styles.row}`}>\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n\n <div className='col-sm-12 col-md-6'>\n <div className={`${styles.partialThumbnail} partial-loading-background rounded-3`}></div>\n <PartialThumbnailText />\n\n <div className='pt-1 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst PartialThumbnailText = (): JSX.Element => {\n return (\n <div className='mt-2'>\n <div style={{ height: '1.4rem' }}>\n <div className='partial-loading-background' style={{ height: '1.1rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.33875rem', width: '15rem' }}></div>\n </div>\n );\n};\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .guidance { \n gap: map-get($spacers, 1);\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateItemProps {\n video: VideoTypes;\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplateItem(\n props: ThumbnailFixedListMediaLargeWidgetTemplateItemProps\n): JSX.Element {\n const videoAppLink = props.appLinks?.videoType?.(props.video, {});\n\n const containerRef = React.useRef(null);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n location: LocationContext.ThumbnailFixedListMediaLargeWidget,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className='col-md-6'>\n <div ref={containerRef}>\n <VideoThumbnail\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n video={props.video}\n appLink={videoAppLink}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n commonVideoProps={{\n ...props.commonVideoProps,\n subTextType: 'none'\n }}\n />\n </div>\n <ThumbnailText\n video={props.video}\n appLink={videoAppLink}\n commonVideoProps={props.commonVideoProps}\n />\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n commonVideoProps={props.commonVideoProps}\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex justify-content-start align-items-center pt-1 ${styles.guidance}`}\n />\n )}\n </div>\n );\n}\n",":local {\n .row {\n row-gap: map-get($spacers, 3);\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailFixedListMediaLargeWidgetTemplateItem } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/components/ThumbnailFixedListMediaLargeWidgetTemplateItem';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-fixed-list-media-large-widget-template.module.scss';\n\nexport interface ThumbnailFixedListMediaLargeWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n hasPermissions: HasPermissionsFunc;\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailFixedListMediaLargeWidgetTemplate(\n props: ThumbnailFixedListMediaLargeWidgetTemplateProps\n): JSX.Element {\n const videos = WidgetHelper.getVideoContent(props.content);\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <div className={`row ${styles.row}`}>\n {videos.map(video => (\n <ThumbnailFixedListMediaLargeWidgetTemplateItem key={video.id} video={video} {...props} />\n ))}\n </div>\n </>\n );\n}\n",":local {\n .thumbnailTitle:hover {\n text-decoration: underline;\n }\n}","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.module.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",":local {\n .badge {\n height: 1.5rem;\n }\n\n .mask {\n opacity: 0;\n }\n\n .thumbnailContainer:hover {\n .mask {\n opacity: 1;\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, UserAction } 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 { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport styles from './collection-thumbnail.module.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink;\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: 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 function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={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 svg={PlaySvg} 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 svg={PlaySvg} 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 svg={SeriesSvg} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount ?\n <span>{videoCount}</span> :\n <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\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}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { CurrentUser, Playlist, Series } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContentType = Series | Playlist;\n\nexport interface ThumbnailFixedListMediaSmallWidgetTemplateProps {\n name: string;\n content: SupportedContentType[];\n currentUser: CurrentUser;\n seeMoreLink: Core.AppLink;\n appLinks: {\n playlist: (playlist: Playlist) => Core.AppLink,\n series: (series: Series) => Core.AppLink\n };\n \n description: string;\n badgeComponent: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n}\n\nconst namespace = 'widgets.thumbnailFixedListMediaSmallWidgetTemplate';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ThumbnailFixedListMediaSmallWidgetTemplate(\n props: ThumbnailFixedListMediaSmallWidgetTemplateProps\n): JSX.Element {\n const subTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('playlist'),\n [MasterType.Series]: getPhrase('series')\n };\n\n const hoverTextMap: {[key in MasterType]?: string } = {\n [MasterType.Playlist]: getPhrase('viewPlaylist'),\n [MasterType.Series]: getPhrase('viewSeries')\n };\n \n function getAppLink(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return props.appLinks.playlist(collection);\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return props.appLinks.series(collection);\n }\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n3'>\n {props.content.map((c, idx) => {\n const collectionAppLink = getAppLink(c);\n const subText = subTextMap[c?.typeId];\n const hoverText = hoverTextMap[c?.typeId];\n \n return (\n <Col as='li' key={c.id} lg={3} md={4} sm={6} xs={12} className='mb-3 px-1'>\n <CollectionThumbnail\n collection={c}\n appLink={collectionAppLink}\n analyticsOptions={{\n location: LocationContext.ThumbnailFixedListMediaSmallWidget\n }}\n analyticsData={props.getAnalyticsData(idx)}\n title={c?.name}\n titleAppLink={collectionAppLink}\n imageOptions={{\n size: ImageSize.Medium\n }}\n subText={subText}\n subTextAppLink={collectionAppLink}\n hoverText={hoverText}\n showVideoCount\n showMask\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n",":local {\n .subjectItem {\n aspect-ratio: 14 / 5;\n }\n} ","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { PartialWidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/partial-loading/PartialWidgetHeader';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nimport styles from './partial-thumbnail-fixed-list-small-widget-template.module.scss';\n\nexport function PartialThumbnailFixedSmallWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n const PARTIAL_SUBJECTS = [...Array(3)];\n\n return (\n <>\n <PartialWidgetHeader\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n hideDescription={props.hideDescription}\n />\n <Row className='mx-n1 '>\n {PARTIAL_SUBJECTS.map((_, i) => {\n return (\n <Col key={i} xl={4} md={6} xs={12} className='p-1'>\n <div className={`${styles.subjectItem} partial-loading-background rounded-3`} />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ThumbnailWidgetItem, ThumbnailWidgetItemProps } from 'libs/shared/components/widgets/items/thumbnail-widget-item/ThumbnailWidgetItem';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Classification, Company, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\ntype SupportedContent = Classification | Company;\n\ninterface GetThumbnailWidgetItemPropsOptions {\n item: SupportedContent;\n appLinks: ThumbnailFixedListSmallWidgetTemplateProps['appLinks'];\n appLinkOptions: ThumbnailFixedListSmallWidgetTemplateProps['appLinkOptions'];\n widgetTypeId: WidgetTypeId;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nfunction getPresentationName(item: Classification, presentations: Presentation[]): string {\n if (!item || !presentations)\n return;\n\n const itemPresentation = presentations.find(p => p.id && p.id === item.presentationId);\n\n if (!itemPresentation)\n return;\n\n return itemPresentation.name;\n}\n\nfunction getThumbnailWidgetItemProps(options: GetThumbnailWidgetItemPropsOptions): ThumbnailWidgetItemProps {\n const baseProps: ThumbnailWidgetItemProps = {\n data: {\n name: options.item.name,\n description: options.item.description\n }\n };\n\n if (MasterTypeHelper.isType<Classification>(options.item, MasterType.Subject)) {\n const isComingSoon = options.item?.status === ClassificationStatus.ComingSoon;\n const analyticsData = {\n ...options.analyticsData,\n id: options.item?.id,\n name: options.item?.name,\n presentationId: options.item?.presentationId,\n comingSoon: !!isComingSoon\n };\n \n const analyticsOptions = {\n location: LocationContext.ThumbnailFixedListSmallWidget,\n ...options.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n const itemPresentationName = options.widgetTypeId === WidgetTypeId.SearchRelevantTopics &&\n getPresentationName(options.item, options.availablePresentations);\n\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n preTitle: itemPresentationName,\n backgroundColor: options.item.metadata?.backgroundColor,\n coverUrl: ImageHelper.createUrl(options.item.cover?.url, { size: ImageSize.Small }),\n thumbnailUrl: ImageHelper.createUrl(options.item.thumbnail?.url, { size: ImageSize.Medium })\n },\n appLink: options.appLinks?.classification?.(options.item),\n analyticsData,\n analyticsOptions\n };\n }\n\n if (MasterTypeHelper.isType<Company>(options.item, MasterType.Company)) {\n return {\n ...baseProps,\n data: {\n ...baseProps.data,\n coverUrl: ImageHelper.createUrl(options.item.logo?.url, { size: ImageSize.Small }),\n backgroundColor: options.item.metadata?.colour\n },\n appLink: options.appLinks?.company?.(options.item),\n appLinkOptions: options.appLinkOptions?.company(options.item)\n };\n }\n\n return baseProps;\n}\n\nexport interface ThumbnailFixedListSmallWidgetTemplateProps {\n name: string;\n description: string;\n isPreviewing: boolean;\n widgetTypeId: WidgetTypeId;\n content: SupportedContent[];\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink,\n company: (playlist: Company) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n availablePresentations?: Presentation[];\n analyticsData?: HashObject;\n badgeComponent?: JSX.Element;\n getAnalyticsData?: (itemIndex: number) => HashObject;\n appLinkOptions?: {\n company: (company: Company) => Core.AppLinkOptions\n };\n}\n\nexport function ThumbnailFixedListSmallWidgetTemplate(\n props: ThumbnailFixedListSmallWidgetTemplateProps\n): JSX.Element {\n function getContent(): SupportedContent[] {\n if ([\n WidgetTypeId.SearchRelevantTopics,\n WidgetTypeId.SearchCompanies\n ].includes(props.widgetTypeId)) {\n return props.content;\n }\n \n if (\n props.widgetTypeId !== WidgetTypeId.TrendingClassifications &&\n props.widgetTypeId !== WidgetTypeId.LatestReleasedClassifications\n ) {\n return props.content;\n }\n\n if (props.content.length < 6)\n return props.content.slice(0, 3);\n\n return props.content;\n }\n\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n content={props.content}\n widgetTypeId={props.widgetTypeId}\n isPreviewing={props.isPreviewing}\n showSeeMoreLink={!!props.seeMoreLink}\n appLink={props.seeMoreLink}\n badgeComponent={props.badgeComponent}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n2'>\n {getContent().map((c, idx) => {\n const analyticsData = typeof props.getAnalyticsData === 'function' ?\n props.getAnalyticsData(idx) :\n props.analyticsData;\n \n const thumbnailWidgetItemProps = getThumbnailWidgetItemProps({\n item: c,\n widgetTypeId: props.widgetTypeId,\n appLinks: props.appLinks,\n analyticsData: analyticsData,\n availablePresentations: props.availablePresentations,\n appLinkOptions: props.appLinkOptions\n });\n return (\n <Col as='li' key={c.id} xl={4} md={6} xs={12} className='px-1 pb-2'>\n <ThumbnailWidgetItem\n {...thumbnailWidgetItemProps}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\n\nexport function PartialThumbnailFixedListXLargeWidgetTemplate(): JSX.Element {\n return <PartialHeroBannerWidgetTemplate />;\n}\n","@import '~styles/utils/include-media';\n:local {\n .appLink:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n .container {\n background-repeat: no-repeat;\n background-position: right;\n background-size: contain;\n //fallback color\n background-color: $gray-900;\n\n padding: 0.9375rem;\n min-height: 9.7rem;\n }\n\n .content {\n width: 60%;\n padding-right: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n .top {\n color: $white;\n font-size: 1rem;\n }\n\n .title {\n margin-bottom: 0.0725rem;\n line-height: normal;\n overflow-y: clip;\n overflow-x: visible;\n }\n\n .title:hover{\n text-decoration: underline;\n }\n\n .description {\n font-size: 0.875rem;\n margin-bottom: 0.937rem;\n }\n\n @include media('<=sm') {\n width: 100%;\n }\n }\n\n .description {\n @include media('<=sm') {\n display: none;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification, WidgetCta } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './thumbnail-fixed-list-x-large.module.scss';\n\nconst namespace = 'shared.thumbnailFixedListXLarge';\n\nexport interface ThumbnailFixedListXLargeWidgetTemplateProps {\n name: string;\n content: Classification[];\n analyticsData?: HashObject;\n \n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink\n };\n metadata: {\n cta: WidgetCta\n };\n}\n\nexport function ThumbnailFixedListXLargeWidgetTemplate(\n props: ThumbnailFixedListXLargeWidgetTemplateProps\n): JSX.Element {\n const classification = ArrayHelper.first(props.content);\n\n const thumbnailUrl = ImageHelper.createUrl(classification.thumbnail?.url, { size: ImageSize.Medium });\n const backgroundColor = classification.metadata?.backgroundColor;\n\n const style: React.CSSProperties = {\n backgroundColor\n };\n\n if (thumbnailUrl)\n style.backgroundImage = `url('${thumbnailUrl}')`;\n\n const analyticsData = {\n ...props.analyticsData,\n id: classification.id,\n name: classification.name,\n presentationId: classification.presentationId\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Thumbnail\n };\n\n if (!thumbnailUrl || !backgroundColor)\n return <HeroBannerWidgetTemplate {...props} />;\n\n return (\n <>\n <AppLink\n appLink={props.appLinks?.classification?.(classification)}\n className='text-decoration-none'\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <div\n className={`d-flex position-relative rounded-3 h-100 ${styles.container}`}\n style={style}\n >\n <div className={`${styles.content}`}>\n <div className={`${styles.top}`}>\n <h2 className={`${styles.title} text-decoration-none h4 text-nowrap text-truncate`}>{props.name}</h2>\n\n <div className={`text-start ${styles.description}`}>\n <p className='clamp-3'>{classification.description}</p>\n </div>\n </div>\n\n <div>\n <div className='btn btn-outline-dark text-nowrap'>\n {props.metadata?.cta?.text || LanguageService.getPhrase(namespace, 'buttonLabel')}\n </div>\n </div>\n </div>\n </div>\n </AppLink>\n </>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .details {\n padding-top: map-get($spacers, 2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @include media(\"<md\") {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n}","import React from 'react';\n\nimport { PartialVideoGuidance } from 'libs/shared/components/video-guidance/tag/partial-loading/PartialVideoGuidanceTag';\n\nimport styles from './partial-thumbnail-hero-media-widget-template.module.scss';\n\nexport const PartialThumbnailHeroMediaWidgetTemplate = () => (\n <div>\n <div className='w-100 partial-loading-background rounded-3' style={{ paddingBottom: '56.25%' }} />\n\n <div className={styles.details}>\n <div>\n <div style={{ height: '1.5rem' }}>\n <div className='partial-loading-background' style={{ height: '1.2rem', width: '12rem' }} />\n </div>\n <div className='partial-loading-background' style={{ height: '1.5625rem', width: '15rem' }}></div>\n </div>\n\n <div className='pt-2 mw-100'>\n <PartialVideoGuidance />\n </div>\n </div>\n </div>\n);\n","@import '~styles/utils/mixins';\n@import '~styles/utils/include-media';\n:local {\n .details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .guidance {\n gap: map-get($spacers, 1);\n }\n\n @include media('<=md') {\n flex-direction: column;\n align-items: flex-start;\n \n .guidance {\n margin-top: map-get($spacers, 1);\n }\n }\n }\n\n .responsiveGuidance {\n @include media('>md') {\n @include responsive-guidance-tags;\n }\n\n @include media('<=sm') {\n @include responsive-guidance-tags;\n }\n }\n\n .seriesTitleBox {\n height: 1.5rem;\n line-height: 1.5rem;\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTitle } from 'libs/shared/components/video-title/VideoTitle';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { VideoWidgetTemplateContent } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { Video } from 'libs/shared/interfaces/models/Video';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './thumbnail-hero-media-widget-template.module.scss';\n\nexport interface ThumbnailHeroMediaWidgetTemplateProps {\n name: string;\n description: string;\n content: VideoWidgetTemplateContent;\n audiences: PresentationAudience[];\n widgetTypeId: WidgetTypeId;\n hasPermissions: HasPermissionsFunc;\n analyticsData?: HashObject;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink\n };\n\n settings: {\n hasTopicDirectories: boolean\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailHeroMediaWidgetTemplate(props: ThumbnailHeroMediaWidgetTemplateProps): JSX.Element {\n const video = ArrayHelper.first(WidgetHelper.getVideoContent(props.content));\n const containerRef = React.useRef(null);\n\n const mergedAudience = useMergeAudiences(video.subjectPresentationAudiences?.data, props.audiences);\n\n const hasSubText = VideoHelper.hasSeries(video) || WidgetHelper.isCompanyWidget(props.widgetTypeId);\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: LocationContext.ThumbnailHeroMediaWidget\n };\n\n const showNewVideoIndicator = props.settings?.hasTopicDirectories;\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n if (!video)\n return <></>;\n\n return (\n <div>\n <WidgetHeader name={props.name} description={props.description} />\n\n <div ref={containerRef}>\n <VideoThumbnail\n video={video}\n imageOptions={{ size: ImageSize.Large }}\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n analyticsOptions={analyticsOptions}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n appLink={props.appLinks?.videoType?.(video, {})}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n\n <div className={styles.details}>\n <div>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={WidgetHelper.isCompanyWidget(props.widgetTypeId) ? 'productionCompany' : props.commonVideoProps.subTextType}\n video={video}\n appLink={props.commonVideoProps.getSubTextAppLink?.(video)}\n analyticsOptions={analyticsOptions}\n className={`mt-2 ${styles.seriesTitleBox}`}\n />\n )}\n\n <div className={hasSubText ? '' : 'mt-2'}>\n <AppLink\n appLink={props.appLinks?.videoType?.(video, {})}\n analyticsData={{\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n className={`d-inline-block ${canNavigate ? '' : 'cursor-default text-decoration-none disabled'}`}\n disabled={!canNavigate}\n >\n <VideoTitle\n video={video}\n yearGroups={props.commonVideoProps.yearGroups}\n showNewVideoIndicator={showNewVideoIndicator}\n showPadlock={!props.commonVideoProps.hasStudentExperience && !props.commonVideoProps.hasGuestExperience}\n titleSize='h4'\n className='mb-0'\n />\n </AppLink>\n </div>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={analyticsOptions}\n responsiveClassName={styles.responsiveGuidance}\n containerClassName={`d-flex mt-2 ${styles.guidance}`}\n commonVideoProps={props.commonVideoProps}\n />\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialFixedWidget } from 'libs/shared/components/widgets/fixed-widget';\n\nimport { PartialWidgetTemplateProps } from '../../../WidgetProps';\n\nexport function PartialThumbnailSlidingListLargeWidgetTemplate(props: PartialWidgetTemplateProps): JSX.Element {\n return (\n <PartialFixedWidget\n size='lg'\n name={props.name}\n description={props.description}\n isPreviewing={props.isPreviewing}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListLargeWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListLargeWidgetTemplate(\n props: ThumbnailSlidingListLargeWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.LargeRow}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { VideoWidgetItem } from 'libs/shared/components/widgets/items/video-widget-item/v1';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nexport interface ThumbnailSlidingListSmallWidgetTemplateProps {\n id: string;\n name: string;\n description: string;\n content: Video[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n\n appLinks: {\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallWidgetTemplate(\n props: ThumbnailSlidingListSmallWidgetTemplateProps\n): JSX.Element {\n return (\n <FixedWidget\n id={props.id}\n name={props.name}\n description={props.description}\n type={WidgetType.Row}\n contents={WidgetContents.Videos}\n collection={props.content}\n childComponent={VideoWidgetItem}\n extraChildComponentProps={{\n commonVideoProps: props.commonVideoProps\n }}\n getChildAppLink={v => props.appLinks?.videoType?.(v, {})}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .rowWidth {\n width: 25%;\n }\n\n @include media('<=xl') {\n .rowWidth {\n width: 33.33333%;\n }\n }\n\n @include media('<=md') {\n .rowWidth {\n width: 50%;\n }\n }\n\n @include media('<=sm') {\n .rowWidth {\n width: 100%;\n }\n }\n}","import React from 'react';\n\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { PresentationAudience, VideoTypes } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport styles from './video-widget-item-v2.module.scss';\n\nexport interface VideoWidgetItemV2Props extends FixedWidgetItemProps<VideoTypes> {\n presentationAudiences: PresentationAudience[];\n commonVideoProps: CommonVideoProps;\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 preload={props.preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n type='static'\n appLink={props.getAppLink(props.data)}\n imageOptions={{ size: props.thumbnailSize }}\n textPosition={ThumbnailTextPosition.Below}\n audience={mergedAudience}\n hideRating={!!mergedAudience}\n hideDuration={false}\n commonVideoProps={props.commonVideoProps}\n />\n </div>\n );\n});\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { HasLocalPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { PresentationAudience, Resource, Series, Video, WidgetType } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\nimport { 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 resourceThumbnailFallbackImageUrl: string;\n audiences: PresentationAudience[];\n analyticsData?: HashObject;\n \n showHighlight?: boolean;\n \n appLinks: {\n series: (series: Series) => Core.AppLink,\n videoType: (video: Video, options: GetVideoAppLinkOptions) => Core.AppLink,\n resource: (resource: Resource, videoId: string, canViewResources: boolean) => Core.AppLink,\n widgetVideoList: (widgetId: string, widgetName: string) => Core.AppLink\n };\n\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ThumbnailSlidingListSmallV2WidgetTemplate(\n props: ThumbnailSlidingListSmallV2WidgetTemplateProps\n): JSX.Element {\n const canViewResources = props.hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems);\n\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={MultimediaWidgetItem}\n extraChildComponentProps={{\n imageErrorFallbackUrl: props.resourceThumbnailFallbackImageUrl,\n location: 'dashboard',\n titlePosition: 'below',\n actionBehaviour: canViewResources ? 'normal' : 'public',\n presentationAudiences: props.audiences,\n commonVideoProps: props.commonVideoProps,\n imageCdnUrl: props.commonVideoProps.imageCdnUrl\n }}\n getChildAppLink={item => {\n if (VideoHelper.isVideoType(item)) {\n return props.appLinks?.videoType?.(item, {});\n }\n\n return props.appLinks?.resource?.(item, item.parentId, canViewResources);\n }}\n prefetched\n hideBleedingContent={props.showHighlight}\n hideButtons={props.showHighlight}\n analyticsData={props.analyticsData}\n appLink={props.appLinks?.widgetVideoList?.(props.id, props.name)}\n />\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 51'>\n <path\n d='M0 .4C0 .18.18 0 .4 0h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H.4a.4.4 0 0 1-.4-.4zm14.89.1v13h20.274a.5.5 0 0 0 .5-.5V1a.5.5 0 0 0-.5-.5zM.4 37a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V38a1 1 0 0 0-1-1zm34.764 13.5H14.89v-13h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5m5.254-13.1c0-.22.18-.4.4-.4h34.764a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H40.818a.4.4 0 0 1-.4-.4zm14.891.1v13h20.273a.5.5 0 0 0 .5-.5V38a.5.5 0 0 0-.5-.5zM40.82 0a.4.4 0 0 0-.4.4v13.2c0 .22.178.4.4.4h34.763a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.49.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zM81.236 0a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zm14.491 13.5V.5H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5zM.4 18a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.49.5h20.274a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H14.89zm25.928-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4h34.764a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491.5h20.273a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H55.309zm25.927-.5a.4.4 0 0 0-.4.4v13.2c0 .22.18.4.4.4H116a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm14.491 13.5v-13H116a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedPillListXSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 93 44'>\n <path\n d='M.7 0a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7V.7a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 .7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM52.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.588c.666 0 1.206-.537 1.206-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM52 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7h-6.6a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.588c.666 0 1.206.537 1.206 1.2v.6c0 .663-.54 1.2-1.206 1.2H63.815a1.203 1.203 0 0 1-1.206-1.2zM0 12.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2zM.7 24a.7.7 0 0 0-.7.7v6.6a.7.7 0 0 0 .7.7h6.6a.7.7 0 0 0 .7-.7v-6.6a.7.7 0 0 0-.7-.7zm11.115 2.5c-.666 0-1.206.537-1.206 1.2v.6c0 .663.54 1.2 1.206 1.2h27.589c.665 0 1.205-.537 1.205-1.2v-.6c0-.663-.54-1.2-1.206-1.2zM0 36.7a.7.7 0 0 1 .7-.7h6.6a.7.7 0 0 1 .7.7v6.6a.7.7 0 0 1-.7.7H.7a.7.7 0 0 1-.7-.7zm10.61 3c0-.663.54-1.2 1.205-1.2h27.589c.665 0 1.205.537 1.205 1.2v.6c0 .663-.54 1.2-1.206 1.2H11.816a1.203 1.203 0 0 1-1.206-1.2z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path d='M18.5967 28C19.3721 28.0003 20 28.8956 20 30C20 31.1042 19.3721 31.9997 18.5967 32H1.40332C0.628292 31.9997 9.25822e-05 31.1042 0 30C0 28.8956 0.628235 28.0003 1.40332 28H18.5967Z'/>\n <path d='M48.5967 28C49.3721 28.0002 50 28.8955 50 30C50 31.1042 49.372 31.9998 48.5967 32H31.4033C30.6282 31.9997 30 31.1042 30 30C30 28.8956 30.6282 28.0003 31.4033 28H48.5967Z'/>\n <path d='M78.5967 28C79.372 28.0002 80 28.8955 80 30C80 31.1042 79.372 31.9998 78.5967 32H61.4033C60.6282 31.9997 60 31.1042 60 30C60 28.8956 60.6282 28.0003 61.4033 28H78.5967Z'/>\n <path d='M107.596 28C108.372 28 109 28.8954 109 30C109 31.1043 108.372 32 107.596 32H90.4033C89.6283 31.9998 89 31.1042 89 30C89 28.8955 89.6283 28.0002 90.4033 28H107.596Z'/>\n <path d='M27.5 10C27.7761 10 28 10.2239 28 10.5V25.5C27.9998 25.7759 27.7761 26 27.5 26H0.5C0.223944 26 0.00013193 25.7759 0 25.5V10.5C0 10.2239 0.223862 10 0.5 10H27.5Z'/>\n <path d='M57.5 10C57.7761 10 58 10.2239 58 10.5V25.5C57.9998 25.7759 57.7761 26 57.5 26H30.5C30.2239 26 30.0002 25.7759 30 25.5V10.5C30 10.2239 30.2239 10 30.5 10H57.5Z'/>\n <path d='M86.5 10C86.7761 10 87 10.2239 87 10.5V25.5C86.9998 25.7759 86.7761 26 86.5 26H60.5C60.2239 26 60.0002 25.7759 60 25.5V10.5C60 10.2239 60.2239 10 60.5 10H86.5Z'/>\n <path d='M102.4 14.5C104.002 14.5004 105.3 15.799 105.3 17.4004C105.3 18.1875 104.984 18.8994 104.475 19.4219C104.465 19.4298 104.455 19.4375 104.446 19.4463C104.437 19.4552 104.43 19.4653 104.422 19.4746C103.899 19.9838 103.188 20.2996 102.4 20.2998C100.799 20.2998 99.5004 19.0017 99.5 17.4004C99.5 15.7988 100.799 14.5 102.4 14.5Z'/>\n <path d='M116.5 10C116.776 10 117 10.2239 117 10.5V25.5C117 25.7759 116.776 26 116.5 26H89.5C89.2239 26 89.0002 25.7759 89 25.5V10.5C89 10.2239 89.2239 10 89.5 10H116.5ZM102.4 13.5C100.246 13.5 98.5 15.2465 98.5 17.4004C98.5004 19.554 100.247 21.2998 102.4 21.2998C103.297 21.2996 104.122 20.9957 104.78 20.4873L107.047 22.7539C107.242 22.9487 107.559 22.9489 107.754 22.7539C107.949 22.5588 107.949 22.2422 107.754 22.0469L105.487 19.7803C105.996 19.1216 106.3 18.2967 106.3 17.4004C106.3 15.2467 104.554 13.5004 102.4 13.5Z'/>\n <path d='M46.5 0C47.8807 0 49 1.11929 49 2.5C48.9998 3.88059 47.8807 5 46.5 5H2.5C1.11937 5 0.000131935 3.88059 0 2.5C0 1.11929 1.11929 0 2.5 0H46.5Z'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 60'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.795C0 10.356.356 10 .795 10h26.406c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H.795A.795.795 0 0 1 0 58.99zM30.41 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.795.795h26.406c.439 0 .795-.355.795-.795V10.795a.795.795 0 0 0-.795-.795zm28.818.795c0-.439.356-.795.795-.795h26.568c.439 0 .795.356.795.795V58.99c0 .44-.356.795-.795.795H60.024a.795.795 0 0 1-.796-.795zM89.638 10a.795.795 0 0 0-.796.795V58.99c0 .44.356.795.796.795h26.567a.795.795 0 0 0 .795-.795V10.795a.795.795 0 0 0-.795-.795z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListMediumSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 50'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.852a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM.632 10a.63.63 0 0 0-.632.632v38.319c0 .349.283.632.632.632h20.994c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm22.913.632c0-.349.283-.632.632-.632h20.994c.35 0 .633.283.633.632v38.319c0 .349-.283.632-.633.632H24.178a.63.63 0 0 1-.633-.633zM47.723 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632h21.122c.35 0 .633-.283.633-.633V10.633a.63.63 0 0 0-.633-.632zm46.89.632c0-.349.283-.632.632-.632h21.123c.349 0 .632.283.632.632v38.319c0 .349-.283.632-.632.632H95.245a.63.63 0 0 1-.632-.633zM71.268 10a.63.63 0 0 0-.633.632v38.319c0 .349.283.632.633.632H92.39a.63.63 0 0 0 .632-.633V10.633A.63.63 0 0 0 92.39 10z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePosterSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.852a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm0 8.533C0 10.239.24 10 .537 10H18.05c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H.537A.535.535 0 0 1 0 42.835zM20.198 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 37.71 10zm19.124.533c0-.294.24-.533.537-.533h17.62c.297 0 .538.239.538.533v32.302c0 .295-.241.533-.538.533H39.86a.535.535 0 0 1-.537-.533zM59.521 10a.535.535 0 0 0-.538.533v32.302c0 .295.241.533.538.533h17.62a.535.535 0 0 0 .537-.533V10.533A.535.535 0 0 0 77.14 10zm19.231.533c0-.294.24-.533.537-.533h17.513c.296 0 .537.239.537.533v32.302c0 .295-.24.533-.537.533H79.289a.535.535 0 0 1-.537-.533zM98.95 10a.535.535 0 0 0-.537.533v32.302c0 .295.24.533.537.533h17.513a.535.535 0 0 0 .537-.533V10.533a.535.535 0 0 0-.537-.533z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateStatsCoverFixedPillListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 81 31'>\n <g clipPath='url(#a)'>\n <path\n fill='currentColor'\n d='M0 1.643a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-11 11a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm16-21a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H40a1 1 0 0 1-1-1zm18-23a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1zm-12 12a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1zm11 0a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H68a1 1 0 0 1-1-1zm-10 10a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1zm11 0a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1z'\n />\n </g>\n <defs>\n <clipPath id='a'>\n <path fill='currentColor' d='M0 .643h81v30H0z' />\n </clipPath>\n </defs>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFeaturedMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 44'>\n <path\n d='M2.762 0a2.762 2.762 0 0 0 0 5.524h49.076a2.762 2.762 0 1 0 0-5.524zM1.065 11.048A1.06 1.06 0 0 0 0 12.103v30.085a1.06 1.06 0 0 0 1.065 1.056h54.699a1.06 1.06 0 0 0 1.065-1.056V12.103a1.06 1.06 0 0 0-1.065-1.055zm61.878 0a1.657 1.657 0 1 0 0 3.314h52.4a1.657 1.657 0 0 0 0-3.314zm-1.657 8.285c0-.915.742-1.657 1.657-1.657h52.4a1.657 1.657 0 0 1 0 3.315h-52.4a1.657 1.657 0 0 1-1.657-1.658'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailHeroMediaSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 67'>\n <path\n d='M0 2.192C0 .982.981 0 2.192 0h112.616C116.019 0 117 .981 117 2.192v62.473c0 1.21-.981 2.192-2.192 2.192H2.192A2.19 2.19 0 0 1 0 64.665z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport {\n getPartnerWidgetItemProps,\n RectangularLogoWidgetItem\n} from 'libs/shared/components/widgets/items/rectangular-logo-widget-item/RectangularLogoWidgetItem';\nimport { PartnerProfile } from 'libs/shared/interfaces';\n\nexport interface RectangularLogoFixedListWidgetTemplateProps {\n name: string;\n description?: string;\n badgeComponent?: JSX.Element;\n content: PartnerProfile[];\n appLinks: {\n partner: (partnerProfile: PartnerProfile) => Core.AppLink\n };\n seeMoreLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function RectangularLogoFixedListWidgetTemplate(\n props: RectangularLogoFixedListWidgetTemplateProps\n): JSX.Element {\n return (\n <>\n <WidgetHeader\n name={props.name}\n description={props.description}\n badgeComponent={props.badgeComponent}\n appLink={props.seeMoreLink}\n showSeeMoreLink={!!props.seeMoreLink}\n />\n <Row as='ul' className='list-unstyled mx-n1 mb-n1 row-gap-3'>\n {props.content.map((c, idx) => {\n const widgetProps = getPartnerWidgetItemProps({\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions,\n partner: c,\n appLink: props.appLinks.partner(c)\n });\n\n return <RectangularLogoWidgetItem key={idx} {...widgetProps} />;\n })}\n </Row>\n </>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateAuthorReviewerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M55.055.922H1.462C.654.922 0 1.588 0 2.41v29.745c0 .822.654 1.488 1.462 1.488h53.593c.807 0 1.462-.666 1.462-1.488V2.41c0-.822-.655-1.488-1.462-1.488M.975 32.155V2.41c0-.274.218-.496.487-.496h53.593c.27 0 .487.222.487.496v29.745a.49.49 0 0 1-.487.496H1.462a.49.49 0 0 1-.488-.496m10.23-14.873c2.692 0 4.873-2.22 4.873-4.957 0-2.738-2.181-4.958-4.872-4.958s-4.872 2.22-4.872 4.958 2.181 4.958 4.872 4.958m11.408-6.742c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19H39.75c.649 0 1.175-.533 1.175-1.19v-.595c0-.657-.526-1.19-1.175-1.19zM7.509 22.934c-.65 0-1.175.533-1.175 1.19v.595c0 .657.526 1.19 1.175 1.19h42.473c.65 0 1.176-.533 1.176-1.19v-.595c0-.657-.527-1.19-1.176-1.19zM115.513.922H60.979c-.822 0-1.487.666-1.487 1.488v29.745c0 .822.666 1.488 1.487 1.488h54.534c.821 0 1.487-.666 1.487-1.488V2.41c0-.822-.666-1.488-1.487-1.488m-55.03 31.233V2.41c0-.274.222-.496.496-.496h54.534c.273 0 .495.222.495.496v29.745a.496.496 0 0 1-.495.496H60.979a.496.496 0 0 1-.496-.496m10.411-14.873a4.958 4.958 0 1 0 0-9.915 4.958 4.958 0 0 0 0 9.915m11.607-6.742c-.66 0-1.196.533-1.196 1.19v.595c0 .657.535 1.19 1.196 1.19H99.94c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19zM67.132 22.934c-.66 0-1.196.533-1.196 1.19v.595c0 .657.536 1.19 1.196 1.19h43.219c.66 0 1.196-.533 1.196-1.19v-.595c0-.657-.536-1.19-1.196-1.19z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCircleLogoSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 2C0 .895.844 0 1.886 0h43.228C46.156 0 47 .895 47 2v1c0 1.105-.844 2-1.886 2H1.886C.844 5 0 4.105 0 3zm11.524 14.238a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M20.429 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m21.476-5.762a5.762 5.762 0 1 1-11.524 0 5.762 5.762 0 0 1 11.524 0M50.809 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.43-5.762a5.762 5.762 0 1 1-11.525 0 5.762 5.762 0 0 1 11.524 0M80.142 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524m20.428-5.762a5.762 5.762 0 1 1-11.523 0 5.762 5.762 0 0 1 11.523 0M110.524 22a5.762 5.762 0 1 0 0-11.524 5.762 5.762 0 0 0 0 11.524'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverFixedTileListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 57'>\n <path\n d='M0 2.543A2.543 2.543 0 0 1 2.543 0H47.31a2.544 2.544 0 0 1 0 5.087H2.543A2.543 2.543 0 0 1 0 2.543m47.817 8.14c0-.281.228-.51.51-.51h20.347c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H48.327a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zm69.69.51c0-.281.228-.51.51-.51h21.364a.51.51 0 0 1 .509.51v21.365a.51.51 0 0 1-.509.508H95.126a.51.51 0 0 1-.509-.508zm-22.89-.51a.51.51 0 0 0-.51.51v21.365c0 .28.228.508.51.508h20.347a.51.51 0 0 0 .509-.508V10.683a.51.51 0 0 0-.51-.51zM0 10.684c0-.281.228-.51.509-.51h21.365c.28 0 .509.229.509.51v21.365a.51.51 0 0 1-.51.508H.51A.51.51 0 0 1 0 32.048zM48.326 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.51.509h20.347a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509zm-23.909.51c0-.282.228-.51.51-.51h20.347c.28 0 .509.228.509.51v21.364a.51.51 0 0 1-.51.509H24.927a.51.51 0 0 1-.509-.509zM.51 34.59a.51.51 0 0 0-.509.51v21.364c0 .281.228.509.509.509h21.365a.51.51 0 0 0 .509-.509V35.1a.51.51 0 0 0-.51-.509z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateCoverSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M0 2a2 2 0 0 1 2-2h45.755a2 2 0 0 1 2 2v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm27.432 7H1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h26.432a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H10.154v-9h17.278a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m60.91-8.5a1 1 0 0 0-1-1h-22.37a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h22.37a1 1 0 0 0 1-1zm-1 8.5H74.124v-9h13.216a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5M60.94 9H31.462a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1H60.94a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1m0 9.5H40.617v-9H60.94a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5m55.833-8.5a1 1 0 0 0-1-1h-24.4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h24.4a1 1 0 0 0 1-1zm-1 8.5h-15.247v-9h15.247a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEditableCoverFixedPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 40'>\n <path\n d='M.976 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H.976C.437 12 0 11.463 0 10.8V1.2C0 .537.437 0 .976 0m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H9.911zM30.726 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H39.661zM86.274 0H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2V1.2c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 0h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2V1.2c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6V1.2c0-.331-.218-.6-.488-.6H99.161zM26.774 14H.976C.437 14 0 14.537 0 15.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661zM86.274 14H60.476c-.539 0-.976.537-.976 1.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H69.411V14.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.219.6-.488.6M90.226 14h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H90.226c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H99.161zM26.774 28H.976C.437 28 0 28.537 0 29.2v9.6c0 .663.437 1.2.976 1.2h25.798c.539 0 .976-.537.976-1.2v-9.6c0-.663-.437-1.2-.976-1.2m0 11.4H9.911V28.6h16.863c.27 0 .488.269.488.6v9.6c0 .331-.218.6-.488.6M30.726 28h25.798c.539 0 .976.537.976 1.2v9.6c0 .663-.437 1.2-.976 1.2H30.726c-.539 0-.976-.537-.976-1.2v-9.6c0-.663.437-1.2.976-1.2m8.935 11.4h16.863c.27 0 .488-.269.488-.6v-9.6c0-.331-.218-.6-.488-.6H39.661z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateEventIconSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44.852a2.5 2.5 0 0 0 0-5zm46.317 31h20V11h-20zm-1-20.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM57.1 24.701h.136q.944 0 1.573-.246.634-.253 1.011-.697t.54-1.046q.117-.426.15-.903l-.013.014q-.375.41-.882.657a2.4 2.4 0 0 1-1.087.246q-.71 0-1.258-.267a2.64 2.64 0 0 1-.902-.738 3.3 3.3 0 0 1-.533-1.067 4.4 4.4 0 0 1-.178-1.264q0-.718.219-1.347.219-.63.636-1.107a2.86 2.86 0 0 1 1.011-.752 3.25 3.25 0 0 1 1.36-.274q.808 0 1.416.315t1.025.868q.417.553.63 1.285.21.732.211 1.572v.581q0 .883-.157 1.702a5.7 5.7 0 0 1-.513 1.511q-.348.69-.923 1.217a4 4 0 0 1-1.394.813q-.82.288-1.928.287h-.15zm3.424-5.01v.658q-.135.305-.369.551-.24.253-.56.404a1.7 1.7 0 0 1-.704.143q-.404 0-.704-.17a1.5 1.5 0 0 1-.5-.466 2.2 2.2 0 0 1-.3-.67 3.3 3.3 0 0 1-.096-.792q0-.439.103-.82.11-.39.307-.677a1.5 1.5 0 0 1 .5-.458q.3-.171.676-.171.342 0 .636.157.3.157.526.472.232.307.355.772.13.457.13 1.066M24.917 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM95 10.5a.5.5 0 0 1 .5-.5h21a.5.5 0 0 1 .5.5v21a.5.5 0 0 1-.5.5h-21a.5.5 0 0 1-.5-.5zM71.717 10a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zM1 11h20v20H1zm-.5-1a.5.5 0 0 0-.5.5v21a.5.5 0 0 0 .5.5h21a.5.5 0 0 0 .5-.5v-21a.5.5 0 0 0-.5-.5zm13.884 6.95v-.903H7.486v1.312h5.155L8.669 26h1.736z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFeaturedThumbnailSlidingListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 27'>\n <path\n d='M5 0a5 5 0 0 0-5 5 4 4 0 0 0 4 4h109a4 4 0 0 0 4-4 5 5 0 0 0-5-5zM0 11.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm30.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29.5.5a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29 0a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateFilterSlidingPillListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 19'>\n <path\n d='M2 0a2 2 0 0 0-2 2v1a2 2 0 0 0 2 2h45.755a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H61a1 1 0 0 1-1-1zM31 9a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h25a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1zm59 1a1 1 0 0 1 1-1h25a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H91a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeadingSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 117 25'>\n <path\n d='M4.77.78h48.839a4.5 4.5 0 1 1 0 9H4.769a4.5 4.5 0 1 1 0-9M.27 16.479c0 .914.74 1.655 1.655 1.655h112.932a1.655 1.655 0 0 0 0-3.31H1.925c-.915 0-1.655.741-1.655 1.655m0 6c0-.914.74-1.655 1.655-1.655h112.932a1.655 1.655 0 0 1 0 3.31H1.925A1.655 1.655 0 0 1 .27 22.478'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 10'>\n <path\n d='M0 .391C0 .175.38 0 .847 0h115.306c.468 0 .847.175.847.391V9.61c0 .216-.379.391-.847.391H.847C.38 10 0 9.825 0 9.609z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBannerSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M0 .847C0 .38.38 0 .847 0h115.306c.468 0 .847.38.847.847v19.95a.847.847 0 0 1-.847.848H.847A.847.847 0 0 1 0 20.798z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroBlockColourSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.143c-.29 0-.576.053-.809.16C.848.391.5.613.5 1.034v9.217c0 .42.348.643.538.731.233.107.52.16.81.16h115.305c.289 0 .576-.053.809-.16.19-.088.538-.31.538-.73V1.033c0-.42-.348-.643-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.09V1.194c.079-.027.199-.051.347-.051H117.5v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateHeroThumbnailSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 12'>\n <path\n fill='currentColor'\n d='M1.847.5c-.29 0-.576.053-.809.16C.848.75.5.972.5 1.392v9.218c0 .42.348.642.538.73.233.108.52.161.81.161h115.305c.289 0 .576-.053.809-.16.19-.089.538-.311.538-.731V1.39c0-.42-.348-.642-.538-.73a2 2 0 0 0-.809-.161zM1.5 10.448V1.552c.079-.028.199-.052.347-.052H82v9H1.847c-.148 0-.268-.024-.347-.052'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 38'>\n <path\n d='M0 2.688a2.5 2.5 0 0 1 2.5-2.5h45.733a2.5 2.5 0 0 1 0 5H2.5a2.5 2.5 0 0 1-2.5-2.5m79.427 8a.5.5 0 0 1 .5-.5H116.5a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H79.927a.5.5 0 0 1-.5-.5zm-39.714 0a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM0 10.688a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5V30.64a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zm.028 24.466a2 2 0 0 1 2-2h24.497a2 2 0 0 1 0 4H2.028a2 2 0 0 1-2-2m39.75 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H41.78a2 2 0 0 1-2-2m39.61 0a2 2 0 0 1 2-2h24.498a2 2 0 1 1 0 4H81.389a2 2 0 0 1-2-2'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplatePopoutThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 32'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h44a2.5 2.5 0 0 0 0-5zm58 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h26a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm29 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-30 0a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zM0 30c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H1.404C.628 32 0 31.105 0 30m89 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H90.404C89.628 32 89 31.105 89 30m-29 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H61.404C60.628 32 60 31.105 60 30m-30 0c0-1.105.628-2 1.404-2h17.192c.776 0 1.404.895 1.404 2s-.628 2-1.404 2H31.404C30.628 32 30 31.105 30 30'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionAccordionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 34'>\n <path\n fill='currentColor'\n d='M1.655 0h22.932a1.655 1.655 0 0 1 0 3.31H1.656a1.655 1.655 0 0 1 0-3.31M116 10V6H1v4zM1 11a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1zm0 14.31v-11h115v11zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-11a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3.833-9.477H2.167a.166.166 0 1 0 0 .333h1.666A.17.17 0 0 0 4 16l-.001-.02a.17.17 0 0 0-.166-.147M1 33v-4h115v4zm-1 0a1 1 0 0 0 1 1h115a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1zm3-3c.092 0 .167.076.167.167v.666h.666c.086 0 .156.064.166.147L4 31a.17.17 0 0 1-.167.167h-.666v.666a.17.17 0 0 1-.147.166L3 32a.17.17 0 0 1-.167-.167v-.666h-.666a.166.166 0 1 1 0-.334h.666v-.666c0-.092.074-.167.167-.167m.167-22.833a.166.166 0 1 0-.333 0v.666h-.667a.166.166 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666A.17.17 0 0 0 4 8l-.001-.02a.17.17 0 0 0-.166-.147h-.666z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateQuestionSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 20'>\n <path\n fill='currentColor'\n d='M24.588 1.285H1.654a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31M1 7.595v11h115v-11zm0 12a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1h115a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1zm113.167-10.5a.17.17 0 0 0-.167-.167.167.167 0 0 0-.167.167v.666h-.666a.167.167 0 1 0 0 .333h.666v.667c0 .091.075.167.167.167l.02-.001a.17.17 0 0 0 .147-.166v-.666h.666a.17.17 0 0 0 .167-.167l-.001-.02a.17.17 0 0 0-.166-.147h-.666zm-109.501.19c-.92 0-1.666.672-1.666 1.5 0 .829.746 1.5 1.666 1.5h52.668c.92 0 1.666-.671 1.666-1.5 0-.828-.746-1.5-1.666-1.5z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateRectangularLogoSlidingListSvg() {\n return (\n <svg viewBox='0 0 117 23'>\n <path d='M2.5 0C1.11929 0 0 1.11929 0 2.5C0 3.88071 1.11929 5 2.5 5H46.5C47.8807 5 49 3.88071 49 2.5C49 1.11929 47.8807 0 46.5 0H2.5Z' fill='#D7D7D7'/>\n <path d='M0 2.5C0 1.11929 1.11929 0 2.5 0H46.5C47.8807 0 49 1.11929 49 2.5C49 3.88071 47.8807 5 46.5 5H2.5C1.11929 5 0 3.88071 0 2.5Z' fill='#D7D7D7'/>\n <path d='M0 10.9334C0 10.4968 0.353937 10.1428 0.790541 10.1428H21.3446C21.7812 10.1428 22.1351 10.4968 22.1351 10.9334V22.0009C22.1351 22.4375 21.7812 22.7915 21.3446 22.7915H0.79054C0.353937 22.7915 0 22.4375 0 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M23.7162 10.9334C23.7162 10.4968 24.0702 10.1428 24.5068 10.1428H45.0608C45.4974 10.1428 45.8514 10.4968 45.8514 10.9334V22.0009C45.8514 22.4375 45.4974 22.7915 45.0608 22.7915H24.5068C24.0702 22.7915 23.7162 22.4375 23.7162 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M47.4324 10.9334C47.4324 10.4968 47.7864 10.1428 48.223 10.1428H68.777C69.2136 10.1428 69.5676 10.4968 69.5676 10.9334V22.0009C69.5676 22.4375 69.2136 22.7915 68.777 22.7915H48.223C47.7864 22.7915 47.4324 22.4375 47.4324 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M71.1487 10.9334C71.1487 10.4968 71.5026 10.1428 71.9392 10.1428H92.4933C92.9299 10.1428 93.2838 10.4968 93.2838 10.9334V22.0009C93.2838 22.4375 92.9299 22.7915 92.4933 22.7915H71.9392C71.5026 22.7915 71.1487 22.4375 71.1487 22.0009V10.9334Z' fill='#D7D7D7'/>\n <path d='M94.8648 10.9334C94.8648 10.4968 95.2188 10.1428 95.6554 10.1428H116.209C116.646 10.1428 117 10.4968 117 10.9334V22.0009C117 22.4375 116.646 22.7915 116.209 22.7915H95.6554C95.2188 22.7915 94.8648 22.4375 94.8648 22.0009V10.9334Z' fill='#D7D7D7'/>\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 22'>\n <path\n d='M.413 0C.185 0 0 .385 0 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861C57 .385 56.815 0 56.587 0zm60 0C60.185 0 60 .385 60 .861v20.278c0 .476.185.861.413.861h56.174c.228 0 .413-.386.413-.861V.861c0-.476-.185-.861-.413-.861z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListMediaLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 43'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zM0 11.119a1 1 0 0 1 1-1h55.498a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm59.502 0a1 1 0 0 1 1-1H116a1 1 0 0 1 1 1V41.82a1 1 0 0 1-1 1H60.502a1 1 0 0 1-1-1z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 30'>\n <path\n d='M.268 0C.12 0 0 .245 0 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C37 .245 36.88 0 36.732 0zm40 0C40.12 0 40 .245 40 .548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V.548C77 .245 76.88 0 76.732 0zM80 .548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H80.268c-.148 0-.268-.245-.268-.548zM.268 16C.12 16 0 16.245 0 16.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548zM40 16.548c0-.303.12-.548.268-.548h36.464c.148 0 .268.245.268.548v12.904c0 .303-.12.548-.268.548H40.268c-.148 0-.268-.245-.268-.548zM80.268 16c-.148 0-.268.245-.268.548v12.904c0 .303.12.548.268.548h36.464c.148 0 .268-.245.268-.548V16.548c0-.303-.12-.548-.268-.548z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailFixedListXLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 119 24'>\n <path\n fill='currentColor'\n d='M1.847.5C1.103.5.5 1.103.5 1.847v19.95c0 .745.603 1.348 1.347 1.348h115.306c.744 0 1.347-.603 1.347-1.347V1.848c0-.745-.603-1.348-1.347-1.348zM1.5 1.847c0-.192.155-.347.347-.347h76.18Q78 1.666 78 1.861v20.284H1.847a.347.347 0 0 1-.347-.347z'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListLargeSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 31'>\n <path\n d='M2.5 0a2.5 2.5 0 0 0 0 5h45.733a2.5 2.5 0 0 0 0-5zm77.427 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5H116.5a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5zm-40.214.5a.5.5 0 0 1 .5-.5h36.573a.5.5 0 0 1 .5.5v19.953a.5.5 0 0 1-.5.5H40.213a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v19.953a.5.5 0 0 0 .5.5h36.573a.5.5 0 0 0 .5-.5V10.5a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailSlidingListSmallSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 26'>\n <path\n d='M0 2.5A2.5 2.5 0 0 1 2.5 0h44a2.5 2.5 0 0 1 0 5h-44A2.5 2.5 0 0 1 0 2.5m60 8a.5.5 0 0 1 .5-.5h26a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-26a.5.5 0 0 1-.5-.5zm29.5-.5a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm-59.5.5a.5.5 0 0 1 .5-.5h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5h-27a.5.5 0 0 1-.5-.5zM.5 10a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function WidgetTemplateThumbnailVerticalListSvg(\n props: React.SVGProps<SVGSVGElement>\n) {\n return (\n <svg {...props} viewBox='0 0 117 36'>\n <path\n fill='currentColor'\n d='M0 .5A.5.5 0 0 1 .5 0h27a.5.5 0 0 1 .5.5v15a.5.5 0 0 1-.5.5H.5a.5.5 0 0 1-.5-.5zM31.913 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31zM.5 20a.5.5 0 0 0-.5.5v15a.5.5 0 0 0 .5.5h27a.5.5 0 0 0 .5-.5v-15a.5.5 0 0 0-.5-.5zm31.413 0a1.655 1.655 0 0 0 0 3.31h22.932a1.655 1.655 0 0 0 0-3.31zm-1.655 7.655c0-.914.74-1.655 1.655-1.655h82.932a1.655 1.655 0 0 1 0 3.31H31.913a1.655 1.655 0 0 1-1.655-1.655m1.655 4.535a1.655 1.655 0 0 0 0 3.31h62.932a1.655 1.655 0 0 0 0-3.31z'\n />\n </svg>\n );\n}\n","import { ThumbnailFixedListSearchCtaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/all-videos-list/ThumbnailFixedListSearchCtaWidgetTemplate';\nimport { AuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/AuthorReviewerWidgetTemplate';\nimport { PartialAuthorReviewerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/author-reviewer/partial-loading/PartialAuthorReviewerWidgetTemplate';\nimport { CircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/CircleLogoSlidingListWidgetTemplate';\nimport { PartialCircleLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/circle-logo-sliding-list/partial-loading/PartialCircleLogoSlidingList';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/partial-loading/PartialCoverFixedPillListLargeWidgetTemplate';\nimport { CoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/CoverFixedPillListXSmallWidgetTemplate';\nimport { PartialCoverFixedPillListXSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-xsmall/partial-loading/PartialCoverFixedPillListXSmallWidgetTemplate';\nimport { CoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/CoverFixedTileListWidgetTemplate';\nimport { PartialCoverFixedTileListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-tile-list/partial-loading/PartialCoverFixedTileListWidgetTemplate';\nimport { CoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/CoverSlidingPillListSmallWidgetTemplate';\nimport { PartialCoverSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-sliding-pill-list-small/partial-loading/PartialCoverSlidingPillListSmallWidgetTemplate';\nimport { CurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/CurriculumCodeSearchResultsWidgetTemplate';\nimport { PartialCurriculumCodeSearchResultsWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-code-search-results/partial/PartialCurriculumCodeSearchResultsWidgetTemplate';\nimport { CurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/CurriculumResourcesAccordionWidgetTemplate';\nimport { PartialCurriculumResourcesAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/curriculum-resources-accordion/partial-loading/PartialCurriculumResourcesAccordionWidgetTemplate';\nimport { EditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/EditableCoverFixedPillListSmallWidgetTemplate';\nimport { PartialEditableCoverFixedPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/editable-cover-fixed-pill-list-small/partial-loading/PartialEditableCoverFixedPillListSmallWidgetTemplate';\nimport { EventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/EventIconSlidingListWidgetTemplate';\nimport { PartialEventIconSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/event-icon-sliding-list/partial-loading/PartialEventIconSlidingListWidgetTemplate';\nimport { FeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/FeaturedThumbnailSlidingListWidgetTemplate';\nimport { PartialFeaturedThumbnailSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/featured-thumbnail-sliding-list/partial-loading/PartialFeaturedThumbnailSlidingListWidgetTemplate';\nimport { FilterSlidingPillListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/FilterSlidingPillListSmallWidgetTemplate';\nimport { PartialFilterSlidingPillListSmall } from 'libs/shared/components/widgets/curated-widgets/templates/filter-sliding-pill-list-small/partial-loading/PartialFilterSlidingPillListSmall';\nimport { HeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/HeadingWidgetTemplate';\nimport { PartialHeadingWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/heading/partial-loading/PartialHeadingWidgetTemplate';\nimport { HeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/HeroBannerWidgetTemplate';\nimport { PartialHeroBannerWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner/partial-loading/PartialHeroBannerWidgetTemplate';\nimport { HeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/HeroBannerSmallWidgetTemplate';\nimport { PartialHeroBannerSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-banner-small/partial-loading/PartialHeroBannerSmallWidgetTemplate';\nimport { HeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/HeroBlockColourSmallWidgetTemplate';\nimport { PartialHeroBlockColourSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-block-colour-small/partial-loading/PartialHeroBlockColourSmallWidgetTemplate';\nimport { HeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/HeroThumbnailSmallWidgetTemplate';\nimport { PartialHeroThumbnailSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/hero-thumbnail-small/partial-loading/PartialHeroThumbnailSmallWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/partial-loading/PartialPopoutThumbnailSlidingListLarge';\nimport { PopoutThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_large/PopoutThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialPopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/partial-loading/PartialPopoutThumbnailSlidingListSmall';\nimport { PopoutThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/popout_thumbnail_sliding_list_small/PopoutThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialPosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/partial-loading/PartialPosterFixedListLargeWidgetTemplate';\nimport { PosterFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-fixed-list-large/PosterFixedListLargeWidgetTemplate';\nimport { PartialPosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/partial-loading/PartialPosterSlidingListLargeWidgetTemplate';\nimport { PosterSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-large/PosterSlidingListLargeWidgetTemplate';\nimport { PartialPosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/partial-loading/PartialPosterSlidingListMediumWidgetTemplate';\nimport { PosterSlidingListMediumWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-medium/PosterSlidingListMediumWidgetTemplate';\nimport { ClassificationPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/classification/ClassificationPosterSlidingListSmallWidgetTemplate';\nimport { PartialPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/partial-loading/PartialPosterSlidingListSmallWidgetTemplate';\nimport { SeriesPosterSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/poster-sliding-list-small/series/SeriesPosterSlidingListSmallWidgetTemplate';\nimport { PartialQuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/partial-loading/PartialQuestionWidgetTemplate';\nimport { QuestionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question/QuestionWidgetTemplate';\nimport { PartialQuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/partial-loading/PartialQuestionAccordionWidgetTemplate';\nimport { QuestionAccordionWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/question-accordion/QuestionAccordionWidgetTemplate';\nimport { PartialRectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/partial-loading/PartialRectangularLogoSlidingList';\nimport { RectangularLogoSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/rectangular-logo-sliding-list/RectangularLogoSlidingListWidgetTemplate';\nimport { PartialSearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/partial-loading/PartialSearchSuggestionsBlurbWidgetTemplate';\nimport { SearchSuggestionsBlurbWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/search-suggestions-blurb/SearchSuggestionsBlurbWidgetTemplate';\nimport { PartialStatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/partial-loading/PartialStatsCoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialTagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/partial-loading/PartialTagSlidingListWidgetTemplate';\nimport { TagSlidingListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/tag-sliding-list/TagSlidingListWidgetTemplate';\nimport { PartialThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/partial-loading/PartialThumbnailFeaturedMediaWidgetTemplate';\nimport { ThumbnailFeaturedMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-featured-media/ThumbnailFeaturedMediaWidgetTemplate';\nimport { PartialThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/partial-loading/PartialThumbnailFixedListFolderSmallWidgetTemplate';\nimport { ThumbnailFixedListFolderSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-folder-small/ThumbnailFixedListFolderSmallWidgetTemplate';\nimport { PartialThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/partial-loading/PartialThumbnailFixedListLargeWidgetTemplate';\nimport { ThumbnailFixedListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-large/ThumbnailFixedListLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/partial-loading/PartialThumbnailFixedListMediaLargeWidgetTemplate';\nimport { ThumbnailFixedListMediaLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-large/ThumbnailFixedListMediaLargeWidgetTemplate';\nimport { PartialThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/partial-loading/PartialThumbnailFixedListMediaSmallWidgetTemplate';\nimport { ThumbnailFixedListMediaSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-media-small/ThumbnailFixedListMediaSmallWidgetTemplate';\nimport { PartialThumbnailFixedSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/partial-loading/PartialThumbnailFixedListSmallWidgetTemplate';\nimport { ThumbnailFixedListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-small/ThumbnailFixedListSmallWidgetTemplate';\nimport { PartialThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/partial-loading/PartialThumbnailFixedListXLargeWidgetTemplate';\nimport { ThumbnailFixedListXLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-fixed-list-xlarge/ThumbnailFixedListXLargeWidgetTemplate';\nimport { PartialThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/partial-loading/PartialThumbnailHeroMediaWidgetTemplate';\nimport { ThumbnailHeroMediaWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-hero-media/ThumbnailHeroMediaWidgetTemplate';\nimport { PartialThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/partial-loading/PartialThumbnailSlidingListLargeWidgetTemplate';\nimport { ThumbnailSlidingListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-large/ThumbnailSlidingListLargeWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/partial-loading/PartialThumbnailSlidingListSmallWidgetTemplate';\nimport { ThumbnailSlidingListSmallWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small/ThumbnailSlidingListSmallWidgetTemplate';\nimport { PartialThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/partial-loading/PartialThumbnailSlidingListSmallV2WidgetTemplate';\nimport { ThumbnailSlidingListSmallV2WidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-sliding-list-small_v2/ThumbnailSlidingListSmallV2WidgetTemplate';\nimport { PartialThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/partial-loading/PartialThumbnailVerticalListWidgetTemplate';\nimport { ThumbnailVerticalListWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/thumbnail-vertical-list/ThumbnailVerticalListWidgetTemplate';\nimport { AnyWidgetTemplateProps, PartialWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WidgetTemplateCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListLargeSvg';\nimport { WidgetTemplateCoverFixedPillListXSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateCoverFixedPillListXsmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg';\nimport { WidgetTemplatePosterSlidingListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListLargeSvg';\nimport { WidgetTemplatePosterSlidingListMediumSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListMediumSvg';\nimport { WidgetTemplatePosterSlidingListSmallSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplatePosterSlidingListSmallSvg';\nimport { WidgetTemplateStatsCoverFixedPillListLargeSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateStatsCoverFixedPillListLargeSvg';\nimport { WidgetTemplateThumbnailFeaturedMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailFeaturedMediaSvg';\nimport { WidgetTemplateThumbnailHeroMediaSvg } from 'libs/shared/images/svg/widgets/templates/WidgetTemplateThumbnailHeroMediaSvg';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { RectangularLogoFixedListWidgetTemplate } from '../components/widgets/curated-widgets/templates/rectangular-logo-fixed-list/RectangularLogoFixedListWidgetTemplate';\nimport { WidgetTemplateAuthorReviewerSvg } from '../images/svg/widgets/templates/WidgetTemplateAuthorReviewerSvg';\nimport { WidgetTemplateCircleLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateCircleLogoSlidingListSvg';\nimport { WidgetTemplateCoverFixedTileListSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverFixedTileListSvg';\nimport { WidgetTemplateCoverSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateCoverSlidingPillListSmallSvg';\nimport { WidgetTemplateEditableCoverFixedPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateEditableCoverFixedPillListSmallSvg';\nimport { WidgetTemplateEventIconSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateEventIconSlidingListSvg';\nimport { WidgetTemplateFeaturedThumbnailSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateFeaturedThumbnailSlidingListSvg';\nimport { WidgetTemplateFilterSlidingPillListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateFilterSlidingPillListSmallSvg';\nimport { WidgetTemplateHeadingSvg } from '../images/svg/widgets/templates/WidgetTemplateHeadingSvg';\nimport { WidgetTemplateHeroBannerSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSmallSvg';\nimport { WidgetTemplateHeroBannerSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBannerSvg';\nimport { WidgetTemplateHeroBlockColourSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroBlockColourSmallSvg';\nimport { WidgetTemplateHeroThumbnailSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateHeroThumbnailSmallSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListLargeSvg';\nimport { WidgetTemplatePopoutThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplatePopoutThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateQuestionAccordionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionAccordionSvg';\nimport { WidgetTemplateQuestionSvg } from '../images/svg/widgets/templates/WidgetTemplateQuestionSvg';\nimport { WidgetTemplateRectangularLogoSlidingListSvg } from '../images/svg/widgets/templates/WidgetTemplateRectangularLogoSlidingListSvg';\nimport { WidgetTemplateThumbnailFixedListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListLargeSvg';\nimport { WidgetTemplateThumbnailFixedListMediaLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListMediaLargeSvg';\nimport { WidgetTemplateThumbnailFixedListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListSmallSvg';\nimport { WidgetTemplateThumbnailFixedListXLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailFixedListXlargeSvg';\nimport { WidgetTemplateThumbnailSlidingListLargeSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListLargeSvg';\nimport { WidgetTemplateThumbnailSlidingListSmallSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailSlidingListSmallSvg';\nimport { WidgetTemplateThumbnailVerticalListSvg } from '../images/svg/widgets/templates/WidgetTemplateThumbnailVerticalListSvg';\n\ninterface PredicateOptions {\n targetType: DashboardTargetType;\n product: ProductId;\n widgetTypeId: WidgetTypeId;\n isTopLevelClassification?: boolean;\n}\n\ninterface WidgetTemplateConfigType {\n getComponent: (widgetId: WidgetTypeId) => ((props: AnyWidgetTemplateProps) => JSX.Element);\n partialLoading: (props: PartialWidgetTemplateProps) => JSX.Element;\n icon: SvgIcon;\n predicate: (options: PredicateOptions) => boolean;\n className: string;\n displayName?: string;\n}\n\nexport const WidgetTemplateConfig: Record<WidgetTemplate, WidgetTemplateConfigType> = {\n [WidgetTemplate.ThumbnailHeroMedia]: {\n getComponent: () => ThumbnailHeroMediaWidgetTemplate,\n partialLoading: PartialThumbnailHeroMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailHeroMediaSvg,\n predicate: ({ targetType }) => {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListLarge]: {\n getComponent: () => PosterSlidingListLargeWidgetTemplate,\n partialLoading: PartialPosterSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListMedium]: {\n getComponent: () => PosterSlidingListMediumWidgetTemplate,\n partialLoading: PartialPosterSlidingListMediumWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListMediumSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PosterSlidingListSmall]: {\n getComponent: widgetId => {\n switch (widgetId) {\n case WidgetTypeId.CuratedClassifications:\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n case WidgetTypeId.CuratedSeries:\n return SeriesPosterSlidingListSmallWidgetTemplate;\n default:\n // fall back to ClassificationPosterSlidingListSmallWidgetTemplate\n return ClassificationPosterSlidingListSmallWidgetTemplate;\n }\n },\n partialLoading: PartialPosterSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePosterSlidingListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n switch (widgetTypeId) {\n case WidgetTypeId.CuratedClassifications: {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n }\n case WidgetTypeId.CuratedSeries: {\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n }\n default: {\n return false;\n }\n }\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFeaturedMedia]: {\n getComponent: () => ThumbnailFeaturedMediaWidgetTemplate,\n partialLoading: PartialThumbnailFeaturedMediaWidgetTemplate,\n icon: WidgetTemplateThumbnailFeaturedMediaSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListLarge]: {\n getComponent: () => CoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.StatsCoverFixedPillListLarge]: {\n getComponent: () => StatsCoverFixedPillListLargeWidgetTemplate,\n partialLoading: PartialStatsCoverFixedPillListLargeWidgetTemplate,\n icon: WidgetTemplateStatsCoverFixedPillListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedPillListXSmall]: {\n getComponent: () => CoverFixedPillListXSmallWidgetTemplate,\n partialLoading: PartialCoverFixedPillListXSmallWidgetTemplate,\n icon: WidgetTemplateCoverFixedPillListXSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverSlidingPillListSmall]: {\n getComponent: () => CoverSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialCoverSlidingPillListSmallWidgetTemplate,\n icon: WidgetTemplateCoverSlidingPillListSmallSvg,\n predicate: ({ targetType, widgetTypeId, product }) => {\n if (product === ProductId.StreamableLearning) {\n if (widgetTypeId === WidgetTypeId.Classifications) return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.Classification\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CoverFixedTileList]: {\n getComponent: () => CoverFixedTileListWidgetTemplate,\n partialLoading: PartialCoverFixedTileListWidgetTemplate,\n icon: WidgetTemplateCoverFixedTileListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FeaturedThumbnailSlidingList]: {\n getComponent: () => FeaturedThumbnailSlidingListWidgetTemplate,\n partialLoading: PartialFeaturedThumbnailSlidingListWidgetTemplate,\n icon: WidgetTemplateFeaturedThumbnailSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBanner]: {\n getComponent: () => HeroBannerWidgetTemplate,\n partialLoading: PartialHeroBannerWidgetTemplate,\n icon: WidgetTemplateHeroBannerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBannerSmall]: {\n getComponent: () => HeroBannerSmallWidgetTemplate,\n partialLoading: PartialHeroBannerSmallWidgetTemplate,\n icon: WidgetTemplateHeroBannerSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroThumbnailSmall]: {\n getComponent: () => HeroThumbnailSmallWidgetTemplate,\n partialLoading: PartialHeroThumbnailSmallWidgetTemplate,\n icon: WidgetTemplateHeroThumbnailSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.HeroBlockColourSmall]: {\n getComponent: () => HeroBlockColourSmallWidgetTemplate,\n partialLoading: PartialHeroBlockColourSmallWidgetTemplate,\n icon: WidgetTemplateHeroBlockColourSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListXLarge]: {\n getComponent: () => ThumbnailFixedListXLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListXLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListXLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListLarge]: {\n getComponent: () => ThumbnailFixedListLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSmall]: {\n getComponent: () => ThumbnailFixedListSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EditableCoverFixedPillListSmall]: {\n getComponent: () => EditableCoverFixedPillListSmallWidgetTemplate,\n partialLoading: PartialEditableCoverFixedPillListSmallWidgetTemplate,\n icon: WidgetTemplateEditableCoverFixedPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Heading]: {\n getComponent: () => HeadingWidgetTemplate,\n partialLoading: PartialHeadingWidgetTemplate,\n icon: WidgetTemplateHeadingSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.Discover,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: 'heading-widget-template'\n },\n\n [WidgetTemplate.AuthorReviewer]: {\n getComponent: () => AuthorReviewerWidgetTemplate,\n partialLoading: PartialAuthorReviewerWidgetTemplate,\n icon: WidgetTemplateAuthorReviewerSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.Question]: {\n getComponent: () => QuestionWidgetTemplate,\n partialLoading: PartialQuestionWidgetTemplate,\n icon: WidgetTemplateQuestionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.QuestionAccordion]: {\n getComponent: () => QuestionAccordionWidgetTemplate,\n partialLoading: PartialQuestionAccordionWidgetTemplate,\n icon: WidgetTemplateQuestionAccordionSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListMediaLarge]: {\n getComponent: () => ThumbnailFixedListMediaLargeWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailFixedListMediaLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListLarge]: {\n getComponent: () => PopoutThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListLargeSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile,\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.PopoutThumbnailSlidingListSmall]: {\n getComponent: () => PopoutThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product, isTopLevelClassification }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n if (targetType === DashboardTargetType.Classification)\n return isTopLevelClassification;\n\n return [\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Discover,\n DashboardTargetType.Company,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.FilterSlidingPillListSmall]: {\n getComponent: () => FilterSlidingPillListSmallWidgetTemplate,\n partialLoading: PartialFilterSlidingPillListSmall,\n icon: WidgetTemplateFilterSlidingPillListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CircleLogoSlidingList]: {\n getComponent: () => CircleLogoSlidingListWidgetTemplate,\n partialLoading: PartialCircleLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateCircleLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Company\n ].includes(targetType);\n }\n\n return [\n DashboardTargetType.MoviesAndTv\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoSlidingList]: {\n getComponent: () => RectangularLogoSlidingListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n icon: WidgetTemplateRectangularLogoSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.RectangularLogoFixedList]: {\n getComponent: () => RectangularLogoFixedListWidgetTemplate,\n partialLoading: PartialRectangularLogoSlidingListWidgetTemplate,\n // @partner TODO: Update this\n icon: null,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return false;\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.MoviesAndTv,\n DashboardTargetType.Search,\n DashboardTargetType.DiscoverPartnerProfiles\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.EventIconSlidingList]: {\n getComponent: () => EventIconSlidingListWidgetTemplate,\n partialLoading: PartialEventIconSlidingListWidgetTemplate,\n icon: WidgetTemplateEventIconSlidingListSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning)\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification,\n DashboardTargetType.Company\n ].includes(targetType);\n\n return [\n DashboardTargetType.Discover,\n DashboardTargetType.Classification\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n predicate: ({ targetType, product }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n\n if (!(product === ProductId.StreamableLearning))\n return false;\n\n return [\n DashboardTargetType.Company,\n DashboardTargetType.Classification,\n DashboardTargetType.PartnerProfile\n ].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.InfiniteThumbnailVerticalList]: {\n getComponent: () => ThumbnailVerticalListWidgetTemplate,\n partialLoading: PartialThumbnailVerticalListWidgetTemplate,\n icon: WidgetTemplateThumbnailVerticalListSvg,\n displayName: 'Vertical list with infinite scroll',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailFixedListSearchCta]: {\n getComponent: () => ThumbnailFixedListSearchCtaWidgetTemplate,\n partialLoading: PartialPopoutThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplatePopoutThumbnailSlidingListSmallCtaSvg,\n displayName: 'Fixed List with Search CTA',\n predicate: ({ targetType }) => {\n if (DashboardTargetType.PartnerProfile === targetType)\n return true;\n return false;\n },\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListSmallV2]: {\n getComponent: () => ThumbnailSlidingListSmallV2WidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallV2WidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: ({ targetType, product }) => {\n if (product === ProductId.StreamableLearning) {\n return false;\n }\n\n return [DashboardTargetType.Classification].includes(targetType);\n },\n className: ''\n },\n\n [WidgetTemplate.CurriculumResourcesAccordion]: {\n getComponent: () => CurriculumResourcesAccordionWidgetTemplate,\n partialLoading: PartialCurriculumResourcesAccordionWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * Templates currently specific to Search\n */\n [WidgetTemplate.ThumbnailFixedListMediaSmall]: {\n getComponent: () => ThumbnailFixedListMediaSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListMediaSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'thumbnail-fixed-list-media-small-widget-template'\n },\n\n [WidgetTemplate.ThumbnailFixedListFolderSmall]: {\n getComponent: () => ThumbnailFixedListFolderSmallWidgetTemplate,\n partialLoading: PartialThumbnailFixedListFolderSmallWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n \n [WidgetTemplate.TagSlidingList]: {\n getComponent: () => TagSlidingListWidgetTemplate,\n partialLoading: PartialTagSlidingListWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'tag-sliding-list-widget-template'\n },\n\n [WidgetTemplate.CurriculumCodeSearchResults]: {\n getComponent: () => CurriculumCodeSearchResultsWidgetTemplate,\n partialLoading: PartialCurriculumCodeSearchResultsWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.PosterFixedListLarge]: {\n getComponent: () => PosterFixedListLargeWidgetTemplate,\n partialLoading: PartialPosterFixedListLargeWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: 'poster-fixed-list-large-widget-template'\n },\n\n [WidgetTemplate.SearchSuggestionsBlurb]: {\n getComponent: () => SearchSuggestionsBlurbWidgetTemplate,\n partialLoading: PartialSearchSuggestionsBlurbWidgetTemplate,\n icon: null,\n predicate: () => false,\n className: ''\n },\n\n /**\n * The templates below are currently not in use, but are still supported\n */\n [WidgetTemplate.ThumbnailSlidingListSmall]: {\n getComponent: () => ThumbnailSlidingListSmallWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListSmallWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListSmallSvg,\n predicate: () => false,\n className: ''\n },\n\n [WidgetTemplate.ThumbnailSlidingListLarge]: {\n getComponent: () => ThumbnailSlidingListLargeWidgetTemplate,\n partialLoading: PartialThumbnailSlidingListLargeWidgetTemplate,\n icon: WidgetTemplateThumbnailSlidingListLargeSvg,\n predicate: () => false,\n className: ''\n }\n};\n",":local {\n .anchor {\n scroll-margin-top: 4.18rem;\n }\n\n .widgetHighlight {\n animation: blinker 4s linear 1;\n border-radius: $border-radius-lg;\n position: relative;\n z-index: 1;\n background-color: white;\n }\n\n @keyframes :local(blinker) {\n from {\n box-shadow: 0 0 1.75rem $blue;\n }\n to {\n box-shadow: none;\n }\n }\n}","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnimatedBorder } from 'libs/shared/components/widgets/curated-widgets/components/animated-border/AnimatedBorder';\nimport { AllClassificationWidgetTemplates, AllCompanyWidgetTemplates, AllDiscoverWidgetTemplates, AllMoviesAndTvWidgetTemplates, AllPartnerProfileWidgetTemplates, AllSearchWidgetTemplates, AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplateConfig } from 'libs/shared/constants/WidgetTemplateConfig';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CuratedWidget, CuratedWidgetContent, DashboardTargetType, Video, WidgetMetadata } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-container-view.module.scss';\n\nfunction isEmptyWidget<TContent = CuratedWidgetContent>(widgetTypeId: WidgetTypeId, content: TContent): boolean {\n if (WidgetHelper.hasNoContent(widgetTypeId))\n return false;\n \n if (!content)\n return true;\n\n if (Array.isArray(content) && !content.length)\n return true;\n\n return false;\n}\n\n/**\n * Type mapping from DashboardTargetType to their corresponding Widget Template Props\n * This makes it easy to extract the correct widget template type based on dashboard target\n */\nexport type DashboardTargetToWidgetTemplateMap = {\n [DashboardTargetType.Classification]: AllClassificationWidgetTemplates,\n [DashboardTargetType.Discover]: AllDiscoverWidgetTemplates,\n [DashboardTargetType.Company]: AllCompanyWidgetTemplates,\n [DashboardTargetType.MoviesAndTv]: AllMoviesAndTvWidgetTemplates,\n [DashboardTargetType.Search]: AllSearchWidgetTemplates,\n [DashboardTargetType.PartnerProfile]: AllPartnerProfileWidgetTemplates,\n [DashboardTargetType.DiscoverPartnerProfiles]: AllPartnerProfileWidgetTemplates,\n // Add defaults for other dashboard targets that don't have specific templates\n [DashboardTargetType.ClassificationDirectory]: AllClassificationWidgetTemplates,\n [DashboardTargetType.ClassificationCurriculum]: AllClassificationWidgetTemplates,\n [DashboardTargetType.PartnerProfileHub]: AllPartnerProfileWidgetTemplates\n};\n\n/**\n * Helper type to extract widget template props for a specific dashboard target\n */\nexport type WidgetTemplatePropsForTarget<T extends DashboardTargetType> =\n T extends keyof DashboardTargetToWidgetTemplateMap ?\n DashboardTargetToWidgetTemplateMap[T] :\n AllWidgetTemplateProps;\n\ninterface BaseWidgetContainerViewProps {\n id: string;\n name: string;\n description: string;\n templateId: WidgetTemplate;\n \n /**\n * This is different from `settings` props \n * which is union of all settings used \n * within different widgets. \n */\n settingsHash?: SettingsHash;\n widgetIndex?: number;\n widgetTypeId: WidgetTypeId;\n setIsEmpty?: (id: string, isEmpty: boolean) => void;\n onClickRemoveItem?: (itemId: string, itemName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isEditing?: boolean;\n isScrollToTargetWidget?: boolean;\n headingElementRef?: React.MutableRefObject<Set<Element>>;\n lazyLoad?: boolean;\n metadata: Partial<WidgetMetadata>;\n isPreviewing?: boolean;\n dashboardTarget?: DashboardTargetType;\n className?: string;\n}\n\ntype WidgetContainerViewPropsForTarget<T extends DashboardTargetType> =\n BaseWidgetContainerViewProps &\n Omit<WidgetTemplatePropsForTarget<T>, 'content' | 'metadata'> &\n { widgetCollection?: T };\n\ntype ClassificationWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Classification>;\ntype DiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Discover>;\ntype CompanyWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Company>;\ntype MoviesAndTvWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.MoviesAndTv>;\ntype SearchWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.Search>;\ntype PartnerProfileDashboardWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.PartnerProfile>;\ntype PartnerProfileDiscoverWidgetContainerViewProps =\n WidgetContainerViewPropsForTarget<DashboardTargetType.DiscoverPartnerProfiles>;\n\ntype CuratorWidgetContainerViewProps = Omit<Partial<AllWidgetTemplateProps>, 'content' | 'metadata'> &\n { location: 'curator' };\n\ntype CommonContainerViewProps =\n BaseWidgetContainerViewProps & (\n ClassificationWidgetContainerViewProps |\n DiscoverWidgetContainerViewProps |\n CompanyWidgetContainerViewProps |\n MoviesAndTvWidgetContainerViewProps |\n CuratorWidgetContainerViewProps |\n SearchWidgetContainerViewProps |\n PartnerProfileDashboardWidgetContainerViewProps |\n PartnerProfileDiscoverWidgetContainerViewProps\n );\n\ntype PropsWithFetch = CommonContainerViewProps & {\n getContentRequest: (id: string, widgetTypeId: WidgetTypeId, templateId: WidgetTemplate) => Flight.Request,\n content?: never\n};\n\ntype PropsWithoutFetch = CommonContainerViewProps & {\n content: CuratedWidgetContent,\n getContentRequest?: never\n};\n\ntype WidgetContainerViewProps = PropsWithFetch | PropsWithoutFetch;\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function WidgetContainerView(props: WidgetContainerViewProps): JSX.Element {\n const scrollToRef = React.createRef<HTMLDivElement>();\n\n const [ removedItemIds, setRemovedItemIds ] = React.useState<string[]>([]);\n\n const isWidgetEnabled = CuratedDashboardHelper.isWidgetTypeEnabled(\n props.widgetTypeId,\n props?.settingsHash,\n props?.dashboardTarget\n );\n\n const shouldLazyLoad = props.lazyLoad ?? true;\n\n const { ref: partialLoadingRef, inView } = useLazyLoad({ prevent: !shouldLazyLoad });\n \n const willFetch = isWidgetEnabled && FunctionHelper.isFunction(props.getContentRequest);\n\n const lazyWidget = Flight.useBasicFetch<CuratedWidget>(!!(inView && isWidgetEnabled && props.getContentRequest) &&\n props.getContentRequest(props.id, props.widgetTypeId, props.templateId));\n\n const { content } = WidgetHelper.useGetContent(\n props.content || lazyWidget.data?.content,\n props.widgetTypeId,\n props.isPreviewing,\n lazyWidget.data?.preferences,\n removedItemIds\n );\n\n const breakpoints = useBreakpoints();\n\n const isEmpty = isEmptyWidget(props.widgetTypeId, content);\n const shouldHideWidget = !WidgetHelper.canDisplayOnScreenSize(breakpoints, props.widgetTypeId, props.templateId);\n\n React.useEffect(() => {\n if ((willFetch && !lazyWidget.hasCompleted))\n return;\n\n props.setIsEmpty?.(props.id, isEmpty || shouldHideWidget);\n }, [ lazyWidget.hasCompleted, isEmpty, shouldHideWidget, willFetch, props.setIsEmpty ]);\n\n React.useEffect(() => {\n if (!props.isScrollToTargetWidget || !scrollToRef.current)\n return;\n\n scrollToRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }, [ props.isScrollToTargetWidget, scrollToRef.current ]);\n\n function onClickRemoveItem(itemId: string, itemName: string): void {\n if (!props.onClickRemoveItem)\n return;\n\n setRemovedItemIds([ ...removedItemIds, itemId ]);\n return props.onClickRemoveItem(itemId, itemName, props.id, props.widgetTypeId);\n }\n\n /**\n * Our videos require widget id for context, so we're enclosing the video type applink function here.\n */\n const appLinks = props.appLinks ? { ...props.appLinks } : null;\n if (appLinks?.videoType) {\n const getVideoTypeAppLink = (video: Video, options: GetVideoAppLinkOptions) => {\n return props.appLinks?.videoType(\n video,\n { ...options, contextId: props.id, includeContext: options.includeContext }\n );\n };\n \n appLinks.videoType = getVideoTypeAppLink;\n }\n\n const analyticsData = {\n ...props.analyticsData,\n widgetId: props.widgetTypeId,\n templateId: props.templateId,\n dashboardTarget: props?.dashboardTarget,\n widgetIndex: props?.widgetIndex,\n widgetName: props.name\n };\n\n const showPartialLoadingComponent = (willFetch && !lazyWidget.hasCompleted) || (props.isEditing && isEmpty);\n\n const template = WidgetTemplateConfig[props.templateId];\n\n if (!template || !showPartialLoadingComponent && (isEmpty || shouldHideWidget))\n return <></>;\n \n const PartialTemplate = template.partialLoading;\n const Template = template.getComponent(props.widgetTypeId);\n const widgetTemplateClass = classNames(template.className, props.className);\n\n const hasNewVideoHighlight = props.isEditing && props.metadata.aiAddedVideo;\n\n return (\n <div\n id={props.widgetTypeId === WidgetTypeId.ContinueWatching ? 'continue-watching-videos-widget' : null}\n ref={scrollToRef}\n className={`curated-widget ${widgetTemplateClass} ${props.name ? 'has-heading' : ''} ${props.isScrollToTargetWidget ? 'my-n2 mx-n3' : ''}`}\n >\n <AnimatedBorder enabled={hasNewVideoHighlight}>\n <div className={props.isScrollToTargetWidget ? `py-2 px-3 rounded-3 ${styles.widgetHighlight}` : ''}>\n {WidgetHelper.isWidgetInTableOfContents(props.metadata) && (\n <a\n href={`#${props.id}`}\n id={`${props.id}`}\n className={`${styles.anchor}`}\n ref={el => { (el && props.headingElementRef?.current) && props.headingElementRef.current.add(el); }}\n />\n )}\n\n {showPartialLoadingComponent ? (\n <div ref={partialLoadingRef}>\n <PartialTemplate\n name={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 </AnimatedBorder>\n </div>\n );\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport {\n CuratedDashboard,\n DashboardStatus,\n DashboardTargetType,\n DashboardUserType,\n Presentation\n} from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\ninterface UseFetchDashboardOptions {\n targetType: DashboardTargetType;\n dashboardId?: string;\n companyId?: string;\n classificationId?: string;\n partnerProfileSlug?: string;\n}\n\nexport function useFetchDashboard(options: UseFetchDashboardOptions) {\n const presentation = Flight.useBasicFetch<Presentation>(PresentationRequests.streamablePresentation());\n\n function shouldFetchDashboard(): boolean {\n return presentation.hasCompleted;\n }\n\n function getStatuses(): DashboardStatus[] {\n if (options.dashboardId) return [ DashboardStatus.Published, DashboardStatus.Draft ];\n\n return [DashboardStatus.Published];\n }\n\n const dashboard = Flight.useBasicFetch<CuratedDashboard>(\n shouldFetchDashboard() &&\n DashboardRequests.getDashboard(\n DashboardUserType.Any,\n getStatuses(),\n CuratedDashboardHelper.getUnknownDashboardTarget({\n targetType: options.targetType,\n presentationId: presentation.data.id,\n companyId: options.companyId,\n classificationId: options.classificationId,\n slug: options.partnerProfileSlug\n }),\n null,\n options.dashboardId\n )\n );\n\n return {\n dashboard,\n isPreviewing: !!options.dashboardId\n };\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}