@clickview/lite 0.84.1-rc.1 → 0.84.1
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/languages/en.json +1 -1
- package/dist/scripts/{171-acb1ef0ae4-lite.chunk.js → 171-4b1fe5952a-lite.chunk.js} +2 -2
- package/dist/scripts/{171-acb1ef0ae4-lite.chunk.js.map → 171-4b1fe5952a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1726-b08dde1407-lite.chunk.js → 1726-b8b386dbd5-lite.chunk.js} +2 -2
- package/dist/scripts/{1726-b08dde1407-lite.chunk.js.map → 1726-b8b386dbd5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4006-5078eb2c01-lite.chunk.js → 4006-2b689bdde0-lite.chunk.js} +3 -3
- package/dist/scripts/{4006-5078eb2c01-lite.chunk.js.map → 4006-2b689bdde0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5712-37a97adc65-lite.chunk.js → 5712-fd1a7d8d6a-lite.chunk.js} +2 -2
- package/dist/scripts/{5712-37a97adc65-lite.chunk.js.map → 5712-fd1a7d8d6a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{639-0bf7cc53f9-lite.chunk.js → 639-df1607cbc8-lite.chunk.js} +2 -2
- package/dist/scripts/{639-0bf7cc53f9-lite.chunk.js.map → 639-df1607cbc8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8056-a3d8fa8728-lite.chunk.js → 8056-555482555f-lite.chunk.js} +2 -2
- package/dist/scripts/{8056-a3d8fa8728-lite.chunk.js.map → 8056-555482555f-lite.chunk.js.map} +1 -1
- package/dist/scripts/8852-f4e4da0097-lite.chunk.js +2 -0
- package/dist/scripts/8852-f4e4da0097-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-375332cf3f.min.js → bundle-47bd8cc149.min.js} +3 -3
- package/dist/scripts/{bundle-375332cf3f.min.js.map → bundle-47bd8cc149.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/8852-c39595da59-lite.chunk.js +0 -2
- package/dist/scripts/8852-c39595da59-lite.chunk.js.map +0 -1
- /package/dist/scripts/{4006-5078eb2c01-lite.chunk.js.LICENSE.txt → 4006-2b689bdde0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-375332cf3f.min.js.LICENSE.txt → bundle-47bd8cc149.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{8056-a3d8fa8728-lite.chunk.js.map → 8056-555482555f-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8056-a3d8fa8728-lite.chunk.js","mappings":"+LAQMA,EAAY,sBAQZ,SAAUC,EAAaC,GAC3B,OACE,wBAAMC,WAAW,OACf,oFACA,wBACe,OAAfD,EAAME,KAAgB,WAAa,YACnCF,EAAMG,OAAS,WAAa,kBAC5BH,EAAMC,YAEN,gBAAC,IAAY,CAACG,QAAS,iBAA0BF,KAAM,EAAAG,EAAA,SACvD,gBAAC,IAAI,CAACC,OAAO,UAAUR,UAAWA,IAGxC,C,kBC7BA,IAAYS,E,iBAAZ,SAAYA,GACV,2BACA,kBACD,CAHD,CAAYA,IAAAA,EAAqB,I,iBCM3B,SAAUC,EACdC,GACmC,I,YAAnCC,EAAA,uDAAiC,CAAC,EAElC,IAAKD,EACH,OAAO,KAET,IAAME,EAAI,+BACLD,GAAkB,CACrBE,GAAIH,EAAoBG,GACxBC,cAAeJ,EAAoBI,cACnCC,KAAML,EAAoBK,KAC1BC,OAAQN,EAAoBM,OAC5BC,WAAYP,EAAoBO,aASlC,OANoC,QAAhC,EAAAP,aAAmB,EAAnBA,EAAqBQ,mBAAW,eAAEL,MACpCD,EAAKO,KAAO,CAAEN,GAAoC,QAAhC,EAAAH,aAAmB,EAAnBA,EAAqBQ,mBAAW,eAAEL,GAAIE,KAAsC,QAAhC,EAAAL,aAAmB,EAAnBA,EAAqBQ,mBAAW,eAAEH,QAE7D,QAAjC,EAAAL,aAAmB,EAAnBA,EAAqBU,oBAAY,eAAEP,MACrCD,EAAKS,MAAQ,CAAER,GAAqC,QAAjC,EAAAH,aAAmB,EAAnBA,EAAqBU,oBAAY,eAAEP,GAAIE,KAAuC,QAAjC,EAAAL,aAAmB,EAAnBA,EAAqBU,oBAAY,eAAEL,OAE9FH,CACT,C,oaCAA,IAAMb,EAAY,+BACZuB,EAAY,qBAAiCvB,GAO7C,SAAUwB,EAAoBtB,G,UAC1BuB,EAAgDvB,EAAhDuB,sBAAuBC,EAAyBxB,EAAzBwB,SAAUC,EAAezB,EAAfyB,WAEnCC,GAAW,UACXC,GAAS,SACPC,GAAuB,SAAvBA,mBAEFC,EAAc,kBAAkC,mBAEhDpB,EAAsB,kBAC1B,wBAAwCc,IAGW,G,EAArB,YAAe,G,EAAM,E,o4BAA7CO,EAAO,KAAEC,EAAU,KA0B3B,SAASC,EAAUrB,GACjBc,IACAE,EAAOM,QAAQZ,EAAU,UAAW,CAAEP,KAAML,EAAoBE,KAAKG,KAAMoB,YAAY,KACvF,eAA2B,CACzBC,YAAa,iBACbC,OAAQ,kCACRC,KAAM,CAAE1B,EAAKC,GAAI,YAAmBD,EAAKG,SAO3C,IAAMwB,GAAgB,OAA4B,OAAD,wBAC5C7B,EAAoBE,MACpBA,IAEL,kBAA8B2B,EAAe,CAC3CC,WAAY,UACZC,OAAQ,iBACRC,SAAU,qBACVC,cAAe,eAEnB,CAEA,SAASC,IACPlB,IACA,IAAMa,GAAgB,OAA4B7B,EAAoBE,MACtE,kBAA8B2B,EAAe,CAC3CC,WAAY,UACZC,OAAQ,iBACRC,SAAU,qBACVC,cAAe,cAEnB,CAEA,SAASE,IACPjB,EAAOkB,MAAMxB,EAAU,UACvBI,GACF,CAEA,IAAMqB,IAAerC,EAAoBE,KAEnCoC,EAAevB,EAAW,aAAe,YAE/C,MAAuD,cAAnDI,EAAmB,iBAEnB,gBAAC,IAAa,CACZoB,QAAQ,oBACRC,SAAS,EACTxB,WAAYzB,EAAMyB,aAMtB,gBAAC,IAAK,CACJyB,MAAO7B,EAAU,cACjBI,WAAYkB,EACZQ,oBAAqBL,GAErB,yBAAG,gBAAC,IAAI,CAAChD,UAAWA,EAAWQ,OAAQyC,EAAcK,QAAS,CAAEtC,KAA8B,QAAxB,EAAAL,EAAoBE,YAAI,eAAEG,SAChG,gBAAC,IAAY,KACX,gBAAC,WAAmB,CAACuC,QAASV,IAC9B,gBAAC,WAAmB,CAACU,QAxF3B,W,QACEtB,GAAW,GAEX,IAAMpB,EAAyC,CAC7CG,KAAM,GAAF,OAAKO,EAAU,cAAa,YAAIZ,EAAoBE,KAAKG,MAC7DD,cAAeJ,EAAoBE,KAAKE,cACxCyC,MAAO,CAAE1C,GAAIiB,EAAYlB,KAAKC,IAC9BI,WAAY,SACZD,OAAQ,WAGJwC,EAAkD,QAAxC,EAAoC,QAApC,EAAA9C,EAAoBE,KAAKM,mBAAW,eAAEL,UAAE,QAAIH,EAAoBE,KAAKQ,aAAaP,GAElG,UACEc,EACA,8BACE6B,EACA5C,EACAqB,EACAY,GAGN,EAkEqDY,QAAQ,OAAOC,KAAMpC,EAAU,QAASqC,YAAa5B,KAI5G,C,0KC/HMhC,EAAY,uBACZuB,EAAY,qBAAiCvB,GAU7C6D,EAAmD,CACvD,OAAU,CACRC,YAAa,cACbC,cAAe,gBACfC,SAAU,yBAEZ,UAAa,CACXF,YAAa,iBACbC,cAAe,mBACfC,SAAU,2BAEZ,YAAe,CACbF,YAAa,mBACbC,cAAe,qBACfC,SAAU,8BAEZ,oBAAqB,CACnBF,YAAa,uBACbC,cAAe,yBACfC,SAAU,8BAEZ,aAAgB,CACdF,YAAa,oBACbC,cAAe,sBACfC,SAAU,gCASR,SAAUC,EAAc/D,GAC5B,IAAMgE,EAASL,EAAiB3D,EAAMgD,SAEtC,OACE,gBAAC,IAAK,CACJ9C,KAAK,KACL+D,UAAWjE,EAAMiD,QACjBxB,WAAYzB,EAAMyB,WAClByC,WAAS,GAET,gBAAC,WAAY,CAACjE,UAAU,yEAAyEkE,aAAW,GAC1G,gBAAC,UAAW,CAACC,GAAG,KAAKnE,UAAU,oEAC5BoB,EAAU2C,EAAOJ,aAClB,wBAAM3D,UAAU,uBAAsB,gBAAC,IAAY,CAACC,KAAK,WAG7D,gBAAC,IAAG,CAACD,UAAU,QACb,gBAAC,IAAU,CAACA,UAAU,QACpB,gBAAC,UAAgB,CAACoE,IAAKL,EAAOF,SAAUQ,QAASjD,EAAU2C,EAAOJ,eAClE,gBAAC,YAAkB,CAAC3D,UAAU,MAC5B,gBAAC,IAAI,CAACH,UAAWA,EAAWQ,OAAQ0D,EAAOH,iBAE7C,gBAAC,SAAe,KACd,gBAAC,IAAI,CAAC/D,UAAWA,EAAWQ,OAAO,iBAErC,gBAAC,QAAc,CACbiE,QAAS,CACPpC,YAAa,YACbC,OAAQ,6BAEVqB,KAAMpC,EAAU,OAChBiB,cAAe,CAAC,EAChBkC,iBAAkB,CAChBjC,WAAY,WACZE,SAAU,gBACVD,OAAQ,aACRiC,WAAY,0BAMnBzE,EAAM0E,aAGb,C","sources":["file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/libs/shared/src/enums/InteractiveOriginType.ts","file:///app/packages/projects/lite/src/apps/interactives/utils/getInteractiveAnalyticsData.ts","file:///app/packages/projects/lite/src/apps/interactives/views/copy-interactive/CopyInteractiveView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","export enum InteractiveOriginType {\n Original = 0,\n Copy = 1\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsDataPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport function getInteractiveAnalyticsData(\n interactiveMetadata: InteractiveMetadata,\n extraAnalyticsData: HashObject = {}\n): AnalyticsDataPayload {\n if (!interactiveMetadata)\n return null;\n\n const data: AnalyticsDataPayload = {\n ...extraAnalyticsData,\n id: interactiveMetadata.id,\n interactiveId: interactiveMetadata.interactiveId,\n name: interactiveMetadata.name,\n status: interactiveMetadata.status,\n originType: interactiveMetadata.originType\n };\n\n if (interactiveMetadata?._parentClip?.id)\n data.clip = { id: interactiveMetadata?._parentClip?.id, name: interactiveMetadata?._parentClip?.name };\n\n if (interactiveMetadata?._parentVideo?.id)\n data.video = { id: interactiveMetadata?._parentVideo?.id, name: interactiveMetadata?._parentVideo?.name };\n\n return data;\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { InteractiveOriginType } from 'libs/shared/enums/InteractiveOriginType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CreateInteractiveMetadataRequest, CurrentUser, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nconst namespace = 'interactives.copyInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInteractiveProps extends PopupViewProps {\n interactiveMetadataId: string;\n fromEdit: boolean;\n}\n\nexport function CopyInteractiveView(props: CopyInteractiveProps): React.ReactElement {\n const { interactiveMetadataId, fromEdit, closePopup } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { getGatedPermission } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(interactiveMetadataId)\n );\n\n const [ spinner, setSpinner ] = React.useState(false);\n\n function copyInteractive(): void {\n setSpinner(true);\n\n const data: CreateInteractiveMetadataRequest = {\n name: `${getPhrase('copyPrefix')} ${interactiveMetadata.data.name}`,\n interactiveId: interactiveMetadata.data.interactiveId,\n owner: { id: currentUser.data.id },\n originType: InteractiveOriginType.Copy,\n status: CurationStatus.Draft\n };\n\n const videoId = interactiveMetadata.data._parentClip?.id ?? interactiveMetadata.data._parentVideo.id;\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.createInteractiveMetadata(\n videoId,\n data,\n onSuccess,\n onError\n )\n );\n }\n\n function onSuccess(data: InteractiveMetadata): void {\n closePopup();\n alerts.success(getPhrase('success', { name: interactiveMetadata.data.name, escapeText: true }));\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ data.id, TextHelper.slugify(data.name) ]\n });\n\n /**\n * Taking all the data from the interactive copied from\n * and overwritting any new props (e.g. the new id)\n */\n const analyticsData = getInteractiveAnalyticsData({\n ...interactiveMetadata.data,\n ...data\n });\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n function cancel(): void {\n closePopup();\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Discard\n });\n }\n\n function onError(): void {\n alerts.error(getPhrase('error'));\n closePopup();\n }\n\n const dataLoaded = !!interactiveMetadata.data;\n\n const phraseString = fromEdit ? 'hasResults' : 'popupBody';\n\n if (getGatedPermission(PermissionName.UploadVideo) === 'hard-gate') {\n return (\n <HardGatePopup\n feature='copy-interactives'\n animate={false}\n closePopup={props.closePopup}\n />\n );\n }\n\n return (\n <Popup\n title={getPhrase('popupTitle')}\n closePopup={cancel}\n showLoadingSpinner={!dataLoaded}\n >\n <p><Text namespace={namespace} phrase={phraseString} options={{ name: interactiveMetadata.data?.name }} /></p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={cancel} />\n <PopupButtons.Submit onClick={copyInteractive} variant='dark' text={getPhrase('copy')} showSpinner={spinner} />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","InteractiveOriginType","getInteractiveAnalyticsData","interactiveMetadata","extraAnalyticsData","data","id","interactiveId","name","status","originType","_parentClip","clip","_parentVideo","video","getPhrase","CopyInteractiveView","interactiveMetadataId","fromEdit","closePopup","dispatch","alerts","getGatedPermission","currentUser","spinner","setSpinner","onSuccess","success","escapeText","application","action","args","analyticsData","actionType","entity","location","workflowPhase","cancel","onError","error","dataLoaded","phraseString","feature","animate","title","showLoadingSpinner","options","onClick","owner","videoId","variant","text","showSpinner","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","animation","hideTitle","closeButton","as","src","altText","appLink","analyticsOptions","descriptor","extraContent"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/8056-555482555f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/libs/shared/src/enums/InteractiveOriginType.ts","file:///app/packages/projects/lite/src/apps/interactives/utils/getInteractiveAnalyticsData.ts","file:///app/packages/projects/lite/src/apps/interactives/views/copy-interactive/CopyInteractiveView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","export enum InteractiveOriginType {\n Original = 0,\n Copy = 1\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsDataPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport function getInteractiveAnalyticsData(\n interactiveMetadata: InteractiveMetadata,\n extraAnalyticsData: HashObject = {}\n): AnalyticsDataPayload {\n if (!interactiveMetadata)\n return null;\n\n const data: AnalyticsDataPayload = {\n ...extraAnalyticsData,\n id: interactiveMetadata.id,\n interactiveId: interactiveMetadata.interactiveId,\n name: interactiveMetadata.name,\n status: interactiveMetadata.status,\n originType: interactiveMetadata.originType\n };\n\n if (interactiveMetadata?._parentClip?.id)\n data.clip = { id: interactiveMetadata?._parentClip?.id, name: interactiveMetadata?._parentClip?.name };\n\n if (interactiveMetadata?._parentVideo?.id)\n data.video = { id: interactiveMetadata?._parentVideo?.id, name: interactiveMetadata?._parentVideo?.name };\n\n return data;\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { InteractiveOriginType } from 'libs/shared/enums/InteractiveOriginType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CreateInteractiveMetadataRequest, CurrentUser, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nconst namespace = 'interactives.copyInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInteractiveProps extends PopupViewProps {\n interactiveMetadataId: string;\n fromEdit: boolean;\n}\n\nexport function CopyInteractiveView(props: CopyInteractiveProps): React.ReactElement {\n const { interactiveMetadataId, fromEdit, closePopup } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { getGatedPermission } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(interactiveMetadataId)\n );\n\n const [ spinner, setSpinner ] = React.useState(false);\n\n function copyInteractive(): void {\n setSpinner(true);\n\n const data: CreateInteractiveMetadataRequest = {\n name: `${getPhrase('copyPrefix')} ${interactiveMetadata.data.name}`,\n interactiveId: interactiveMetadata.data.interactiveId,\n owner: { id: currentUser.data.id },\n originType: InteractiveOriginType.Copy,\n status: CurationStatus.Draft\n };\n\n const videoId = interactiveMetadata.data._parentClip?.id ?? interactiveMetadata.data._parentVideo.id;\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.createInteractiveMetadata(\n videoId,\n data,\n onSuccess,\n onError\n )\n );\n }\n\n function onSuccess(data: InteractiveMetadata): void {\n closePopup();\n alerts.success(getPhrase('success', { name: interactiveMetadata.data.name, escapeText: true }));\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ data.id, TextHelper.slugify(data.name) ]\n });\n\n /**\n * Taking all the data from the interactive copied from\n * and overwritting any new props (e.g. the new id)\n */\n const analyticsData = getInteractiveAnalyticsData({\n ...interactiveMetadata.data,\n ...data\n });\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n function cancel(): void {\n closePopup();\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Discard\n });\n }\n\n function onError(): void {\n alerts.error(getPhrase('error'));\n closePopup();\n }\n\n const dataLoaded = !!interactiveMetadata.data;\n\n const phraseString = fromEdit ? 'hasResults' : 'popupBody';\n\n if (getGatedPermission(PermissionName.UploadVideo) === 'hard-gate') {\n return (\n <HardGatePopup\n feature='copy-interactives'\n animate={false}\n closePopup={props.closePopup}\n />\n );\n }\n\n return (\n <Popup\n title={getPhrase('popupTitle')}\n closePopup={cancel}\n showLoadingSpinner={!dataLoaded}\n >\n <p><Text namespace={namespace} phrase={phraseString} options={{ name: interactiveMetadata.data?.name }} /></p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={cancel} />\n <PopupButtons.Submit onClick={copyInteractive} variant='dark' text={getPhrase('copy')} showSpinner={spinner} />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","InteractiveOriginType","getInteractiveAnalyticsData","interactiveMetadata","extraAnalyticsData","data","id","interactiveId","name","status","originType","_parentClip","clip","_parentVideo","video","getPhrase","CopyInteractiveView","interactiveMetadataId","fromEdit","closePopup","dispatch","alerts","getGatedPermission","currentUser","spinner","setSpinner","onSuccess","success","escapeText","application","action","args","analyticsData","actionType","entity","location","workflowPhase","cancel","onError","error","dataLoaded","phraseString","feature","animate","title","showLoadingSpinner","options","onClick","owner","videoId","variant","text","showSpinner","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","animation","hideTitle","closeButton","as","src","altText","appLink","analyticsOptions","descriptor","extraContent"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8852],{18852:(e,t,a)=>{a.r(t),a.d(t,{PremiumFeaturesView:()=>w});var n=a(32735),i=a(81886),s=a(31453),l=a(15611),r=a(25882),c=a(79967),o=a(79612),m=a(37802),d=a(14070),u=a(97291);const g={heavyBorder:"G167d",columnsResponsive:"zIvqF",columnsResponsiveTwoXl:"iXLu_"};var v=[{title:"Discover and Explore",items:["All subject hubs","Special events calendar","Movies + TV"]},{title:"Watch & learn",items:["HD playback","Clips","Citations","Transcripts","Resources","iOS and Android apps"]}],p=[{title:"Teach & assign",items:["Classrooms","Classroom analytics","Interactive quizzes"]},{title:"Create & manage",items:["Upload and manage videos","Favourite videos","Create playlists"]},{title:"Share integrations",items:["Google Classroom integration","Microsoft Teams integration"]}],b=[{title:"Integrations",items:["SSO","Rostering","Library cataloguing integrations","LMS integrations","LTI support","Export library data","RSS feed"]},{title:"Cast integrations",items:["Apple TV integration","Vivi integration"]},{title:"District management",items:["Library Editor","District library","District analytics"]},{title:"Content control & compliance",items:["Access settings","Student permissions","Content review","Content restrictions"]},{title:"Accessibility & Equity",items:["Local Cache"]}],E=[].concat(p,b);function h(e){var t=e.sections,a=e.twoColumnXl,i=void 0!==a&&a?g.columnsResponsiveTwoXl:g.columnsResponsive;return n.createElement("div",{className:i},t.map(function(e){return n.createElement("div",{className:"mb-3",style:{breakInside:"avoid"},key:e.title},n.createElement("div",{className:"fw-semibold mb-1"},e.title),n.createElement("ul",{className:"mb-0"},e.items.map(function(e){return n.createElement("li",{key:e},e)})))}))}function N(e){var t=e.className,a=e.label,i=void 0===a?"Active":a;return n.createElement("span",{className:(0,s.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium badge-sm",t)},i)}function f(e){var t=e.currentPlan,a=e.badgeClassName,i=e.hasExtensions;return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},"Teacher"),t&&n.createElement(N,{className:a})),n.createElement("div",{className:"h1 fw-bold"},"Free"),n.createElement("p",{className:"text-body mt-2 mb-0"},"For educators creating engaging, inclusive, interactive classrooms."),!i&&t&&n.createElement(l.F,{className:"btn btn-link text-info p-0",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.INVITE_COLLEAGUE}},"Invite a colleague"))}function y(e){var t=e.currentPlan,a=e.badgeClassName,i=e.hasExtensions;return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},"Teacher"),t&&n.createElement(N,{className:a})),n.createElement("div",{className:"h1 fw-bold mb-1"},"14 day trial*"),n.createElement("p",{className:"text-muted mb-3"},"*change to Teacher Free after trial finishes"),n.createElement("p",{className:"mb-3 text-body"},"For teachers boosting engagement, personalizing learning, and giving real-time feedback."),n.createElement(l.F,{className:"btn btn-dark w-100",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.INVITE_COLLEAGUE}},i?"Invite a colleague to extend":"Invite a colleague"))}function x(e){var t=e.currentPlan,a=e.badgeClassName,i=e.variant,s="custom"===(void 0===i?"premium":i);return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},s?"Schools & Districts":"School & District"),t&&n.createElement(N,{className:a}),s&&!t&&n.createElement(N,{className:"text-indigo bg-light-indigo",label:"Premium"})),n.createElement("div",{className:"h1 fw-bold"},s?"Custom":"Premium"),n.createElement("p",{className:"text-body mb-3"},"For ",s?"teachers boosting engagement, personalizing learning, and giving real-time feedback":"schools and districts providing teachers with a platform for differentiated instruction across all grades and subjects","."),s?n.createElement("div",{className:"d-flex flex-column flex-lg-row gap-2"},n.createElement(l.F,{className:"btn btn-outline-dark",style:{flex:"1 1 0"},appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.RECOMMEND_EMAIL}},"Recommend ClickView to your school leader"),n.createElement(l.F,{className:"btn btn-dark",style:{flex:"1 1 0"},appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.UPGRADE}},"Request pricing")):n.createElement(n.Fragment,null,n.createElement("div",{style:{height:"32px"},className:"d-none d-xl-block"}),n.createElement(l.F,{className:"btn btn-outline-dark w-100",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.UPGRADE}},"Request pricing")))}function C(e){var t=e.TopSection,a=e.sections,i=e.sectionsHeading,l=e.currentPlan,r=e.currentPlanBgColour,o=e.badgeClassName,m=e.columnSizeClass,d=void 0===m?"col-12 col-xl-4":m,u=e.variant,g=e.twoColumnXl,v=void 0!==g&&g,p=e.reducedMinHeight,b=void 0!==p&&p,E=e.hasExtensions,N=(0,c.k)(),f=N.xl,y=N.xxl;return n.createElement("div",{className:d},n.createElement("div",{className:(0,s.A)("card h-100 shadow-sm",l&&r)},n.createElement("div",{style:{minHeight:f||y?b?190:260:0}},n.createElement(t,{currentPlan:l,badgeClassName:o,variant:u,hasExtensions:E})),n.createElement("div",{className:"card-body border-top"},n.createElement("div",{className:"fw-semibold mb-2"},i),n.createElement(h,{sections:a,twoColumnXl:v}))))}function w(){(0,o.M)({title:"Explore our premium features"});var e=(0,r.vb)(),t=e.accessPolicy,a=e.isLoaded,s=(0,m.r)(null).reverseTrialReferralCount<t.metadata.maxReferrals;n.useEffect(function(){a&&(r.uV.has(null==t?void 0:t.id)||i.Q.C$.trigger({application:u.O.DASHBOARD,action:d.e.Dashboard.HOME}))},[a,t]);var l="three-column";"system_cv_trial_reverse_ended_v1"!==(null==t?void 0:t.id)||s||(l="two-column");var c="two-column"===l;return n.createElement("div",{className:"container p-3"},n.createElement("h1",{className:"h3 mb-4"},"Explore our plans"),n.createElement("div",{className:"row g-4"},n.createElement(C,{TopSection:f,sections:v,sectionsHeading:"What you can do:",currentPlan:"system_cv_trial_reverse_ended_v1"===(null==t?void 0:t.id),currentPlanBgColour:"border-blue ".concat(g.heavyBorder),badgeClassName:"text-blue bg-light-blue",columnSizeClass:"col-12 col-xl-4",reducedMinHeight:c,hasExtensions:s}),!c&&n.createElement(C,{TopSection:y,sections:p,sectionsHeading:"Everything in previous, plus:",currentPlan:"system_cv_trial_reverse_14_v1"===(null==t?void 0:t.id),currentPlanBgColour:"border-indigo ".concat(g.heavyBorder),badgeClassName:"text-indigo bg-light-indigo",hasExtensions:s}),n.createElement(C,{TopSection:x,sections:c?E:b,sectionsHeading:"Everything in previous, plus:",currentPlan:!1,columnSizeClass:c?"col-12 col-xl-8":"col-12 col-xl-4",variant:c?"custom":"premium",twoColumnXl:c,reducedMinHeight:c})))}}}]);
|
|
2
|
+
//# sourceMappingURL=8852-f4e4da0097-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/8852-f4e4da0097-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/sign-up/views/premium-features/premium-features.scss","file:///app/packages/projects/lite/src/apps/sign-up/views/premium-features/PremiumFeaturesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heavyBorder\":\"G167d\",\"columnsResponsive\":\"zIvqF\",\"columnsResponsiveTwoXl\":\"iXLu_\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EXPERIMENTAL_GATED_ACCESS_POLICY_IDS, useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './premium-features.scss';\n\n/**\n * WARNING: AI SLOP BELOW - Sha\n */\n\ntype FeatureSection = {\n title: string;\n items: string[];\n};\n\nconst FREE_SECTIONS: FeatureSection[] = [\n {\n title: 'Discover and Explore',\n items: [\n 'All subject hubs',\n 'Special events calendar',\n 'Movies + TV'\n ]\n },\n {\n title: 'Watch & learn',\n items: [\n 'HD playback',\n 'Clips',\n 'Citations',\n 'Transcripts',\n 'Resources',\n 'iOS and Android apps'\n ]\n }\n];\n\nconst PREMIUM_SECTIONS: FeatureSection[] = [\n {\n title: 'Teach & assign',\n items: [\n 'Classrooms',\n 'Classroom analytics',\n 'Interactive quizzes'\n ]\n },\n {\n title: 'Create & manage',\n items: [\n 'Upload and manage videos',\n 'Favourite videos',\n 'Create playlists'\n ]\n },\n {\n title: 'Share integrations',\n items: [\n 'Google Classroom integration',\n 'Microsoft Teams integration'\n ]\n }\n];\n\nconst SCHOOLS_SECTIONS: FeatureSection[] = [\n {\n title: 'Integrations',\n items: [\n 'SSO',\n 'Rostering',\n 'Library cataloguing integrations',\n 'LMS integrations',\n 'LTI support',\n 'Export library data',\n 'RSS feed'\n ]\n },\n {\n title: 'Cast integrations',\n items: [\n 'Apple TV integration',\n 'Vivi integration'\n ]\n },\n {\n title: 'District management',\n items: [\n 'Library Editor',\n 'District library',\n 'District analytics'\n ]\n },\n {\n title: 'Content control & compliance',\n items: [\n 'Access settings',\n 'Student permissions',\n 'Content review',\n 'Content restrictions'\n ]\n },\n {\n title: 'Accessibility & Equity',\n items: [\n 'Local Cache'\n ]\n }\n];\n\nconst SCHOOLS_CUSTOM_SECTIONS: FeatureSection[] = [\n ...PREMIUM_SECTIONS,\n ...SCHOOLS_SECTIONS\n];\n\nfunction FeatureSections(props: { sections: FeatureSection[]; twoColumnXl?: boolean }): JSX.Element {\n const { sections, twoColumnXl = false } = props;\n \n const containerClass = twoColumnXl ? styles.columnsResponsiveTwoXl : styles.columnsResponsive;\n \n return (\n <div className={containerClass}>\n {sections.map(section => (\n <div className='mb-3' style={{ breakInside: 'avoid' }} key={section.title}>\n <div className='fw-semibold mb-1'>{section.title}</div>\n <ul className='mb-0'>\n {section.items.map(item => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CurrentPlanBadge({ className, label = 'Active' }: { className?: string; label?: string }): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium badge-sm',\n className\n )}>\n {label}\n </span>\n );\n}\n\ninterface TeacherFreeTopProps {\n currentPlan: boolean;\n badgeClassName?: string;\n hasExtensions?: boolean;\n}\n\nfunction TeacherFreeTop(props: TeacherFreeTopProps): JSX.Element {\n const { currentPlan, badgeClassName, hasExtensions } = props;\n\n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>Teacher</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n </div>\n <div className='h1 fw-bold'>Free</div>\n <p className='text-body mt-2 mb-0'>\n For educators creating engaging, inclusive, interactive classrooms.\n </p>\n {!hasExtensions && currentPlan &&\n <AppLink\n className='btn btn-link text-info p-0'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n >\n Invite a colleague\n </AppLink>\n }\n </div>\n );\n}\n\ninterface TeacherPremiumTopProps {\n currentPlan: boolean;\n badgeClassName?: string;\n hasExtensions: boolean;\n}\n\nfunction TeacherPremiumTop(\n props: TeacherPremiumTopProps\n): JSX.Element {\n const { currentPlan, badgeClassName, hasExtensions } = props;\n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>Teacher</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n </div>\n <div className='h1 fw-bold mb-1'>14 day trial*</div>\n <p className='text-muted mb-3'>*change to Teacher Free after trial finishes</p>\n <p className='mb-3 text-body'>For teachers boosting engagement, personalizing learning, and giving real-time feedback.</p>\n <AppLink\n className='btn btn-dark w-100'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n >\n {hasExtensions ? 'Invite a colleague to extend' : 'Invite a colleague'}\n </AppLink>\n </div>\n );\n}\n\nfunction SchoolsDistrictsTop(\n { currentPlan, badgeClassName, variant = 'premium' }: { currentPlan: boolean; badgeClassName?: string; variant?: 'premium' | 'custom' }\n): JSX.Element {\n const isCustomVariant = variant === 'custom';\n \n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>{isCustomVariant ? 'Schools & Districts' : 'School & District'}</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n {isCustomVariant && !currentPlan && <CurrentPlanBadge className='text-indigo bg-light-indigo' label='Premium' />}\n </div>\n <div className='h1 fw-bold'>{isCustomVariant ? 'Custom' : 'Premium'}</div>\n <p className='text-body mb-3'>\n For {isCustomVariant ? 'teachers boosting engagement, personalizing learning, and giving real-time feedback' : 'schools and districts providing teachers with a platform for differentiated instruction across all grades and subjects'}.\n </p>\n {isCustomVariant ? (\n <div className='d-flex flex-column flex-lg-row gap-2'>\n <AppLink\n className='btn btn-outline-dark'\n style={{ flex: '1 1 0' }}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.RECOMMEND_EMAIL\n }}\n >\n Recommend ClickView to your school leader\n </AppLink>\n <AppLink\n className='btn btn-dark'\n style={{ flex: '1 1 0' }}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n }}\n >\n Request pricing\n </AppLink>\n </div>\n ) : (\n <>\n <div style={{ height: '32px' }} className='d-none d-xl-block'></div>\n <AppLink\n className='btn btn-outline-dark w-100'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n }}\n >\n Request pricing\n </AppLink>\n </>\n )}\n </div>\n );\n}\n\ntype PlanColumnProps = {\n TopSection: React.ComponentType<{ currentPlan: boolean; badgeClassName?: string; variant?: 'premium' | 'custom'; hasExtensions?: boolean }>;\n sections: FeatureSection[];\n sectionsHeading: string;\n currentPlan?: boolean;\n currentPlanBgColour?: string;\n badgeClassName?: string;\n columnSizeClass?: string;\n variant?: 'premium' | 'custom';\n twoColumnXl?: boolean;\n reducedMinHeight?: boolean;\n hasExtensions?: boolean;\n};\n\nfunction PlanColumn(props: PlanColumnProps): JSX.Element {\n const {\n TopSection,\n sections,\n sectionsHeading,\n currentPlan,\n currentPlanBgColour,\n badgeClassName,\n columnSizeClass = 'col-12 col-xl-4',\n variant,\n twoColumnXl = false,\n reducedMinHeight = false,\n hasExtensions\n } = props;\n\n const { xl, xxl } = useBreakpoints();\n\n return (\n <div className={columnSizeClass}>\n <div className={classNames('card h-100 shadow-sm', currentPlan && currentPlanBgColour)}>\n <div style={{ minHeight: (xl || xxl) ? (reducedMinHeight ? 190 : 260) : 0 }}>\n <TopSection\n currentPlan={currentPlan}\n badgeClassName={badgeClassName}\n variant={variant}\n hasExtensions={hasExtensions}\n />\n </div>\n <div className='card-body border-top'>\n <div className='fw-semibold mb-2'>{sectionsHeading}</div>\n <FeatureSections sections={sections} twoColumnXl={twoColumnXl} />\n </div>\n </div>\n </div>\n );\n}\n\nexport function PremiumFeaturesView(): JSX.Element {\n useSetPageMetadata({ title: 'Explore our premium features' });\n\n const { accessPolicy, isLoaded } = useAccessPolicy();\n\n const { reverseTrialReferralCount } = useSettings(null);\n\n const hasExtensions = reverseTrialReferralCount < accessPolicy.metadata.maxReferrals;\n\n React.useEffect(() => {\n if (!isLoaded)\n return;\n \n if (EXPERIMENTAL_GATED_ACCESS_POLICY_IDS.has(accessPolicy?.id))\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n });\n }, [ isLoaded, accessPolicy ]);\n\n let layout = 'three-column';\n if (accessPolicy?.id === 'system_cv_trial_reverse_ended_v1' && !hasExtensions) {\n layout = 'two-column';\n }\n\n const isTwoColumn = layout === 'two-column';\n\n return (\n <div className='container p-3'>\n <h1 className='h3 mb-4'>Explore our plans</h1>\n\n <div className='row g-4'>\n {/* Teacher Free */}\n <PlanColumn\n TopSection={TeacherFreeTop}\n sections={FREE_SECTIONS}\n sectionsHeading='What you can do:'\n currentPlan={accessPolicy?.id === 'system_cv_trial_reverse_ended_v1'}\n currentPlanBgColour={`border-blue ${styles.heavyBorder}`}\n badgeClassName='text-blue bg-light-blue'\n columnSizeClass='col-12 col-xl-4'\n reducedMinHeight={isTwoColumn}\n hasExtensions={hasExtensions}\n />\n\n {/* Teacher Premium - only show in 3-column layout */}\n {!isTwoColumn && (\n <PlanColumn\n TopSection={TeacherPremiumTop}\n sections={PREMIUM_SECTIONS}\n sectionsHeading='Everything in previous, plus:'\n currentPlan={accessPolicy?.id === 'system_cv_trial_reverse_14_v1'}\n currentPlanBgColour={`border-indigo ${styles.heavyBorder}`}\n badgeClassName='text-indigo bg-light-indigo'\n hasExtensions={hasExtensions}\n />\n )}\n\n {/* Schools & Districts */}\n <PlanColumn\n TopSection={SchoolsDistrictsTop}\n sections={isTwoColumn ? SCHOOLS_CUSTOM_SECTIONS : SCHOOLS_SECTIONS}\n sectionsHeading='Everything in previous, plus:'\n currentPlan={false}\n columnSizeClass={isTwoColumn ? 'col-12 col-xl-8' : 'col-12 col-xl-4'}\n variant={isTwoColumn ? 'custom' : 'premium'}\n twoColumnXl={isTwoColumn}\n reducedMinHeight={isTwoColumn}\n />\n </div>\n </div>\n );\n}"],"names":["FREE_SECTIONS","title","items","PREMIUM_SECTIONS","SCHOOLS_SECTIONS","SCHOOLS_CUSTOM_SECTIONS","FeatureSections","props","sections","twoColumnXl","containerClass","className","map","section","style","breakInside","key","item","CurrentPlanBadge","label","TeacherFreeTop","currentPlan","badgeClassName","hasExtensions","AppLink","appLink","application","action","TeacherPremiumTop","SchoolsDistrictsTop","variant","isCustomVariant","flex","height","PlanColumn","TopSection","sectionsHeading","currentPlanBgColour","columnSizeClass","reducedMinHeight","useBreakpoints","xl","xxl","minHeight","PremiumFeaturesView","useSetPageMetadata","useAccessPolicy","accessPolicy","isLoaded","useSettings","reverseTrialReferralCount","metadata","maxReferrals","id","layout","isTwoColumn"],"sourceRoot":""}
|