@clickview/lite 0.69.1-dev.0 → 0.69.1-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{9985-lite-3c49d1b796.chunk.css → 3902-lite-5eaa7e7ae0.chunk.css} +1 -2
- package/dist/css/{555-lite-1b5aa9652d.chunk.css → 4356-lite-b05b606d3d.chunk.css} +1 -2
- package/dist/css/{2636-lite-f995954232.chunk.css → 4527-lite-4d1b877b3f.chunk.css} +4 -0
- package/dist/css/{1239-lite-8152f713c8.chunk.css → 7210-lite-a568e8ec1e.chunk.css} +1 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/1210-7afb28caac-lite.chunk.js +2 -0
- package/dist/scripts/1210-7afb28caac-lite.chunk.js.map +1 -0
- package/dist/scripts/1386-332e63f68c-lite.chunk.js +2 -0
- package/dist/scripts/1386-332e63f68c-lite.chunk.js.map +1 -0
- package/dist/scripts/232-1522c00252-lite.chunk.js +3 -0
- package/dist/scripts/232-1522c00252-lite.chunk.js.map +1 -0
- package/dist/scripts/2392-19e4bb187b-lite.chunk.js +3 -0
- package/dist/scripts/2392-19e4bb187b-lite.chunk.js.map +1 -0
- package/dist/scripts/{2640-536c550749-lite.chunk.js → 2640-052f4606f6-lite.chunk.js} +2 -2
- package/dist/scripts/2640-052f4606f6-lite.chunk.js.map +1 -0
- package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js +2 -0
- package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js.map +1 -0
- package/dist/scripts/3079-0a333d6805-lite.chunk.js +2 -0
- package/dist/scripts/3079-0a333d6805-lite.chunk.js.map +1 -0
- package/dist/scripts/3110-eee18143c6-lite.chunk.js +2 -0
- package/dist/scripts/3110-eee18143c6-lite.chunk.js.map +1 -0
- package/dist/scripts/312-693aa30814-lite.chunk.js +2 -0
- package/dist/scripts/312-693aa30814-lite.chunk.js.map +1 -0
- package/dist/scripts/3902-39aaff7ce9-lite.chunk.js +2 -0
- package/dist/scripts/3902-39aaff7ce9-lite.chunk.js.map +1 -0
- package/dist/scripts/4229-477b1858dc-lite.chunk.js +2 -0
- package/dist/scripts/4229-477b1858dc-lite.chunk.js.map +1 -0
- package/dist/scripts/4356-36ce3ceec1-lite.chunk.js +2 -0
- package/dist/scripts/4356-36ce3ceec1-lite.chunk.js.map +1 -0
- package/dist/scripts/4527-42075d96f4-lite.chunk.js +2 -0
- package/dist/scripts/4527-42075d96f4-lite.chunk.js.map +1 -0
- package/dist/scripts/{4845-f3646fb657-lite.chunk.js → 4845-9b4657e696-lite.chunk.js} +2 -2
- package/dist/scripts/4845-9b4657e696-lite.chunk.js.map +1 -0
- package/dist/scripts/5679-444d9a7f76-lite.chunk.js +2 -0
- package/dist/scripts/5679-444d9a7f76-lite.chunk.js.map +1 -0
- package/dist/scripts/6046-104677f08c-lite.chunk.js +2 -0
- package/dist/scripts/6046-104677f08c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6188-e108abca25-lite.chunk.js → 6188-77fc2f3ec5-lite.chunk.js} +2 -2
- package/dist/scripts/6188-77fc2f3ec5-lite.chunk.js.map +1 -0
- package/dist/scripts/6351-dff9edbb16-lite.chunk.js +3 -0
- package/dist/scripts/6351-dff9edbb16-lite.chunk.js.map +1 -0
- package/dist/scripts/6973-c4cb114bd7-lite.chunk.js +2 -0
- package/dist/scripts/6973-c4cb114bd7-lite.chunk.js.map +1 -0
- package/dist/scripts/7210-2e4563178c-lite.chunk.js +3 -0
- package/dist/scripts/7210-2e4563178c-lite.chunk.js.map +1 -0
- package/dist/scripts/7480-3564c0c2da-lite.chunk.js +2 -0
- package/dist/scripts/7480-3564c0c2da-lite.chunk.js.map +1 -0
- package/dist/scripts/7482-13e6f78c32-lite.chunk.js +2 -0
- package/dist/scripts/7482-13e6f78c32-lite.chunk.js.map +1 -0
- package/dist/scripts/9040-be65e4eb1e-lite.chunk.js +2 -0
- package/dist/scripts/9040-be65e4eb1e-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-90d3c7fd15.min.js → bundle-32e967af87.min.js} +3 -3
- package/dist/scripts/{bundle-90d3c7fd15.min.js.map → bundle-32e967af87.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js +0 -2
- package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js.map +0 -1
- package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js +0 -3
- package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js.map +0 -1
- package/dist/scripts/1386-d93ee75e0c-lite.chunk.js +0 -2
- package/dist/scripts/1386-d93ee75e0c-lite.chunk.js.map +0 -1
- package/dist/scripts/2392-acfd69dfa3-lite.chunk.js +0 -3
- package/dist/scripts/2392-acfd69dfa3-lite.chunk.js.map +0 -1
- package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js +0 -2
- package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js.map +0 -1
- package/dist/scripts/2640-536c550749-lite.chunk.js.map +0 -1
- package/dist/scripts/3036-d18c598435-lite.chunk.js +0 -2
- package/dist/scripts/3036-d18c598435-lite.chunk.js.map +0 -1
- package/dist/scripts/4229-75ba28a266-lite.chunk.js +0 -2
- package/dist/scripts/4229-75ba28a266-lite.chunk.js.map +0 -1
- package/dist/scripts/4266-e856b96643-lite.chunk.js +0 -3
- package/dist/scripts/4266-e856b96643-lite.chunk.js.map +0 -1
- package/dist/scripts/4598-f326dc1aec-lite.chunk.js +0 -2
- package/dist/scripts/4598-f326dc1aec-lite.chunk.js.map +0 -1
- package/dist/scripts/4845-f3646fb657-lite.chunk.js.map +0 -1
- package/dist/scripts/555-d811b49435-lite.chunk.js +0 -2
- package/dist/scripts/555-d811b49435-lite.chunk.js.map +0 -1
- package/dist/scripts/6046-44c115a89c-lite.chunk.js +0 -2
- package/dist/scripts/6046-44c115a89c-lite.chunk.js.map +0 -1
- package/dist/scripts/6188-e108abca25-lite.chunk.js.map +0 -1
- package/dist/scripts/6317-49be898c73-lite.chunk.js +0 -2
- package/dist/scripts/6317-49be898c73-lite.chunk.js.map +0 -1
- package/dist/scripts/6973-ede6601614-lite.chunk.js +0 -2
- package/dist/scripts/6973-ede6601614-lite.chunk.js.map +0 -1
- package/dist/scripts/7075-9a76ce47c9-lite.chunk.js +0 -3
- package/dist/scripts/7075-9a76ce47c9-lite.chunk.js.map +0 -1
- package/dist/scripts/7480-02bc4e08a3-lite.chunk.js +0 -2
- package/dist/scripts/7480-02bc4e08a3-lite.chunk.js.map +0 -1
- package/dist/scripts/9040-9393c59004-lite.chunk.js +0 -2
- package/dist/scripts/9040-9393c59004-lite.chunk.js.map +0 -1
- package/dist/scripts/9985-c488ab5f65-lite.chunk.js +0 -2
- package/dist/scripts/9985-c488ab5f65-lite.chunk.js.map +0 -1
- /package/dist/css/{3036-lite-1b3e9aa905.chunk.css → 3079-lite-1b3e9aa905.chunk.css} +0 -0
- /package/dist/css/{7075-lite-a377febbb0.chunk.css → 6351-lite-a377febbb0.chunk.css} +0 -0
- /package/dist/scripts/{4266-e856b96643-lite.chunk.js.LICENSE.txt → 232-1522c00252-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1239-ed9b8aadb4-lite.chunk.js.LICENSE.txt → 2392-19e4bb187b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2392-acfd69dfa3-lite.chunk.js.LICENSE.txt → 6351-dff9edbb16-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7075-9a76ce47c9-lite.chunk.js.LICENSE.txt → 7210-2e4563178c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-90d3c7fd15.min.js.LICENSE.txt → bundle-32e967af87.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6317-49be898c73-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/engagement-heat-map.scss","file:///app/packages/libs/shared/src/apps/analytics/components/engagement-heat-map/EngagementHeatMap.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-chart/InsightChart.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/insight-student-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/InsightStudentList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/insight-devices.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/InsightDevices.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/insight-heatmap.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/InsightHeatmap.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/EngagementUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/avatar-list/AvatarList.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/hooks/useLockContentWidth.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/InsightsShareMask.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/shared-to-pill/SharedToPill.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/insights-mask.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"epapa\",\"legend\":\"uhH4p\"};","import React from 'react';\nimport chroma from 'chroma-js';\n\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport styles from './engagement-heat-map.scss';\n\nconst namespace = 'shared.engagementHeatMap';\n\nconst ZERO_COLOUR = '#f1f1f1';\nconst MIN_COLOUR = '#daf07d';\nconst MAX_COLOUR = '#08bd1a';\n\nconst COLOUR_SCALE = chroma.scale([ MIN_COLOUR, MAX_COLOUR ]);\n\nconst LEGEND_VALUES = [ 0, 0.01, 0.25, 0.5, 0.75, 1 ];\n\nfunction getBackgroundColor(value: number, max: number): string {\n if (!value)\n return ZERO_COLOUR;\n\n return COLOUR_SCALE(value / max).hex();\n}\n\nfunction getGradient(data: number[], max: number): string {\n const gradient: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const previousValue = i > 0 && data[i - 1];\n const currentValue = data[i];\n const nextValue = i < data.length - 1 && data[i + 1];\n\n /**\n * We want to capture colour changes but if a value has the same value\n * of both of its neighbours, we can skip it.\n */\n if (currentValue === previousValue && currentValue === nextValue)\n continue;\n\n gradient.push(`${getBackgroundColor(currentValue, max)} ${100 / data.length * i}%`);\n }\n\n return `linear-gradient(to right, ${gradient.join(',')})`;\n}\n\nexport function EngagementHeatMapLegend(): JSX.Element {\n const max = Math.max(...LEGEND_VALUES);\n const legendSquareWidthPercentage = 100 / LEGEND_VALUES.length;\n\n return (\n <div className='d-flex justify-content-between w-100'>\n <Text namespace={namespace} phrase='less' />\n <div className={`d-flex mx-1 flex-grow-1 ${styles.legend}`}>\n {LEGEND_VALUES.map((val, idx) => (\n <div\n key={idx}\n style={{\n width: `${legendSquareWidthPercentage}%`,\n backgroundColor: getBackgroundColor(val, max)\n }}\n />\n ))}\n </div>\n <Text namespace={namespace} phrase='more' />\n </div>\n );\n}\n\ninterface EngagementHeatMapProps {\n engagement: Engagement;\n max?: number;\n className?: string;\n}\n\nexport function EngagementHeatMap(props: EngagementHeatMapProps): JSX.Element {\n const heatMap = getFullHeatMap(props.engagement);\n const max = props.max ?? Math.max(...heatMap);\n\n return (\n <div\n className={`border rounded ${styles.heatMap} ${props.className ?? ''}`}\n style={{\n background: getGradient(heatMap, max)\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\n\nconst getStaticChartOptions = (label: string): Highcharts.Options => {\n return {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n enabled: false\n },\n gridLineWidth: 0,\n tickPixelInterval: 1,\n startOnTick: false,\n endOnTick: false,\n min: -0.2\n },\n xAxis: {\n title: {\n text: label,\n margin: 8,\n style: CHART_FONT_STYLES\n },\n labels: {\n style: CHART_FONT_STYLES\n },\n lineWidth: 0\n },\n legend: {\n enabled: false\n },\n chart: {\n type: 'column',\n backgroundColor: 'transparent',\n height: '160px',\n spacingTop: 20\n },\n plotOptions: {\n column: {\n dataLabels: {\n enabled: false\n },\n enableMouseTracking: false,\n minPointLength: 8\n }\n }\n };\n};\n\ninterface InsightChartProps {\n label: string;\n chartData: ChartData;\n xAxis?: Highcharts.XAxisOptions;\n}\n\nexport function InsightChart(props: InsightChartProps) {\n function getChartOptions(): Highcharts.Options {\n const data = props.chartData;\n const staticChartOptions = getStaticChartOptions(props.label);\n\n const hasData = ArrayHelper.first(data.series)?.data.some((data: Highcharts.PointOptionsObject) => data.y > 0);\n\n return {\n ...staticChartOptions,\n yAxis: {\n ...staticChartOptions.yAxis,\n ...(hasData ? {\n min: -0.2\n } : {\n min: 0,\n max: 1\n })\n },\n xAxis: {\n ...staticChartOptions.xAxis,\n ...props.xAxis,\n categories: data.categories\n },\n series: data.series\n };\n }\n\n return (\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions()}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"uMuZt\",\"image\":\"WdKiU\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { ProgressCircleSize } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\n\nimport styles from './insight-student-list.scss';\n\ntype UserPercentage = UserOrAnonSession & {\n percentage?: number;\n}\n\nconst MAX_ITEMS = 3;\n\ninterface InsightStudentListProps {\n students: UserPercentage[];\n imageUrl: string;\n imageCdnUrl: string;\n description: string;\n anonymiseUsers: boolean;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\nexport function InsightStudentList(props: InsightStudentListProps) {\n return (\n <>\n {props.students.length ? (\n <ul className='list-unstyled mb-2'>\n {props.students.slice(0, MAX_ITEMS).map((student, index) => (\n <li key={index} className='d-flex align-items-center mb-2'>\n <UserRecipientItemMetadata\n user={student}\n imageCdnUrl={props.imageCdnUrl}\n avatarClassName={styles.avatar}\n detailsClassName='ms-2'\n showDisplayName\n showSubText={false}\n anonymiseUsers={props.anonymiseUsers}\n />\n\n <div className='d-flex align-items-center ms-auto'>\n <span className='me-2'>{student.percentage === undefined ? '- ' : Math.round(student.percentage * 100)}%</span>\n <PercentageIndicator percentage={student.percentage} size={ProgressCircleSize.ExtraSmall} />\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className='text-center'>\n <img className={`${styles.image} mb-2`} src={props.imageUrl} />\n <p className='text-secondary mb-0' dangerouslySetInnerHTML={{ __html: props.description }} />\n </div>\n )}\n\n {!!props.students.length && props.appLink && (\n <AppLink appLink={props.appLink} className='text-info mt-auto'>\n {props.appLinkText}\n </AppLink>\n )}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"purpleChart\":\"OPcvi\",\"grayChart\":\"HlWj7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary, SvgHelper } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-devices.scss';\n\nconst namespace = 'shared.insightDevices';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n// Names from UserAgentHelper.getOperatingSystem()\nfunction getDeviceType(name: string) {\n switch (name) {\n case 'Android':\n case 'Windows Phone':\n case 'iOS':\n case 'BlackBerry':\n return 'Phone';\n case 'Linux':\n case 'Unix':\n case 'Macintosh':\n case 'Windows':\n return 'Computer';\n }\n}\n\nfunction getDeviceIcon(name: string) {\n let svgName = '';\n \n switch (name) {\n case 'Computer':\n svgName = cvSvgLibrary.Monitor;\n break;\n case 'Phone':\n svgName = cvSvgLibrary.Mobile;\n break;\n case 'Tablet':\n svgName = cvSvgLibrary.Tablet;\n break;\n default: return;\n }\n \n // Default svg attributes causes Highcharts error\n return SvgHelper.getSvg(svgName).replace(/<svg[^>]*>/g, '<svg class=\"svg-container\">');\n}\n\ninterface InsightDevicesProps {\n osCount: GroupedAnalyticsCount[]\n}\n\nexport function InsightDevices(props: InsightDevicesProps) {\n const categoriesData = getCategoriesData();\n const topDeviceCount = getTopDeviceCount();\n const topDevices = getTopDevices();\n\n function getCategoriesData() {\n const defaultDevices: HashObject = { Phone: 0, Computer: 0 };\n\n if (!props.osCount?.length)\n return defaultDevices;\n\n return props.osCount.reduce((acc, group) => {\n if (!group.name) return acc;\n\n const deviceCategory = getDeviceType(group.name);\n\n if (!deviceCategory) return acc;\n\n acc[deviceCategory] = acc[deviceCategory] + group.count;\n\n return acc;\n }, defaultDevices);\n }\n\n function getTopDeviceCount() {\n return Math.max(...Object.keys(categoriesData).map(category => categoriesData[category]));\n }\n\n function getTopDevices() {\n return Object.keys(categoriesData).filter(category => categoriesData[category] === topDeviceCount);\n }\n\n function getXAxisLabelIcons(): any {\n return {\n labels: {\n useHTML: true,\n formatter: function () {\n return `\n <div class=\"d-flex flex-column align-items-center\">\n <span class=\"${styles.font} font-size-sm text-dark mb-1\">${this.value}</span>\n ${getDeviceIcon(this.value)}\n </div>\n `;\n }\n }\n };\n }\n\n function getChartData(): ChartData {\n return {\n categories: Object.keys(categoriesData),\n series: [{\n type: 'column',\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n overflow: 'allow',\n crop: false\n },\n data: Object.keys(categoriesData).map(category => {\n const highestCount =\n topDeviceCount !== 0 && categoriesData[category] === topDeviceCount;\n\n return {\n className: `${categoriesData[category] === 0 ? styles.grayChart : styles.purpleChart} ${!highestCount ? 'opacity-25' : ''}`,\n borderWidth: highestCount ? 2 : 0,\n borderColor: highestCount ? 'black' : '',\n y: categoriesData[category]\n };\n })\n }]\n };\n }\n\n const chartData = getChartData();\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgClassName='bg-light-ultramarine text-ultramarine'\n svgName={cvSvgLibrary.Monitor}\n >\n <p className='mb-0'>\n {props.osCount?.filter(group => group.name).length\n ? (\n <Text\n namespace={namespace}\n phrase='description'\n options={{\n smartCount: topDevices.length,\n device: topDevices.length === 1 ? topDevices[0].toLowerCase() : null\n }}\n />\n ) : (\n <Text\n namespace={namespace}\n phrase='notViewed'\n />\n )}\n </p>\n\n <div className='position-relative mt-auto'>\n <InsightChart label={getPhrase('device')} chartData={chartData} xAxis={getXAxisLabelIcons()} />\n </div>\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"Rfr9N\",\"heatMapTimepointIndicator\":\"s6JbA\",\"heatMapTimepointIndicatorVisible\":\"mgjWX\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-heatmap.scss';\n\nconst namespace = 'shared.insightHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHeatmapProps {\n engagement: Engagement;\n heatmapAppLink: Core.AppLink;\n}\n\nexport function InsightHeatmap(props: InsightHeatmapProps) {\n const engagementRate = props.engagement.engagementRate > 0 ? Math.round(props.engagement.engagementRate * 100) : null;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='mb-2'>\n <p className='mb-0'>\n {engagementRate\n ? (\n <Text namespace={namespace} phrase='everyoneWatched' options={{ engagementRate }} />\n )\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n {!!engagementRate &&\n <AppLink appLink={props.heatmapAppLink} className='text-info'>\n <Text namespace={namespace} phrase='viewHeatmap' />\n </AppLink>\n }\n </div>\n\n <div className='mb-2'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n </div>\n\n <p className='h3 text-center mb-2'>{engagementRate || '--'}%</p>\n <p className='text-center mb-0 font-size-sm'><Text namespace={namespace} phrase='amountWatched' /></p>\n </InsightCard>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonSession, AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { StudentResults } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getUniqueNamesConfig(id: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${id}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: UserOrAnonSession, shouldAnonymise: boolean): string {\n if (!user)\n return '';\n\n if (!shouldAnonymise)\n return 'sessionId' in user ? user.sessionName : UserHelper.getFullName(user);\n\n return uniqueNamesGenerator(getUniqueNamesConfig('sessionId' in user ? user.sessionName : user.id));\n}\n\nexport function getAnonSession(sessionId: string, anonSessions: AnonSessions): AnonSession {\n const fallback = {\n sessionId: sessionId,\n sessionName: getPhrase('anonymousUser')\n };\n\n if (!sessionId || !anonSessions)\n return fallback;\n\n const anonSession = anonSessions[sessionId];\n\n if (anonSession)\n return anonSession;\n\n return fallback;\n}\n\nexport function getUserOrAnonSession(result: StudentResults, anonSessions: AnonSessions): UserOrAnonSession {\n if (result.user)\n return result.user;\n\n return getAnonSession(result.sessionId, anonSessions);\n}\n","import { Engagement } from 'libs/shared/interfaces';\n\n/**\n * The heat map in the API response won't contain trailing zeros so we need to add those\n * in manually.\n */\nexport function getFullHeatMap(engagement: Engagement): number[] {\n return (new Array(Math.ceil(engagement.videoDuration))).fill(null).map((t, idx) => engagement.heatMap[idx] || 0);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: UserOrAnonSession,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if ('sessionId' in user) {\n return {\n name: anonymiseUserName(user, anonymiseUsers),\n surname: '',\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: UserOrAnonSession;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={'sessionId' in props.user}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {name}\n </h4>\n {props.showSubText && 'id' in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\",\"sm\":\"EgJ0v\",\"sharedAvatar\":\"cW0NT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacyResponse;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy.privacy) {\n case 'public':\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case 'protected':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case 'just_my_customer':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n /**\n * Because we plan to add restricted management later \n * for the time being we treat is the same as private \n */\n case 'restricted':\n case 'private':\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import React from 'react';\n\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nexport function useLockContentWidth(): void {\n React.useEffect(() => {\n LayoutHelper.lockContentWidth();\n return () => LayoutHelper.unlockContentWidth();\n }, []);\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport styles from './insights-mask.scss';\n\nconst namespace = 'lite.insightsMask';\n\ninterface InsightsShareMaskProps extends React.PropsWithChildren {\n hasShared: boolean;\n video: VideoTypes;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsShareMask(props: InsightsShareMaskProps) {\n function buildAppLink() {\n if (props.hasShareFlowV2) {\n const actions: Partial<Record<MasterType, string>> = {\n [MasterType.Video]: Actions.Insights.VIDEO_SHARE_OPTIONS,\n [MasterType.Clip]: Actions.Insights.CLIP_SHARE_OPTIONS,\n [MasterType.Interactive]: Actions.Insights.INTERACTIVE_SHARE_OPTIONS\n };\n \n return {\n application: AppChannels.INSIGHTS,\n action: actions[props.video.typeId],\n args: [props.video?.id],\n params: {\n shareId: props.shareId\n }\n };\n }\n\n return getShareAppLink(props.video);\n }\n\n return (\n <div className={`${!props.hasShared && styles.mask} position-relative`}>\n <div className={!props.hasShared ? 'position-absolute' : ''}>{props.children}</div>\n <div\n className={!props.hasShared ? `${styles.backdrop} d-flex flex-column align-items-center justify-content-start py-5` : ''}\n >\n {!props.hasShared && (\n <div className='text-center p-5 m-5 w-50'>\n <img className='mb-3' src={ImageUrls.Insights.SEND_PAPER_PLANE} width={288} />\n <h2 className='h3 mb-3'><Text namespace={namespace} phrase='shareHeading' /></h2>\n <p className='mb-3'><Text namespace={namespace} phrase='shareDescription' /></p>\n <IconButton svgName={cvSvgLibrary.Share} className='btn btn-dark' appLink={buildAppLink()}>\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AnonymousSharedToAvatar, SharedLinkAvatar, SharedToAvatarList } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.sharedToPill';\n\ninterface SharedToPillProps {\n shareRecipients: BaseObject[];\n hasShareLink?: boolean;\n maxAvatars?: number;\n imageCdnUrl: string;\n shareLinkText?: string;\n}\n\nSharedToPill.defaultProps = {\n maxAvatars: 3\n};\n\nexport function SharedToPill(props: SharedToPillProps) {\n const { shareRecipients } = props;\n\n return (\n <div className='d-flex align-items-center bg-gray-100 rounded-pill w-fit gap-2 p-2'>\n <span className='text-nowrap'><Text namespace={namespace} phrase={!shareRecipients ? 'sharedVia' : 'sharedTo'} /></span>\n\n {!shareRecipients &&\n <SharedLinkAvatar text={props.shareLinkText} avatarSize='sm' className='bg-dark text-white' />\n }\n\n {shareRecipients && !shareRecipients?.length &&\n <AnonymousSharedToAvatar avatarSize='sm' />\n }\n\n {shareRecipients &&\n <SharedToAvatarList\n recipients={shareRecipients}\n imageCdnUrl={props.imageCdnUrl}\n maxAvatars={props.maxAvatars}\n avatarSize='sm'\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"VRTes\",\"backdrop\":\"XzVXl\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["namespace","ZERO_COLOUR","COLOUR_SCALE","LEGEND_VALUES","getBackgroundColor","value","max","hex","getGradient","data","gradient","i","length","previousValue","currentValue","nextValue","push","join","EngagementHeatMapLegend","Math","legendSquareWidthPercentage","className","Text","phrase","map","val","idx","key","style","width","backgroundColor","EngagementHeatMap","props","heatMap","engagement","background","InsightCard","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","getStaticChartOptions","label","text","credits","enabled","yAxis","labels","gridLineWidth","tickPixelInterval","startOnTick","endOnTick","min","xAxis","margin","lineWidth","legend","chart","type","height","spacingTop","plotOptions","column","dataLabels","enableMouseTracking","minPointLength","InsightChart","highcharts","options","chartData","staticChartOptions","hasData","series","some","y","categories","MAX_ITEMS","InsightStudentList","students","slice","student","index","UserRecipientItemMetadata","user","imageCdnUrl","avatarClassName","detailsClassName","showDisplayName","showSubText","anonymiseUsers","undefined","percentage","round","PercentageIndicator","src","imageUrl","dangerouslySetInnerHTML","__html","description","appLink","AppLink","appLinkText","getPhrase","LanguageService","InsightDevices","categoriesData","defaultDevices","Phone","Computer","osCount","reduce","acc","group","name","deviceCategory","getDeviceType","getCategoriesData","topDeviceCount","Object","keys","category","topDevices","filter","borderRadius","inside","overflow","crop","highestCount","borderWidth","borderColor","smartCount","device","toLowerCase","useHTML","formatter","this","SvgHelper","replace","getDeviceIcon","InsightHeatmap","engagementRate","heatmapAppLink","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","anonymiseUserName","shouldAnonymise","id","sessionName","seed","floor","Date","getMinutes","dictionaries","separator","getAnonSession","sessionId","anonSessions","fallback","getUserOrAnonSession","result","getFullHeatMap","Array","ceil","videoDuration","fill","t","surname","avatarUrl","avatar","url","initials","showAnonymousUser","anonymousSvgSize","getSubText","userType","role","yearGroup","defaults","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","MasterType","classroomCount","groupCount","SharedToAvatar","item","typeId","classroom","classroomGroup","svgContainerClassName","Tooltip","spanHack","spanHackClassName","Avatar","UserHelper","extraClasses","IconCircle","svgSize","variant","metadata","colour","AnonymousSharedToAvatar","avatarSize","SharedLinkAvatar","SharedToAvatarList","AvatarList","items","recipients","avatarItem","avatarContainerClassname","getHiddenTooltip","hasShareLink","shareLinkText","defaultProps","maxAvatars","ShareLinkHelper","getPrivateIconAndText","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","isArray","overrideRestrictions","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","days","video","restriction","_restrictions","maxYearGroup","minAllowedYearGroup","rating","itemsToDisplay","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getAvatarStyles","transform","zIndex","marginRight","roleToDisplay","numberClassname","PercentageIndicatorLayout","ProgressCircle","ref","circle","radius","r","baseVal","circumference","PI","offset","strokeDasharray","strokeDashoffset","toString","scoreThresholds","percentageToFixed","layout","LabelInside","customLabel","LabelOnly","LabelBefore","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","ScoreThresholdDefaults","ScoreThresholdInsights","useLockContentWidth","InsightsShareMask","hasShared","hasShareFlowV2","actions","application","action","args","params","shareId","buildAppLink","SharedToPill","shareRecipients","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","isNaN","test","parseInt","trim","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","abs","unit"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6973],{5255:(e,t,n)=>{n.d(t,{Y:()=>s});var r=n(20354),a=n(30439);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e){var t,n=r.a.useBasicFetch(e&&a.o.getAnonSessions(e));return(null===(t=n.data)||void 0===t?void 0:t.length)?n.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(n={},r=t.sessionId,a=t,(r=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(r))in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,n));var n,r,a}),{}):{}}},41196:(e,t,n)=>{n.d(t,{W:()=>o});var r=n(20354),a=n(71553),i=n(20768),s=n(31949);function o(e,t,n){var o,u=r.a.useBasicFetch(s.N.currentUser()),l=r.a.useBasicFetch(!!e&&i.b.interactiveMetadata(e)),c=r.a.useBasicFetch(!!(null===(o=l.data)||void 0===o?void 0:o.interactiveId)&&i.b.interactive(l.data.interactiveId)),d=!!u.data&&!!c.data&&!!t;return r.a.useBasicFetch(d&&a.I.interactiveResultSet(l.data.interactiveId,l.data.id,u.data,t,n))}},26025:(e,t,n)=>{n.d(t,{B:()=>i});var r=n(1048),a=n(75795),i={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.users,i=t.classrooms,s=t.classroomGroups,o=function(e){var n=t[e];if(n)return Array.isArray(n)?n:[n]},u={};return n&&(u.users=o("users")),i&&(u.classrooms=o("classrooms")),s&&(u.classroomGroups=o("classroomGroups")),u},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.from,i=t.to,s=t.rangeName,o={};return n&&(o.from=n),i&&(o.to=i),s&&(o.rangeName=s),o}}},40003:(e,t,n)=>{n.d(t,{Hb:()=>m,NG:()=>b,W5:()=>d,eO:()=>v,nG:()=>l,wO:()=>p,zn:()=>u});var r=n(23481),a=n(110),i=n(57266),s=r.T.encloseNamespace("shared.analyticsUtils");function o(e){var t=a.O.convertDateToUTC(e);return a.O.format(t,"YYYY-MM-DDTHH:mm:ss")}function u(){return new Date(2021,0,1)}function l(){return new Date}function c(e){return e.find((function(e){return!!e.default}))}function d(e,t){if(t)return e.find((function(e){return e.name===t}))}function m(){var e=u(),t=(new Date).getFullYear(),n=t===e.getFullYear();return[{name:s("today"),startDate:new Date,endDate:new Date},{name:s("thisMonth"),startDate:new Date(t,(new Date).getMonth(),1),endDate:new Date},{name:s("lastThreeMonths"),startDate:new Date(t,(new Date).getMonth()-2,1),endDate:new Date},{name:s("lastSixMonths"),startDate:new Date(t,(new Date).getMonth()-5,1),endDate:new Date},{name:s("thisYear"),startDate:new Date(t,0,1),endDate:new Date},{name:s("lastYear"),startDate:new Date(t-1,0,1),endDate:new Date(t,0,0),disabled:n,tooltip:n?s("lastYearDisabled"):""},{name:s("allTime"),startDate:a.O.subtract(new Date,5,"years"),endDate:new Date,default:!0}]}function f(e){return a.O.format(e,"YYYY-MM-DD")}function v(e){return e.name?{rangeName:e.name}:{from:f(e.startDate),to:f(e.endDate)}}function b(e,t){var n=t.to,r=t.from,s=t.rangeName,o=d(e,s);if(o)return r||n?void i.e.updateParams(v(o),{replace:!0,merge:!0,keysToRemove:["from","to"]}):o;var m=c(e);if(r&&n&&a.O.isValid(r)&&a.O.isValid(n)){var f=!0,b=a.O.convertDateToUTC(new Date(r)),p=a.O.convertDateToUTC(new Date(n));a.O.isBefore(b,u(),"day")&&(b=u(),f=!1),a.O.isAfter(p,l(),"day")&&(p=l(),f=!1),a.O.isAfter(b,p)&&(b=m.startDate,p=m.endDate,f=!1);var g={startDate:b,endDate:p,name:f?s||"custom":""};if(f)return g;i.e.updateParams(v(g),{replace:!0,merge:!0,keysToRemove:["rangeName"]})}else i.e.updateParams(v(m),{replace:!0,merge:!0,keysToRemove:["rangeName"]})}function p(e,t){var n=function(e){return o(a.O.startOf(e,"day"))},r=function(e){return o(a.O.endOf(e,"day"))},i=d(e,t.rangeName);if(i)return{start:n(f(i.startDate)),end:r(f(i.endDate))};if(t.from&&t.to)return{start:n(t.from),end:r(t.to)};var s=c(e);return{start:n(f(s.startDate)),end:r(f(s.endDate))}}},43503:(e,t,n)=>{n.r(t),n.d(t,{InteractiveStudentResultsView:()=>A});var r=n(32735),a=n(23481),i=n(20354),s=n(2948),o=n(5255),u=n(41196),l=n(9193),c=n(26025),d=n(26136),m=n(40003),f=n(30439),v=n(3218),b=n(9111),p=n(38143),g=n(39151),y=n(20768),w=n(26304),h=n(91286),k=n(93322);function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var S=a.T.encloseNamespace("shared.interactiveStudentResults");function A(e){var t,n,a,A,O,C,E,R=(C=(0,s.D)(p.g.ANONYMISE_USERS),E=1,function(e){if(Array.isArray(e))return e}(C)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],u=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,a=e}finally{try{if(!u&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw a}}return o}}(C,E)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?D(e,t):void 0}}(C,E)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,k.F)();var I=i.a.useBasicFetch(y.b.interactiveMetadata(e.interactiveId)),N=i.a.useBasicFetch((null===(t=I.data)||void 0===t?void 0:t.interactiveId)&&y.b.interactive(I.data.interactiveId)),M=c.B.getDateRangeAppLinkParams(),j=(0,u.W)(e.interactiveId,(0,m.wO)((0,m.Hb)(),M)),T=i.a.useBasicFetch(g.L.config()),F=i.a.useBasicFetch(f.o.getShareLinkByObjectId(e.interactiveId)),B=(0,o.Y)(null===(n=F.data)||void 0===n?void 0:n.id);(0,h.v)([I,j]),(0,w.b)(I);var U=(0,l.D)(null===(a=N.data)||void 0===a?void 0:a.id,null===(A=I.data)||void 0===A?void 0:A.id,e.closePopup),Y=U.markedAnswers,P=U.addMarkedAnswers,L=U.submitMarkedAnswers,x=null===(O=j.data)||void 0===O?void 0:O.students.find((function(t){var n,r,a,i,s;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(a=e.userId)||void 0===a?void 0:a.toString()):!!e.sessionId&&(null===(i=t.sessionId)||void 0===i?void 0:i.toString())===(null===(s=e.sessionId)||void 0===s?void 0:s.toString())})),H=x?S("heading",{studentName:(0,d.B2)((0,d.DV)(x,B),R)}):"",Q=!!N.data&&!!j.data&&!!T.data;return r.createElement(b.G,{title:H,showLoadingSpinner:!Q,closePopup:e.closePopup,size:"lg"},Q&&r.createElement(v.R,{interactive:N.data,studentResults:x,markedAnswers:Y,addMarkedAnswers:P,submitMarkedAnswers:L,imageCdnUrl:T.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:R,reportsStyling:e.reportsStyling,anonSessions:B}))}},3218:(e,t,n)=>{n.d(t,{R:()=>D});var r=n(32735),a=n(69087),i=n(26136),s=n(39157),o=n(69186),u=n(86572),l=n(28972),c=n(83140),d=n(80845),m=n(23481),f=n(2102),v=n(36532),b=m.T.encloseNamespace("interactives.studentResponseList");function p(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},b("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:b("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},b("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},b("submitAnswers")))))}var g=m.T.encloseNamespace("interactives.studentResponseList");function y(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("score")),e.summary.awaitingMarking?r.createElement("em",null,g("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:g("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},g("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},g("submitAnswers"))))}const w={awaitingMarking:"MvGb5"};function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,s,o=[],u=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,a=e}finally{try{if(!u&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function D(e){var t,n,m,f,v=h(r.useState(!1),2),b=v[0],g=v[1],k=(t=r.useRef(null),n=h(r.useState(!1),2),m=n[0],f=n[1],r.useEffect((function(){t.current&&!m&&(f(!0),requestAnimationFrame((function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})})))}),[t.current,m]),t),D=(0,s.Rt)(e.interactive,e.studentResults),S=(0,d.Q)(e.interactive),A=function(e,t){return e.filter((function(e){return c.A.isInteractionCorrect(e,(0,d.j_)(t))===l.w.AwaitingMarking}))}(S,e.studentResults);function O(){g(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(y,{summary:D,interactionsToMark:A,markedAnswers:e.markedAnswers,onClickSubmit:O,showSubmitButtonSpinner:b,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},S.map((function(t,n){var l,c=t.id.toString()===(null===(l=e.selectedInteractionId)||void 0===l?void 0:l.toString()),d=A.some((function(e){return e.id===t.id})),m=(0,i.B2)((0,i.DV)(e.studentResults,e.anonSessions),e.anonymiseUsers),f="p-2 mb-3 rounded";return c&&(f+=" border-2 border-info shadow"),f+=d?" ".concat(w.awaitingMarking):" border",r.createElement("li",{key:n,className:f,ref:c?k:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(u.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(a.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,s.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))}))),r.createElement(p,{interactionsToMark:A,markedAnswers:e.markedAnswers,onClickSubmit:O,onClickClose:e.onClickClose,showSubmitButtonSpinner:b,isDemo:e.isDemo}))}},94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),a=n(81886),i=n(67058),s=n(14553),o=n(49267),u=n(49075),l={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:o.a,privacy:s.q},badRequest:u._,internalServerError:u._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},l),t);i&&a.Q.Ry.isStatusCodeError(i)&&(i!==r.o.InternalServer?i!==r.o.NotFound?i!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new s.badRequest):n.forbidden||a.Q.Ry.throw(new s.forbidden.privacy):n.notFound||a.Q.Ry.throw(new s.notFound):n.internalServerError||a.Q.Ry.throw(new u._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>s});var r=n(32735),a=n(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,t,n){var s=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){s.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[i(s),t,n])}},57266:(e,t,n)=>{n.d(t,{e:()=>s});var r=n(81886),a=n(1048),i=n(75795),s={updateParams:function(e,t){var n=i.O.getCurrentRoute().appLink,s="string"==typeof n.params?r.Q.Ab.DeserializeQueryParams(n.params):n.params;t.keysToRemove&&(s=a.t.omit(s,t.keysToRemove));var o=(null==t?void 0:t.merge)?Object.assign(Object.assign({},s),e):e,u=Object.assign(Object.assign({},n),{params:o});a.t.isEqual(n,u)||r.Q.C$.trigger(u,a.t.omit(t,["merge","keysToRemove"]))}}}}]);
|
|
2
|
-
//# sourceMappingURL=6973-ede6601614-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6973-ede6601614-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseAnonSessions.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/DateRangeUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/views/interactive-student-results/InteractiveStudentResultsView.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\n\nexport interface AnonSession {\n sessionId: string;\n sessionName: string;\n}\n\nexport interface AnonSessions extends Record<string, AnonSession> {}\n\nexport function useAnonSessions(shareId: string): AnonSessions {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(shareId && ShareRequests.getAnonSessions(shareId));\n\n if (!anonSessions.data?.length)\n return {};\n\n return anonSessions.data.reduce((prev, current) => ({ ...prev, [current.sessionId]: current }), {});\n}","import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter: AnalyticsRequestFilter,\n includePublicResults?: boolean\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data && (!!requestFilter);\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n includePublicResults\n ));\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { DateRange } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function convertDateToUtcDateTimeString(date: Date): string {\n const utc = DateHelper.convertDateToUTC(date);\n return DateHelper.format(utc, 'YYYY-MM-DDTHH:mm:ss');\n}\n\nexport function getMinDate(): Date {\n return new Date(2021, 0, 1);\n}\n\nexport function getMaxDate(): Date {\n return new Date();\n}\n\nexport function getDefaultDateRange(dateRangePresets: DateRange[]): DateRange {\n return dateRangePresets.find(range => !!range.default);\n}\n\nexport function getPresetRangeByName(dateRangePresetss: DateRange[], rangeName: string): DateRange | undefined {\n if (!rangeName)\n return;\n\n const presets = dateRangePresetss;\n \n return presets.find(p => p.name === rangeName);\n}\n\nexport function getGenericDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastTwelveMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 11, 1),\n endDate: new Date(),\n default: true\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n }\n ];\n}\n\nexport function getInsightsDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n },\n {\n name: getPhrase('allTime'),\n startDate: DateHelper.subtract(new Date(), 5, 'years'),\n endDate: new Date(),\n default: true\n }\n ];\n}\n\nexport function formatDateQueryParam(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n}\n\nexport function getRouteQueryParams(dateRange: DateRange): DateRangeQueryParams {\n if (dateRange.name)\n return { rangeName: dateRange.name };\n\n return {\n from: formatDateQueryParam(dateRange.startDate),\n to: formatDateQueryParam(dateRange.endDate)\n };\n}\n\nexport function useGetDateRangeFromQueryParams(\n dateRangePresets: DateRange[],\n dateRangeQueryParams: DateRangeQueryParams\n): DateRange | null {\n const { to, from, rangeName } = dateRangeQueryParams;\n \n const presetRange = getPresetRangeByName(dateRangePresets, rangeName);\n\n if (presetRange) {\n if (!from && !to)\n return presetRange;\n\n /**\n * If a rangeName has been set, we don't use to and from so we remove them from the url params.\n */\n AppRouteHelper.updateParams(\n getRouteQueryParams(presetRange),\n { replace: true, merge: true, keysToRemove: [ 'from', 'to' ]}\n );\n return;\n }\n\n const defaultDateRange = getDefaultDateRange(dateRangePresets);\n\n /**\n * If a param is missing, or one of them isn't a valid date, short-circuit the logic below.\n */\n if (!from || !to || !DateHelper.isValid(from) || !DateHelper.isValid(to)) {\n AppRouteHelper.updateParams(\n getRouteQueryParams(defaultDateRange),\n { replace: true, merge: true, keysToRemove: ['rangeName']}\n );\n return;\n }\n\n let initialDateRangeValid = true;\n\n let startDate = DateHelper.convertDateToUTC(new Date(from));\n let endDate = DateHelper.convertDateToUTC(new Date(to));\n\n if (DateHelper.isBefore(startDate, getMinDate(), 'day')) {\n startDate = getMinDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(endDate, getMaxDate(), 'day')) {\n endDate = getMaxDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(startDate, endDate)) {\n startDate = defaultDateRange.startDate;\n endDate = defaultDateRange.endDate;\n initialDateRangeValid = false;\n }\n\n const dateRange: DateRange = {\n startDate,\n endDate,\n name: initialDateRangeValid\n ? rangeName || 'custom'\n : ''\n };\n\n if (initialDateRangeValid)\n return dateRange;\n\n /**\n * If one or both of the date params were invalid, we trigger a route update.\n */\n AppRouteHelper.updateParams(getRouteQueryParams(dateRange), { replace: true, merge: true, keysToRemove: ['rangeName']});\n}\n\nexport function getStartEndParams(\n dateRangePresetss: DateRange[],\n filterParams: FilterQueryParams\n): { start: string; end: string } {\n const getStartDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.startOf(date, 'day'));\n const getEndDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.endOf(date, 'day'));\n\n const presetRange = getPresetRangeByName(dateRangePresetss, filterParams.rangeName);\n\n /**\n * If the user has chosen a preset range, lookup the start and end dates as they won't be\n * in the query params.\n */\n if (presetRange)\n return {\n start: getStartDate(formatDateQueryParam(presetRange.startDate)),\n end: getEndDate(formatDateQueryParam(presetRange.endDate))\n };\n\n /**\n * If they have chosen a custom date range, use their chosen start and end dates.\n */\n if (filterParams.from && filterParams.to)\n return {\n start: getStartDate(filterParams.from),\n end: getEndDate(filterParams.to)\n };\n\n /**\n * The below should never be hit\n */\n const defaultRange = getDefaultDateRange(dateRangePresetss);\n\n return {\n start: getStartDate(formatDateQueryParam(defaultRange.startDate)),\n end: getEndDate(formatDateQueryParam(defaultRange.endDate))\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { Config, Interactive, InteractiveMetadata, ShareLink } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n userId: string;\n interactiveId: string;\n interactionId?: string;\n reportsStyling?: boolean;\n sessionId?: string;\n}\n\nexport function InteractiveStudentResultsView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = useFetchInteractiveResults(\n props.interactiveId,\n getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareLinkByObjectId(props.interactiveId));\n const anonSessions = useAnonSessions(shareLink.data?.id);\n\n useHandleObjectError([ interactiveMetadata, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(getUserOrAnonSession(studentResults, anonSessions), anonymiseUsers) })\n : '';\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n reportsStyling={props.reportsStyling}\n anonSessions={anonSessions}\n />\n }\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n getUserOrAnonSession(props.studentResults, props.anonSessions),\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\n }\n};"],"names":["useAnonSessions","shareId","anonSessions","data","length","reduce","prev","current","sessionId","useFetchInteractiveResults","interactiveMetadataId","requestFilter","includePublicResults","currentUser","interactiveMetadata","interactive","interactiveId","shouldFetchResults","I","id","AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getPhrase","convertDateToUtcDateTimeString","date","utc","getMinDate","Date","getMaxDate","getDefaultDateRange","dateRangePresets","find","range","getPresetRangeByName","dateRangePresetss","p","name","getInsightsDateRangePresets","minDate","currentYear","getFullYear","isMinDateThisYear","startDate","endDate","getMonth","disabled","tooltip","default","formatDateQueryParam","getRouteQueryParams","dateRange","useGetDateRangeFromQueryParams","dateRangeQueryParams","presetRange","replace","merge","keysToRemove","defaultDateRange","initialDateRangeValid","getStartEndParams","filterParams","getStartDate","getEndDate","start","end","defaultRange","InteractiveStudentResultsView","props","anonymiseUsers","dateRangeAppLinkParams","results","config","shareLink","closePopup","markedAnswers","addMarkedAnswers","submitMarkedAnswers","studentResults","students","s","userId","user","toString","popupTitle","studentName","dataLoaded","title","showLoadingSpinner","size","imageCdnUrl","selectedInteractionId","interactionId","onClickClose","reportsStyling","LanguageService","StudentResponseListFooter","numMarkedAnswers","Object","keys","className","showSubmitButtonSpinner","onClick","interactionsToMark","isDemo","Tooltip","spanHack","spanHackClassName","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","Math","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","requestAnimationFrame","scrollIntoView","behavior","block","interactions","questionsToMark","filter","i","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","map","interaction","idx","isSelected","markingRequired","some","q","anonymisedUserName","InteractionLabel","iconClassName","InteractionResponse","markedStatus","markInteraction","showFeedback","responseComponentClass","InteractionResponseItem","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","forEach","AppRouteHelper","updateParams","options","currentParams","updatedParams","updatedAppLink"],"sourceRoot":""}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 7075-9a76ce47c9-lite.chunk.js.LICENSE.txt */
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7075],{38307:(e,t,n)=>{n.d(t,{c:()=>h,l:()=>y});var r=n(32735),o=n(232),a=n.n(o),i=n(8604),l=n(83345);const c={heatMap:"epapa",legend:"uhH4p"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var u="shared.engagementHeatMap",f="#f1f1f1",m=a().scale(["#daf07d","#08bd1a"]),d=[0,.01,.25,.5,.75,1];function p(e,t){return e?m(e/t).hex():f}function v(e,t){for(var n=[],r=0;r<e.length;r++){var o=r>0&&e[r-1],a=e[r],i=r<e.length-1&&e[r+1];a===o&&a===i||n.push("".concat(p(a,t)," ").concat(100/e.length*r,"%"))}return"linear-gradient(to right, ".concat(n.join(","),")")}function y(){var e=Math.max.apply(Math,d),t=100/d.length;return r.createElement("div",{className:"d-flex justify-content-between w-100"},r.createElement(l.x,{namespace:u,phrase:"less"}),r.createElement("div",{className:"d-flex mx-1 flex-grow-1 ".concat(c.legend)},d.map((function(n,o){return r.createElement("div",{key:o,style:{width:"".concat(t,"%"),backgroundColor:p(n,e)}})}))),r.createElement(l.x,{namespace:u,phrase:"more"}))}function h(e){var t,n,o,a=(0,i.O)(e.engagement),l=null!==(t=e.max)&&void 0!==t?t:Math.max.apply(Math,function(e){if(Array.isArray(e))return s(e)}(o=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r.createElement("div",{className:"border rounded ".concat(c.heatMap," ").concat(null!==(n=e.className)&&void 0!==n?n:""),style:{background:v(a,l)}})}},84621:(e,t,n)=>{n.d(t,{L:()=>i});var r=n(32735),o=n(83914);const a={icon:"sAmpy",count:"faDs4"};function i(e){return r.createElement("section",{className:"d-flex flex-column border rounded p-3 h-100"},r.createElement("div",{className:"d-flex ".concat(e.subtitle?"align-items-top":"align-items-center"," mb-2")},r.createElement("div",{className:"".concat(a.icon," ").concat(e.svgClassName," rounded-circle d-flex justify-content-center align-items-center")},r.createElement(o.x,{svgName:e.svgName,size:o.S.Small})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("h2",{className:"h6 mb-0"},e.title)),"number"==typeof e.count&&r.createElement("div",{className:"".concat(a.count," d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto")},e.count)),e.children)}},70072:(e,t,n)=>{n.d(t,{d:()=>r});var r={fontSize:"12px",fontFamily:'"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"',fontWeight:"400",color:"#313543"}},26136:(e,t,n)=>{n.d(t,{B2:()=>l,DV:()=>s,jP:()=>c});var r=n(76198),o=n(23481),a=n(64818),i=o.T.encloseNamespace("shared.analyticsUtils");function l(e,t){return e?t?(0,r._8)((n="sessionId"in e?e.sessionName:e.id,o=+"".concat(n).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[r.O9,r.yd],separator:" ",length:2,style:"capital",seed:o})):"sessionId"in e?e.sessionName:a.l.getFullName(e):"";var n,o}function c(e,t){var n={sessionId:e,sessionName:i("anonymousUser")};return e&&t&&t[e]||n}function s(e,t){return e.user?e.user:c(e.sessionId,t)}},8604:(e,t,n)=>{function r(e){return new Array(Math.ceil(e.videoDuration)).fill(null).map((function(t,n){return e.heatMap[n]||0}))}n.d(t,{O:()=>r})},40782:(e,t,n)=>{n.d(t,{I:()=>r,O:()=>c});var r,o=n(32735),a=n(2606),i=n(362);function l(e){var t=o.useCallback((function(t){if(t){var n=t.r.baseVal.value,r=2*Math.PI*n,o=r-e.percentage*r;t.style.strokeDasharray="".concat(r," ").concat(r),t.style.strokeDashoffset=o.toString()}}),[e.percentage]);return o.createElement("svg",null,o.createElement("circle",{r:(0,a.pu)(e.size),className:i.Z.backgroundCircle}),!(0,a.zR)(e.percentage)&&o.createElement("circle",{ref:t,r:(0,a.pu)(e.size),className:(0,a.V4)(e.percentage,e.scoreThresholds)}))}function c(e){var t,n=(0,a.Ki)(e.percentage),c=e.size||(e.layout===r.LabelInside?a.Mk.Large:a.Mk.Small),s=e.customLabel||(0,a.DV)(n);return e.layout===r.LabelOnly?o.createElement("span",{className:(0,a.IA)(n)},s):o.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===r.LabelBefore&&o.createElement("span",{className:"me-2"},s),o.createElement("div",{className:(0,a.tw)(c,n)},o.createElement(l,{percentage:n,size:c,scoreThresholds:e.scoreThresholds}),e.layout===r.LabelInside&&o.createElement("span",{className:i.Z.centredPercentageText},s)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(r||(r={})),c.defaultProps={layout:r.CircleOnly}},2606:(e,t,n)=>{n.d(t,{DV:()=>y,IA:()=>d,Ki:()=>v,Mk:()=>l,V4:()=>m,pu:()=>f,tw:()=>p,zR:()=>h});var r=n(94892),o=n(362);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t,n){return(t=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l,c=.2,s=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(l||(l={}));var u=i(i(i({},l.ExtraSmall,{size:2}),l.Small,{size:2}),l.Large,{size:5.8});function f(e){var t=u[e].size,n=e===l.Large?s:c;return"".concat(t/2-2*n,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?o.Z.circleSuccess:e>=t.MODERATE?o.Z.circleWarning:o.Z.circleDanger}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function p(e,t){var n="d-inline-block ".concat(o.Z.circleContainer);return e===l.Large&&(n+=" ".concat(o.Z.lgCircleContainer)),e===l.ExtraSmall&&(n+=" ".concat(o.Z.xsCircleContainer)),h(t)&&(n+=" ".concat(o.Z.pendingCircle)),n}function v(e){if(!h(e))return+e.toFixed(2)}function y(e){return h(e)?"--%":"".concat(Math.round(100*e),"%")}function h(e){return"number"!=typeof e}},6748:(e,t,n)=>{n.d(t,{i:()=>S});var r=n(32735),o=n(42648),a=n(35509),i=n(91967),l=n(15611),c=n(17808),s=n(1287),u=n(83914),f=n(90281),m={opacity:"0.8",cursor:"grabbing"},d=n(35223);function p(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function h(e){var t,n,r,o;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(n=e.current)||void 0===n?void 0:n.scrollLeft)+1<(null===(r=e.current)||void 0===r?void 0:r.scrollWidth)-(null===(o=e.current)||void 0===o?void 0:o.clientWidth)}}const g={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var w=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function E(e){var t,n;return e.column.canSort?r.createElement("span",{className:"".concat(g.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==n?n:"")},r.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?d.vn.ArrowRight:d.vn.ArrowLeft,size:u.S.Small})):r.createElement(r.Fragment,null)}function O(e){var t,n,o,u,f,d,v,y,h={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(h.initialState={selectedRowIds:(v=e.initialSelectedRowIds,y={},v.forEach((function(e){return y[e]=!0})),y)}),e.getRowId&&(h.getRowId=e.getRowId);var g,w=a.useTable.apply(void 0,[h].concat((g=function(e){var t=[a.useSortBy,a.useRowSelect,"flex"===e.layout?a.useFlexLayout:a.useBlockLayout];return e.allowFiltering&&(t=[].concat(p(t),[a.useFilters])),e.allowGlobalFiltering&&(t=[].concat(p(t),[a.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return b(e)}(g)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(g)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),O=w.getTableProps,S=w.getTableBodyProps,j=w.headerGroups,C=w.rows,k=w.prepareRow,x=w.toggleAllRowsSelected,N=w.setGlobalFilter,P=w.setHiddenColumns,T=w.state.sortBy;function I(){return C.map((function(t){k(t);var n=function(t){var n,r,o,a,l,c=i.q.isFunction(null===(n=e.theme)||void 0===n?void 0:n.row)?e.theme.row(t):null!==(o=null===(r=e.theme)||void 0===r?void 0:r.row)&&void 0!==o?o:"";return t.isSelected&&(null===(a=e.theme)||void 0===a?void 0:a.selectedRow)&&(c+=" ".concat(null===(l=e.theme)||void 0===l?void 0:l.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),o=!!e.getRowAppLink&&e.getRowAppLink(t);function a(){e.onSelectRow&&(e.allowSelectMultipleRows||x(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,i){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,i);return o?r.createElement("div",{role:"row",key:t.id},r.createElement(l.F,Object.assign({},e,c,{className:n,appLink:o}),L(t))):r.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:n,onClick:a}),L(t))}var u=t.getRowProps();return e.enableSortableRows?r.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:r.forwardRef((function(e,t){return c(e,t)}))}):c(u)}))}function L(t){return t.cells.map((function(n){var o=function(t,n){var r,o,a="";return"function"==typeof(null===(r=e.theme)||void 0===r?void 0:r.cell)&&(a=e.theme.cell(t,n)),"string"==typeof(null===(o=e.theme)||void 0===o?void 0:o.cell)&&(a=e.theme.cell),e.onSelectCell&&(a+=" cursor-pointer"),a}(t,n);return r.createElement("div",Object.assign({key:n.column.id},n.getCellProps(),{className:o,onClick:function(){e.onSelectCell&&e.onSelectCell(n)}}),n.render("Cell"))}))}return r.useEffect((function(){e.onSort&&e.onSort(T)}),[T]),r.useEffect((function(){e.globalFilter&&N(e.globalFilter)}),[e.globalFilter]),r.useEffect((function(){e.hiddenColumns&&P(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),r.createElement("div",Object.assign({},O(),{className:null!==(n=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==n?n:""}),r.createElement("div",{className:null!==(u=null===(o=e.theme)||void 0===o?void 0:o.header)&&void 0!==u?u:""},j.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerRow)&&void 0!==o?o:""}),t.headers.map((function(t){var n,o;return r.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(o=null===(n=e.theme)||void 0===n?void 0:n.headerCell)&&void 0!==o?o:""}),t.render("Header",{renderSortIndicator:function(){return r.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&r.createElement(E,{column:t,theme:e.theme}))})))}))),r.createElement("div",Object.assign({},S(),{className:null!==(d=null===(f=e.theme)||void 0===f?void 0:f.body)&&void 0!==d?d:""}),e.enableSortableRows?r.createElement(c.Q,{ids:C.map((function(e){return e.original.id})),getDragOverlay:function(t){var n,o,a=C.findIndex((function(e){return e.original.id===t})),i=C[a];return r.createElement("div",Object.assign({},e,{className:(n=e.theme,o="g-0 ",n&&(o+=n.row),o),style:m}),L(i))},onSortEnd:e.onSortingRowsEnd},I()):I()))}function S(e){var t=e.enableSlider,n=e.scrollIncrement,a=e.scrollable,l=w(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,n=r.useRef(null),o=(e=r.useState(h(n)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(e,t)||v(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],l=o[1],c=i.q.throttle((function(){l(h(n))}),200),s=r.useCallback((function(e){var t;n.current&&(null===(t=n.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(l(h(n)),e.addEventListener("scroll",c)),n.current=e}),[]);return r.useEffect((function(){(null==n?void 0:n.current)&&l(h(n))}),[n]),{ref:s,scrollState:a,scroll:function(e){var t;null===(t=n.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(a)return r.createElement(o.$B,{renderTrackHorizontal:function(){return r.createElement("div",{className:g.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},r.createElement(O,Object.assign({},l)));if(!t)return r.createElement(O,Object.assign({},l));function d(e){m(n*("right"===e?1:-1))}return r.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},r.createElement("div",{className:"px-4"},r.createElement("div",{className:"position-relative"},r.createElement(f.W,{direction:f.f.Left,onClick:function(){return d("left")},hide:!u.canScrollLeft}),r.createElement("div",{className:"".concat(g.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},r.createElement(O,Object.assign({},l))),r.createElement(f.W,{direction:f.f.Right,onClick:function(){return d("right")},hide:!u.canScrollRight}))))}S.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},94892:(e,t,n)=>{n.d(t,{T:()=>o,i:()=>r});var r={HIGH:.75,MODERATE:.5},o={HIGH:.7,MODERATE:.7}},93322:(e,t,n)=>{n.d(t,{F:()=>a});var r=n(32735),o=n(13126);function a(){r.useEffect((function(){return o.e.lockContentWidth(),function(){return o.e.unlockContentWidth()}}),[])}},64176:(e,t,n)=>{n.d(t,{w:()=>Ke});var r=n(32735),o=n(6748),a=n(23481),i=n(38307),l=n(26136),c=n(97408),s=n(40782),u=n(64818);const f={heatMap:"rwDjh",avatarContainer:"kW4ZM"};function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var d=a.T.encloseNamespace("shared.engagementTable");function p(e){var t;return r.createElement("div",{className:"".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function v(e){return r.createElement(p,{className:"d-inline-block ".concat(e.column.isSorted?"fw-bold":"")},d(e.phraseKey))}function y(e){return r.useMemo((function(){var t,n,o=(t=e.engagement,n=0,t.forEach((function(e){var t,r=Math.max.apply(Math,function(e){if(Array.isArray(e))return m(e)}(t=e.heatMap)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());r>n&&(n=r)})),n);return[{Header:function(e){var t=e.column;return r.createElement(v,{column:t,phraseKey:"name"})},width:22,accessor:"user",sortType:function(t,n){return(0,l.B2)(t.values.user,e.anonymiseUsers)>(0,l.B2)(n.values.user,e.anonymiseUsers)?1:-1},Cell:function(t){var n,o,a,i,s=t.value,m=(o=s,a=e.anonymiseUsers,{name:(i=(0,l.B2)(o,a).split(" ").filter((function(e){return!!e})))[0],surname:i.slice(1).join(" ")}),d=m.name,v=m.surname;return r.createElement(p,{className:"d-flex align-items-center h-100"},r.createElement("span",{className:f.avatarContainer},r.createElement(c.q,{imageCdnUrl:e.imageCdnUrl,initials:u.l.getInitials(d,v),imageUrl:!e.anonymiseUsers&&"avatar"in s?null===(n=s.avatar)||void 0===n?void 0:n.url:null,showAnonymousUser:"sessionId"in s})),r.createElement("span",{className:"ms-2 clamp-1"},d," ",v))}},{Header:function(e){var t=e.column;return r.createElement(v,{column:t,phraseKey:"views"})},accessor:"viewCount",width:15,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(p,{className:"d-flex align-items-center h-100"},r.createElement("div",null,t))}},{Header:function(e){var t=e.column;return r.createElement(v,{column:t,phraseKey:"engagement"})},accessor:"engagementRate",width:20,sortType:"basic",sortDescFirst:!0,Cell:function(e){var t=e.value;return r.createElement(p,{className:"w-33"},r.createElement(s.O,{percentage:t,layout:s.I.LabelBefore}))}},{Header:function(e){var t=e.column;return r.createElement(v,{column:t,phraseKey:"heatMap"})},accessor:"heatMap",width:48,disableSortBy:!0,Cell:function(e){var t=e.row.original;return r.createElement(p,{className:"d-flex align-items-center h-100"},r.createElement(i.c,{engagement:t,max:o,className:"".concat(f.heatMap," flex-grow-1")}))}}]}),[e.anonymiseUsers])}var h={table:"bg-white rounded px-0",header:"border-bottom",headerCell:"m-3",cell:"mx-3 my-2"};function g(e){var t,n,a,i=y({engagement:e.engagement,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers}),c=(t=e.engagement,n=e.users,a=e.anonSessions,r.useMemo((function(){var e=[];return t.forEach((function(t){var r=null==n?void 0:n.find((function(e){return e.id===t.userId}));r?e.push(Object.assign(Object.assign({},t),{user:r})):t.sessionId&&e.push(Object.assign(Object.assign({},t),{user:(0,l.jP)(t.sessionId,a)}))})),e}),[null==n?void 0:n.length]));return c.length?r.createElement(o.i,{columns:i,data:c,theme:Object.assign(Object.assign({},h),{table:e.border?"".concat(h.table," border"):h.table}),enableSort:!0}):r.createElement(r.Fragment,null)}var b=n(84621);function w(e){return r.createElement(s.O,{layout:e.layout,className:e.className,percentage:0,customLabel:"--%"})}var E=n(83345),O=n(35223),S="shared.insightAmountWatched",j=a.T.encloseNamespace(S);function C(e){var t,n=(null===(t=e.engagement)||void 0===t?void 0:t.engagementRate)>0?e.engagement.engagementRate:null,o=Math.round(100*e.engagement.engagementRate),a=!e.params.users&&!e.params.classrooms&&!e.params.classroomGroups;return r.createElement(b.L,{title:j("title"),svgName:O.vn.Timer,svgClassName:"bg-light-green text-green"},r.createElement("div",{className:"d-flex flex-column align-items-center my-auto gap-2"},!!e.engagement&&r.createElement(r.Fragment,null,r.createElement(s.O,{percentage:n,layout:s.I.LabelInside}),r.createElement("p",{className:"text-center"},"number"==typeof n?a?r.createElement(E.x,{namespace:S,phrase:"everyoneWatched",options:{percentage:o}}):r.createElement(E.x,{namespace:S,phrase:"usersWatched",options:{percentage:o}}):r.createElement(E.x,{namespace:S,phrase:"notWatched"}))),!e.engagement&&r.createElement(r.Fragment,null,r.createElement(w,{layout:s.I.LabelInside}))))}var k=n(72306),x=n.n(k),N=n(70312),P=n.n(N),T=n(70072),I=n(75896),L=["#FF9300","#38A2E8","#7A76E8","#B679C7","#F7847B","#D9584F","#FFCD52","#5DC786","#40BCC3","#40C2BB"];function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var M=n(97958),R="shared.insightTotalViews",_=a.T.encloseNamespace(R),B={title:{text:null},credits:{enabled:!1},chart:{backgroundColor:"transparent",spacing:[0,0,0,0]},legend:{itemStyle:T.d,itemDistance:8},plotOptions:{pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!1},showInLegend:!0,borderWidth:0,size:"80%"}}};function D(e){var t,n,o,a,i,l,c,s=function(e){var t,n,r=e.findIndex((function(e){return"Staff"===e.name}));if(r>-1){var o=(t=e.splice(r,1),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],c=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw o}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];e.push(o)}return e.sort((function(e,t){var n,r;return parseInt(null===(n=e.name.match(/\d+/))||void 0===n?void 0:n[0])-parseInt(null===(r=t.name.match(/\d+/))||void 0===r?void 0:r[0])}))}((o=e.events,a=[],i=function(e){return"Unknown"===e?"Staff":e},l={},null==(c=o["yearGroupCount"])||c.forEach((function(e){var t;e.name&&!(null==a?void 0:a.includes(e.name.toLowerCase()))&&(l[e.name]=null!==(t=l[e.name])&&void 0!==t?t:0,l[e.name]+=e.count)})),I.m.sortBy(Object.keys(l).map((function(e){return{name:i?i(e):e,y:l[e],type:"pie"}})),"name").map((function(e,t){return Object.assign(Object.assign({},e),{color:L[t%L.length]})})))),u=null!==(n=null==(t=s)?void 0:t.reduce((function(e,t){return e+t.y}),0))&&void 0!==n?n:null;return r.createElement(b.L,{title:_("title"),svgClassName:"bg-light-blue text-blue",svgName:O.vn.VisibleOn},(null==s?void 0:s.length)?r.createElement(r.Fragment,null,r.createElement("p",{className:"mb-0"},r.createElement(E.x,{namespace:R,phrase:"totalViews",options:{totalViews:u}})),r.createElement("div",{className:"d-flex justify-content-center h-75"},r.createElement(P(),{highcharts:x(),options:function(e){return Object.assign(Object.assign({},B),{series:[{type:"pie",name:_("title"),data:e}]})}(s),containerProps:{className:"w-100"}}))):r.createElement(M.u,{className:"pt-0 my-auto"},r.createElement(M.u.Image,{src:e.emptyStateImage,className:"w-75 h-auto"}),r.createElement(M.u.Heading,{className:"h4"},r.createElement(E.x,{namespace:R,phrase:"noViews"})),r.createElement(M.u.Info,{className:"w-100"},r.createElement(E.x,{namespace:R,phrase:"notWatched"}))))}var H=n(99742);const F={partialInsights:"nKLWa",videoContainer:"WF2iA"};function U(){return r.createElement("div",null,r.createElement("div",{className:"row g-3 mb-3"},r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(F.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:"col"},r.createElement("div",{className:"".concat(F.partialInsights," rounded partial-loading-background")})),r.createElement("div",{className:F.videoContainer},r.createElement("div",{className:"".concat(F.partialInsights," rounded partial-loading-background")}))),r.createElement("div",{className:"row g-3 mb-5"},r.createElement("div",{className:"col-12"},r.createElement("div",{className:"".concat(F.partialInsights," rounded partial-loading-background")}))))}var z=n(8604),V=n(81185),Z=n(41386),W=n(76032);function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function K(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q(r.key),r)}}function q(e){var t=function(e){if("object"!=G(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=G(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==G(t)?t:t+""}function $(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return($=function(){return!!e})()}function Y(){return Y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=Q(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},Y.apply(null,arguments)}function Q(e){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Q(e)}function X(e,t){return X=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},X(e,t)}var J=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Q(t),function(e,t){if(t&&("object"==G(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,$()?Reflect.construct(t,n||[],Q(e).constructor):t.apply(e,n))}(this,t,[e,n])).overlayVisible=n.overlayVisible,r.toggle(r.overlayVisible),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&X(e,t)}(t,e),n=t,r=[{key:"handleToggle",value:function(){this.toggle(!this.overlayVisible)}},{key:"toggle",value:function(e){e?this.toggleOn():this.toggleOff()}},{key:"toggleOn",value:function(){W.Z.dom.addClass(this.toggleEl,"on"),this.overlayVisible=!0,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().addClass("cv-reports-player-overlay-visible")}},{key:"toggleOff",value:function(){W.Z.dom.removeClass(this.toggleEl,"on"),this.overlayVisible=!1,this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible),this.player().removeClass("cv-reports-player-overlay-visible")}},{key:"handleClick",value:function(e){e.stopImmediatePropagation()}},{key:"createEl",value:function(e,n,r){this.handlerBound||(this.handleToggle=this.handleToggle.bind(this),this.handlerBound=!0),this.toggleEl&&this.toggleEl.removeEventListener("click",this.handleToggle),this.toggleEl=W.Z.dom.createEl("div",{className:"custom-toggle custom-toggle-info toggle-option float-end",innerHTML:'<span class="handle"></span></div>'}),this.toggleEl.addEventListener("click",this.handleToggle);var o,a,i,l=(o=t,a=this,"function"==typeof(i=Y(Q(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,{className:"vjs-menu-item cv-cog-menu-item",innerHTML:'\n <span class="vjs-menu-item-text">Heat Map</span>\n <span class="cv-toggle-container"></span>'},r]);return l.children[1].appendChild(this.toggleEl),l}}],r&&K(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(W.Z.getComponent("MenuItem"));W.Z.registerComponent("EngagementOverlayMenuItem",J);var ee=n(74161),te=n(86572);function ne(e){var t,n=e.interactive.timepoints.find((function(t){var n=t.visibleAt/1e3;return Math.floor(e.time)===Math.floor(n)||Math.ceil(e.time)===Math.ceil(n)}));if(!(null===(t=null==n?void 0:n.interactions)||void 0===t?void 0:t.length))return r.createElement(r.Fragment,null);var o=n.interactions.length>3?n.interactions.slice(0,2):n.interactions,a=n.interactions.length-o.length;return r.createElement("div",{className:"d-flex justify-content-end ms-2"},o.map((function(e,t){return r.createElement(te.y,{key:t,interaction:e,showQuestion:!1,iconClassName:"ms-1"})})),!!a&&r.createElement("div",{className:"interaction-type-icon d-flex justify-content-center align-items-center border border-dark text-body ms-1"},"+".concat(a)))}var re=n(42503);function oe(e){return function(e){if(Array.isArray(e))return ae(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ae(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ae(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ae(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var ie={title:{text:null},xAxis:{visible:!1,minPadding:0,maxPadding:0},legend:{enabled:!1},credits:{enabled:!1},defs:{gradient:{tagName:"linearGradient",id:"area-gradient",x1:0,y1:1,x2:0,y2:0,children:[{tagName:"stop",offset:0},{tagName:"stop",offset:1}]}}};function le(e,t){return{styledMode:!0,spacing:[15,0,0,0],width:e,height:t}}function ce(e){return ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ce(e)}function se(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ue(r.key),r)}}function ue(e){var t=function(e){if("object"!=ce(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ce(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ce(t)?t:t+""}function fe(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(fe=function(){return!!e})()}function me(){return me="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=de(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},me.apply(null,arguments)}function de(e){return de=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},de(e)}function pe(e,t){return pe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},pe(e,t)}var ve=W.Z.getComponent("Component");x().AST.allowedTags.push("g"),x().AST.allowedAttributes.push("viewBox","transform");var ye=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=de(t),function(e,t){if(t&&("object"==ce(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,fe()?Reflect.construct(t,n||[],de(e).constructor):t.apply(e,n))}(this,t,[e,n])).initialize(),r.bindListeners(),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pe(e,t)}(t,e),n=t,o=[{key:"initialize",value:function(){var e=this;this.player().ready((function(){return e.buildChart()}))}},{key:"buildCSSClass",value:function(){return"cv-engagement-overlay"}},{key:"createEl",value:function(e,n,r){var o,a,i;return(o=t,a=this,"function"==typeof(i=me(de(1&3?o.prototype:o),"createEl",a))?function(e){return i.apply(a,e)}:i)([e,Object.assign(Object.assign({},n),{className:this.buildCSSClass(),innerHTML:'<div class="cv-engagement-chart"></div><div class="cv-engagement-timepoint-indicator"></div>'}),r])}},{key:"toggleChart",value:function(e){e?this.buildChart():this.destroyChart()}},{key:"bindListeners",value:function(){var e=this;this.handleClick=this.handleClick.bind(this),this.resizeChart=this.resizeChart.bind(this),this.player().on("playerresize",this.resizeChart),this.on(this.el(),"mouseup",this.handleClick),this.player().on("dispose",(function(){e.player().off("playerresize",e.resizeChart),e.off(e.el(),"mouseup",e.handleClick)}))}},{key:"handleClick",value:function(e){W.Z.dom.isSingleLeftClick(e)&&(this.player().paused()?this.player().play():this.player().pause())}},{key:"buildChart",value:function(){var e=this;if(!this.chart){var t=this.getChartDimensions();if(t){var n=this.el().querySelector(".cv-engagement-chart");this.chart=x().chart(n,this.getHighchartOptions(t))}else this.player().one("play",(function(){return e.buildChart()}))}}},{key:"resizeChart",value:function(){var e=this.getChartDimensions();this.chart&&e&&this.chart.setSize(e.width,e.height)}},{key:"destroyChart",value:function(){var e;null===(e=this.chart)||void 0===e||e.destroy(),this.chart=null}},{key:"getChartDimensions",value:function(){var e=this.player().getChild("collapserator"),t=null==e?void 0:e.currentHeight(),n=this.el().clientWidth;return t&&n?{width:n,height:this.player().currentDimensions().height-t}:null}},{key:"getHighchartOptions",value:function(e){var t,n,o,a=e.width,i=e.height;return Object.assign(Object.assign({},ie),{chart:le(a,i),yAxis:(n=this.options_.heatMap,{max:1.05*Math.max.apply(Math,oe(n)),min:0,minPadding:0,maxPadding:0,allowDecimals:!0,startOnTick:!1,endOnTick:!1,visible:!1}),tooltip:(o=this.options_.interactive,{formatter:function(){var e=o?function(e,t){return(0,ee.renderToStaticMarkup)(r.createElement(ne,{time:t,interactive:e}))}(o,this.x):"";return'<div class="cv-engagement-tooltip bg-white rounded"><div class="d-flex justify-content-between">'+"<strong>".concat((0,re.m)(this.x),"</strong>")+"".concat(e)+'</div><div class="d-flex justify-content-between rounded bg-light cv-view-count-container">'+'<strong>Views</strong> <span class="cv-view-count">'.concat(this.y,"</span>")+"</div></div>"},positioner:function(e,t,n){var r=this.chart.plotWidth-e,o=n.plotX-e/2;return{x:Math.min(Math.max(o,0),r),y:this.chart.plotTop}},useHTML:!0,padding:0}),plotOptions:(t=this.moveTimepointIndicator.bind(this),{area:{point:{events:{mouseOver:function(){t(this.x)},mouseOut:function(){t(null)}}}},series:{marker:{enabled:!1}}}),series:[{type:"area",data:this.options_.heatMap}]})}},{key:"moveTimepointIndicator",value:function(e){this.options_.onTimepointHover&&this.options_.onTimepointHover(e);var t=this.el().querySelector(".cv-engagement-timepoint-indicator");null!==e?(W.Z.dom.addClass(t,"cv-engagement-timepoint-indicator-visible"),t.style.left="".concat(e/this.options_.heatMap.length*100,"%")):W.Z.dom.removeClass(t,"cv-engagement-timepoint-indicator-visible")}}],o&&se(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,o}(ve);function he(e){return he="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},he(e)}function ge(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,be(r.key),r)}}function be(e){var t=function(e){if("object"!=he(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=he(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==he(t)?t:t+""}function we(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(we=function(){return!!e})()}function Ee(e){return Ee=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Ee(e)}function Oe(e,t){return Oe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Oe(e,t)}W.Z.registerComponent("EngagementOverlay",ye);var Se=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Ee(t),function(e,t){if(t&&("object"==he(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,we()?Reflect.construct(t,n||[],Ee(e).constructor):t.apply(e,n))}(this,t,[e,n])).options=n,e.ready((function(){r.initialize()})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Oe(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){var e;this.hasHeatMapData()&&(this.player.addChild("engagementOverlay",{heatMap:this.options.heatMap,interactive:this.options.interactive,onTimepointHover:this.options.onTimepointHover}),(null===(e=this.player.getChild("collapserator"))||void 0===e?void 0:e.getChild("cogButton")).addItem({index:0,ctor:J,name:"EngagementOverlayMenuItem",options:{overlayVisible:!0}}))}},{key:"toggleOverlay",value:function(e){var t=this.player.getChild("engagementOverlay");null==t||t.toggleChart(e)}},{key:"hasHeatMapData",value:function(){var e;return(null===(e=this.options.heatMap)||void 0===e?void 0:e.reduce((function(e,t){return e+t}),0))>0}}])&&ge(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(W.Z.getPlugin("plugin"));W.Z.registerPlugin("engagementOverlayPlugin",Se),n(16852);var je=n(4271),Ce=n(10463);function ke(e){return ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ke(e)}function xe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Ne(r.key),r)}}function Ne(e){var t=function(e){if("object"!=ke(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ke(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ke(t)?t:t+""}function Pe(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Pe=function(){return!!e})()}function Te(e){return Te=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Te(e)}function Ie(e,t){return Ie=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ie(e,t)}n(6994);var Le=function(e){function t(e,n){var r;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(r=function(e,t,n){return t=Te(t),function(e,t){if(t&&("object"==ke(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Pe()?Reflect.construct(t,n||[],Te(e).constructor):t.apply(e,n))}(this,t,[e])).options=n,r.player.one("loadedmetadata",(function(){return r.player.ready(r.initialize.bind(r))})),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ie(e,t)}(t,e),n=t,(r=[{key:"initialize",value:function(){Ce.O.useTrack(this.player,"metadata","interactive",this.onTrackLoaded.bind(this)),this.player.addClass("cv-interactive-plugin")}},{key:"onTrackLoaded",value:function(e){this.addChildren(e)}},{key:"addChildren",value:function(e){this.player.controlBar.getChild("progressControl").getChild("SeekBar").addChild(new je.N(this.player,{interactive:this.options.interactive,track:e}))}}])&&xe(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(W.Z.getPlugin("plugin"));function Ae(e){return Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ae(e)}function Me(){Me=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(e,t,n){e[t]=n.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",l=a.asyncIterator||"@@asyncIterator",c=a.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof h?t:h,i=Object.create(a.prototype),l=new T(r||[]);return o(i,"_invoke",{value:k(e,n,l)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var m="suspendedStart",d="suspendedYield",p="executing",v="completed",y={};function h(){}function g(){}function b(){}var w={};s(w,i,(function(){return this}));var E=Object.getPrototypeOf,O=E&&E(E(I([])));O&&O!==n&&r.call(O,i)&&(w=O);var S=b.prototype=h.prototype=Object.create(w);function j(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function C(e,t){function n(o,a,i,l){var c=f(e[o],e,a);if("throw"!==c.type){var s=c.arg,u=s.value;return u&&"object"==Ae(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,i,l)}),(function(e){n("throw",e,i,l)})):t.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return n("throw",e,i,l)}))}l(c.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new t((function(t,o){n(e,r,t,o)}))}return a=a?a.then(o,o):o()}})}function k(t,n,r){var o=m;return function(a,i){if(o===p)throw Error("Generator is already running");if(o===v){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var l=r.delegate;if(l){var c=x(l,r);if(c){if(c===y)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===m)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=p;var s=f(t,n,r);if("normal"===s.type){if(o=r.done?v:d,s.arg===y)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=v,r.method="throw",r.arg=s.arg)}}}function x(t,n){var r=n.method,o=t.iterator[r];if(o===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,x(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var a=f(o,t.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,y;var i=a.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,y):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function I(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return a.next=a}}throw new TypeError(Ae(t)+" is not iterable")}return g.prototype=b,o(S,"constructor",{value:b,configurable:!0}),o(b,"constructor",{value:g,configurable:!0}),g.displayName=s(b,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,s(e,c,"GeneratorFunction")),e.prototype=Object.create(S),e},t.awrap=function(e){return{__await:e}},j(C.prototype),s(C.prototype,l,(function(){return this})),t.AsyncIterator=C,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new C(u(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},j(S),s(S,c,"Generator"),s(S,i,(function(){return this})),s(S,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=I,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(P),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function o(r,o){return l.type="throw",l.arg=t,n.next=r,o&&(n.method="next",n.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(c&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,y):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),y}},t}function Re(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_e(r.key),r)}}function _e(e){var t=function(e){if("object"!=Ae(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Ae(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Ae(t)?t:t+""}function Be(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Be=function(){return!!e})()}function De(){return De="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=He(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},De.apply(null,arguments)}function He(e){return He=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},He(e)}function Fe(e,t){return Fe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Fe(e,t)}W.Z.registerPlugin("interactiveSeekBarPlugin",Le);var Ue=function(e){function t(e,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=He(t),function(e,t){if(t&&("object"==Ae(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Be()?Reflect.construct(t,n||[],He(e).constructor):t.apply(e,n))}(this,t,[e,n])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fe(e,t)}(t,e),n=t,r=[{key:"getPlayerClassName",value:function(){return"cv-reports-player"}},{key:"getAnalyticsPlayerType",value:function(){return"reports-player"}},{key:"additionalSetup",value:function(e){var n,r,o,a,i=this,l=Object.create(null,{additionalSetup:{get:function(){return e=t,n=i,De(He(1&1?e.prototype:e),"additionalSetup",n);var e,n}}});return n=this,r=void 0,o=void 0,a=Me().mark((function t(){return Me().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:l.additionalSetup.call(this,e),this.setupEngagementOverlayPlugin(e),this.setupUpClipPlugin(e),this.setupInteractiveSeekBarPlugin(e);case 4:case"end":return t.stop()}}),t,this)})),new(o||(o=Promise))((function(e,t){function i(e){try{c(a.next(e))}catch(e){t(e)}}function l(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(i,l)}c((a=a.apply(n,r||[])).next())}))}},{key:"setupEngagementOverlayPlugin",value:function(e){var t;this.player.engagementOverlayPlugin({heatMap:this.options.heatMap,interactive:null===(t=e.additionalData)||void 0===t?void 0:t.interactive,onTimepointHover:this.options.onTimepointHover})}},{key:"setupUpClipPlugin",value:function(e){var t,n,r="MasterClip"===e.mediaType,o="MasterInteractive"===e.mediaType;if((r||o)&&(r&&(n=e.additionalData),!o||(n=null===(t=e.additionalData)||void 0===t?void 0:t.clipData))){if(!n)throw Error("Invalid clip data");this.player.clipPlugin({startTime:n.startTime,endTime:n.endTime})}}},{key:"setupInteractiveSeekBarPlugin",value:function(e){var t,n,r=null===(t=e.additionalData)||void 0===t?void 0:t.interactive;(null===(n=e.additionalData)||void 0===n?void 0:n.interactive)&&(this.track=Z.h.getInteractiveTrack(this.player,e),this.player.interactiveSeekBarPlugin({interactive:r}))}},{key:"getSeekBarOptions",value:function(){return{ignoreChapters:!0}}}],r&&Re(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(V.r);function ze(e){var t=r.useRef(null),n=r.useRef(null);return r.useEffect((function(){n.current=new Ue(t.current,e)}),[]),r.createElement("div",{ref:t})}const Ve={playerContainer:"fGWsk",playerPlaceholder:"v1MjE",heatMap:"lp1Yn",heatMapTimepointIndicator:"yOOK6",heatMapTimepointIndicatorVisible:"rTXmB",partialLoadingContainer:"gW1HU"};var Ze=a.T.encloseNamespace("shared.videoEngagementOverlay");function We(e){var t=r.useRef(null),n=(0,z.O)(e.engagement);return r.createElement("div",{className:"bg-white border rounded overflow-hidden h-100"},r.createElement("div",{className:"position-relative"},r.createElement("div",{className:Ve.playerPlaceholder}),r.createElement("div",{className:Ve.playerContainer},r.createElement(ze,{viewKey:e.viewKey,playerApi:new URL(e.playerApiUrl),hotkeyElQuerySelector:"body",heatMap:n,onTimepointHover:function(e){var r=t.current;r&&(null!==e?(r.classList.add(Ve.heatMapTimepointIndicatorVisible),r.style.left="".concat(e/n.length*100,"%")):r.classList.remove(Ve.heatMapTimepointIndicatorVisible))},aspectRatio:"16:9"}))),r.createElement("div",{className:"p-3"},r.createElement("div",{className:"position-relative"},r.createElement(i.c,{engagement:e.engagement,className:Ve.heatMap}),r.createElement("div",{ref:t,className:Ve.heatMapTimepointIndicator})),r.createElement("div",{className:"d-flex justify-content-between mt-2"},r.createElement("strong",null,Ze("heatmap")),r.createElement("div",{className:"w-33"},r.createElement(i.l,null)))))}const Ge={videoContainer:"cpl68"};function Ke(e){var t,n,o;return r.createElement(r.Fragment,null,!e.hasDataLoaded&&r.createElement(U,null),r.createElement("div",{className:"row g-3 mb-3"},e.hasDataLoaded&&r.createElement(r.Fragment,null,r.createElement("div",{className:"col"},r.createElement(D,{events:e.videoViews,emptyStateImage:H.W.EmptyStates.MY_VIDEOS})),r.createElement("div",{className:"col"},r.createElement(C,{engagement:e.aggregateEngagement,params:e.audienceAppLinkParams})),r.createElement("div",{className:Ge.videoContainer},r.createElement(We,{engagement:e.aggregateEngagement,viewKey:e.viewKey.viewKey,playerApiUrl:e.config.playerApiUrl,imageCdnUrl:e.config.imageCdnUrl}))),e.tableDataLoaded&&r.createElement("div",{className:"col-12"},r.createElement(g,{key:(n=Object.assign(Object.assign({},e.audienceAppLinkParams),e.dateRangeAppLinkParams),o=[],Object.keys(n).forEach((function(e){var t=n[e];t&&o.push("".concat(e,":").concat(Array.isArray(t)?t.join(","):t))})),o.join(":")),engagement:e.individualEngagement.data,users:e.users,imageCdnUrl:null===(t=e.config)||void 0===t?void 0:t.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,border:!0,anonSessions:e.anonSessions}))))}},362:(e,t,n)=>{n.d(t,{Z:()=>r});const r={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
|
|
3
|
-
//# sourceMappingURL=7075-9a76ce47c9-lite.chunk.js.map
|