@clickview/lite 0.53.6-rc.1 → 0.54.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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7895-2ee3fda80f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/hooks/useWidgetKeyboard.ts","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/CoverPill.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/EditSubjectsWidgetLink.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/AllSubjectsWidgetLink.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/ClassificationStatus.ts","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/cover-pill.scss","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <>&nbsp;</>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import * as 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';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={DateHelper.format(specialEvent.startDate, 'MMMM')}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block partial-loading-background rounded-circle overflow-hidden me-3`}>\n {props.logo?.url &&\n <LazyImage src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })} />}\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Small })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import * as 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';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 56;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 3 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const secondLast = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} />;\n const rest = breadcrumbs.slice(1, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","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 { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n highlightOnHover={props.settings?.hasTopicDirectories}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"isNew\":\"KLRzE\",\"newVideos\":\"xozwy\",\"badge\":\"NWZxu\",\"icon\":\"G9W_I\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport styles from './subject-stats-badge.scss';\n\ntype ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n classification: Classification;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n const { newVideoCount } = TopicsHelper.getCounts(props.classification);\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0)\n return 'new-videos';\n\n return null;\n }\n\n const badgeType = getBadgeType();\n\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {badgeType === 'coming-soon' && (\n <SvgContainer\n svgName={cvSvgLibrary.TimerSmall}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n videoCount,\n resourceCount,\n newVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\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 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)) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n dashboardVideoCount: videoCount,\n dashboardResourceCount: resourceCount,\n dashboardNewVideosCount: newVideoCount,\n datePublished: props.classification.datePublished\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svgName={cvSvgLibrary.BellFilled}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svgName={cvSvgLibrary.Bell}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className={`h6 mb-0 clamp-2 mt-1`}>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge classification={props.classification} />\n </div>\n </AppLink>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidgetState } from 'libs/shared/components/widgets/dynamic-widget';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\n\n// Sync with transition time in SlidingListContainer.tsx\nconst SLIDER_ANIMATION_TIME = 400;\n\ntype FixedWidgetKeyboardOptions = {\n type: 'fixed',\n state: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>\n mediaQuery?: never;\n}\n\ntype DynamicWidgetKeyboardOptions = {\n type: 'dynamic',\n state: DynamicWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>\n mediaQuery: string\n}\n\ntype UseWidgetKeyboard = FixedWidgetKeyboardOptions | DynamicWidgetKeyboardOptions\n\nexport function useWidgetKeyboard(options: UseWidgetKeyboard) {\n const { type, state, containerRef, mediaQuery } = options;\n\n const [ isTabbing, setIsTabbing ] = React.useState(false);\n const [ dynamicAttributes, setDynamicAttributes ] = React.useState<HashObject>({});\n const [ focusedWidgetIndex, setFocusedWidgetIndex ] = React.useState(null);\n\n const isTouch = React.useMemo(() => UserAgentHelper.isTouchScreen(), []);\n\n /**\n * Get accessibility attributes for dynamic widget items\n * */\n React.useEffect(() => {\n if (type !== 'dynamic' || !containerRef.current || !(state as DynamicWidgetState).containerLeftPosition || isTouch) return;\n\n setTimeout(() => getDynamicAttributes(), SLIDER_ANIMATION_TIME + 50);\n }, [\n containerRef.current,\n mediaQuery,\n (state as DynamicWidgetState).offset,\n (state as DynamicWidgetState).containerLeftPosition\n ]);\n\n function getDynamicAttributes() {\n const dynamicWidgetState = state as DynamicWidgetState;\n\n if (!containerRef.current?.children)\n return;\n\n const focusableItems = Array.from(containerRef.current.children).reduce((acc, item) => {\n const rect = item?.getBoundingClientRect();\n\n /**\n * When any part of the widget item is visible it should be focusable,\n * otherwise prevent interaction and the slider should be the next focusable element\n * */\n const isItemVisable =\n rect.left < dynamicWidgetState.containerRightPosition &&\n rect.right > dynamicWidgetState.containerLeftPosition;\n\n return {\n ...acc,\n [item.id]: isItemVisable\n ? {\n 'aria-hidden': false\n } : {\n 'aria-hidden': true,\n 'inert': 'true'\n }\n };\n }, {});\n\n setDynamicAttributes(focusableItems);\n }\n\n /**\n * Get accessibility attributes for fixed widget items\n * */\n function getFixedAttributes(index?: number) {\n const fixedWidgetState = state as FixedWidgetState;\n\n const isItemVisible =\n isTouch ||\n index >= (fixedWidgetState.offset - fixedWidgetState.viewableItems) &&\n index < fixedWidgetState.offset;\n if (isItemVisible) {\n return {\n 'aria-hidden': false\n };\n }\n\n return {\n 'inert': 'true',\n 'aria-hidden': true\n };\n }\n\n /**\n * When the user is not signed in, there may be videos which are not focusable.\n * setTimeout is required because the transition time is 400ms\n */\n function focusNext() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let nextFocusableElement: HTMLElement = null;\n\n for (let i = (focusedWidgetIndex + 1); i < items.length; i++) {\n if (nextFocusableElement)\n break;\n\n nextFocusableElement = items[i].querySelector('a[tabindex=\"0\"]');\n }\n\n if (nextFocusableElement)\n nextFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function focusPrev() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let prevFocusableElement: HTMLElement = null;\n for (let i = focusedWidgetIndex - 1; i >= 0; i--) {\n if (prevFocusableElement) break;\n\n const item = items[i];\n prevFocusableElement = item.querySelector('a[tabindex=\"0\"]');\n }\n\n if (prevFocusableElement)\n prevFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function onFocusWidget(index: number) {\n if (document.querySelector('.user-is-tabbing')) {\n setIsTabbing(true);\n setFocusedWidgetIndex(index);\n }\n }\n\n function onBlurWidget() {\n if (!document.querySelector('.user-is-tabbing')) {\n setIsTabbing(false);\n setFocusedWidgetIndex(null);\n }\n }\n\n return {\n isTabbing,\n onFocusWidget,\n onBlurWidget,\n getFixedAttributes,\n dynamicAttributes,\n focusNext,\n focusPrev\n };\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface NamePanelProps {\n name: string;\n multiline?: boolean;\n subtitle?: string;\n noUnderLine?: boolean;\n newVideosCount?: number;\n}\n\nconst ComingSoonNamePanel = ({ name, multiline, noUnderLine }: NamePanelProps) => {\n let wrapperClassName = `${styles.comingSoonPanel} \n d-flex flex-column align-items-center justify-content-center px-3 text-center`;\n\n let textClassName = '';\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` ${styles.clamped} clamp-2`;\n }\n\n return (\n <div className={wrapperClassName}>\n <small className='text-secondary'><Text namespace={namespace} phrase='comingSoon' /></small>\n <p className={`${noUnderLine ? '' : styles.name} h6`}><span className={textClassName}>{name}</span></p>\n </div>\n );\n};\n\nconst NormalNamePanel = ({ name, multiline, subtitle, noUnderLine, newVideosCount }: NamePanelProps) => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${noUnderLine ? '' : styles.name} h6`;\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap text-truncate';\n textClassName += ' text-truncate mb-0';\n } else {\n textClassName += ` ${newVideosCount ? 'clamp-2' : 'clamp-3'} text-start`;\n }\n\n return (\n <div className={wrapperClassName}>\n {subtitle && <div className={`text-secondary clamp-1 ${styles.text}`}>{subtitle}</div>}\n <div className={textClassName} title={name}>{name}</div>\n {!!newVideosCount && (\n <div className={`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${styles.newVideos}`}>\n <Text namespace={namespace} phrase='newVideos' options={{ smartCount: newVideosCount }} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface CoverPillWidgetItemProps<T extends BaseObject> {\n data: T;\n getChildAppLink?: (data: T) => Core.AppLink;\n getChildAppLinkOptions?: () => Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n availablePresentations?: Presentation[];\n getSubtitle?: (data: T) => string;\n multiline?: boolean;\n // set to true it will highlight on hover and also remove the hover text underline\n highlightOnHover?: boolean;\n showNewVideosCount?: boolean;\n themeColor?: string;\n}\n\ninterface CoverPillWidgetContentProps<T> extends CoverPillWidgetItemProps<T> {\n coverUrl?: string;\n subtitle?: string;\n isComingSoon?: boolean;\n className?: string;\n imageClassName?: string;\n isSelected?: boolean;\n hideFallback?: boolean;\n hideCheckmark?: boolean;\n themeColor?: string;\n}\n\nexport function CoverPillWidgetContent(props: CoverPillWidgetContentProps<BaseObject>): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.coverUrl, { size: props.isLarge ? ImageSize.Medium : ImageSize.Small });\n\n let classification: Classification | undefined = undefined;\n if (MasterTypeHelper.isClassification(props.data)) {\n classification = props.data;\n }\n\n const childProps = {\n name: props.data.name,\n multiline: props.isLarge || props.multiline,\n subtitle: props.subtitle,\n noUnderLine: props.highlightOnHover,\n newVideosCount: props.showNewVideosCount ? classification?.externalMetadata?.childDashboardNewVideoCount : 0\n };\n\n return (\n <div\n className={`${props.themeColor ? styles.hasThemeColor : 'border'} d-flex position-relative ${props.className} ${styles.widgetItem} ${props.isSelected ? 'border-success border-2' : ''} ${props.highlightOnHover && !props.themeColor ? 'bg-light-blue-hover' : ''}`}\n style={props.themeColor ? { '--themeColor': props.themeColor } as unknown as React.CSSProperties : {}}\n id={`${props.data.id}-${RandomHelper.getRandomInt()}`}\n >\n {props.isSelected && (\n <div className={`${styles.selectedMask} border-2`} />\n )}\n\n <div className={`${styles.imagePanel} ${props.isLarge ? styles.large : ''}`}>\n {props.isSelected && !props.hideCheckmark && (\n <div className={styles.selected}>\n <IconCircle svgName={cvSvgLibrary.Check} svgSize={SvgContainerSize.Large} textVariant='white' variant='green' />\n </div>\n )}\n\n <div\n className={`${styles.image} ${props.imageClassName}`}\n style={props.coverUrl ? { backgroundImage: `url('${coverUrl}')` } : {}}\n />\n {!props.hideFallback && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={props.isLarge ? styles.large : ''}\n />\n )}\n </div>\n\n {props.isComingSoon\n ? <ComingSoonNamePanel {...childProps} />\n : <NormalNamePanel {...childProps} />\n }\n </div>\n );\n}\n\nexport function CoverPillWidgetContentWrapper(props: CoverPillWidgetContentProps<BaseObject>) {\n const appLink = props.getChildAppLink ? props.getChildAppLink(props.data) : null;\n\n return (\n <>\n {appLink ? (\n <AppLink\n className={styles.appLink}\n appLink={appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLinkOptions={props.getChildAppLinkOptions?.()}\n >\n <CoverPillWidgetContent {...props} />\n </AppLink>\n ) : (<CoverPillWidgetContent {...props} />)\n }\n </>\n );\n}","import * as React from 'react';\n\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from './cover-pill.scss';\n\nexport const PartialSubjectWidgetItem = () => {\n const [width] = React.useState(RandomHelper.getRandomInt(5) + 3 + 'rem');\n\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={styles.imagePanel} />\n <div className='px-2' style={{ width }} />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n );\n};\n\nexport const PartialLargeSubjectWidgetItem = () => {\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={`${styles.partialLargeImage}`} />\n <div className='px-2' />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} extraClasses={styles.partialLargeFallback} />\n </div>\n </div>\n );\n};","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CoverPillWidgetContentWrapper, CoverPillWidgetItemProps } from 'libs/shared/components/widgets/items/subject-widget-item/CoverPill';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification, CuratedDashboardAppLink, Presentation } from 'libs/shared/interfaces';\n\nfunction usePresentationName(presentationId: string, availablePresentations: Presentation[]): string {\n const showPresentationName = availablePresentations?.length >= TopicsConstants.MULTI_PRESENTATION_THRESHOLD;\n\n if (!showPresentationName) {\n return undefined;\n }\n\n return availablePresentations?.find(p => p.id === presentationId)?.name;\n}\n\nfunction SubjectWidgetItem(props: CoverPillWidgetItemProps<Classification>): JSX.Element {\n const isTopicDiretoryItem = props.data.id === CuratedDashboardAppLink.ClassificationDirectory;\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n const presentationName = usePresentationName(props.data.presentationId, props?.availablePresentations);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.analyticsData?.id || props.data?.id,\n name: props.data?.name,\n presentationId: props.analyticsData?.presentationId || props.data.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n entity: EntityType.Classification,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Cover\n };\n\n return (\n <CoverPillWidgetContentWrapper\n {...props}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n coverUrl={props.data.cover?.url}\n subtitle={props.getSubtitle?.(props.data) || presentationName}\n isComingSoon={isComingSoon}\n themeColor={isTopicDiretoryItem ? props.themeColor : ''}\n />\n );\n}\n\nconst Memoized = React.memo(SubjectWidgetItem);\n\nexport { Memoized as SubjectWidgetItem };","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, 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 { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\ninterface EditSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.UserSetting,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function EditSubjectsWidgetLink(props: EditSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.editSubjectsItem} d-flex position-relative px-3 justify-content-center align-items-center`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-preference' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <SvgContainer svgName={cvSvgLibrary.Edit} className='me-2 align-middle d-inline-block svg-container' />\n <p className='h6 align-middle text-truncate'><Text namespace='shared.subjectWidgetItem' phrase='edit' /></p>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewLogoInverted } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './cover-pill.scss';\n\ninterface AllSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function AllSubjectsWidgetLink(props: AllSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.allSubjectsItem}\n d-flex flex-column position-relative px-2\n align-items-center justify-content-center text-nowrap bg-navy`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-all' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <div className={styles.logoContainer}>\n <ClickViewLogoInverted />\n </div>\n <p className='h6 pt-2 px-3 mb-0'><Text namespace='shared.subjectWidgetItem' phrase='all' /></p>\n </div>\n </AppLink>\n );\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n \n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n // Sync with transition time in useWidgetKeyboard.ts\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLUListElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLUListElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLUListElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <ul\n className='list-unstyled d-flex flex-nowrap position-relative w-100 mb-0'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </ul>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nconst namespace = 'shared.widgetButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <button\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n tabIndex={-1}\n />\n )}\n\n <button\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n aria-label={isLeft ? getPhrase('previous') : getPhrase('next')}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </button>\n </div>\n );\n});","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n queryParams: PresentationTopicsViewQueryParams;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { isPlugin } = usePluginHelper();\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.queryParams.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: availablePresentations?.length\n ? currentPresentation.data?.name\n : classification.name,\n appLink: { application: AppChannels.SUBJECT, action: Actions.Subjects.PRESENTATION_TOPICS },\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-3'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n metadata={{}}\n preferences={[]}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n widgetTypeId={WidgetTypeId.Classifications}\n templateId={WidgetTemplate.StatsCoverFixedPillListLarge}\n analyticsData={analyticsData}\n content={children?.data}\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n appLinks={{ classification: classificationAppLinkFn }}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n isPlugin={isPlugin}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColour(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"wzt8R\",\"bellContainer\":\"X7Jgx\",\"bell\":\"HoKe4\",\"followed\":\"Pdmdk\",\"bellOutline\":\"bEQDk\",\"cover\":\"luOU3\",\"fallbackImage\":\"ReXqz\",\"subText\":\"p0kUV\"};","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"fFjKN\",\"name\":\"A_by9\",\"selectedMask\":\"xSQtR\",\"widgetItem\":\"Ys9W_\",\"hasThemeColor\":\"DX2ua\",\"text\":\"JfAoy\",\"imagePanel\":\"aUNDc\",\"partialLargeImage\":\"RuLxv\",\"selected\":\"BViJb\",\"image\":\"LkTep\",\"dragHandle\":\"CJqvP\",\"large\":\"R5clw\",\"comingSoonPanel\":\"Wa2PG\",\"newVideos\":\"s61h8\",\"editSubjectsItem\":\"gGNFD\",\"allSubjectsItem\":\"IHdlJ\",\"logoContainer\":\"Nzaes\",\"draggingItem\":\"zUOye\",\"partialLargeFallback\":\"FmJP9\",\"partialIcon\":\"sdZuo\"};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\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 ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","GenericCalendarDate","AppLink","appLink","getAppLink","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","Actions","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","length","map","idx","key","href","onClick","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","id","size","showDivider","undefined","group","defaultProps","S","BackButton","textShadow","backToName","color","extraClasses","backPhrase","colorClass","textShadowClass","RATIO","getSizeClass","heading","BannerHeader","banner","imageCdnUrl","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","backgroundImage","DetailsComponent","detailsComponent","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","calendarTheme","Text","phrase","LazyImage","src","container","prevProps","nextProps","PartialBannerHeader","getPhrase","BreadcrumbItem","ref","breadcrumb","name","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","secondLast","last","rest","slice","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","SeeMore","descriptor","WidgetHeader","hasDescription","description","showSeeMoreLink","CoverFixedPillListLargeWidgetTemplate","content","c","xs","sm","lg","hasTableOfContents","xl","data","getChildAppLink","appLinks","classification","highlightOnHover","settings","hasTopicDirectories","isLarge","SubjectStatsBadge","newVideoCount","TopicsHelper","badgeType","status","ClassificationStatus","datePublished","getBadgeType","baseClass","getBadgeClass","smartCount","getBadgeText","SubjectStatsWidgetItem","hasLoadedImage","setHasLoadedImage","isComingSoon","isFollowing","videoCount","resourceCount","childClassificationCount","subText","getSubtext","presentationId","comingSoon","dashboardVideoCount","dashboardResourceCount","dashboardNewVideosCount","location","actionType","entity","ImageFallback","BaseImage","cover","imageClassName","onLoad","canFollowTopics","DivButton","stopPropagation","onToggleFollowClassification","StatsCoverFixedPillListLargeWidgetTemplate","Row","Col","SLIDER_ANIMATION_TIME","useWidgetKeyboard","options","state","containerRef","mediaQuery","isTabbing","setIsTabbing","dynamicAttributes","setDynamicAttributes","focusedWidgetIndex","setFocusedWidgetIndex","isTouch","containerLeftPosition","setTimeout","dynamicWidgetState","children","focusableItems","Array","from","acc","item","rect","getBoundingClientRect","isItemVisable","left","containerRightPosition","right","getDynamicAttributes","offset","onFocusWidget","index","document","querySelector","onBlurWidget","getFixedAttributes","fixedWidgetState","viewableItems","focusNext","items","querySelectorAll","nextFocusableElement","i","focusPrev","prevFocusableElement","ComingSoonNamePanel","multiline","noUnderLine","wrapperClassName","textClassName","NormalNamePanel","subtitle","newVideosCount","CoverPillWidgetContent","coverUrl","childProps","showNewVideosCount","externalMetadata","childDashboardNewVideoCount","themeColor","isSelected","hideCheckmark","textVariant","variant","hideFallback","CoverPillWidgetContentWrapper","appLinkOptions","getChildAppLinkOptions","PartialSubjectWidgetItem","PartialLargeSubjectWidgetItem","Memoized","isTopicDiretoryItem","presentationName","availablePresentations","find","p","usePresentationName","getSubtitle","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","contents","paddingBottom","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","leftButtonClassName","rightButtonClassName","hoverText","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","getClassificationAppLink","params","ClassificationAppLinkHelper","PresentationTopicsView","isPlugin","usePluginHelper","useSettings","breakpoints","config","ConfigRequests","usePresentation","activePresentation","hasPresentationsLoaded","canAccessPresentation","usePermissions","hasPermissions","hasLocalPermissions","initialPresentationId","queryParams","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","learningLevel","useSetPageMetadata","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","application","getBreadcrumbs","metadata","preferences","widgetTypeId","resourceThumbnailFallbackImageUrl","ImageUrls","partialLoadingComponent","filter","presentation","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","IconButton","bsPrefix","as","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName"],"sourceRoot":""}