@clickview/lite 0.104.0-rc.3 → 0.104.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/.vite/manifest.json +699 -699
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{CW1i-QHv.chunk.js → -7qiRMLt.chunk.js} +2 -2
  5. package/dist/scripts/{CW1i-QHv.chunk.js.map → -7qiRMLt.chunk.js.map} +1 -1
  6. package/dist/scripts/{CXN0_XjU.chunk.js → -KvTbeQV.chunk.js} +2 -2
  7. package/dist/scripts/{CXN0_XjU.chunk.js.map → -KvTbeQV.chunk.js.map} +1 -1
  8. package/dist/scripts/{Bu7Sr1dy.chunk.js → 0Fek4oFk.chunk.js} +2 -2
  9. package/dist/scripts/{Bu7Sr1dy.chunk.js.map → 0Fek4oFk.chunk.js.map} +1 -1
  10. package/dist/scripts/{CfRQYWGG.chunk.js → 5PKjjI4Y.chunk.js} +2 -2
  11. package/dist/scripts/{CfRQYWGG.chunk.js.map → 5PKjjI4Y.chunk.js.map} +1 -1
  12. package/dist/scripts/{Ta3cqTAC.chunk.js → AEOAlemi.chunk.js} +2 -2
  13. package/dist/scripts/{Ta3cqTAC.chunk.js.map → AEOAlemi.chunk.js.map} +1 -1
  14. package/dist/scripts/{DBcWjmUy.chunk.js → B1TqilLB.chunk.js} +2 -2
  15. package/dist/scripts/{DBcWjmUy.chunk.js.map → B1TqilLB.chunk.js.map} +1 -1
  16. package/dist/scripts/{ft2cSH-j.chunk.js → B3AhKFfz.chunk.js} +2 -2
  17. package/dist/scripts/{ft2cSH-j.chunk.js.map → B3AhKFfz.chunk.js.map} +1 -1
  18. package/dist/scripts/{DFFq-sgD.chunk.js → B3y60nT5.chunk.js} +2 -2
  19. package/dist/scripts/{DFFq-sgD.chunk.js.map → B3y60nT5.chunk.js.map} +1 -1
  20. package/dist/scripts/{DWJiezgB2.chunk.js → BBWnpWNB2.chunk.js} +2 -2
  21. package/dist/scripts/{DWJiezgB2.chunk.js.map → BBWnpWNB2.chunk.js.map} +1 -1
  22. package/dist/scripts/{B6GfukUn2.chunk.js → B_TE5XUR2.chunk.js} +2 -2
  23. package/dist/scripts/{B6GfukUn2.chunk.js.map → B_TE5XUR2.chunk.js.map} +1 -1
  24. package/dist/scripts/{BpHA-MkZ.chunk.js → BiWUSyJr.chunk.js} +2 -2
  25. package/dist/scripts/{BpHA-MkZ.chunk.js.map → BiWUSyJr.chunk.js.map} +1 -1
  26. package/dist/scripts/{VJQU9c4G2.chunk.js → Bld7iWR52.chunk.js} +2 -2
  27. package/dist/scripts/{VJQU9c4G2.chunk.js.map → Bld7iWR52.chunk.js.map} +1 -1
  28. package/dist/scripts/{C_tdgSWS2.chunk.js → Bzk4AwVx2.chunk.js} +2 -2
  29. package/dist/scripts/{C_tdgSWS2.chunk.js.map → Bzk4AwVx2.chunk.js.map} +1 -1
  30. package/dist/scripts/{9oMRc0cb2.chunk.js → CAs2Sere2.chunk.js} +2 -2
  31. package/dist/scripts/{9oMRc0cb2.chunk.js.map → CAs2Sere2.chunk.js.map} +1 -1
  32. package/dist/scripts/CCBk_ENs.chunk.js +1 -0
  33. package/dist/scripts/{qT_Twe2q.chunk.js → CMHxOVI7.chunk.js} +2 -2
  34. package/dist/scripts/{qT_Twe2q.chunk.js.map → CMHxOVI7.chunk.js.map} +1 -1
  35. package/dist/scripts/{Bm5qACA52.chunk.js → CNfmLVE82.chunk.js} +2 -2
  36. package/dist/scripts/{Bm5qACA52.chunk.js.map → CNfmLVE82.chunk.js.map} +1 -1
  37. package/dist/scripts/{CpzveYo2.chunk.js → CVL6bQWp.chunk.js} +2 -2
  38. package/dist/scripts/{CpzveYo2.chunk.js.map → CVL6bQWp.chunk.js.map} +1 -1
  39. package/dist/scripts/{CNPKh2z72.chunk.js → CX6c7KRp2.chunk.js} +2 -2
  40. package/dist/scripts/{CNPKh2z72.chunk.js.map → CX6c7KRp2.chunk.js.map} +1 -1
  41. package/dist/scripts/{BTm7hIyP2.chunk.js → CaCm4N_d2.chunk.js} +2 -2
  42. package/dist/scripts/{BTm7hIyP2.chunk.js.map → CaCm4N_d2.chunk.js.map} +1 -1
  43. package/dist/scripts/{DW_sm5se2.chunk.js → CfNYFxJl2.chunk.js} +2 -2
  44. package/dist/scripts/{DW_sm5se2.chunk.js.map → CfNYFxJl2.chunk.js.map} +1 -1
  45. package/dist/scripts/{C4OV7pr-.chunk.js → CmnbQiBA.chunk.js} +2 -2
  46. package/dist/scripts/{C4OV7pr-.chunk.js.map → CmnbQiBA.chunk.js.map} +1 -1
  47. package/dist/scripts/CpsbRDII.chunk.js +2 -0
  48. package/dist/scripts/{jAtAipGN.chunk.js.map → CpsbRDII.chunk.js.map} +1 -1
  49. package/dist/scripts/{CFduwlo0.chunk.js → Cqq1N9xw.chunk.js} +2 -2
  50. package/dist/scripts/{CFduwlo0.chunk.js.map → Cqq1N9xw.chunk.js.map} +1 -1
  51. package/dist/scripts/{UCiRB6cQ.chunk.js → CwFYdvvA.chunk.js} +2 -2
  52. package/dist/scripts/{UCiRB6cQ.chunk.js.map → CwFYdvvA.chunk.js.map} +1 -1
  53. package/dist/scripts/{DLcyKjA7.chunk.js → Cyit3dMk.chunk.js} +2 -2
  54. package/dist/scripts/{DLcyKjA7.chunk.js.map → Cyit3dMk.chunk.js.map} +1 -1
  55. package/dist/scripts/{BxjzTnvL2.chunk.js → D-iyHqNw2.chunk.js} +3 -3
  56. package/dist/scripts/{BxjzTnvL2.chunk.js.map → D-iyHqNw2.chunk.js.map} +1 -1
  57. package/dist/scripts/{x2GB1P6E2.chunk.js → D3ncynN72.chunk.js} +3 -3
  58. package/dist/scripts/{x2GB1P6E2.chunk.js.map → D3ncynN72.chunk.js.map} +1 -1
  59. package/dist/scripts/{DH_0KtTK2.chunk.js → DICsRDM42.chunk.js} +2 -2
  60. package/dist/scripts/{DH_0KtTK2.chunk.js.map → DICsRDM42.chunk.js.map} +1 -1
  61. package/dist/scripts/{BTcLMVw4.chunk.js → DKDWcWxk.chunk.js} +2 -2
  62. package/dist/scripts/{BTcLMVw4.chunk.js.map → DKDWcWxk.chunk.js.map} +1 -1
  63. package/dist/scripts/{2p_6pVn6.chunk.js → DSPMbDdF.chunk.js} +2 -2
  64. package/dist/scripts/{2p_6pVn6.chunk.js.map → DSPMbDdF.chunk.js.map} +1 -1
  65. package/dist/scripts/{Bh-26cqn.chunk.js → Dnz8CbEu.chunk.js} +3 -3
  66. package/dist/scripts/{Bh-26cqn.chunk.js.map → Dnz8CbEu.chunk.js.map} +1 -1
  67. package/dist/scripts/{CukXgE1z.chunk.js → Dt5731Ay.chunk.js} +2 -2
  68. package/dist/scripts/{CukXgE1z.chunk.js.map → Dt5731Ay.chunk.js.map} +1 -1
  69. package/dist/scripts/{DCPsmD1m.chunk.js → Dtag-27K.chunk.js} +2 -2
  70. package/dist/scripts/{DCPsmD1m.chunk.js.map → Dtag-27K.chunk.js.map} +1 -1
  71. package/dist/scripts/{DOCHl5Sy.chunk.js → DyE6EUDb.chunk.js} +2 -2
  72. package/dist/scripts/{DOCHl5Sy.chunk.js.map → DyE6EUDb.chunk.js.map} +1 -1
  73. package/dist/scripts/{app-LEZ4B6dG.js → app-BzH1hkoU.js} +4 -4
  74. package/dist/scripts/{app-LEZ4B6dG.js.map → app-BzH1hkoU.js.map} +1 -1
  75. package/dist/scripts/{DerPQKk6.chunk.js → cDv6zuhh.chunk.js} +2 -2
  76. package/dist/scripts/{DerPQKk6.chunk.js.map → cDv6zuhh.chunk.js.map} +1 -1
  77. package/dist/scripts/{Cl2FZEIX.chunk.js → fMgBORUX.chunk.js} +2 -2
  78. package/dist/scripts/{Cl2FZEIX.chunk.js.map → fMgBORUX.chunk.js.map} +1 -1
  79. package/package.json +1 -1
  80. package/dist/scripts/BILyzh0I.chunk.js +0 -1
  81. package/dist/scripts/jAtAipGN.chunk.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"CfRQYWGG.chunk.js","names":[],"sources":["../../src/apps/embed/views/embedded-interactive/EmbeddedInteractiveView.tsx"],"sourcesContent":["import React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey, UnionShareObject } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\nimport { PrivateEmbedError } from 'apps/embed/errors/forbidden/PrivateEmbedError';\nimport { EmbedViewProps } from 'apps/embed/interfaces/EmbedViewProps';\nimport { EmbedPlaceHolderHelper } from 'apps/embed/utils/EmbedPlaceholderHelper';\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\n\nexport function EmbeddedInteractiveView(props: EmbedViewProps): React.ReactElement {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.sharedInteractiveMetadata(props.objectId, props.shareId)\n );\n\n const shareLink = Flight.useBasicFetch<UnionShareObject>(\n ShareRequests.getShareObject(props.shareId)\n );\n\n const viewKeyRequest = PlayerRequests.createViewKey(props.shareId, MediaIdType.Share);\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(viewKeyRequest);\n\n const summaryPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n useCannotConsumeError(interactiveMetadata, { private: PrivateEmbedError });\n useSetPageMetadata(PageMetadataHelper.getInteractiveMetadata({ content: interactiveMetadata.data }));\n\n function onReady(player: PlayerReference): void {\n player.one('cv-playback-data-loaded', () => {\n EmbedPlaceHolderHelper.remove();\n });\n }\n\n const breakpoints = useBreakpoints();\n const useContainerFluid = breakpoints.xl && !breakpoints.xxl;\n function onShowSummary(showing: boolean): void {\n if (showing)\n document.body.classList.remove('overflow-hidden');\n else\n document.body.classList.add('overflow-hidden');\n }\n\n const hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n shareLink.hasCompleted &&\n viewKey.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <>\n <LitePlayerView\n config={config.data}\n video={interactiveMetadata.data}\n currentUser={currentUser.data}\n shareLink={shareLink.data}\n viewKey={viewKey.data}\n presentationSlug={null}\n startTime={props.queryParams.t ?? props.queryParams.startTime}\n onShowSummary={onShowSummary}\n summaryPortalNode={summaryPortalNode}\n embed\n onReady={onReady}\n collectAnonResults={!currentUser.data?.isAuthenticated && !!ShareLinkFilterHelpers.getAnonUser(props.shareId)}\n />\n <div className={`p-3 ${useContainerFluid ? 'container-fluid' : 'container'}`}>\n <OutPortal node={summaryPortalNode}></OutPortal>\n </div>\n </>\n );\n}\n"],"mappings":"6sBAyBA,SAAgB,EAAwB,EAA2C,CACjF,IAAM,EAAS,EAA6B,EAAe,OAAO,CAAC,EAE7D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAsB,EAC1B,EAAoB,0BAA0B,EAAM,SAAU,EAAM,OAAO,CAC7E,EAEM,EAAY,EAChB,EAAc,eAAe,EAAM,OAAO,CAC5C,EAGM,EAAU,EADO,EAAe,cAAc,EAAM,QAAS,EAAY,KAC3B,CAAc,EAE5D,EAAA,EAA0B,YAAc,EAAqB,EAAG,CAAC,CAAC,EAExE,EAAsB,EAAqB,CAAE,QAAS,CAAkB,CAAC,EACzE,EAAmB,EAAmB,uBAAuB,CAAE,QAAS,EAAoB,IAAK,CAAC,CAAC,EAEnG,SAAS,EAAQ,EAA+B,CAC9C,EAAO,IAAI,8BAAiC,CAC1C,EAAuB,OAAO,CAChC,CAAC,CACH,CAEA,IAAM,EAAc,EAAe,EAC7B,EAAoB,EAAY,IAAM,CAAC,EAAY,IACzD,SAAS,EAAc,EAAwB,CACzC,EACF,SAAS,KAAK,UAAU,OAAO,iBAAiB,EAEhD,SAAS,KAAK,UAAU,IAAI,iBAAiB,CACjD,CAaA,OAVE,EAAoB,MACpB,EAAO,cACP,EAAY,cACZ,EAAU,cACV,EAAQ,cAOR,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,EAAO,KACf,MAAO,EAAoB,KAC3B,YAAa,EAAY,KACzB,UAAW,EAAU,KACrB,QAAS,EAAQ,KACjB,iBAAkB,KAClB,UAAW,EAAM,YAAY,GAAK,EAAM,YAAY,UACrC,gBACI,oBACnB,MAAA,GACS,UACT,mBAAoB,CAAC,EAAY,MAAM,iBAAmB,CAAC,CAAC,EAAuB,YAAY,EAAM,OAAO,CAC7G,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,OAAO,EAAoB,kBAAoB,wBAC7D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,KAAM,CAA8B,CAAA,CAC5C,CAAA,CACL,CAAA,CAAA,GArBK,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAuBf"}
1
+ {"version":3,"file":"5PKjjI4Y.chunk.js","names":[],"sources":["../../src/apps/embed/views/embedded-interactive/EmbeddedInteractiveView.tsx"],"sourcesContent":["import React from 'react';\nimport { createHtmlPortalNode, OutPortal } from 'react-reverse-portal';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, InteractiveMetadata, PlayerViewKey, UnionShareObject } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\nimport { PrivateEmbedError } from 'apps/embed/errors/forbidden/PrivateEmbedError';\nimport { EmbedViewProps } from 'apps/embed/interfaces/EmbedViewProps';\nimport { EmbedPlaceHolderHelper } from 'apps/embed/utils/EmbedPlaceholderHelper';\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\n\nexport function EmbeddedInteractiveView(props: EmbedViewProps): React.ReactElement {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.sharedInteractiveMetadata(props.objectId, props.shareId)\n );\n\n const shareLink = Flight.useBasicFetch<UnionShareObject>(\n ShareRequests.getShareObject(props.shareId)\n );\n\n const viewKeyRequest = PlayerRequests.createViewKey(props.shareId, MediaIdType.Share);\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(viewKeyRequest);\n\n const summaryPortalNode = React.useMemo(() => createHtmlPortalNode(), []);\n\n useCannotConsumeError(interactiveMetadata, { private: PrivateEmbedError });\n useSetPageMetadata(PageMetadataHelper.getInteractiveMetadata({ content: interactiveMetadata.data }));\n\n function onReady(player: PlayerReference): void {\n player.one('cv-playback-data-loaded', () => {\n EmbedPlaceHolderHelper.remove();\n });\n }\n\n const breakpoints = useBreakpoints();\n const useContainerFluid = breakpoints.xl && !breakpoints.xxl;\n function onShowSummary(showing: boolean): void {\n if (showing)\n document.body.classList.remove('overflow-hidden');\n else\n document.body.classList.add('overflow-hidden');\n }\n\n const hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n shareLink.hasCompleted &&\n viewKey.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <>\n <LitePlayerView\n config={config.data}\n video={interactiveMetadata.data}\n currentUser={currentUser.data}\n shareLink={shareLink.data}\n viewKey={viewKey.data}\n presentationSlug={null}\n startTime={props.queryParams.t ?? props.queryParams.startTime}\n onShowSummary={onShowSummary}\n summaryPortalNode={summaryPortalNode}\n embed\n onReady={onReady}\n collectAnonResults={!currentUser.data?.isAuthenticated && !!ShareLinkFilterHelpers.getAnonUser(props.shareId)}\n />\n <div className={`p-3 ${useContainerFluid ? 'container-fluid' : 'container'}`}>\n <OutPortal node={summaryPortalNode}></OutPortal>\n </div>\n </>\n );\n}\n"],"mappings":"6sBAyBA,SAAgB,EAAwB,EAA2C,CACjF,IAAM,EAAS,EAA6B,EAAe,OAAO,CAAC,EAE7D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAsB,EAC1B,EAAoB,0BAA0B,EAAM,SAAU,EAAM,OAAO,CAC7E,EAEM,EAAY,EAChB,EAAc,eAAe,EAAM,OAAO,CAC5C,EAGM,EAAU,EADO,EAAe,cAAc,EAAM,QAAS,EAAY,KAC3B,CAAc,EAE5D,EAAA,EAA0B,YAAc,EAAqB,EAAG,CAAC,CAAC,EAExE,EAAsB,EAAqB,CAAE,QAAS,CAAkB,CAAC,EACzE,EAAmB,EAAmB,uBAAuB,CAAE,QAAS,EAAoB,IAAK,CAAC,CAAC,EAEnG,SAAS,EAAQ,EAA+B,CAC9C,EAAO,IAAI,8BAAiC,CAC1C,EAAuB,OAAO,CAChC,CAAC,CACH,CAEA,IAAM,EAAc,EAAe,EAC7B,EAAoB,EAAY,IAAM,CAAC,EAAY,IACzD,SAAS,EAAc,EAAwB,CACzC,EACF,SAAS,KAAK,UAAU,OAAO,iBAAiB,EAEhD,SAAS,KAAK,UAAU,IAAI,iBAAiB,CACjD,CAaA,OAVE,EAAoB,MACpB,EAAO,cACP,EAAY,cACZ,EAAU,cACV,EAAQ,cAOR,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OAAQ,EAAO,KACf,MAAO,EAAoB,KAC3B,YAAa,EAAY,KACzB,UAAW,EAAU,KACrB,QAAS,EAAQ,KACjB,iBAAkB,KAClB,UAAW,EAAM,YAAY,GAAK,EAAM,YAAY,UACrC,gBACI,oBACnB,MAAA,GACS,UACT,mBAAoB,CAAC,EAAY,MAAM,iBAAmB,CAAC,CAAC,EAAuB,YAAY,EAAM,OAAO,CAC7G,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,OAAO,EAAoB,kBAAoB,wBAC7D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,KAAM,CAA8B,CAAA,CAC5C,CAAA,CACL,CAAA,CAAA,GArBK,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAuBf"}
@@ -1,2 +1,2 @@
1
- import"./DAXXjFlN.chunk.js";import{n as e}from"./B785hxeE.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{y as i}from"./NlCAcBdo.chunk.js";import{t as a}from"./xwiwWcv12.chunk.js";import{t as o}from"./CVHQXNzi2.chunk.js";import{t as s}from"./BC8PeYqm.chunk.js";import{t as c}from"./CqrjHjAN.chunk.js";import{t as l}from"./D_gWf2lC.chunk.js";import{t as u}from"./DruDe9vI.chunk.js";import{n as d,t as f}from"./C6-aC3vu.chunk.js";import{n as p,t as m}from"./BGhJ8TEx.chunk.js";import{t as h}from"./7LGxCHGV.chunk.js";import{t as g}from"./B3gsVN-_.chunk.js";import{r as _}from"./BxjzTnvL2.chunk.js";import{n as v,t as y}from"./CdI1ZlaQ.chunk.js";import{t as b}from"./CpKc1O_Y.chunk.js";import{n as x}from"./ChnNWPOK2.chunk.js";import{t as S}from"./C9XBZFiR.chunk.js";import{t as C}from"./BnuuRu_J2.chunk.js";import{t as w}from"./BYaCUOEW2.chunk.js";import{t as T}from"./DNuJUXpr2.chunk.js";import{t as E}from"./DJXt6rKd2.chunk.js";import{n as D,r as O,t as k}from"./CNPKh2z72.chunk.js";t();var A=n(),j={notFound:v,forbidden:{privacy:b}};function M(e){return e?._parentClip||e?._parentVideo}function N(t){let{hasPermissions:n}=g(),v=r(l.config()),N=r(c.token()),P=r(c.currentUser()),F=r(s.sharedInteractiveMetadata(t.objectId,t.shareId)),I=r(u.getShareObject(t.shareId)),L=r(I.data&&(I.data.objectTypeId===o.Interactive?m.createViewKey(t.shareId,p.Share):m.createViewKey(t.objectId,p.MasterObject,t.shareId))),R=w(),z=r(P.data?.isAuthenticated&&a.yearGroups(P.data.customerId)),B=O(I.data),V=r(B&&F.data&&s.interactive(F.data.interactiveId)),H=r(B&&F.data&&s.videoInteractives(M(F.data).id)),{commonVideoProps:U,hasCommonVideoPropsCompleted:W}=C({locationContext:B?i.PreviewSharedInteractive:i.PlaySharedInteractive}),G=_({video:F.data,context:t.queryParams.context,contextId:t.queryParams.contextId,moviesAndTv:t.queryParams.mtv,currentUser:P.data});S(F,j),h(F,{private:b}),x({id:t.objectId,app:`interactives`,shareId:t.shareId}),T(G.videos??[]),f(d.getInteractiveMetadata({content:F.data}));let K=F.data&&v.hasCompleted&&P.hasCompleted&&(!B||V.hasCompleted)&&I.hasCompleted&&L.hasCompleted&&N.hasCompleted&&W;return B?K?(0,A.jsx)(k,{currentUser:P.data,queryParams:t.queryParams,interactive:F.data,interactives:H.data?.data,isPreviewPreventScrubbingEnabled:V.data.preventScrubbing,audiences:R.data,relatedVideos:G,canManageVideoAccess:n(e.ManageVideoAccess),commonVideoProps:U}):(0,A.jsx)(E,{}):K?(0,A.jsx)(D,{interactive:F.data,currentUser:P.data,config:v.data,audiences:R.data,yearGroups:z.data,queryParams:t.queryParams,viewKey:L.data,relatedVideos:G,shareLink:I.data,startTime:t.queryParams?.t,token:N.data,collectAnonResults:!P.data?.isAuthenticated&&!!y.getAnonUser(t.shareId),commonVideoProps:U}):(0,A.jsx)(A.Fragment,{})}export{N as SharedInteractiveView};
2
- //# sourceMappingURL=Ta3cqTAC.chunk.js.map
1
+ import"./DAXXjFlN.chunk.js";import{n as e}from"./B785hxeE.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{y as i}from"./NlCAcBdo.chunk.js";import{t as a}from"./xwiwWcv12.chunk.js";import{t as o}from"./CVHQXNzi2.chunk.js";import{t as s}from"./BC8PeYqm.chunk.js";import{t as c}from"./CqrjHjAN.chunk.js";import{t as l}from"./D_gWf2lC.chunk.js";import{t as u}from"./DruDe9vI.chunk.js";import{n as d,t as f}from"./C6-aC3vu.chunk.js";import{n as p,t as m}from"./BGhJ8TEx.chunk.js";import{t as h}from"./7LGxCHGV.chunk.js";import{t as g}from"./B3gsVN-_.chunk.js";import{r as _}from"./D-iyHqNw2.chunk.js";import{n as v,t as y}from"./CdI1ZlaQ.chunk.js";import{t as b}from"./CpKc1O_Y.chunk.js";import{n as x}from"./ChnNWPOK2.chunk.js";import{t as S}from"./C9XBZFiR.chunk.js";import{t as C}from"./BnuuRu_J2.chunk.js";import{t as w}from"./BYaCUOEW2.chunk.js";import{t as T}from"./DNuJUXpr2.chunk.js";import{t as E}from"./DJXt6rKd2.chunk.js";import{n as D,r as O,t as k}from"./CX6c7KRp2.chunk.js";t();var A=n(),j={notFound:v,forbidden:{privacy:b}};function M(e){return e?._parentClip||e?._parentVideo}function N(t){let{hasPermissions:n}=g(),v=r(l.config()),N=r(c.token()),P=r(c.currentUser()),F=r(s.sharedInteractiveMetadata(t.objectId,t.shareId)),I=r(u.getShareObject(t.shareId)),L=r(I.data&&(I.data.objectTypeId===o.Interactive?m.createViewKey(t.shareId,p.Share):m.createViewKey(t.objectId,p.MasterObject,t.shareId))),R=w(),z=r(P.data?.isAuthenticated&&a.yearGroups(P.data.customerId)),B=O(I.data),V=r(B&&F.data&&s.interactive(F.data.interactiveId)),H=r(B&&F.data&&s.videoInteractives(M(F.data).id)),{commonVideoProps:U,hasCommonVideoPropsCompleted:W}=C({locationContext:B?i.PreviewSharedInteractive:i.PlaySharedInteractive}),G=_({video:F.data,context:t.queryParams.context,contextId:t.queryParams.contextId,moviesAndTv:t.queryParams.mtv,currentUser:P.data});S(F,j),h(F,{private:b}),x({id:t.objectId,app:`interactives`,shareId:t.shareId}),T(G.videos??[]),f(d.getInteractiveMetadata({content:F.data}));let K=F.data&&v.hasCompleted&&P.hasCompleted&&(!B||V.hasCompleted)&&I.hasCompleted&&L.hasCompleted&&N.hasCompleted&&W;return B?K?(0,A.jsx)(k,{currentUser:P.data,queryParams:t.queryParams,interactive:F.data,interactives:H.data?.data,isPreviewPreventScrubbingEnabled:V.data.preventScrubbing,audiences:R.data,relatedVideos:G,canManageVideoAccess:n(e.ManageVideoAccess),commonVideoProps:U}):(0,A.jsx)(E,{}):K?(0,A.jsx)(D,{interactive:F.data,currentUser:P.data,config:v.data,audiences:R.data,yearGroups:z.data,queryParams:t.queryParams,viewKey:L.data,relatedVideos:G,shareLink:I.data,startTime:t.queryParams?.t,token:N.data,collectAnonResults:!P.data?.isAuthenticated&&!!y.getAnonUser(t.shareId),commonVideoProps:U}):(0,A.jsx)(A.Fragment,{})}export{N as SharedInteractiveView};
2
+ //# sourceMappingURL=AEOAlemi.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ta3cqTAC.chunk.js","names":[],"sources":["../../src/apps/share/views/shared-interactive/SharedInteractiveView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, Interactive, InteractiveCollection, InteractiveMetadata, PlayerViewKey, UnionShareObject, Video, YearGroup } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useShouldPreviewInteractive } from 'shared/hooks/useShouldPreviewInteractive';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { InteractivePartialLoading } from 'apps/interactives/components/interactive-partial-loading/InteractivePartialLoading';\nimport { PlayInteractive } from 'apps/interactives/components/play-interactive/PlayInteractive';\nimport { PreviewInteractive } from 'apps/interactives/components/preview-interactive/PreviewInteractive';\nimport { ShareLinkNotFoundError } from 'apps/share/errors/share-link-not-found/ShareLinkNotFoundError';\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nconst videoErrors = {\n notFound: ShareLinkNotFoundError,\n forbidden: {\n privacy: ShareLinkPrivateError\n }\n};\n\nfunction getSourceVideo(interactive: InteractiveMetadata): Clip | Video {\n return interactive?._parentClip || interactive?._parentVideo;\n}\n\nexport function SharedInteractiveView(props: ShareLinkViewProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const token = Flight.useBasicFetch<AuthToken>(UserRequests.token());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.sharedInteractiveMetadata(props.objectId, props.shareId)\n );\n\n const shareLink = Flight.useBasicFetch<UnionShareObject>(\n ShareRequests.getShareObject(props.shareId)\n );\n\n /**\n * If the shareLink type isn't an interactive, then it's a playlist and needs to be\n * used as context for fetching\n */\n const viewKeyRequest = shareLink.data && (shareLink.data.objectTypeId === MasterType.Interactive ?\n PlayerRequests.createViewKey(props.shareId, MediaIdType.Share) :\n PlayerRequests.createViewKey(props.objectId, MediaIdType.MasterObject, props.shareId));\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(viewKeyRequest);\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Authenticated staff with Lite product access get the interactive \"Preview\" view instead\n * of the usual play view.\n */\n const shouldPreviewInteractive = useShouldPreviewInteractive(shareLink.data);\n const interactive = Flight.useBasicFetch<Interactive>(\n shouldPreviewInteractive && interactiveMetadata.data &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n shouldPreviewInteractive && interactiveMetadata.data &&\n InteractiveRequests.videoInteractives(getSourceVideo(interactiveMetadata.data).id)\n );\n\n const locationContext = shouldPreviewInteractive ?\n LocationContext.PreviewSharedInteractive :\n LocationContext.PlaySharedInteractive;\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext });\n\n const relatedVideos = useGetRelatedVideos({\n video: interactiveMetadata.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n\n useHandleObjectError(interactiveMetadata, videoErrors);\n useCannotConsumeError(interactiveMetadata, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'interactives', shareId: props.shareId });\n useVideoMixin(relatedVideos.videos ?? []);\n useSetPageMetadata(PageMetadataHelper.getInteractiveMetadata({ content: interactiveMetadata.data }));\n\n const hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!shouldPreviewInteractive || interactive.hasCompleted) &&\n shareLink.hasCompleted &&\n viewKey.hasCompleted &&\n token.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (shouldPreviewInteractive) {\n // For staff, the interactive is previewed\n if (!hasLoaded)\n return <InteractivePartialLoading />;\n\n return (\n <PreviewInteractive\n currentUser={currentUser.data}\n queryParams={props.queryParams}\n interactive={interactiveMetadata.data}\n interactives={interactives.data?.data}\n isPreviewPreventScrubbingEnabled={interactive.data.preventScrubbing}\n audiences={audiences.data}\n relatedVideos={relatedVideos}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n commonVideoProps={commonVideoProps}\n />\n );\n }\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayInteractive\n interactive={interactiveMetadata.data}\n currentUser={currentUser.data}\n config={config.data}\n audiences={audiences.data}\n yearGroups={yearGroups.data}\n queryParams={props.queryParams}\n viewKey={viewKey.data}\n relatedVideos={relatedVideos}\n shareLink={shareLink.data}\n startTime={props.queryParams?.t}\n token={token.data}\n collectAnonResults={!currentUser.data?.isAuthenticated && !!ShareLinkFilterHelpers.getAnonUser(props.shareId)}\n commonVideoProps={commonVideoProps}\n />\n );\n}\n"],"mappings":"yjCAsCM,EAAc,CAClB,SAAU,EACV,UAAW,CACT,QAAS,CACX,CACF,EAEA,SAAS,EAAe,EAAgD,CACtE,OAAO,GAAa,aAAe,GAAa,YAClD,CAEA,SAAgB,EAAsB,EAAwC,CAC5E,GAAM,CAAE,kBAAmB,EAAe,EAEpC,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAQ,EAAgC,EAAa,MAAM,CAAC,EAE5D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAsB,EAC1B,EAAoB,0BAA0B,EAAM,SAAU,EAAM,OAAO,CAC7E,EAEM,EAAY,EAChB,EAAc,eAAe,EAAM,OAAO,CAC5C,EASM,EAAU,EAHO,EAAU,OAAS,EAAU,KAAK,eAAiB,EAAW,YACnF,EAAe,cAAc,EAAM,QAAS,EAAY,KAAK,EAC7D,EAAe,cAAc,EAAM,SAAU,EAAY,aAAc,EAAM,OAAO,EACpB,EAC5D,EAAY,EAAyB,EACrC,EAAa,EACjB,EAAY,MAAM,iBAAmB,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC9F,EAMM,EAA2B,EAA4B,EAAU,IAAI,EACrE,EAAc,EAClB,GAA4B,EAAoB,MAChD,EAAoB,YAAY,EAAoB,KAAK,aAAa,CACxE,EACM,EAAe,EACnB,GAA4B,EAAoB,MAChD,EAAoB,kBAAkB,EAAe,EAAoB,IAAI,CAAC,CAAC,EAAE,CACnF,EAKM,CACJ,mBACA,gCACE,EAAoB,CAAE,gBANF,EACtB,EAAgB,yBAChB,EAAgB,qBAIwB,CAAC,EAErC,EAAgB,EAAoB,CACxC,MAAO,EAAoB,KAC3B,QAAS,EAAM,YAAY,QAC3B,UAAW,EAAM,YAAY,UAC7B,YAAa,EAAM,YAAY,IAC/B,YAAa,EAAY,IAC3B,CAAC,EAED,EAAqB,EAAqB,CAAW,EACrD,EAAsB,EAAqB,CAAE,QAAS,CAAsB,CAAC,EAC7E,EAAa,CAAE,GAAI,EAAM,SAAU,IAAK,eAAgB,QAAS,EAAM,OAAQ,CAAC,EAChF,EAAc,EAAc,QAAU,CAAC,CAAC,EACxC,EAAmB,EAAmB,uBAAuB,CAAE,QAAS,EAAoB,IAAK,CAAC,CAAC,EAEnG,IAAM,EACJ,EAAoB,MACpB,EAAO,cACP,EAAY,eACX,CAAC,GAA4B,EAAY,eAC1C,EAAU,cACV,EAAQ,cACR,EAAM,cACN,EA0BF,OAvBI,EAEG,GAIH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAa,EAAY,KACzB,YAAa,EAAM,YACnB,YAAa,EAAoB,KACjC,aAAc,EAAa,MAAM,KACjC,iCAAkC,EAAY,KAAK,iBACnD,UAAW,EAAU,KACN,gBACf,qBAAsB,EAAe,EAAe,iBAAiB,EACnD,kBACnB,CAAA,GAbM,EAAA,EAAA,IAAA,CAAC,EAAD,CAA4B,CAAA,EAiBlC,GAIH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAa,EAAoB,KACjC,YAAa,EAAY,KACzB,OAAQ,EAAO,KACf,UAAW,EAAU,KACrB,WAAY,EAAW,KACvB,YAAa,EAAM,YACnB,QAAS,EAAQ,KACF,gBACf,UAAW,EAAU,KACrB,UAAW,EAAM,aAAa,EAC9B,MAAO,EAAM,KACb,mBAAoB,CAAC,EAAY,MAAM,iBAAmB,CAAC,CAAC,EAAuB,YAAY,EAAM,OAAO,EAC1F,kBACnB,CAAA,GAjBM,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAmBf"}
1
+ {"version":3,"file":"AEOAlemi.chunk.js","names":[],"sources":["../../src/apps/share/views/shared-interactive/SharedInteractiveView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, Interactive, InteractiveCollection, InteractiveMetadata, PlayerViewKey, UnionShareObject, Video, YearGroup } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useShouldPreviewInteractive } from 'shared/hooks/useShouldPreviewInteractive';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\n\nimport { InteractivePartialLoading } from 'apps/interactives/components/interactive-partial-loading/InteractivePartialLoading';\nimport { PlayInteractive } from 'apps/interactives/components/play-interactive/PlayInteractive';\nimport { PreviewInteractive } from 'apps/interactives/components/preview-interactive/PreviewInteractive';\nimport { ShareLinkNotFoundError } from 'apps/share/errors/share-link-not-found/ShareLinkNotFoundError';\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nconst videoErrors = {\n notFound: ShareLinkNotFoundError,\n forbidden: {\n privacy: ShareLinkPrivateError\n }\n};\n\nfunction getSourceVideo(interactive: InteractiveMetadata): Clip | Video {\n return interactive?._parentClip || interactive?._parentVideo;\n}\n\nexport function SharedInteractiveView(props: ShareLinkViewProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const token = Flight.useBasicFetch<AuthToken>(UserRequests.token());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.sharedInteractiveMetadata(props.objectId, props.shareId)\n );\n\n const shareLink = Flight.useBasicFetch<UnionShareObject>(\n ShareRequests.getShareObject(props.shareId)\n );\n\n /**\n * If the shareLink type isn't an interactive, then it's a playlist and needs to be\n * used as context for fetching\n */\n const viewKeyRequest = shareLink.data && (shareLink.data.objectTypeId === MasterType.Interactive ?\n PlayerRequests.createViewKey(props.shareId, MediaIdType.Share) :\n PlayerRequests.createViewKey(props.objectId, MediaIdType.MasterObject, props.shareId));\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(viewKeyRequest);\n const audiences = usePresentationAudiences();\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Authenticated staff with Lite product access get the interactive \"Preview\" view instead\n * of the usual play view.\n */\n const shouldPreviewInteractive = useShouldPreviewInteractive(shareLink.data);\n const interactive = Flight.useBasicFetch<Interactive>(\n shouldPreviewInteractive && interactiveMetadata.data &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n shouldPreviewInteractive && interactiveMetadata.data &&\n InteractiveRequests.videoInteractives(getSourceVideo(interactiveMetadata.data).id)\n );\n\n const locationContext = shouldPreviewInteractive ?\n LocationContext.PreviewSharedInteractive :\n LocationContext.PlaySharedInteractive;\n const {\n commonVideoProps,\n hasCommonVideoPropsCompleted\n } = useCommonVideoProps({ locationContext });\n\n const relatedVideos = useGetRelatedVideos({\n video: interactiveMetadata.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n\n useHandleObjectError(interactiveMetadata, videoErrors);\n useCannotConsumeError(interactiveMetadata, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'interactives', shareId: props.shareId });\n useVideoMixin(relatedVideos.videos ?? []);\n useSetPageMetadata(PageMetadataHelper.getInteractiveMetadata({ content: interactiveMetadata.data }));\n\n const hasLoaded = (\n interactiveMetadata.data &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!shouldPreviewInteractive || interactive.hasCompleted) &&\n shareLink.hasCompleted &&\n viewKey.hasCompleted &&\n token.hasCompleted &&\n hasCommonVideoPropsCompleted\n );\n\n if (shouldPreviewInteractive) {\n // For staff, the interactive is previewed\n if (!hasLoaded)\n return <InteractivePartialLoading />;\n\n return (\n <PreviewInteractive\n currentUser={currentUser.data}\n queryParams={props.queryParams}\n interactive={interactiveMetadata.data}\n interactives={interactives.data?.data}\n isPreviewPreventScrubbingEnabled={interactive.data.preventScrubbing}\n audiences={audiences.data}\n relatedVideos={relatedVideos}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n commonVideoProps={commonVideoProps}\n />\n );\n }\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <PlayInteractive\n interactive={interactiveMetadata.data}\n currentUser={currentUser.data}\n config={config.data}\n audiences={audiences.data}\n yearGroups={yearGroups.data}\n queryParams={props.queryParams}\n viewKey={viewKey.data}\n relatedVideos={relatedVideos}\n shareLink={shareLink.data}\n startTime={props.queryParams?.t}\n token={token.data}\n collectAnonResults={!currentUser.data?.isAuthenticated && !!ShareLinkFilterHelpers.getAnonUser(props.shareId)}\n commonVideoProps={commonVideoProps}\n />\n );\n}\n"],"mappings":"yjCAsCM,EAAc,CAClB,SAAU,EACV,UAAW,CACT,QAAS,CACX,CACF,EAEA,SAAS,EAAe,EAAgD,CACtE,OAAO,GAAa,aAAe,GAAa,YAClD,CAEA,SAAgB,EAAsB,EAAwC,CAC5E,GAAM,CAAE,kBAAmB,EAAe,EAEpC,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAQ,EAAgC,EAAa,MAAM,CAAC,EAE5D,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAsB,EAC1B,EAAoB,0BAA0B,EAAM,SAAU,EAAM,OAAO,CAC7E,EAEM,EAAY,EAChB,EAAc,eAAe,EAAM,OAAO,CAC5C,EASM,EAAU,EAHO,EAAU,OAAS,EAAU,KAAK,eAAiB,EAAW,YACnF,EAAe,cAAc,EAAM,QAAS,EAAY,KAAK,EAC7D,EAAe,cAAc,EAAM,SAAU,EAAY,aAAc,EAAM,OAAO,EACpB,EAC5D,EAAY,EAAyB,EACrC,EAAa,EACjB,EAAY,MAAM,iBAAmB,EAAiB,WAAW,EAAY,KAAK,UAAU,CAC9F,EAMM,EAA2B,EAA4B,EAAU,IAAI,EACrE,EAAc,EAClB,GAA4B,EAAoB,MAChD,EAAoB,YAAY,EAAoB,KAAK,aAAa,CACxE,EACM,EAAe,EACnB,GAA4B,EAAoB,MAChD,EAAoB,kBAAkB,EAAe,EAAoB,IAAI,CAAC,CAAC,EAAE,CACnF,EAKM,CACJ,mBACA,gCACE,EAAoB,CAAE,gBANF,EACtB,EAAgB,yBAChB,EAAgB,qBAIwB,CAAC,EAErC,EAAgB,EAAoB,CACxC,MAAO,EAAoB,KAC3B,QAAS,EAAM,YAAY,QAC3B,UAAW,EAAM,YAAY,UAC7B,YAAa,EAAM,YAAY,IAC/B,YAAa,EAAY,IAC3B,CAAC,EAED,EAAqB,EAAqB,CAAW,EACrD,EAAsB,EAAqB,CAAE,QAAS,CAAsB,CAAC,EAC7E,EAAa,CAAE,GAAI,EAAM,SAAU,IAAK,eAAgB,QAAS,EAAM,OAAQ,CAAC,EAChF,EAAc,EAAc,QAAU,CAAC,CAAC,EACxC,EAAmB,EAAmB,uBAAuB,CAAE,QAAS,EAAoB,IAAK,CAAC,CAAC,EAEnG,IAAM,EACJ,EAAoB,MACpB,EAAO,cACP,EAAY,eACX,CAAC,GAA4B,EAAY,eAC1C,EAAU,cACV,EAAQ,cACR,EAAM,cACN,EA0BF,OAvBI,EAEG,GAIH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAa,EAAY,KACzB,YAAa,EAAM,YACnB,YAAa,EAAoB,KACjC,aAAc,EAAa,MAAM,KACjC,iCAAkC,EAAY,KAAK,iBACnD,UAAW,EAAU,KACN,gBACf,qBAAsB,EAAe,EAAe,iBAAiB,EACnD,kBACnB,CAAA,GAbM,EAAA,EAAA,IAAA,CAAC,EAAD,CAA4B,CAAA,EAiBlC,GAIH,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAa,EAAoB,KACjC,YAAa,EAAY,KACzB,OAAQ,EAAO,KACf,UAAW,EAAU,KACrB,WAAY,EAAW,KACvB,YAAa,EAAM,YACnB,QAAS,EAAQ,KACF,gBACf,UAAW,EAAU,KACrB,UAAW,EAAM,aAAa,EAC9B,MAAO,EAAM,KACb,mBAAoB,CAAC,EAAY,MAAM,iBAAmB,CAAC,CAAC,EAAuB,YAAY,EAAM,OAAO,EAC1F,kBACnB,CAAA,GAjBM,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAmBf"}
@@ -1,2 +1,2 @@
1
- import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{t as n}from"./CQyJ7YGa.chunk.js";import{t as r}from"./e57H3T-k.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{_ as s,u as c}from"./BX0wDJmp.chunk.js";import{t as l}from"./DZssmXj6.chunk.js";import{t as u}from"./LoQS6GjP.chunk.js";import{t as d}from"./eoAypzU3.chunk.js";import{t as f}from"./D_gWf2lC.chunk.js";import{t as p}from"./C6-aC3vu.chunk.js";import{n as m,t as h}from"./BGhJ8TEx.chunk.js";import{n as g}from"./CpFtf-tI2.chunk.js";import{t as _}from"./Dhx_Wqdc.chunk.js";import{n as v}from"./6ZXIO06e.chunk.js";import{t as y}from"./DsBWAM3I2.chunk.js";import{m as b,t as x}from"./BTcLMVw4.chunk.js";import{t as S}from"./BiKac8UT2.chunk.js";var C=e(i()),w={arrowContainer:`_arrowContainer_5dwut_1`,downArrow:`_downArrow_5dwut_8`,upArrow:`_upArrow_5dwut_8`,inputContainer:`_inputContainer_5dwut_20`,focus:`_focus_5dwut_24`},T=a(),E=38,D=40,O=3600;k.defaultProps={allowKeyboardInput:!0,size:`lg`};function k(e){let[t,n]=C.useState(`00`),[r,i]=C.useState(`00`),[a,o]=C.useState(`00`),[c,l]=C.useState(!1),u=C.useRef(null),d=C.useRef(null),f=e.duration&&e.duration>=O;function p(e){e.target.select(),l(!0)}function m(e,t,n){let r=e.target.value.replace(/\D/g,``).slice(0,2);t(r),r.length===2&&n?.current&&requestAnimationFrame(()=>n.current.focus())}function h(){e.setTime(e.value+1)}function g(){e.setTime(e.value-1)}function _(n,i){e.allowKeyboardInput&&(v(s.convertDurationToSeconds(t,r,a)),i(n.target.value.padStart(2,`0`)),l(!1))}function v(t){t<0||e.maxValue&&t>e.maxValue||e.setTime(t)}function b(){let t=y.ToDisplayDuration(e.value*1e3,!0).split(`:`);n(String(t[0]).padStart(2,`0`)),i(t[1]),o(t[2])}function x(e){e.keyCode===E&&h(),e.keyCode===D&&g()}return C.useEffect(()=>{b()},[e.value]),(0,T.jsxs)(`div`,{className:`${w.inputContainer} ${c?w.focus:``} position-relative bg-white d-flex align-items-center p-2 rounded-pill font-size-md`,children:[(0,T.jsxs)(`div`,{className:`${f?``:`d-none`}`,children:[(0,T.jsx)(`input`,{type:`text`,className:`border-0 outline-none`,value:t,maxLength:2,placeholder:`HH`,onChange:e=>m(e,n,u),onFocus:p,onBlur:e=>_(e,n),onKeyDown:x,disabled:e.disabled}),(0,T.jsx)(`span`,{children:`:`})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`input`,{ref:u,type:`text`,className:`border-0 outline-none`,value:r,maxLength:2,placeholder:`MM`,onChange:e=>m(e,i,d),onFocus:p,onBlur:e=>_(e,i),onKeyDown:x,disabled:e.disabled}),(0,T.jsx)(`span`,{children:`:`})]}),(0,T.jsx)(`input`,{ref:d,type:`text`,className:`border-0 outline-none`,value:a,maxLength:2,placeholder:`SS`,onChange:e=>o(e.target.value),onFocus:p,onBlur:e=>_(e,o),onKeyDown:x,disabled:e.disabled}),!e.hideButtons&&(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:w.arrowContainer,onClick:h,children:(0,T.jsx)(`div`,{className:w.upArrow})}),(0,T.jsx)(`div`,{className:w.arrowContainer,onClick:g,children:(0,T.jsx)(`div`,{className:w.downArrow})})]})]})}var A=`shared.clipTimeForm`,j=n.encloseNamespace(A);function M(e){if(isNaN(e.startTime)||isNaN(e.endTime))return(0,T.jsx)(T.Fragment,{});let t=Math.floor(e.endTime)-Math.floor(e.startTime);return(0,T.jsxs)(`div`,{className:`px-3`,children:[(0,T.jsxs)(`form`,{className:`d-flex align-items-center justify-content-center pb-4`,children:[(0,T.jsx)(`div`,{children:(0,T.jsx)(k,{value:e.startTime,setTime:e.setStartTime,duration:e.duration})}),(0,T.jsx)(`span`,{className:`px-2`,children:`-`}),(0,T.jsx)(`div`,{className:`me-2`,children:(0,T.jsx)(k,{value:e.endTime,setTime:e.setEndTime,duration:e.duration})}),(0,T.jsxs)(`span`,{children:[(0,T.jsx)(`strong`,{children:(0,T.jsx)(g,{namespace:A,phrase:`duration`})}),`\xA0`,y.ToDisplayDuration(t*1e3)]})]}),(0,T.jsxs)(`div`,{className:`d-flex justify-content-end`,children:[(0,T.jsx)(`button`,{className:`btn btn-link`,onClick:e.onCancel,children:j(`cancel`)}),(0,T.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onSubmit,children:j(`next`)})]})]})}var N=b.getComponent(`Component`),P=`<svg viewBox="0 0 5 14" pointer-events="none"><g id="Clips" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Clip-2" transform="translate(-835.000000, -632.000000)" fill="#FFFFFF"><g id="Video-Copy" transform="translate(275.000000, 96.000000)"><g id="Handles" transform="translate(560.000000, 536.000000)"><circle id="Oval" cx="1" cy="1" r="1"></circle><circle id="Oval-Copy-2" cx="1" cy="5" r="1"></circle><circle id="Oval-Copy-4" cx="1" cy="9" r="1"></circle><circle id="Oval-Copy-8" cx="1" cy="13" r="1"></circle><circle id="Oval-Copy" cx="4" cy="1" r="1"></circle><circle id="Oval-Copy-3" cx="4" cy="5" r="1"></circle><circle id="Oval-Copy-5" cx="4" cy="9" r="1"></circle><circle id="Oval-Copy-9" cx="4" cy="13" r="1"></circle></g></g></g></g></svg>`,F=class extends N{buildCSSClass(){return`cv-clip-timepoint-handle ${super.buildCSSClass()}`}createEl(e,t,n){return super.createEl(e,{...t,className:this.buildCSSClass(),innerHTML:P},n)}isEventTarget(e){return this.el().contains(e.target)}},I=b.getComponent(`Component`),L=class extends I{constructor(e,t){super(e,t),this.dragStartActive=!1,this.dragEndActive=!1,this.dragSliderActive=!1,this.dragSliderCurrentPosition=null,this.minDuration=Math.min(e.duration(),this.options_.minDuration),this.setStartTime(t.startTime,!1),this.setEndTime(t.endTime,!1),this.startHandle=new F(this.player(),t),this.startHandle.addClass(`cv-clip-start-handle`),this.addChild(this.startHandle),this.endHandle=new F(this.player(),t),this.endHandle.addClass(`cv-clip-end-handle`),this.addChild(this.endHandle),this.on(this.player(),`update:clip:start:time`,({time:e})=>this.setStartTime(e)),this.on(this.player(),`update:clip:end:time`,({time:e})=>this.setEndTime(e)),this.bindListeners(),this.update()}createEl(){return super.createEl(`div`,{className:`cv-clip-timepoint-selector`},{})}update(){this.options_.onChangeStartTime(this.startTime),this.options_.onChangeEndTime(this.endTime),this.requestAnimationFrame(()=>{this.setStartOffset(),this.setWidth()})}setStartTime(e,t=!0){if(isNaN(e))return;let n=this.hasStartTime()&&this.hasEndTime()&&this.endTime-this.startTime,r=this.player().duration()-this.minDuration;if(e>r&&(e=r),e<0&&(e=0),this.startTime=e,this.endTime&&this.endTime-this.startTime<this.minDuration){let e=typeof n==`number`?this.startTime+n:this.startTime+this.minDuration;this.setEndTime(e)}this.player().currentTime(this.startTime),t&&this.update()}setEndTime(e,t=!0){if(isNaN(e))return;let n=this.hasStartTime()&&this.hasEndTime()&&this.endTime-this.startTime,r=this.minDuration;if(e<r&&(e=r),e>this.player().duration()&&(e=this.player().duration()),this.endTime=e,this.startTime&&this.endTime-this.startTime<this.minDuration){let e=typeof n==`number`?this.endTime-n:this.endTime-this.minDuration;this.setStartTime(e)}t&&this.update()}bindListeners(){this.onTimeupdate=this.onTimeupdate.bind(this),this.player().on(`timeupdate`,this.onTimeupdate),this.on(`mousedown`,this.dragStart),this.on(`touchstart`,this.dragStart),this.player().on(`dispose`,()=>{this.player().off(`timeupdate`,this.onTimeupdate),this.off(`mousedown`,this.dragStart),this.off(`touchstart`,this.dragStart)})}hasStartTime(){return typeof this.startTime==`number`}hasEndTime(){return typeof this.endTime==`number`}onTimeupdate(){let e=this.player().currentTime();e>this.endTime&&e<this.endTime+.5&&this.player().pause()}dragStart(e){this.startHandle.isEventTarget(e)&&(e.stopImmediatePropagation(),this.dragStartActive=!0),this.endHandle.isEventTarget(e)&&(e.stopImmediatePropagation(),this.dragEndActive=!0),e.target===this.el()&&(e.stopImmediatePropagation(),this.dragSliderActive=!0,this.dragSliderCurrentPosition=this.getPosition(e));let t=this.el().ownerDocument;this.on(t,`mousemove`,this.drag),this.on(t,`mouseup`,this.dragEnd),this.on(t,`touchmove`,this.drag),this.on(t,`touchend`,this.dragEnd),this.drag(e)}dragEnd(){this.dragStartActive=!1,this.dragEndActive=!1,this.dragSliderActive=!1,this.dragSliderCurrentPosition=null;let e=this.el().ownerDocument;this.off(e,`mousemove`,this.drag),this.off(e,`mouseup`,this.dragEnd),this.off(e,`touchmove`,this.drag),this.off(e,`touchend`,this.dragEnd)}drag(e){if(!this.dragStartActive&&!this.dragEndActive&&!this.dragSliderActive||!b.dom.isSingleLeftClick(e))return;let t=this.getPosition(e),n=t*this.player().duration();this.dragStartActive&&this.handleStartHandleDrag(n),this.dragEndActive&&this.handleEndHandleDrag(n),this.dragSliderActive&&this.handleSliderDrag(t)}handleStartHandleDrag(e){this.setStartTime(e)}handleEndHandleDrag(e){this.setEndTime(e)}handleSliderDrag(e){let t=(e-this.dragSliderCurrentPosition)*this.player().duration(),n=this.startTime+t,r=this.endTime+t;n<=0||r>=this.player().duration()||(this.dragSliderCurrentPosition=e,this.setStartTime(n),this.setEndTime(r))}getPosition(e){return b.dom.getPointerPosition(this.el_.parentNode,e).x}setStartOffset(){this.el_.style.marginLeft=`${this.getPercentage(this.startTime)}%`}setWidth(){this.el_.style.width=`${this.getPercentage(this.endTime-this.startTime)}%`}getPercentage(e){return+(e/this.player().duration()*100).toFixed(4)}},R=b.getComponent(`Component`),z=class extends R{constructor(e,t){super(e,t),this.seekBar_=t.seekBar,this.playProgressBar_=t.playProgressBar,this.bindListeners(),this.player_.one(`dispose`,()=>{this.unbindListeners()})}createEl(e,t,n){return super.createEl(e,{...t,className:`cv-create-clip-progress-indicator`},n)}bindListeners(){this.on(`mousedown`,this.handleMouseDown),this.on(`touchstart`,this.handleMouseDown)}unbindListeners(){let e=this.el_.ownerDocument;this.off(`mousedown`,this.handleMouseDown),this.off(`touchstart`,this.handleMouseDown),this.off(e,`mousemove`,this.handleMouseMove),this.off(e,`mouseup`,this.handleMouseUp),this.off(e,`touchmove`,this.handleMouseMove),this.off(e,`touchend`,this.handleMouseUp)}handleMouseDown(e){if(!b.dom.isSingleLeftClick(e))return;e.stopPropagation(),e.type===`mousedown`&&e.preventDefault(),e.type===`touchstart`&&!b.browser.IS_CHROME&&e.preventDefault(),this.player_.scrubbing(!0),this.videoWasPlaying_=!this.player_.paused(),this.player_.pause(),b.dom.blockTextSelection();let t=this.el_.ownerDocument;this.on(t,`mousemove`,this.handleMouseMove),this.on(t,`mouseup`,this.handleMouseUp),this.on(t,`touchmove`,this.handleMouseMove),this.on(t,`touchend`,this.handleMouseUp),this.handleMouseMove(e),this.player_.addClass(`cv-hide-mouse-time`)}handleMouseMove(e){if(!b.dom.isSingleLeftClick(e))return;let t=b.dom.getPointerPosition(this.seekBar_.el_,e).x*this.player_.duration();t===this.player_.duration()&&(t-=.1),this.player_.currentTime(t),this.playProgressBar_.update()}handleMouseUp(e){b.dom.unblockTextSelection();let t=this.el_.ownerDocument;this.off(t,`mousemove`,this.handleMouseMove),this.off(t,`mouseup`,this.handleMouseUp),this.off(t,`touchmove`,this.handleMouseMove),this.off(t,`touchend`,this.handleMouseUp),e?.stopPropagation(),this.player_.scrubbing(!1),this.player_.trigger({type:`timeupdate`,target:this,manuallyTriggered:!0}),this.videoWasPlaying_&&this.player_.play(),this.seekBar_.update(),this.player_.removeClass(`cv-hide-mouse-time`)}};b.registerComponent(`CreateClipProgressIndicator`,z);var B=b.getComponent(`SeekBar`),V=class extends B{constructor(e,t){super(e,t),this.addClass(`cv-create-clip-seek-bar`)}initialize(e){let t=new L(this.player(),e);this.addChild(t);let n=this.getChild(`playProgressBar`),r=new z(this.player_,{seekBar:this,playProgressBar:n});n.addChild(r)}};V.prototype.options_={children:[`playProgressBar`],barName:`playProgressBar`},!b.browser.IS_IOS&&!b.browser.IS_ANDROID&&V.prototype.options_.children.splice(1,0,`mouseTimeDisplay`),b.registerComponent(`CreateClipSeekBar`,V);var H=b.getPlugin(`plugin`),U=5,W=class extends H{constructor(e,t){super(e,t),this.options=t,this.initCreateClipSeekBar=this.initCreateClipSeekBar.bind(this),this.player.one(`loadedmetadata`,()=>this.player.ready(this.initCreateClipSeekBar))}initCreateClipSeekBar(){let e=this.player.controlBar.getChild(`ProgressControl`)?.getChild(`SeekBar`);if(!e)return;let t=!isNaN(this.options.startTime)&&this.options.startTime>=0?this.options.startTime:0,n=!isNaN(this.options.endTime)&&this.options.endTime<=this.player.duration()?this.options.endTime:this.player.duration(),r=Math.min(this.options.minDuration||U,this.player.duration());e.initialize({startTime:t,endTime:n,minDuration:r,onChangeStartTime:this.options.onChangeStartTime,onChangeEndTime:this.options.onChangeEndTime})}dispose(){this.player.off(`loadedmetadata`,this.initCreateClipSeekBar),super.dispose()}};b.registerPlugin(`createClipPlugin`,W);var G=class extends x{constructor(e,t){super(e,{allowFullscreen:!0,...t,playbackRates:null,enableLocalCache:!1})}getPlayerClassName(){return`cv-create-clip-player`}configurePlugins(){let{startTime:e,endTime:t,minDuration:n,onChangeStartTime:r,onChangeEndTime:i}=this.options;this.player.createClipPlugin({startTime:e,endTime:t,minDuration:n,onChangeStartTime:r,onChangeEndTime:i})}getPlayerOptions(){let e=super.getPlayerOptions();return e.inactivityTimeout=0,e}getSeekBarName(){return`CreateClipSeekBar`}getAnalyticsPlayerType(){return`create-clip-player`}};function K(e){let{onReady:t,onDispose:n}=e,r=C.useRef(null),i=C.useRef(null);return C.useEffect(()=>{if(i.current?.dispose(),r)return i.current=new G(r.current,e),t&&i.current.ready(()=>{t(S(i.current))}),n&&i.current.one(`dispose`,n),()=>{i.current?.dispose()}},[e.viewKey]),C.useEffect(()=>{i.current?.trigger({type:`update:clip:start:time`,time:e.startTime})},[e.startTime]),C.useEffect(()=>{i.current?.trigger({type:`update:clip:end:time`,time:e.endTime})},[e.endTime]),(0,T.jsx)(`div`,{ref:r})}var q=`edit-clip-timepoints`,J=`shared.editClipTimepoints`,Y=n.encloseNamespace(J),X=30,Z=5;function Q(e){_.render((0,T.jsx)(`p`,{children:e}),{title:Y(`errorHeading`),cancelButtonProps:{variant:`link`,text:Y(`close`)}})}function $(e){if(!e)return 0;let t=Number(e);return isNaN(t)?0:t}function ee(e){let i=C.useRef(null),a=$(e.startTime),[s,g]=C.useState(a),[_,y]=C.useState(a+X),b=c(f.config()),x=c(!!e.id&&l.clip(e.id)),S=x.data?._parentVideo?.id||e.videoId,w=c(!!S&&h.createViewKey(S,m.MasterObject)),E=c(!!S&&u.video(S)),[D,O]=C.useState(0),k=v();p({title:e.id?x.data?.name:Y(`pageTitle`)}),C.useEffect(()=>{k.lock({id:q,title:n.getPhrase(J,`navLockTitle`),text:n.getPhrase(J,`navLockBody`)})},[]),C.useEffect(()=>{x.data&&(g(x.data.startTime),y(x.data.endTime))},[x.data]);function A(e){i.current=e,e.on(`durationchange`,()=>O(e.duration()))}function j(){let n=``;if(s>_&&(n=Y(`startTimeGreaterThanEndTime`)),_-s<Z&&(n=Y(`tooShort`,{minDuration:Z})),n){Q(n);return}k.unlock(q),t.trigger({application:o.CLIPS,action:e.id?d.Clips.EDIT_CLIP_DETAILS_POPUP:d.Clips.CREATE_CLIP_DETAILS,args:e.id?[e.id]:[e.videoId],params:{startTime:s,endTime:_,isCopying:e.isCopying}})}function N(){let e=i.current?.currentTime()??0;t.trigger({application:o.VIDEOS,action:d.Videos.PLAY_VIDEO,args:[null,E.data?.id,r.slugify(E.data?.name)],params:{t:e}})}return!e.id&&!e.videoId?(0,T.jsx)(T.Fragment,{}):(0,T.jsx)(`div`,{className:`px-3`,children:!!b.data&&!!w.data&&!!E.data&&(!e.id||!!x.data)&&(0,T.jsxs)(`div`,{className:`pb-3`,children:[(0,T.jsx)(`div`,{className:`mb-3`,children:(0,T.jsx)(K,{onReady:A,playerApi:new URL(b.data.playerApiUrl),viewKey:w.data.viewKey,startTime:s,endTime:_,onChangeStartTime:g,onChangeEndTime:y,minDuration:Z,autoplay:!0})}),(0,T.jsx)(M,{startTime:s,endTime:_,setStartTime:g,setEndTime:y,onSubmit:j,onCancel:N,duration:D})]})})}export{ee as EditClipTimepointsView};
2
- //# sourceMappingURL=DBcWjmUy.chunk.js.map
1
+ import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{t as n}from"./CQyJ7YGa.chunk.js";import{t as r}from"./e57H3T-k.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{_ as s,u as c}from"./BX0wDJmp.chunk.js";import{t as l}from"./DZssmXj6.chunk.js";import{t as u}from"./LoQS6GjP.chunk.js";import{t as d}from"./eoAypzU3.chunk.js";import{t as f}from"./D_gWf2lC.chunk.js";import{t as p}from"./C6-aC3vu.chunk.js";import{n as m,t as h}from"./BGhJ8TEx.chunk.js";import{n as g}from"./CpFtf-tI2.chunk.js";import{t as _}from"./Dhx_Wqdc.chunk.js";import{n as v}from"./6ZXIO06e.chunk.js";import{t as y}from"./DsBWAM3I2.chunk.js";import{m as b,t as x}from"./DKDWcWxk.chunk.js";import{t as S}from"./BiKac8UT2.chunk.js";var C=e(i()),w={arrowContainer:`_arrowContainer_5dwut_1`,downArrow:`_downArrow_5dwut_8`,upArrow:`_upArrow_5dwut_8`,inputContainer:`_inputContainer_5dwut_20`,focus:`_focus_5dwut_24`},T=a(),E=38,D=40,O=3600;k.defaultProps={allowKeyboardInput:!0,size:`lg`};function k(e){let[t,n]=C.useState(`00`),[r,i]=C.useState(`00`),[a,o]=C.useState(`00`),[c,l]=C.useState(!1),u=C.useRef(null),d=C.useRef(null),f=e.duration&&e.duration>=O;function p(e){e.target.select(),l(!0)}function m(e,t,n){let r=e.target.value.replace(/\D/g,``).slice(0,2);t(r),r.length===2&&n?.current&&requestAnimationFrame(()=>n.current.focus())}function h(){e.setTime(e.value+1)}function g(){e.setTime(e.value-1)}function _(n,i){e.allowKeyboardInput&&(v(s.convertDurationToSeconds(t,r,a)),i(n.target.value.padStart(2,`0`)),l(!1))}function v(t){t<0||e.maxValue&&t>e.maxValue||e.setTime(t)}function b(){let t=y.ToDisplayDuration(e.value*1e3,!0).split(`:`);n(String(t[0]).padStart(2,`0`)),i(t[1]),o(t[2])}function x(e){e.keyCode===E&&h(),e.keyCode===D&&g()}return C.useEffect(()=>{b()},[e.value]),(0,T.jsxs)(`div`,{className:`${w.inputContainer} ${c?w.focus:``} position-relative bg-white d-flex align-items-center p-2 rounded-pill font-size-md`,children:[(0,T.jsxs)(`div`,{className:`${f?``:`d-none`}`,children:[(0,T.jsx)(`input`,{type:`text`,className:`border-0 outline-none`,value:t,maxLength:2,placeholder:`HH`,onChange:e=>m(e,n,u),onFocus:p,onBlur:e=>_(e,n),onKeyDown:x,disabled:e.disabled}),(0,T.jsx)(`span`,{children:`:`})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`input`,{ref:u,type:`text`,className:`border-0 outline-none`,value:r,maxLength:2,placeholder:`MM`,onChange:e=>m(e,i,d),onFocus:p,onBlur:e=>_(e,i),onKeyDown:x,disabled:e.disabled}),(0,T.jsx)(`span`,{children:`:`})]}),(0,T.jsx)(`input`,{ref:d,type:`text`,className:`border-0 outline-none`,value:a,maxLength:2,placeholder:`SS`,onChange:e=>o(e.target.value),onFocus:p,onBlur:e=>_(e,o),onKeyDown:x,disabled:e.disabled}),!e.hideButtons&&(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:w.arrowContainer,onClick:h,children:(0,T.jsx)(`div`,{className:w.upArrow})}),(0,T.jsx)(`div`,{className:w.arrowContainer,onClick:g,children:(0,T.jsx)(`div`,{className:w.downArrow})})]})]})}var A=`shared.clipTimeForm`,j=n.encloseNamespace(A);function M(e){if(isNaN(e.startTime)||isNaN(e.endTime))return(0,T.jsx)(T.Fragment,{});let t=Math.floor(e.endTime)-Math.floor(e.startTime);return(0,T.jsxs)(`div`,{className:`px-3`,children:[(0,T.jsxs)(`form`,{className:`d-flex align-items-center justify-content-center pb-4`,children:[(0,T.jsx)(`div`,{children:(0,T.jsx)(k,{value:e.startTime,setTime:e.setStartTime,duration:e.duration})}),(0,T.jsx)(`span`,{className:`px-2`,children:`-`}),(0,T.jsx)(`div`,{className:`me-2`,children:(0,T.jsx)(k,{value:e.endTime,setTime:e.setEndTime,duration:e.duration})}),(0,T.jsxs)(`span`,{children:[(0,T.jsx)(`strong`,{children:(0,T.jsx)(g,{namespace:A,phrase:`duration`})}),`\xA0`,y.ToDisplayDuration(t*1e3)]})]}),(0,T.jsxs)(`div`,{className:`d-flex justify-content-end`,children:[(0,T.jsx)(`button`,{className:`btn btn-link`,onClick:e.onCancel,children:j(`cancel`)}),(0,T.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onSubmit,children:j(`next`)})]})]})}var N=b.getComponent(`Component`),P=`<svg viewBox="0 0 5 14" pointer-events="none"><g id="Clips" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Clip-2" transform="translate(-835.000000, -632.000000)" fill="#FFFFFF"><g id="Video-Copy" transform="translate(275.000000, 96.000000)"><g id="Handles" transform="translate(560.000000, 536.000000)"><circle id="Oval" cx="1" cy="1" r="1"></circle><circle id="Oval-Copy-2" cx="1" cy="5" r="1"></circle><circle id="Oval-Copy-4" cx="1" cy="9" r="1"></circle><circle id="Oval-Copy-8" cx="1" cy="13" r="1"></circle><circle id="Oval-Copy" cx="4" cy="1" r="1"></circle><circle id="Oval-Copy-3" cx="4" cy="5" r="1"></circle><circle id="Oval-Copy-5" cx="4" cy="9" r="1"></circle><circle id="Oval-Copy-9" cx="4" cy="13" r="1"></circle></g></g></g></g></svg>`,F=class extends N{buildCSSClass(){return`cv-clip-timepoint-handle ${super.buildCSSClass()}`}createEl(e,t,n){return super.createEl(e,{...t,className:this.buildCSSClass(),innerHTML:P},n)}isEventTarget(e){return this.el().contains(e.target)}},I=b.getComponent(`Component`),L=class extends I{constructor(e,t){super(e,t),this.dragStartActive=!1,this.dragEndActive=!1,this.dragSliderActive=!1,this.dragSliderCurrentPosition=null,this.minDuration=Math.min(e.duration(),this.options_.minDuration),this.setStartTime(t.startTime,!1),this.setEndTime(t.endTime,!1),this.startHandle=new F(this.player(),t),this.startHandle.addClass(`cv-clip-start-handle`),this.addChild(this.startHandle),this.endHandle=new F(this.player(),t),this.endHandle.addClass(`cv-clip-end-handle`),this.addChild(this.endHandle),this.on(this.player(),`update:clip:start:time`,({time:e})=>this.setStartTime(e)),this.on(this.player(),`update:clip:end:time`,({time:e})=>this.setEndTime(e)),this.bindListeners(),this.update()}createEl(){return super.createEl(`div`,{className:`cv-clip-timepoint-selector`},{})}update(){this.options_.onChangeStartTime(this.startTime),this.options_.onChangeEndTime(this.endTime),this.requestAnimationFrame(()=>{this.setStartOffset(),this.setWidth()})}setStartTime(e,t=!0){if(isNaN(e))return;let n=this.hasStartTime()&&this.hasEndTime()&&this.endTime-this.startTime,r=this.player().duration()-this.minDuration;if(e>r&&(e=r),e<0&&(e=0),this.startTime=e,this.endTime&&this.endTime-this.startTime<this.minDuration){let e=typeof n==`number`?this.startTime+n:this.startTime+this.minDuration;this.setEndTime(e)}this.player().currentTime(this.startTime),t&&this.update()}setEndTime(e,t=!0){if(isNaN(e))return;let n=this.hasStartTime()&&this.hasEndTime()&&this.endTime-this.startTime,r=this.minDuration;if(e<r&&(e=r),e>this.player().duration()&&(e=this.player().duration()),this.endTime=e,this.startTime&&this.endTime-this.startTime<this.minDuration){let e=typeof n==`number`?this.endTime-n:this.endTime-this.minDuration;this.setStartTime(e)}t&&this.update()}bindListeners(){this.onTimeupdate=this.onTimeupdate.bind(this),this.player().on(`timeupdate`,this.onTimeupdate),this.on(`mousedown`,this.dragStart),this.on(`touchstart`,this.dragStart),this.player().on(`dispose`,()=>{this.player().off(`timeupdate`,this.onTimeupdate),this.off(`mousedown`,this.dragStart),this.off(`touchstart`,this.dragStart)})}hasStartTime(){return typeof this.startTime==`number`}hasEndTime(){return typeof this.endTime==`number`}onTimeupdate(){let e=this.player().currentTime();e>this.endTime&&e<this.endTime+.5&&this.player().pause()}dragStart(e){this.startHandle.isEventTarget(e)&&(e.stopImmediatePropagation(),this.dragStartActive=!0),this.endHandle.isEventTarget(e)&&(e.stopImmediatePropagation(),this.dragEndActive=!0),e.target===this.el()&&(e.stopImmediatePropagation(),this.dragSliderActive=!0,this.dragSliderCurrentPosition=this.getPosition(e));let t=this.el().ownerDocument;this.on(t,`mousemove`,this.drag),this.on(t,`mouseup`,this.dragEnd),this.on(t,`touchmove`,this.drag),this.on(t,`touchend`,this.dragEnd),this.drag(e)}dragEnd(){this.dragStartActive=!1,this.dragEndActive=!1,this.dragSliderActive=!1,this.dragSliderCurrentPosition=null;let e=this.el().ownerDocument;this.off(e,`mousemove`,this.drag),this.off(e,`mouseup`,this.dragEnd),this.off(e,`touchmove`,this.drag),this.off(e,`touchend`,this.dragEnd)}drag(e){if(!this.dragStartActive&&!this.dragEndActive&&!this.dragSliderActive||!b.dom.isSingleLeftClick(e))return;let t=this.getPosition(e),n=t*this.player().duration();this.dragStartActive&&this.handleStartHandleDrag(n),this.dragEndActive&&this.handleEndHandleDrag(n),this.dragSliderActive&&this.handleSliderDrag(t)}handleStartHandleDrag(e){this.setStartTime(e)}handleEndHandleDrag(e){this.setEndTime(e)}handleSliderDrag(e){let t=(e-this.dragSliderCurrentPosition)*this.player().duration(),n=this.startTime+t,r=this.endTime+t;n<=0||r>=this.player().duration()||(this.dragSliderCurrentPosition=e,this.setStartTime(n),this.setEndTime(r))}getPosition(e){return b.dom.getPointerPosition(this.el_.parentNode,e).x}setStartOffset(){this.el_.style.marginLeft=`${this.getPercentage(this.startTime)}%`}setWidth(){this.el_.style.width=`${this.getPercentage(this.endTime-this.startTime)}%`}getPercentage(e){return+(e/this.player().duration()*100).toFixed(4)}},R=b.getComponent(`Component`),z=class extends R{constructor(e,t){super(e,t),this.seekBar_=t.seekBar,this.playProgressBar_=t.playProgressBar,this.bindListeners(),this.player_.one(`dispose`,()=>{this.unbindListeners()})}createEl(e,t,n){return super.createEl(e,{...t,className:`cv-create-clip-progress-indicator`},n)}bindListeners(){this.on(`mousedown`,this.handleMouseDown),this.on(`touchstart`,this.handleMouseDown)}unbindListeners(){let e=this.el_.ownerDocument;this.off(`mousedown`,this.handleMouseDown),this.off(`touchstart`,this.handleMouseDown),this.off(e,`mousemove`,this.handleMouseMove),this.off(e,`mouseup`,this.handleMouseUp),this.off(e,`touchmove`,this.handleMouseMove),this.off(e,`touchend`,this.handleMouseUp)}handleMouseDown(e){if(!b.dom.isSingleLeftClick(e))return;e.stopPropagation(),e.type===`mousedown`&&e.preventDefault(),e.type===`touchstart`&&!b.browser.IS_CHROME&&e.preventDefault(),this.player_.scrubbing(!0),this.videoWasPlaying_=!this.player_.paused(),this.player_.pause(),b.dom.blockTextSelection();let t=this.el_.ownerDocument;this.on(t,`mousemove`,this.handleMouseMove),this.on(t,`mouseup`,this.handleMouseUp),this.on(t,`touchmove`,this.handleMouseMove),this.on(t,`touchend`,this.handleMouseUp),this.handleMouseMove(e),this.player_.addClass(`cv-hide-mouse-time`)}handleMouseMove(e){if(!b.dom.isSingleLeftClick(e))return;let t=b.dom.getPointerPosition(this.seekBar_.el_,e).x*this.player_.duration();t===this.player_.duration()&&(t-=.1),this.player_.currentTime(t),this.playProgressBar_.update()}handleMouseUp(e){b.dom.unblockTextSelection();let t=this.el_.ownerDocument;this.off(t,`mousemove`,this.handleMouseMove),this.off(t,`mouseup`,this.handleMouseUp),this.off(t,`touchmove`,this.handleMouseMove),this.off(t,`touchend`,this.handleMouseUp),e?.stopPropagation(),this.player_.scrubbing(!1),this.player_.trigger({type:`timeupdate`,target:this,manuallyTriggered:!0}),this.videoWasPlaying_&&this.player_.play(),this.seekBar_.update(),this.player_.removeClass(`cv-hide-mouse-time`)}};b.registerComponent(`CreateClipProgressIndicator`,z);var B=b.getComponent(`SeekBar`),V=class extends B{constructor(e,t){super(e,t),this.addClass(`cv-create-clip-seek-bar`)}initialize(e){let t=new L(this.player(),e);this.addChild(t);let n=this.getChild(`playProgressBar`),r=new z(this.player_,{seekBar:this,playProgressBar:n});n.addChild(r)}};V.prototype.options_={children:[`playProgressBar`],barName:`playProgressBar`},!b.browser.IS_IOS&&!b.browser.IS_ANDROID&&V.prototype.options_.children.splice(1,0,`mouseTimeDisplay`),b.registerComponent(`CreateClipSeekBar`,V);var H=b.getPlugin(`plugin`),U=5,W=class extends H{constructor(e,t){super(e,t),this.options=t,this.initCreateClipSeekBar=this.initCreateClipSeekBar.bind(this),this.player.one(`loadedmetadata`,()=>this.player.ready(this.initCreateClipSeekBar))}initCreateClipSeekBar(){let e=this.player.controlBar.getChild(`ProgressControl`)?.getChild(`SeekBar`);if(!e)return;let t=!isNaN(this.options.startTime)&&this.options.startTime>=0?this.options.startTime:0,n=!isNaN(this.options.endTime)&&this.options.endTime<=this.player.duration()?this.options.endTime:this.player.duration(),r=Math.min(this.options.minDuration||U,this.player.duration());e.initialize({startTime:t,endTime:n,minDuration:r,onChangeStartTime:this.options.onChangeStartTime,onChangeEndTime:this.options.onChangeEndTime})}dispose(){this.player.off(`loadedmetadata`,this.initCreateClipSeekBar),super.dispose()}};b.registerPlugin(`createClipPlugin`,W);var G=class extends x{constructor(e,t){super(e,{allowFullscreen:!0,...t,playbackRates:null,enableLocalCache:!1})}getPlayerClassName(){return`cv-create-clip-player`}configurePlugins(){let{startTime:e,endTime:t,minDuration:n,onChangeStartTime:r,onChangeEndTime:i}=this.options;this.player.createClipPlugin({startTime:e,endTime:t,minDuration:n,onChangeStartTime:r,onChangeEndTime:i})}getPlayerOptions(){let e=super.getPlayerOptions();return e.inactivityTimeout=0,e}getSeekBarName(){return`CreateClipSeekBar`}getAnalyticsPlayerType(){return`create-clip-player`}};function K(e){let{onReady:t,onDispose:n}=e,r=C.useRef(null),i=C.useRef(null);return C.useEffect(()=>{if(i.current?.dispose(),r)return i.current=new G(r.current,e),t&&i.current.ready(()=>{t(S(i.current))}),n&&i.current.one(`dispose`,n),()=>{i.current?.dispose()}},[e.viewKey]),C.useEffect(()=>{i.current?.trigger({type:`update:clip:start:time`,time:e.startTime})},[e.startTime]),C.useEffect(()=>{i.current?.trigger({type:`update:clip:end:time`,time:e.endTime})},[e.endTime]),(0,T.jsx)(`div`,{ref:r})}var q=`edit-clip-timepoints`,J=`shared.editClipTimepoints`,Y=n.encloseNamespace(J),X=30,Z=5;function Q(e){_.render((0,T.jsx)(`p`,{children:e}),{title:Y(`errorHeading`),cancelButtonProps:{variant:`link`,text:Y(`close`)}})}function $(e){if(!e)return 0;let t=Number(e);return isNaN(t)?0:t}function ee(e){let i=C.useRef(null),a=$(e.startTime),[s,g]=C.useState(a),[_,y]=C.useState(a+X),b=c(f.config()),x=c(!!e.id&&l.clip(e.id)),S=x.data?._parentVideo?.id||e.videoId,w=c(!!S&&h.createViewKey(S,m.MasterObject)),E=c(!!S&&u.video(S)),[D,O]=C.useState(0),k=v();p({title:e.id?x.data?.name:Y(`pageTitle`)}),C.useEffect(()=>{k.lock({id:q,title:n.getPhrase(J,`navLockTitle`),text:n.getPhrase(J,`navLockBody`)})},[]),C.useEffect(()=>{x.data&&(g(x.data.startTime),y(x.data.endTime))},[x.data]);function A(e){i.current=e,e.on(`durationchange`,()=>O(e.duration()))}function j(){let n=``;if(s>_&&(n=Y(`startTimeGreaterThanEndTime`)),_-s<Z&&(n=Y(`tooShort`,{minDuration:Z})),n){Q(n);return}k.unlock(q),t.trigger({application:o.CLIPS,action:e.id?d.Clips.EDIT_CLIP_DETAILS_POPUP:d.Clips.CREATE_CLIP_DETAILS,args:e.id?[e.id]:[e.videoId],params:{startTime:s,endTime:_,isCopying:e.isCopying}})}function N(){let e=i.current?.currentTime()??0;t.trigger({application:o.VIDEOS,action:d.Videos.PLAY_VIDEO,args:[null,E.data?.id,r.slugify(E.data?.name)],params:{t:e}})}return!e.id&&!e.videoId?(0,T.jsx)(T.Fragment,{}):(0,T.jsx)(`div`,{className:`px-3`,children:!!b.data&&!!w.data&&!!E.data&&(!e.id||!!x.data)&&(0,T.jsxs)(`div`,{className:`pb-3`,children:[(0,T.jsx)(`div`,{className:`mb-3`,children:(0,T.jsx)(K,{onReady:A,playerApi:new URL(b.data.playerApiUrl),viewKey:w.data.viewKey,startTime:s,endTime:_,onChangeStartTime:g,onChangeEndTime:y,minDuration:Z,autoplay:!0})}),(0,T.jsx)(M,{startTime:s,endTime:_,setStartTime:g,setEndTime:y,onSubmit:j,onCancel:N,duration:D})]})})}export{ee as EditClipTimepointsView};
2
+ //# sourceMappingURL=B1TqilLB.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DBcWjmUy.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/time-input/time-input.module.scss","../../../../libs/shared/src/components/time-input/TimeInput.tsx","../../../../libs/shared/src/apps/clips/components/clip-time-form/ClipTimeForm.tsx","../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle.ts","../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector.ts","../../../player/src/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator.ts","../../../player/src/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar.ts","../../../player/src/plugins/create-clip-plugin/create-clip-plugin.ts","../../../player/src/players/create-clip-player.ts","../../../player/src/react/CreateClipPlayer.tsx","../../src/shared/views/edit-clip-timepoints/EditClipTimepointsView.tsx"],"sourcesContent":[":local {\n .arrowContainer {\n padding: 0.16666rem;\n cursor: pointer;\n\n &:hover {\n background-color: $gray-400;\n }\n }\n\n %arrow {\n width: 0.66666rem; \n height: 0.33333rem; \n border-left: 0.33333rem solid transparent;\n border-right: 0.33333rem solid transparent;\n }\n\n .upArrow {\n @extend %arrow;\n border-bottom: 0.33333rem solid $gray-900;\n }\n\n .downArrow {\n @extend %arrow;\n border-top: 0.33333rem solid $gray-900;\n }\n\n .inputContainer {\n border: 1px solid $gray-300;\n transition: box-shadow 0.1s ease-in-out;\n\n &.focus {\n border: 1px solid $blue;\n outline: 0 !important;\n box-shadow: $input-focus-box-shadow;\n }\n\n input {\n width: 1.5rem;\n }\n }\n}","import * as React from 'react';\n\nimport { TimeHelper } from 'libs/common/react/utils/TimeHelper';\n\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport styles from './time-input.module.scss';\n\nconst UP_ARROW_KEYCODE = 38;\nconst DOWN_ARROW_KEYCODE = 40;\n\nconst HOUR = 3600; // hour in seconds;\n\ninterface TimeInputProps {\n /**\n * A time in seconds\n */\n value: number;\n\n /**\n * Callback to set time where time is in seconds.\n *\n * Will be called on blur.\n */\n setTime: (time: number) => void;\n\n /**\n * Allows a time to be typed in by the user.\n *\n * Note: this doesn't include UP/DOWN keyboard arrows which are always enabled.\n */\n allowKeyboardInput?: boolean;\n\n formSize?: 'md' | 'lg';\n\n hasError?: boolean;\n\n /**\n * Time in seconds to logically cap the maximum input value\n */\n maxValue?: number;\n\n disabled?: boolean;\n\n /**\n * If set to true, will hide the up and down arrow buttons\n */\n hideButtons?: boolean;\n\n duration?: number;\n}\n\nTimeInput.defaultProps = {\n allowKeyboardInput: true,\n size: 'lg'\n};\n\nexport function TimeInput(props: TimeInputProps): JSX.Element {\n const [ hours, setHours ] = React.useState('00');\n const [ minutes, setMinutes ] = React.useState('00');\n const [ seconds, setSeconds ] = React.useState('00');\n const [ focus, setFocus ] = React.useState(false);\n\n const minutesRef = React.useRef(null);\n const secondsRef = React.useRef(null);\n\n const showHours = props.duration && props.duration >= HOUR;\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n e.target.select();\n setFocus(true);\n }\n\n function handleChange(\n event: React.ChangeEvent<HTMLInputElement>,\n setValue: (value: string) => void,\n nextInputRef?: React.MutableRefObject<HTMLInputElement>\n ) {\n const inputValue = event.target.value;\n const formattedValue = inputValue.replace(/\\D/g, '').slice(0, 2);\n setValue(formattedValue);\n \n if (formattedValue.length === 2 && nextInputRef?.current)\n requestAnimationFrame(() => nextInputRef.current.focus());\n }\n\n function increment(): void {\n props.setTime(props.value + 1);\n }\n\n function decrement(): void {\n props.setTime(props.value - 1);\n }\n\n function handleBlur(\n event: React.ChangeEvent<HTMLInputElement>,\n setValue: (value: string) => void\n ): void {\n if (!props.allowKeyboardInput)\n return;\n\n updateTime(TimeHelper.convertDurationToSeconds(hours, minutes, seconds));\n setValue(event.target.value.padStart(2, '0'));\n setFocus(false);\n }\n\n function updateTime(value: number) {\n if (value < 0)\n return;\n \n if (props.maxValue && value > props.maxValue)\n return;\n \n props.setTime(value);\n }\n\n function setTimeInputs() {\n const displayDuration = DurationHelper.ToDisplayDuration(props.value * 1000, true).split(':');\n\n setHours(String(displayDuration[0]).padStart(2, '0'));\n setMinutes(displayDuration[1]);\n setSeconds(displayDuration[2]);\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.keyCode === UP_ARROW_KEYCODE)\n increment();\n\n if (e.keyCode === DOWN_ARROW_KEYCODE)\n decrement();\n }\n\n React.useEffect(() => {\n setTimeInputs();\n }, [props.value]);\n\n return (\n <div className={`${styles.inputContainer} ${focus ? styles.focus : ''} position-relative bg-white d-flex align-items-center p-2 rounded-pill font-size-md`}>\n <div className={`${showHours ? '' : 'd-none'}`}>\n <input\n type='text'\n className='border-0 outline-none'\n value={hours}\n maxLength={2}\n placeholder='HH'\n onChange={e => handleChange(e, setHours, minutesRef)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setHours)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n <span>:</span>\n </div>\n <div>\n <input\n ref={minutesRef}\n type='text'\n className='border-0 outline-none'\n value={minutes}\n maxLength={2}\n placeholder='MM'\n onChange={e => handleChange(e, setMinutes, secondsRef)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setMinutes)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n <span>:</span>\n </div>\n <input\n ref={secondsRef}\n type='text'\n className='border-0 outline-none'\n value={seconds}\n maxLength={2}\n placeholder='SS'\n onChange={e => setSeconds(e.target.value)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setSeconds)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n {!props.hideButtons &&\n <div>\n <div className={styles.arrowContainer} onClick={increment}>\n <div className={styles.upArrow} />\n </div>\n <div className={styles.arrowContainer} onClick={decrement}>\n <div className={styles.downArrow} />\n </div>\n </div>\n }\n </div>\n );\n}\n\n","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TimeInput } from 'libs/shared/components/time-input/TimeInput';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nconst namespace = 'shared.clipTimeForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * All times are in seconds.\n */\ninterface ClipTimeFormProps {\n startTime: number;\n endTime: number;\n setStartTime: (time: number) => void;\n setEndTime: (time: number) => void;\n onSubmit: () => void;\n onCancel: () => void;\n duration: number;\n}\n\nexport function ClipTimeForm(props: ClipTimeFormProps): JSX.Element {\n if (isNaN(props.startTime) || isNaN(props.endTime))\n return <></>;\n\n /**\n * DurationHelper.ToDisplayDuration in TimeInput will truncate as decimals\n * so we floor the times when displaying the duration.\n */\n const duration = Math.floor(props.endTime) - Math.floor(props.startTime);\n\n return (\n <div className='px-3'>\n <form className='d-flex align-items-center justify-content-center pb-4'>\n <div>\n <TimeInput\n value={props.startTime}\n setTime={props.setStartTime}\n duration={props.duration}\n />\n </div>\n <span className='px-2'>-</span>\n <div className='me-2'>\n <TimeInput\n value={props.endTime}\n setTime={props.setEndTime}\n duration={props.duration}\n />\n </div>\n <span>\n <strong><Text namespace={namespace} phrase='duration' /></strong>\n &nbsp;\n {DurationHelper.ToDisplayDuration((duration) * 1000)}\n </span>\n </form>\n <div className='d-flex justify-content-end'>\n <button className='btn btn-link' onClick={props.onCancel}>\n {getPhrase('cancel')}\n </button>\n <button className='btn btn-dark' onClick={props.onSubmit}>\n {getPhrase('next')}\n </button>\n </div>\n </div>\n );\n}\n","import videojs from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\n// tslint:disable-next-line\nconst handleSvg = '<svg viewBox=\"0 0 5 14\" pointer-events=\"none\"><g id=\"Clips\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g id=\"Clip-2\" transform=\"translate(-835.000000, -632.000000)\" fill=\"#FFFFFF\"><g id=\"Video-Copy\" transform=\"translate(275.000000, 96.000000)\"><g id=\"Handles\" transform=\"translate(560.000000, 536.000000)\"><circle id=\"Oval\" cx=\"1\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-2\" cx=\"1\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-4\" cx=\"1\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-8\" cx=\"1\" cy=\"13\" r=\"1\"></circle><circle id=\"Oval-Copy\" cx=\"4\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-3\" cx=\"4\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-5\" cx=\"4\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-9\" cx=\"4\" cy=\"13\" r=\"1\"></circle></g></g></g></g></svg>';\n\nexport class ClipTimepointSelectorHandle extends Component {\n public buildCSSClass(): string {\n return `cv-clip-timepoint-handle ${super.buildCSSClass()}`;\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML: handleSvg\n }, attributes);\n }\n\n public isEventTarget(e: videojs.EventTarget.Event): boolean {\n return this.el().contains(e.target as Node);\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport {\n ClipTimepointSelectorHandle\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle';\n\nimport './clip-timepoint-selector.scss';\n\nexport interface ClipTimepointSelectorOptions extends videojs.ComponentOptions {\n startTime: number;\n endTime: number;\n minDuration: number;\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n}\n\nexport class ClipTimepointSelector extends Component {\n // tslint:disable-next-line\n public options_: ClipTimepointSelectorOptions;\n\n // tslint:disable-next-line\n public el_: HTMLElement;\n\n private minDuration: number;\n\n /**\n * These variables shouldn't be set directly.\n * setStartTime and setEndTime should be used.\n */\n private startTime: number;\n private endTime: number;\n\n private startHandle: ClipTimepointSelectorHandle;\n private endHandle: ClipTimepointSelectorHandle;\n\n private dragStartActive: boolean = false;\n private dragEndActive: boolean = false;\n private dragSliderActive: boolean = false;\n\n private dragSliderCurrentPosition: number = null;\n\n constructor(player: VideoJsPlayer, options: ClipTimepointSelectorOptions) {\n super(player, options);\n\n this.minDuration = Math.min(player.duration(), this.options_.minDuration);\n\n this.setStartTime(options.startTime, false);\n this.setEndTime(options.endTime, false);\n\n this.startHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.startHandle.addClass('cv-clip-start-handle');\n this.addChild(this.startHandle);\n\n this.endHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.endHandle.addClass('cv-clip-end-handle');\n this.addChild(this.endHandle);\n\n this.on(this.player(), 'update:clip:start:time', ({ time }) => this.setStartTime(time));\n this.on(this.player(), 'update:clip:end:time', ({ time }) => this.setEndTime(time));\n\n this.bindListeners();\n this.update();\n }\n\n public createEl(): Element {\n return super.createEl('div', {\n className: 'cv-clip-timepoint-selector'\n }, {});\n }\n\n private update(): void {\n this.options_.onChangeStartTime(this.startTime);\n this.options_.onChangeEndTime(this.endTime);\n\n this.requestAnimationFrame(() => {\n this.setStartOffset();\n this.setWidth();\n });\n }\n\n private setStartTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const maxStartTime = this.player().duration() - this.minDuration;\n\n if (time > maxStartTime)\n time = maxStartTime;\n\n if (time < 0)\n time = 0;\n\n this.startTime = time;\n\n if (this.endTime && (this.endTime - this.startTime < this.minDuration)) {\n const newEndTime = typeof currentDuration === 'number' ?\n this.startTime + currentDuration :\n this.startTime + this.minDuration;\n\n this.setEndTime(newEndTime);\n }\n\n /**\n * Seek player to the clip start time.\n */\n this.player().currentTime(this.startTime);\n\n if (shouldUpdate)\n this.update();\n }\n\n private setEndTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const minEndTime = this.minDuration;\n\n if (time < minEndTime)\n time = minEndTime;\n\n if (time > this.player().duration())\n time = this.player().duration();\n\n this.endTime = time;\n\n if (this.startTime && (this.endTime - this.startTime < this.minDuration)) {\n const newStartTime = typeof currentDuration === 'number' ?\n this.endTime - currentDuration :\n this.endTime - this.minDuration;\n\n this.setStartTime(newStartTime);\n }\n\n if (shouldUpdate)\n this.update();\n }\n\n private bindListeners(): void {\n this.onTimeupdate = this.onTimeupdate.bind(this);\n this.player().on('timeupdate', this.onTimeupdate);\n\n this.on('mousedown', this.dragStart);\n this.on('touchstart', this.dragStart);\n\n this.player().on('dispose', () => {\n this.player().off('timeupdate', this.onTimeupdate);\n this.off('mousedown', this.dragStart);\n this.off('touchstart', this.dragStart);\n });\n }\n\n private hasStartTime(): boolean {\n return typeof this.startTime === 'number';\n }\n\n private hasEndTime(): boolean {\n return typeof this.endTime === 'number';\n }\n\n private onTimeupdate(): void {\n /**\n * Pause the player if it plays past the end point\n */\n const currentTime = this.player().currentTime();\n if (currentTime > this.endTime && currentTime < (this.endTime + 0.5))\n this.player().pause();\n }\n\n private dragStart(e: videojs.EventTarget.Event): void {\n if (this.startHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragStartActive = true;\n }\n\n if (this.endHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragEndActive = true;\n }\n\n if (e.target === this.el()) {\n e.stopImmediatePropagation();\n this.dragSliderActive = true;\n this.dragSliderCurrentPosition = this.getPosition(e);\n }\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.on(doc, 'mousemove', this.drag);\n this.on(doc, 'mouseup', this.dragEnd);\n this.on(doc, 'touchmove', this.drag);\n this.on(doc, 'touchend', this.dragEnd);\n\n this.drag(e);\n }\n\n private dragEnd(): void {\n this.dragStartActive = false;\n this.dragEndActive = false;\n this.dragSliderActive = false;\n this.dragSliderCurrentPosition = null;\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.off(doc, 'mousemove', this.drag);\n this.off(doc, 'mouseup', this.dragEnd);\n this.off(doc, 'touchmove', this.drag);\n this.off(doc, 'touchend', this.dragEnd);\n }\n\n private drag(e: videojs.EventTarget.Event): void {\n if (!this.dragStartActive && !this.dragEndActive && !this.dragSliderActive || !videojs.dom.isSingleLeftClick(e))\n return;\n \n const position = this.getPosition(e);\n\n const timepoint = position * this.player().duration();\n\n if (this.dragStartActive)\n this.handleStartHandleDrag(timepoint);\n\n if (this.dragEndActive)\n this.handleEndHandleDrag(timepoint);\n\n if (this.dragSliderActive)\n this.handleSliderDrag(position);\n }\n\n private handleStartHandleDrag(timepoint: number): void {\n this.setStartTime(timepoint);\n }\n\n private handleEndHandleDrag(timepoint: number): void {\n this.setEndTime(timepoint);\n }\n\n private handleSliderDrag(position: number): void {\n const timeDifference = (position - this.dragSliderCurrentPosition) * this.player().duration();\n const newStartTime = this.startTime + timeDifference;\n const newEndTime = this.endTime + timeDifference;\n\n /**\n * Don't move if the clip is already at the beginning and/or end\n * of the video.\n */\n if (newStartTime <= 0 || newEndTime >= this.player().duration())\n return;\n\n this.dragSliderCurrentPosition = position;\n this.setStartTime(newStartTime);\n this.setEndTime(newEndTime);\n }\n\n private getPosition(e: videojs.EventTarget.Event): number {\n return videojs.dom.getPointerPosition(this.el_.parentNode as HTMLElement, e).x;\n }\n\n private setStartOffset(): void {\n this.el_.style.marginLeft = `${this.getPercentage(this.startTime)}%`;\n }\n\n private setWidth(): void {\n this.el_.style.width = `${this.getPercentage(this.endTime - this.startTime)}%`;\n }\n\n private getPercentage(time: number): number {\n return +((time / this.player().duration() * 100).toFixed(4));\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport './create-clip-progress-indicator.scss';\n\ninterface CreateClipProgressIndicatorOptions extends videojs.ComponentOptions {\n seekBar: videojs.Component;\n playProgressBar: videojs.Component;\n}\n\nexport class CreateClipProgressIndicator extends Component {\n private el_: HTMLDivElement;\n private seekBar_: videojs.Component;\n private playProgressBar_: videojs.Component;\n private videoWasPlaying_: boolean;\n\n constructor(player: VideoJsPlayer, options: CreateClipProgressIndicatorOptions) {\n super(player, options);\n\n this.seekBar_ = options.seekBar;\n this.playProgressBar_ = options.playProgressBar;\n\n this.bindListeners();\n this.player_.one('dispose', () => {\n this.unbindListeners();\n });\n }\n\n public createEl(tagName?: string, properties?: any, attribtues?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: 'cv-create-clip-progress-indicator'\n }, attribtues);\n }\n\n private bindListeners(): void {\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n }\n\n private unbindListeners(): void {\n const doc = (this.el_ as any).ownerDocument;\n\n this.off('mousedown', this.handleMouseDown);\n this.off('touchstart', this.handleMouseDown);\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n }\n\n private handleMouseDown(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n event.stopPropagation();\n if (event.type === 'mousedown')\n event.preventDefault();\n\n /**\n * Comment below copied over from videojs - Sha\n * \n * Do not call preventDefault() on touchstart in Chrome\n * to avoid console warnings. Use a 'touch-action: none' style\n * instead to prevent unintented scrolling.\n * https://developers.google.com/web/updates/2017/01/scrolling-intervention\n */\n if (event.type === 'touchstart' && !videojs.browser.IS_CHROME)\n event.preventDefault();\n\n this.player_.scrubbing(true);\n this.videoWasPlaying_ = !this.player_.paused();\n this.player_.pause();\n\n videojs.dom.blockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.on(doc, 'mousemove', this.handleMouseMove);\n this.on(doc, 'mouseup', this.handleMouseUp);\n this.on(doc, 'touchmove', this.handleMouseMove);\n this.on(doc, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n\n this.player_.addClass('cv-hide-mouse-time');\n }\n\n private handleMouseMove(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n const distance = videojs.dom.getPointerPosition((this.seekBar_ as any).el_, event).x;\n\n let newTime = distance * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration())\n newTime = newTime - 0.1;\n\n this.player_.currentTime(newTime);\n (this.playProgressBar_ as any).update();\n }\n\n private handleMouseUp(event: videojs.EventTarget.Event): void {\n videojs.dom.unblockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n\n event?.stopPropagation();\n this.player_.scrubbing(false);\n this.player_.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n if (this.videoWasPlaying_) {\n this.player_.play();\n }\n\n (this.seekBar_ as any).update();\n this.player_.removeClass('cv-hide-mouse-time');\n }\n}\n\nvideojs.registerComponent('CreateClipProgressIndicator', CreateClipProgressIndicator);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n ClipTimepointSelector,\n ClipTimepointSelectorOptions\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector';\nimport { CreateClipProgressIndicator } from 'projects/player/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator';\n\nimport './create-clip-seek-bar.scss';\n\nconst SeekBar = videojs.getComponent('SeekBar') as unknown as typeof videojs.SeekBar;\n\ninterface CreateClipSeekBarOptions extends ClipTimepointSelectorOptions {}\n\nexport class CreateClipSeekBar extends SeekBar {\n constructor(player: VideoJsPlayer, options: any) {\n super(player, options);\n\n this.addClass('cv-create-clip-seek-bar');\n }\n\n public initialize(options: CreateClipSeekBarOptions): void {\n const timepointSelector = new ClipTimepointSelector(this.player(), options);\n\n this.addChild(timepointSelector);\n\n const playProgressBar = this.getChild('playProgressBar');\n const indicator = new CreateClipProgressIndicator(this.player_, {\n seekBar: this,\n playProgressBar\n });\n playProgressBar.addChild(indicator);\n }\n}\n\nCreateClipSeekBar.prototype.options_ = {\n children: ['playProgressBar'],\n barName: 'playProgressBar'\n};\n\n// MouseTimeDisplay tooltips should not be added to a player on mobile devices\nif (!videojs.browser.IS_IOS && !videojs.browser.IS_ANDROID) {\n CreateClipSeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay');\n}\n\nvideojs.registerComponent('CreateClipSeekBar', CreateClipSeekBar);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n CreateClipSeekBar\n} from 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nimport 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nconst Plugin = videojs.getPlugin('plugin');\n\nconst DEFAULT_MIN_CLIP_DURATION = 5; // seconds;\n\ninterface CreateClipPluginOptions {\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nclass CreateClipPlugin extends Plugin {\n private options: CreateClipPluginOptions;\n\n constructor(player: VideoJsPlayer, options: CreateClipPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n this.initCreateClipSeekBar = this.initCreateClipSeekBar.bind(this);\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initCreateClipSeekBar));\n }\n\n private initCreateClipSeekBar(): void {\n const seekBar = this.player.controlBar.getChild('ProgressControl')?.getChild('SeekBar') as CreateClipSeekBar;\n\n if (!seekBar)\n return;\n\n const startTime = (!isNaN(this.options.startTime) && this.options.startTime >= 0) ?\n this.options.startTime :\n 0;\n\n const endTime = (!isNaN(this.options.endTime) && this.options.endTime <= this.player.duration()) ?\n this.options.endTime :\n this.player.duration();\n\n const minDuration = Math.min(this.options.minDuration || DEFAULT_MIN_CLIP_DURATION, this.player.duration());\n\n seekBar.initialize({\n startTime,\n endTime,\n minDuration,\n onChangeStartTime: this.options.onChangeStartTime,\n onChangeEndTime: this.options.onChangeEndTime\n });\n }\n\n public dispose(): void {\n this.player.off('loadedmetadata', this.initCreateClipSeekBar);\n super.dispose();\n }\n}\n\nvideojs.registerPlugin('createClipPlugin', CreateClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n createClipPlugin(options: CreateClipPluginOptions): void;\n }\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport { VideoJsPlayerOptions } from 'video.js';\nimport { BasePlayer, BasePlayerOptions } from './base-player';\n\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\n\nimport 'projects/player/plugins/create-clip-plugin/create-clip-plugin';\n\nexport interface CreateClipPlayerOptions extends Omit<BasePlayerOptions, 'playbackRates'> {\n onChangeEndTime: (endTime: number) => void;\n onChangeStartTime: (startTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nexport class CreateClipPlayer extends BasePlayer {\n declare protected options: CreateClipPlayerOptions;\n\n constructor(id: string | Element, options: CreateClipPlayerOptions) {\n super(id, {\n allowFullscreen: true,\n ...options,\n playbackRates: null,\n enableLocalCache: false\n });\n }\n\n protected getPlayerClassName(): string {\n return 'cv-create-clip-player';\n }\n\n protected configurePlugins(): void {\n const { startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime } = this.options;\n this.player.createClipPlugin({ startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime });\n }\n\n protected getPlayerOptions(): VideoJsPlayerOptions {\n const options = super.getPlayerOptions();\n options.inactivityTimeout = 0;\n return options;\n }\n\n protected getSeekBarName(): string {\n return 'CreateClipSeekBar';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'create-clip-player';\n }\n}\n","import React from 'react';\n\nimport { CreateClipPlayer, CreateClipPlayerOptions } from 'projects/player/players/create-clip-player';\nimport { getProxy } from 'projects/player/utils/getProxy';\n\nexport interface ClickViewCreateClipPlayerProps extends CreateClipPlayerOptions {\n onReady?: (player: CreateClipPlayer) => void;\n onDispose?: () => void;\n}\n\nexport function ClickViewCreateClipPlayer(props: ClickViewCreateClipPlayerProps): React.ReactElement {\n const { onReady, onDispose } = props;\n\n const ref = React.useRef(null);\n const playerRef = React.useRef<CreateClipPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current?.dispose();\n\n if (!ref)\n return;\n\n playerRef.current = new CreateClipPlayer(ref.current, props);\n\n if (onReady) {\n playerRef.current.ready(() => {\n onReady(getProxy(playerRef.current));\n });\n }\n\n if (onDispose) {\n playerRef.current.one('dispose', onDispose);\n }\n \n return () => {\n playerRef.current?.dispose();\n };\n }, [props.viewKey]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:start:time', time: props.startTime });\n }, [props.startTime]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:end:time', time: props.endTime });\n }, [props.endTime]);\n\n return (\n <div ref={ref}></div>\n );\n}\n","import * as React from 'react';\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 { ClipTimeForm } from 'libs/shared/apps/clips/components/clip-time-form/ClipTimeForm';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, PlayerViewKey, Video } from 'libs/shared/interfaces';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\n\nimport { CreateClipPlayer } from 'projects/player/players/create-clip-player';\nimport { ClickViewCreateClipPlayer } from 'projects/player/react/CreateClipPlayer';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst NAV_LOCK_ID = 'edit-clip-timepoints';\nconst namespace = 'shared.editClipTimepoints';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_DURATION = 30;\nconst MIN_DURATION = 5;\n\nfunction handleError(error: string): void {\n DialogHelper.render(\n (\n <p>{error}</p>\n ), {\n title: getPhrase('errorHeading'),\n cancelButtonProps: {\n variant: 'link',\n text: getPhrase('close')\n }\n }\n );\n}\n\nfunction safeStringToNumber(value: string): number {\n if (!value) return 0;\n\n const number = Number(value);\n return isNaN(number) ? 0 : number;\n}\n\ninterface EditClipTimepointsViewProps {\n id?: string;\n videoId?: string;\n startTime?: string;\n isCopying?: boolean;\n}\n\nexport function EditClipTimepointsView(props: EditClipTimepointsViewProps): JSX.Element {\n const playerRef = React.useRef<CreateClipPlayer>(null);\n \n const initialStartTime = safeStringToNumber(props.startTime);\n\n const [ startTime, setStartTime ] = React.useState<number>(initialStartTime);\n const [ endTime, setEndTime ] = React.useState<number>(initialStartTime + DEFAULT_DURATION);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(!!props.id && ClipRequests.clip(props.id));\n const videoId = clip.data?._parentVideo?.id || props.videoId;\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(!!videoId &&\n PlayerRequests.createViewKey(videoId, MediaIdType.MasterObject));\n const video = Flight.useBasicFetch<Video>(!!videoId && VideoRequests.video(videoId));\n\n const [ duration, setDuration ] = React.useState<number>(0);\n\n const navLock = useNavLock();\n\n useSetPageMetadata({ title: props.id ? clip.data?.name : getPhrase('pageTitle') });\n\n React.useEffect(() => {\n navLock.lock({\n id: NAV_LOCK_ID,\n title: LanguageService.getPhrase(namespace, 'navLockTitle'),\n text: LanguageService.getPhrase(namespace, 'navLockBody')\n });\n }, []);\n\n React.useEffect(() => {\n if (!clip.data)\n return;\n\n setStartTime(clip.data.startTime);\n setEndTime(clip.data.endTime);\n }, [clip.data]);\n\n function onReady(player: CreateClipPlayer): void {\n playerRef.current = player;\n\n player.on('durationchange', () => setDuration(player.duration()));\n }\n\n function onSubmit(): void {\n let error = '';\n\n if (startTime > endTime)\n error = getPhrase('startTimeGreaterThanEndTime');\n\n if (endTime - startTime < MIN_DURATION)\n error = getPhrase('tooShort', { minDuration: MIN_DURATION });\n\n if (error) {\n handleError(error);\n return;\n }\n\n navLock.unlock(NAV_LOCK_ID);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: props.id ? Actions.Clips.EDIT_CLIP_DETAILS_POPUP : Actions.Clips.CREATE_CLIP_DETAILS,\n args: props.id ? [props.id] : [props.videoId],\n params: { startTime, endTime, isCopying: props.isCopying }\n });\n }\n\n function onCancel(): void {\n const startTime = playerRef.current?.currentTime() ?? 0;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n null,\n video.data?.id,\n TextHelper.slugify(video.data?.name)\n ],\n params: { t: startTime }\n });\n }\n\n if (!props.id && !props.videoId)\n return <></>;\n\n return (\n <div className='px-3'>\n {!!config.data && !!viewKey.data && !!video.data && (!props.id || !!clip.data) &&\n <div className='pb-3'>\n <div className='mb-3'>\n <ClickViewCreateClipPlayer\n onReady={onReady}\n playerApi={new URL(config.data.playerApiUrl)}\n viewKey={viewKey.data.viewKey}\n startTime={startTime}\n endTime={endTime}\n onChangeStartTime={setStartTime}\n onChangeEndTime={setEndTime}\n minDuration={MIN_DURATION}\n autoplay\n />\n </div>\n <ClipTimeForm\n startTime={startTime}\n endTime={endTime}\n setStartTime={setStartTime}\n setEndTime={setEndTime}\n onSubmit={onSubmit}\n onCancel={onCancel}\n duration={duration}\n />\n </div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"B1TqilLB.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/time-input/time-input.module.scss","../../../../libs/shared/src/components/time-input/TimeInput.tsx","../../../../libs/shared/src/apps/clips/components/clip-time-form/ClipTimeForm.tsx","../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle.ts","../../../player/src/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector.ts","../../../player/src/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator.ts","../../../player/src/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar.ts","../../../player/src/plugins/create-clip-plugin/create-clip-plugin.ts","../../../player/src/players/create-clip-player.ts","../../../player/src/react/CreateClipPlayer.tsx","../../src/shared/views/edit-clip-timepoints/EditClipTimepointsView.tsx"],"sourcesContent":[":local {\n .arrowContainer {\n padding: 0.16666rem;\n cursor: pointer;\n\n &:hover {\n background-color: $gray-400;\n }\n }\n\n %arrow {\n width: 0.66666rem; \n height: 0.33333rem; \n border-left: 0.33333rem solid transparent;\n border-right: 0.33333rem solid transparent;\n }\n\n .upArrow {\n @extend %arrow;\n border-bottom: 0.33333rem solid $gray-900;\n }\n\n .downArrow {\n @extend %arrow;\n border-top: 0.33333rem solid $gray-900;\n }\n\n .inputContainer {\n border: 1px solid $gray-300;\n transition: box-shadow 0.1s ease-in-out;\n\n &.focus {\n border: 1px solid $blue;\n outline: 0 !important;\n box-shadow: $input-focus-box-shadow;\n }\n\n input {\n width: 1.5rem;\n }\n }\n}","import * as React from 'react';\n\nimport { TimeHelper } from 'libs/common/react/utils/TimeHelper';\n\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport styles from './time-input.module.scss';\n\nconst UP_ARROW_KEYCODE = 38;\nconst DOWN_ARROW_KEYCODE = 40;\n\nconst HOUR = 3600; // hour in seconds;\n\ninterface TimeInputProps {\n /**\n * A time in seconds\n */\n value: number;\n\n /**\n * Callback to set time where time is in seconds.\n *\n * Will be called on blur.\n */\n setTime: (time: number) => void;\n\n /**\n * Allows a time to be typed in by the user.\n *\n * Note: this doesn't include UP/DOWN keyboard arrows which are always enabled.\n */\n allowKeyboardInput?: boolean;\n\n formSize?: 'md' | 'lg';\n\n hasError?: boolean;\n\n /**\n * Time in seconds to logically cap the maximum input value\n */\n maxValue?: number;\n\n disabled?: boolean;\n\n /**\n * If set to true, will hide the up and down arrow buttons\n */\n hideButtons?: boolean;\n\n duration?: number;\n}\n\nTimeInput.defaultProps = {\n allowKeyboardInput: true,\n size: 'lg'\n};\n\nexport function TimeInput(props: TimeInputProps): JSX.Element {\n const [ hours, setHours ] = React.useState('00');\n const [ minutes, setMinutes ] = React.useState('00');\n const [ seconds, setSeconds ] = React.useState('00');\n const [ focus, setFocus ] = React.useState(false);\n\n const minutesRef = React.useRef(null);\n const secondsRef = React.useRef(null);\n\n const showHours = props.duration && props.duration >= HOUR;\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n e.target.select();\n setFocus(true);\n }\n\n function handleChange(\n event: React.ChangeEvent<HTMLInputElement>,\n setValue: (value: string) => void,\n nextInputRef?: React.MutableRefObject<HTMLInputElement>\n ) {\n const inputValue = event.target.value;\n const formattedValue = inputValue.replace(/\\D/g, '').slice(0, 2);\n setValue(formattedValue);\n \n if (formattedValue.length === 2 && nextInputRef?.current)\n requestAnimationFrame(() => nextInputRef.current.focus());\n }\n\n function increment(): void {\n props.setTime(props.value + 1);\n }\n\n function decrement(): void {\n props.setTime(props.value - 1);\n }\n\n function handleBlur(\n event: React.ChangeEvent<HTMLInputElement>,\n setValue: (value: string) => void\n ): void {\n if (!props.allowKeyboardInput)\n return;\n\n updateTime(TimeHelper.convertDurationToSeconds(hours, minutes, seconds));\n setValue(event.target.value.padStart(2, '0'));\n setFocus(false);\n }\n\n function updateTime(value: number) {\n if (value < 0)\n return;\n \n if (props.maxValue && value > props.maxValue)\n return;\n \n props.setTime(value);\n }\n\n function setTimeInputs() {\n const displayDuration = DurationHelper.ToDisplayDuration(props.value * 1000, true).split(':');\n\n setHours(String(displayDuration[0]).padStart(2, '0'));\n setMinutes(displayDuration[1]);\n setSeconds(displayDuration[2]);\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.keyCode === UP_ARROW_KEYCODE)\n increment();\n\n if (e.keyCode === DOWN_ARROW_KEYCODE)\n decrement();\n }\n\n React.useEffect(() => {\n setTimeInputs();\n }, [props.value]);\n\n return (\n <div className={`${styles.inputContainer} ${focus ? styles.focus : ''} position-relative bg-white d-flex align-items-center p-2 rounded-pill font-size-md`}>\n <div className={`${showHours ? '' : 'd-none'}`}>\n <input\n type='text'\n className='border-0 outline-none'\n value={hours}\n maxLength={2}\n placeholder='HH'\n onChange={e => handleChange(e, setHours, minutesRef)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setHours)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n <span>:</span>\n </div>\n <div>\n <input\n ref={minutesRef}\n type='text'\n className='border-0 outline-none'\n value={minutes}\n maxLength={2}\n placeholder='MM'\n onChange={e => handleChange(e, setMinutes, secondsRef)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setMinutes)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n <span>:</span>\n </div>\n <input\n ref={secondsRef}\n type='text'\n className='border-0 outline-none'\n value={seconds}\n maxLength={2}\n placeholder='SS'\n onChange={e => setSeconds(e.target.value)}\n onFocus={handleFocus}\n onBlur={e => handleBlur(e, setSeconds)}\n onKeyDown={handleKeyDown}\n disabled={props.disabled}\n />\n {!props.hideButtons &&\n <div>\n <div className={styles.arrowContainer} onClick={increment}>\n <div className={styles.upArrow} />\n </div>\n <div className={styles.arrowContainer} onClick={decrement}>\n <div className={styles.downArrow} />\n </div>\n </div>\n }\n </div>\n );\n}\n\n","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TimeInput } from 'libs/shared/components/time-input/TimeInput';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nconst namespace = 'shared.clipTimeForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * All times are in seconds.\n */\ninterface ClipTimeFormProps {\n startTime: number;\n endTime: number;\n setStartTime: (time: number) => void;\n setEndTime: (time: number) => void;\n onSubmit: () => void;\n onCancel: () => void;\n duration: number;\n}\n\nexport function ClipTimeForm(props: ClipTimeFormProps): JSX.Element {\n if (isNaN(props.startTime) || isNaN(props.endTime))\n return <></>;\n\n /**\n * DurationHelper.ToDisplayDuration in TimeInput will truncate as decimals\n * so we floor the times when displaying the duration.\n */\n const duration = Math.floor(props.endTime) - Math.floor(props.startTime);\n\n return (\n <div className='px-3'>\n <form className='d-flex align-items-center justify-content-center pb-4'>\n <div>\n <TimeInput\n value={props.startTime}\n setTime={props.setStartTime}\n duration={props.duration}\n />\n </div>\n <span className='px-2'>-</span>\n <div className='me-2'>\n <TimeInput\n value={props.endTime}\n setTime={props.setEndTime}\n duration={props.duration}\n />\n </div>\n <span>\n <strong><Text namespace={namespace} phrase='duration' /></strong>\n &nbsp;\n {DurationHelper.ToDisplayDuration((duration) * 1000)}\n </span>\n </form>\n <div className='d-flex justify-content-end'>\n <button className='btn btn-link' onClick={props.onCancel}>\n {getPhrase('cancel')}\n </button>\n <button className='btn btn-dark' onClick={props.onSubmit}>\n {getPhrase('next')}\n </button>\n </div>\n </div>\n );\n}\n","import videojs from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\n// tslint:disable-next-line\nconst handleSvg = '<svg viewBox=\"0 0 5 14\" pointer-events=\"none\"><g id=\"Clips\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g id=\"Clip-2\" transform=\"translate(-835.000000, -632.000000)\" fill=\"#FFFFFF\"><g id=\"Video-Copy\" transform=\"translate(275.000000, 96.000000)\"><g id=\"Handles\" transform=\"translate(560.000000, 536.000000)\"><circle id=\"Oval\" cx=\"1\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-2\" cx=\"1\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-4\" cx=\"1\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-8\" cx=\"1\" cy=\"13\" r=\"1\"></circle><circle id=\"Oval-Copy\" cx=\"4\" cy=\"1\" r=\"1\"></circle><circle id=\"Oval-Copy-3\" cx=\"4\" cy=\"5\" r=\"1\"></circle><circle id=\"Oval-Copy-5\" cx=\"4\" cy=\"9\" r=\"1\"></circle><circle id=\"Oval-Copy-9\" cx=\"4\" cy=\"13\" r=\"1\"></circle></g></g></g></g></svg>';\n\nexport class ClipTimepointSelectorHandle extends Component {\n public buildCSSClass(): string {\n return `cv-clip-timepoint-handle ${super.buildCSSClass()}`;\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML: handleSvg\n }, attributes);\n }\n\n public isEventTarget(e: videojs.EventTarget.Event): boolean {\n return this.el().contains(e.target as Node);\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport {\n ClipTimepointSelectorHandle\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector-handle';\n\nimport './clip-timepoint-selector.scss';\n\nexport interface ClipTimepointSelectorOptions extends videojs.ComponentOptions {\n startTime: number;\n endTime: number;\n minDuration: number;\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n}\n\nexport class ClipTimepointSelector extends Component {\n // tslint:disable-next-line\n public options_: ClipTimepointSelectorOptions;\n\n // tslint:disable-next-line\n public el_: HTMLElement;\n\n private minDuration: number;\n\n /**\n * These variables shouldn't be set directly.\n * setStartTime and setEndTime should be used.\n */\n private startTime: number;\n private endTime: number;\n\n private startHandle: ClipTimepointSelectorHandle;\n private endHandle: ClipTimepointSelectorHandle;\n\n private dragStartActive: boolean = false;\n private dragEndActive: boolean = false;\n private dragSliderActive: boolean = false;\n\n private dragSliderCurrentPosition: number = null;\n\n constructor(player: VideoJsPlayer, options: ClipTimepointSelectorOptions) {\n super(player, options);\n\n this.minDuration = Math.min(player.duration(), this.options_.minDuration);\n\n this.setStartTime(options.startTime, false);\n this.setEndTime(options.endTime, false);\n\n this.startHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.startHandle.addClass('cv-clip-start-handle');\n this.addChild(this.startHandle);\n\n this.endHandle = new ClipTimepointSelectorHandle(this.player(), options);\n this.endHandle.addClass('cv-clip-end-handle');\n this.addChild(this.endHandle);\n\n this.on(this.player(), 'update:clip:start:time', ({ time }) => this.setStartTime(time));\n this.on(this.player(), 'update:clip:end:time', ({ time }) => this.setEndTime(time));\n\n this.bindListeners();\n this.update();\n }\n\n public createEl(): Element {\n return super.createEl('div', {\n className: 'cv-clip-timepoint-selector'\n }, {});\n }\n\n private update(): void {\n this.options_.onChangeStartTime(this.startTime);\n this.options_.onChangeEndTime(this.endTime);\n\n this.requestAnimationFrame(() => {\n this.setStartOffset();\n this.setWidth();\n });\n }\n\n private setStartTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const maxStartTime = this.player().duration() - this.minDuration;\n\n if (time > maxStartTime)\n time = maxStartTime;\n\n if (time < 0)\n time = 0;\n\n this.startTime = time;\n\n if (this.endTime && (this.endTime - this.startTime < this.minDuration)) {\n const newEndTime = typeof currentDuration === 'number' ?\n this.startTime + currentDuration :\n this.startTime + this.minDuration;\n\n this.setEndTime(newEndTime);\n }\n\n /**\n * Seek player to the clip start time.\n */\n this.player().currentTime(this.startTime);\n\n if (shouldUpdate)\n this.update();\n }\n\n private setEndTime(time: number, shouldUpdate: boolean = true): void {\n if (isNaN(time))\n return;\n\n const currentDuration = this.hasStartTime() && this.hasEndTime() && (this.endTime - this.startTime);\n\n const minEndTime = this.minDuration;\n\n if (time < minEndTime)\n time = minEndTime;\n\n if (time > this.player().duration())\n time = this.player().duration();\n\n this.endTime = time;\n\n if (this.startTime && (this.endTime - this.startTime < this.minDuration)) {\n const newStartTime = typeof currentDuration === 'number' ?\n this.endTime - currentDuration :\n this.endTime - this.minDuration;\n\n this.setStartTime(newStartTime);\n }\n\n if (shouldUpdate)\n this.update();\n }\n\n private bindListeners(): void {\n this.onTimeupdate = this.onTimeupdate.bind(this);\n this.player().on('timeupdate', this.onTimeupdate);\n\n this.on('mousedown', this.dragStart);\n this.on('touchstart', this.dragStart);\n\n this.player().on('dispose', () => {\n this.player().off('timeupdate', this.onTimeupdate);\n this.off('mousedown', this.dragStart);\n this.off('touchstart', this.dragStart);\n });\n }\n\n private hasStartTime(): boolean {\n return typeof this.startTime === 'number';\n }\n\n private hasEndTime(): boolean {\n return typeof this.endTime === 'number';\n }\n\n private onTimeupdate(): void {\n /**\n * Pause the player if it plays past the end point\n */\n const currentTime = this.player().currentTime();\n if (currentTime > this.endTime && currentTime < (this.endTime + 0.5))\n this.player().pause();\n }\n\n private dragStart(e: videojs.EventTarget.Event): void {\n if (this.startHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragStartActive = true;\n }\n\n if (this.endHandle.isEventTarget(e)) {\n e.stopImmediatePropagation();\n this.dragEndActive = true;\n }\n\n if (e.target === this.el()) {\n e.stopImmediatePropagation();\n this.dragSliderActive = true;\n this.dragSliderCurrentPosition = this.getPosition(e);\n }\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.on(doc, 'mousemove', this.drag);\n this.on(doc, 'mouseup', this.dragEnd);\n this.on(doc, 'touchmove', this.drag);\n this.on(doc, 'touchend', this.dragEnd);\n\n this.drag(e);\n }\n\n private dragEnd(): void {\n this.dragStartActive = false;\n this.dragEndActive = false;\n this.dragSliderActive = false;\n this.dragSliderCurrentPosition = null;\n\n const doc = this.el().ownerDocument as unknown as Element;\n\n this.off(doc, 'mousemove', this.drag);\n this.off(doc, 'mouseup', this.dragEnd);\n this.off(doc, 'touchmove', this.drag);\n this.off(doc, 'touchend', this.dragEnd);\n }\n\n private drag(e: videojs.EventTarget.Event): void {\n if (!this.dragStartActive && !this.dragEndActive && !this.dragSliderActive || !videojs.dom.isSingleLeftClick(e))\n return;\n \n const position = this.getPosition(e);\n\n const timepoint = position * this.player().duration();\n\n if (this.dragStartActive)\n this.handleStartHandleDrag(timepoint);\n\n if (this.dragEndActive)\n this.handleEndHandleDrag(timepoint);\n\n if (this.dragSliderActive)\n this.handleSliderDrag(position);\n }\n\n private handleStartHandleDrag(timepoint: number): void {\n this.setStartTime(timepoint);\n }\n\n private handleEndHandleDrag(timepoint: number): void {\n this.setEndTime(timepoint);\n }\n\n private handleSliderDrag(position: number): void {\n const timeDifference = (position - this.dragSliderCurrentPosition) * this.player().duration();\n const newStartTime = this.startTime + timeDifference;\n const newEndTime = this.endTime + timeDifference;\n\n /**\n * Don't move if the clip is already at the beginning and/or end\n * of the video.\n */\n if (newStartTime <= 0 || newEndTime >= this.player().duration())\n return;\n\n this.dragSliderCurrentPosition = position;\n this.setStartTime(newStartTime);\n this.setEndTime(newEndTime);\n }\n\n private getPosition(e: videojs.EventTarget.Event): number {\n return videojs.dom.getPointerPosition(this.el_.parentNode as HTMLElement, e).x;\n }\n\n private setStartOffset(): void {\n this.el_.style.marginLeft = `${this.getPercentage(this.startTime)}%`;\n }\n\n private setWidth(): void {\n this.el_.style.width = `${this.getPercentage(this.endTime - this.startTime)}%`;\n }\n\n private getPercentage(time: number): number {\n return +((time / this.player().duration() * 100).toFixed(4));\n }\n}\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst Component = videojs.getComponent('Component');\n\nimport './create-clip-progress-indicator.scss';\n\ninterface CreateClipProgressIndicatorOptions extends videojs.ComponentOptions {\n seekBar: videojs.Component;\n playProgressBar: videojs.Component;\n}\n\nexport class CreateClipProgressIndicator extends Component {\n private el_: HTMLDivElement;\n private seekBar_: videojs.Component;\n private playProgressBar_: videojs.Component;\n private videoWasPlaying_: boolean;\n\n constructor(player: VideoJsPlayer, options: CreateClipProgressIndicatorOptions) {\n super(player, options);\n\n this.seekBar_ = options.seekBar;\n this.playProgressBar_ = options.playProgressBar;\n\n this.bindListeners();\n this.player_.one('dispose', () => {\n this.unbindListeners();\n });\n }\n\n public createEl(tagName?: string, properties?: any, attribtues?: any): Element {\n return super.createEl(tagName, {\n ...properties,\n className: 'cv-create-clip-progress-indicator'\n }, attribtues);\n }\n\n private bindListeners(): void {\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n }\n\n private unbindListeners(): void {\n const doc = (this.el_ as any).ownerDocument;\n\n this.off('mousedown', this.handleMouseDown);\n this.off('touchstart', this.handleMouseDown);\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n }\n\n private handleMouseDown(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n event.stopPropagation();\n if (event.type === 'mousedown')\n event.preventDefault();\n\n /**\n * Comment below copied over from videojs - Sha\n * \n * Do not call preventDefault() on touchstart in Chrome\n * to avoid console warnings. Use a 'touch-action: none' style\n * instead to prevent unintented scrolling.\n * https://developers.google.com/web/updates/2017/01/scrolling-intervention\n */\n if (event.type === 'touchstart' && !videojs.browser.IS_CHROME)\n event.preventDefault();\n\n this.player_.scrubbing(true);\n this.videoWasPlaying_ = !this.player_.paused();\n this.player_.pause();\n\n videojs.dom.blockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.on(doc, 'mousemove', this.handleMouseMove);\n this.on(doc, 'mouseup', this.handleMouseUp);\n this.on(doc, 'touchmove', this.handleMouseMove);\n this.on(doc, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n\n this.player_.addClass('cv-hide-mouse-time');\n }\n\n private handleMouseMove(event: videojs.EventTarget.Event): void {\n // Prevent handling right and middle mouse clicks\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n const distance = videojs.dom.getPointerPosition((this.seekBar_ as any).el_, event).x;\n\n let newTime = distance * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration())\n newTime = newTime - 0.1;\n\n this.player_.currentTime(newTime);\n (this.playProgressBar_ as any).update();\n }\n\n private handleMouseUp(event: videojs.EventTarget.Event): void {\n videojs.dom.unblockTextSelection();\n\n const doc = (this.el_ as any).ownerDocument;\n\n this.off(doc, 'mousemove', this.handleMouseMove);\n this.off(doc, 'mouseup', this.handleMouseUp);\n this.off(doc, 'touchmove', this.handleMouseMove);\n this.off(doc, 'touchend', this.handleMouseUp);\n\n event?.stopPropagation();\n this.player_.scrubbing(false);\n this.player_.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n if (this.videoWasPlaying_) {\n this.player_.play();\n }\n\n (this.seekBar_ as any).update();\n this.player_.removeClass('cv-hide-mouse-time');\n }\n}\n\nvideojs.registerComponent('CreateClipProgressIndicator', CreateClipProgressIndicator);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n ClipTimepointSelector,\n ClipTimepointSelectorOptions\n} from 'projects/player/plugins/create-clip-plugin/components/clip-timepoint-selector/clip-timepoint-selector';\nimport { CreateClipProgressIndicator } from 'projects/player/plugins/create-clip-plugin/components/create-clip-progress-indicator/create-clip-progress-indicator';\n\nimport './create-clip-seek-bar.scss';\n\nconst SeekBar = videojs.getComponent('SeekBar') as unknown as typeof videojs.SeekBar;\n\ninterface CreateClipSeekBarOptions extends ClipTimepointSelectorOptions {}\n\nexport class CreateClipSeekBar extends SeekBar {\n constructor(player: VideoJsPlayer, options: any) {\n super(player, options);\n\n this.addClass('cv-create-clip-seek-bar');\n }\n\n public initialize(options: CreateClipSeekBarOptions): void {\n const timepointSelector = new ClipTimepointSelector(this.player(), options);\n\n this.addChild(timepointSelector);\n\n const playProgressBar = this.getChild('playProgressBar');\n const indicator = new CreateClipProgressIndicator(this.player_, {\n seekBar: this,\n playProgressBar\n });\n playProgressBar.addChild(indicator);\n }\n}\n\nCreateClipSeekBar.prototype.options_ = {\n children: ['playProgressBar'],\n barName: 'playProgressBar'\n};\n\n// MouseTimeDisplay tooltips should not be added to a player on mobile devices\nif (!videojs.browser.IS_IOS && !videojs.browser.IS_ANDROID) {\n CreateClipSeekBar.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay');\n}\n\nvideojs.registerComponent('CreateClipSeekBar', CreateClipSeekBar);\n","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport {\n CreateClipSeekBar\n} from 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nimport 'projects/player/plugins/create-clip-plugin/components/create-clip-seek-bar/create-clip-seek-bar';\n\nconst Plugin = videojs.getPlugin('plugin');\n\nconst DEFAULT_MIN_CLIP_DURATION = 5; // seconds;\n\ninterface CreateClipPluginOptions {\n onChangeStartTime: (startTime: number) => void;\n onChangeEndTime: (endTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nclass CreateClipPlugin extends Plugin {\n private options: CreateClipPluginOptions;\n\n constructor(player: VideoJsPlayer, options: CreateClipPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n this.initCreateClipSeekBar = this.initCreateClipSeekBar.bind(this);\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initCreateClipSeekBar));\n }\n\n private initCreateClipSeekBar(): void {\n const seekBar = this.player.controlBar.getChild('ProgressControl')?.getChild('SeekBar') as CreateClipSeekBar;\n\n if (!seekBar)\n return;\n\n const startTime = (!isNaN(this.options.startTime) && this.options.startTime >= 0) ?\n this.options.startTime :\n 0;\n\n const endTime = (!isNaN(this.options.endTime) && this.options.endTime <= this.player.duration()) ?\n this.options.endTime :\n this.player.duration();\n\n const minDuration = Math.min(this.options.minDuration || DEFAULT_MIN_CLIP_DURATION, this.player.duration());\n\n seekBar.initialize({\n startTime,\n endTime,\n minDuration,\n onChangeStartTime: this.options.onChangeStartTime,\n onChangeEndTime: this.options.onChangeEndTime\n });\n }\n\n public dispose(): void {\n this.player.off('loadedmetadata', this.initCreateClipSeekBar);\n super.dispose();\n }\n}\n\nvideojs.registerPlugin('createClipPlugin', CreateClipPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n createClipPlugin(options: CreateClipPluginOptions): void;\n }\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport { VideoJsPlayerOptions } from 'video.js';\nimport { BasePlayer, BasePlayerOptions } from './base-player';\n\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\n\nimport 'projects/player/plugins/create-clip-plugin/create-clip-plugin';\n\nexport interface CreateClipPlayerOptions extends Omit<BasePlayerOptions, 'playbackRates'> {\n onChangeEndTime: (endTime: number) => void;\n onChangeStartTime: (startTime: number) => void;\n startTime?: number;\n endTime?: number;\n minDuration?: number;\n}\n\nexport class CreateClipPlayer extends BasePlayer {\n declare protected options: CreateClipPlayerOptions;\n\n constructor(id: string | Element, options: CreateClipPlayerOptions) {\n super(id, {\n allowFullscreen: true,\n ...options,\n playbackRates: null,\n enableLocalCache: false\n });\n }\n\n protected getPlayerClassName(): string {\n return 'cv-create-clip-player';\n }\n\n protected configurePlugins(): void {\n const { startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime } = this.options;\n this.player.createClipPlugin({ startTime, endTime, minDuration, onChangeStartTime, onChangeEndTime });\n }\n\n protected getPlayerOptions(): VideoJsPlayerOptions {\n const options = super.getPlayerOptions();\n options.inactivityTimeout = 0;\n return options;\n }\n\n protected getSeekBarName(): string {\n return 'CreateClipSeekBar';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'create-clip-player';\n }\n}\n","import React from 'react';\n\nimport { CreateClipPlayer, CreateClipPlayerOptions } from 'projects/player/players/create-clip-player';\nimport { getProxy } from 'projects/player/utils/getProxy';\n\nexport interface ClickViewCreateClipPlayerProps extends CreateClipPlayerOptions {\n onReady?: (player: CreateClipPlayer) => void;\n onDispose?: () => void;\n}\n\nexport function ClickViewCreateClipPlayer(props: ClickViewCreateClipPlayerProps): React.ReactElement {\n const { onReady, onDispose } = props;\n\n const ref = React.useRef(null);\n const playerRef = React.useRef<CreateClipPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current?.dispose();\n\n if (!ref)\n return;\n\n playerRef.current = new CreateClipPlayer(ref.current, props);\n\n if (onReady) {\n playerRef.current.ready(() => {\n onReady(getProxy(playerRef.current));\n });\n }\n\n if (onDispose) {\n playerRef.current.one('dispose', onDispose);\n }\n \n return () => {\n playerRef.current?.dispose();\n };\n }, [props.viewKey]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:start:time', time: props.startTime });\n }, [props.startTime]);\n\n React.useEffect(() => {\n playerRef.current?.trigger({ type: 'update:clip:end:time', time: props.endTime });\n }, [props.endTime]);\n\n return (\n <div ref={ref}></div>\n );\n}\n","import * as React from 'react';\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 { ClipTimeForm } from 'libs/shared/apps/clips/components/clip-time-form/ClipTimeForm';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, PlayerViewKey, Video } from 'libs/shared/interfaces';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\n\nimport { CreateClipPlayer } from 'projects/player/players/create-clip-player';\nimport { ClickViewCreateClipPlayer } from 'projects/player/react/CreateClipPlayer';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst NAV_LOCK_ID = 'edit-clip-timepoints';\nconst namespace = 'shared.editClipTimepoints';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEFAULT_DURATION = 30;\nconst MIN_DURATION = 5;\n\nfunction handleError(error: string): void {\n DialogHelper.render(\n (\n <p>{error}</p>\n ), {\n title: getPhrase('errorHeading'),\n cancelButtonProps: {\n variant: 'link',\n text: getPhrase('close')\n }\n }\n );\n}\n\nfunction safeStringToNumber(value: string): number {\n if (!value) return 0;\n\n const number = Number(value);\n return isNaN(number) ? 0 : number;\n}\n\ninterface EditClipTimepointsViewProps {\n id?: string;\n videoId?: string;\n startTime?: string;\n isCopying?: boolean;\n}\n\nexport function EditClipTimepointsView(props: EditClipTimepointsViewProps): JSX.Element {\n const playerRef = React.useRef<CreateClipPlayer>(null);\n \n const initialStartTime = safeStringToNumber(props.startTime);\n\n const [ startTime, setStartTime ] = React.useState<number>(initialStartTime);\n const [ endTime, setEndTime ] = React.useState<number>(initialStartTime + DEFAULT_DURATION);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const clip = Flight.useBasicFetch<Clip>(!!props.id && ClipRequests.clip(props.id));\n const videoId = clip.data?._parentVideo?.id || props.videoId;\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(!!videoId &&\n PlayerRequests.createViewKey(videoId, MediaIdType.MasterObject));\n const video = Flight.useBasicFetch<Video>(!!videoId && VideoRequests.video(videoId));\n\n const [ duration, setDuration ] = React.useState<number>(0);\n\n const navLock = useNavLock();\n\n useSetPageMetadata({ title: props.id ? clip.data?.name : getPhrase('pageTitle') });\n\n React.useEffect(() => {\n navLock.lock({\n id: NAV_LOCK_ID,\n title: LanguageService.getPhrase(namespace, 'navLockTitle'),\n text: LanguageService.getPhrase(namespace, 'navLockBody')\n });\n }, []);\n\n React.useEffect(() => {\n if (!clip.data)\n return;\n\n setStartTime(clip.data.startTime);\n setEndTime(clip.data.endTime);\n }, [clip.data]);\n\n function onReady(player: CreateClipPlayer): void {\n playerRef.current = player;\n\n player.on('durationchange', () => setDuration(player.duration()));\n }\n\n function onSubmit(): void {\n let error = '';\n\n if (startTime > endTime)\n error = getPhrase('startTimeGreaterThanEndTime');\n\n if (endTime - startTime < MIN_DURATION)\n error = getPhrase('tooShort', { minDuration: MIN_DURATION });\n\n if (error) {\n handleError(error);\n return;\n }\n\n navLock.unlock(NAV_LOCK_ID);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: props.id ? Actions.Clips.EDIT_CLIP_DETAILS_POPUP : Actions.Clips.CREATE_CLIP_DETAILS,\n args: props.id ? [props.id] : [props.videoId],\n params: { startTime, endTime, isCopying: props.isCopying }\n });\n }\n\n function onCancel(): void {\n const startTime = playerRef.current?.currentTime() ?? 0;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n null,\n video.data?.id,\n TextHelper.slugify(video.data?.name)\n ],\n params: { t: startTime }\n });\n }\n\n if (!props.id && !props.videoId)\n return <></>;\n\n return (\n <div className='px-3'>\n {!!config.data && !!viewKey.data && !!video.data && (!props.id || !!clip.data) &&\n <div className='pb-3'>\n <div className='mb-3'>\n <ClickViewCreateClipPlayer\n onReady={onReady}\n playerApi={new URL(config.data.playerApiUrl)}\n viewKey={viewKey.data.viewKey}\n startTime={startTime}\n endTime={endTime}\n onChangeStartTime={setStartTime}\n onChangeEndTime={setEndTime}\n minDuration={MIN_DURATION}\n autoplay\n />\n </div>\n <ClipTimeForm\n startTime={startTime}\n endTime={endTime}\n setStartTime={setStartTime}\n setEndTime={setEndTime}\n onSubmit={onSubmit}\n onCancel={onCancel}\n duration={duration}\n />\n </div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./BXTI9cmX.chunk.js";import{u as o}from"./BX0wDJmp.chunk.js";import{l as ee,y as s,z as te}from"./NlCAcBdo.chunk.js";import{t as ne}from"./DGmmTRu72.chunk.js";import{t as c}from"./DZX1tZ-D2.chunk.js";import{t as l}from"./CVHQXNzi2.chunk.js";import{t as u}from"./DbSUQ2A12.chunk.js";import{t as d}from"./BrbeV-Gn2.chunk.js";import{t as f}from"./LoQS6GjP.chunk.js";import{t as p}from"./CqrjHjAN.chunk.js";import{t as m}from"./eoAypzU3.chunk.js";import{t as re}from"./CgCqPbjJ.chunk.js";import{t as ie}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./B2INd6bh.chunk.js";import{t as h}from"./B3gsVN-_.chunk.js";import{i as se}from"./BxjzTnvL2.chunk.js";import{n as g,t as ce}from"./CpFtf-tI2.chunk.js";import{t as _}from"./DBkEQkKm2.chunk.js";import{t as v}from"./C1loT8MD2.chunk.js";import{r as y}from"./CsWeCs8U2.chunk.js";import{n as le}from"./xa4cS6Fq.chunk.js";import{t as b}from"./jAbfamoi.chunk.js";import{t as ue}from"./WvK58Ge12.chunk.js";import{t as x}from"./jAtAipGN.chunk.js";import"./BILyzh0I.chunk.js";import{t as de}from"./CvHvrB-t.chunk.js";import{l as fe}from"./BOJK8LI1.chunk.js";import{t as S}from"./DzgAvoez.chunk.js";import{n as C}from"./D6bsI9KZ.chunk.js";import{t as pe}from"./BbgQJe-T.chunk.js";import{t as w}from"./BPavmm8c.chunk.js";import{a as me,i as he,n as ge,t as _e}from"./Bf9r1ZoF2.chunk.js";import{_ as T,a as ve,c as E,d as D,f as O,g as k,h as A,i as j,l as M,m as N,n as P,o as F,p as ye,r as be,s as xe,t as Se,u as Ce}from"./VJQU9c4G2.chunk.js";import{n as we,t as Te}from"./B3p3SaM12.chunk.js";import{n as Ee,r as De}from"./BgOLbASl2.chunk.js";import{t as I}from"./DkxWaE9O.chunk.js";var L={chaptersAndSubtitles(e,t){let n={query:`subtitles[customer],chapters`,permissionFilterOption:u.StripMetadata,contentRegion:t};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,n),publicUrl:c.urlBuilder(`/api/objects/${e}/subtitles`,n),key:`videos:${e}:subtitles:chapters:${u.StripMetadata}`,formatData:e=>({subtitles:e.subtitles.data,chapters:e.chapters.data})}},subtitleVtt(e,t){return{url:c.urlBuilder(`{player}/srt-to-vtt`,{url:e,fullSentences:!0}),publicUrl:c.urlBuilder(`/api/player/srt-to-vtt`,{url:e,fullSentences:!0}),key:`subtitle:${e}`,formatData:e=>({...t,vtt:e})}}},R=e(r()),z=b(),B={dropdown:`_dropdown_zu639_1`},V=i(),H=`shared.curriculumLinks`;function Oe(e){let{preferredCurriculum:t,availableCurriculums:n,curriculumLinks:r,updateCurriculum:i}=e.curriculums;function a(t){i(t,{shouldLog:!0,locationContext:s.PlayPage,video:e.video})}return!e.canViewCurriculumLinks||!r?.length&&!e.curriculums.mappedCurriculums.length?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(`section`,{id:w.CurriculumLinks,ref:t=>{t&&e.headingRef?.current&&e.headingRef.current.set(w.CurriculumLinks,t)},className:`play-page-section`,children:[(0,V.jsx)(`h2`,{className:`h4 me-2 h-100`,children:(0,V.jsx)(g,{namespace:H,phrase:`heading`})}),(0,V.jsx)(I,{availableCurriculums:n,onChangeCurriculum:a,selectedCurriculum:t,className:B.dropdown}),(0,V.jsx)(`div`,{className:`rounded border position-relative`,children:(0,V.jsx)(z.Scrollbars,{autoHeight:!0,autoHeightMax:e.height,children:(0,V.jsx)(`div`,{className:`p-3`,children:(0,V.jsx)(C,{curriculumLinks:e.curriculums.curriculumLinks,onChangeCurriculum:a,hasCompleted:e.curriculums.hasCompleted,mappedCurriculums:e.curriculums.mappedCurriculums,isFetching:e.curriculums.isFetching,getCodeAppLink:(t,n)=>e.hasNewSearch?x.getSearchAppLink(t,{[y]:n}):null,locationContext:s.PlayPage})})})})]})}var ke=`shared.play`;function U(e){let r=le(),i=r.playerRef.current?.isPaused?.(),o=r.playerRef?.current?.hasStarted?.(),{hasPermissions:c}=h(),u=ne(null),{canConsume:f}=d.getCanBeConsumed(e.video),p=F(e.hasTheatreMode,r),g=P(e.hasTheatreMode,r.mode,r.defaultDisplayMode);function v(e){e||y(!1),r.setDefaultDisplayMode?.(e?`theatre`:`normal`),r.playerRef?.current?.toggleTheatreMode?.(e)}function y(e){r.playerRef?.current?.toggleTranscript?.(e)}let{tableOfContentsActiveId:b,setTableOfContentsActiveId:x,controlledId:C,setControlledId:I,tableOfContentsExpanded:L,onToggleTableOfContents:z}=j(e.tableOfContentsId,e.hasTheatreMode,p),B=k(e.video)&&e.featureAccess.canViewGlance,{headingRef:H,headingElements:U}=be(B),W=U.map(t=>({id:t.id,name:Se.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:[...e.video.resources?.data??[],...e.video.links?.data??[]]})})),Ae=d.isVideoTypeArchived(e.video),je=c(n.StudentExperience);De({setActiveId:x,headingElements:U,controlledId:C,setControlledId:I}),Ee(U,C);let G=R.useRef(!1),K=se({settings:u,presentationSlug:e.presentationSlug}),q=K.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems);M({resourcePopupId:e.resourcePopupId,resources:e.video.resources?.data,getResourceAppLink:q});function J(){G.current=!r?.playerRef?.current?.isPaused(),r?.playerRef?.current?.pause()}function Y(){G.current&&r?.playerRef?.current?.play()}let X={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:L,theatreMode:g},Me=xe(X),Ne=ve(X),Pe=r.mode===`picture-in-picture`||e.featureAccess.canViewPublicLayout&&!e.video._canBeConsumed.value,[,Z]=ae(re.PLAY_PAGE_CONTAINER_CLASS_NAME),Fe=e.commonVideoProps.getSubTextType?.(e.video),Ie=e.commonVideoProps.getSubTextAppLink(e.video),Q=we(e.video,c(n.StudentExperience)),$=Q.filter(ue.isResource);R.useEffect(()=>{Z(p?E.theatreModePlayPageContainer:``)},[p]),R.useEffect(()=>()=>Z(``),[]);function Le(){t.trigger({action:m.SignUp.SIGN_UP,application:a.SIGN_UP})}function Re(){if(!f)return Le();o||r.playerRef.current?.play(),y(!0),window.scrollTo({top:0,behavior:`smooth`})}function ze(e){r.playerRef.current?.currentTime(e)}function Be(){if($.length===1){de.downloadResource($[0],{videoId:e.video?.id,videoName:e.video.name},{location:s.PlayPage,actionType:te.Download,entity:ee.Resource});return}t.trigger({application:a.VIDEOS,action:m.Videos.RESOURCE_DOWNLOAD,args:[e.video?.id,e.shareId]})}return(0,V.jsx)(ce.Provider,{value:ke,children:(0,V.jsxs)(`div`,{className:`px-4 play-page-sections-container ${e.shouldShowSideTableOfContents?`row g-0`:``}`,children:[(0,V.jsxs)(`main`,{className:`${E.main} ${Me}`,children:[!!e.breadcrumbs?.length&&(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(S,{breadcrumbs:e.breadcrumbs})}),(0,V.jsx)(_e,{restrictions:e.video._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.video.id,objectTypeId:l.Video,canManageVideoAccess:e.canManageVideoAccess}),Ae&&(0,V.jsx)(me,{typeId:e.video.typeId,hasStudentExperience:je}),(0,V.jsxs)(`section`,{id:w.Video,className:`mb-3 ${oe.GLOBAL_PLAYER_SELECTOR}`,ref:e=>{e&&H?.current&&H.current.set(w.Video,e)},children:[f&&(0,V.jsx)(fe,{objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:e.params?.context,contextId:e.params?.contextId,playNext:e.params?.playNext,moviesAndTv:e.params?.mtv,startTime:e.params?.t??e.params?.startTime,endTime:e.params?.endTime,mode:`default`,location:`play-page`},e.video.id),(0,V.jsx)(`div`,{className:Pe?``:`d-none`,children:(0,V.jsx)(Ce,{video:e.video,appLink:{application:a.SIGN_UP,action:m.SignUp.SIGN_UP},type:r.mode===`picture-in-picture`?`pip`:`public`})})]}),(0,V.jsxs)(`div`,{className:Ne,children:[(0,V.jsxs)(`div`,{className:g?`${E.theatreModeLeftContent}`:`w-100`,children:[(0,V.jsx)(D,{presentationSlug:e.presentationSlug,media:e.video,subTextType:Fe,subtextAppLink:Ie,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience}),B?(0,V.jsx)(A,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:e=>r.playerRef.current?.currentTime(e),getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:B}):(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:c(n.ViewLibraries)?K.getLibraryAppLink:null,getFolderAppLink:c(n.ViewLibraries)?K.getFolderAppLink:null}),(0,V.jsx)(Oe,{height:368,curriculums:e.curriculums,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks,headingRef:H,video:e.video,hasNewSearch:e.hasNewSearch}),(0,V.jsx)(Te,{headingRef:H,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:q,analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:ie.Fallbacks.RESOURCE_THUMBNAIL,onDownloadClick:Be,resources:Q,downloadableResources:$,aboutResourcesAppLink:_.getAboutResourceAppLink()}),(0,V.jsx)(ye,{presentationSlug:e.presentationSlug,headingRef:H,video:e.video,interactives:e.interactives,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,commonVideoProps:e.commonVideoProps}),(0,V.jsx)(N,{presentationSlug:e.presentationSlug,video:e.video,headingRef:H,clips:e.clips,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,analyticsData:{videoId:e.video.id,videoName:e.video.name},commonVideoProps:e.commonVideoProps}),B&&(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:K.getLibraryAppLink,getFolderAppLink:K.getFolderAppLink}),e.shouldShowTranscript&&(0,V.jsx)(pe,{headingRef:H,video:e.video,subtitles:e.subtitles,vttSubtitles:e.vttSubtitles,chapters:e.chapters,onShowInVideo:Re,signUpLink:{action:m.SignUp.SIGN_UP,application:a.SIGN_UP},setStartTime:ze,isBot:e.isBot,isPaused:i,isAuthenticated:e.currentUser.isAuthenticated,playerApiUrl:e.playerApiUrl}),e.featureAccess.canViewCitations&&(0,V.jsx)(ge,{headingRef:H,media:e.video,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:e.presentationSlug}),(0,V.jsx)(he,{presentationSlug:e.presentationSlug,currentVideo:e.video,headingRef:H,commonVideoProps:e.commonVideoProps,relatedVideos:e.relatedVideos,currentUser:e.currentUser,getVideoAppLink:(t,n)=>_.getAppLink(t,{...n,context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv,includeContext:e.currentUser?.isAuthenticated},e.presentationSlug),audiences:e.audiences,moviesAndTv:e.params.mtv})]}),p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})]}),!p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:e.hasTheatreMode?v:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})})}function W(e,t){let n=o(p.currentUser()),{canViewTranscript:r}=v({objectId:e,objectTypeId:l.Video}),i=o(t?f.sharedVideo(e,t):f.video(e)),a=r&&!!i.data?._curationTags?.value?.isClickViewCurated;return{shouldShowTranscript:a,shouldFetchTranscript:a&&!n.data?.isAuthenticated}}export{U as n,L as r,W as t};
2
- //# sourceMappingURL=ft2cSH-j.chunk.js.map
1
+ import{o as e}from"./DAXXjFlN.chunk.js";import{y as t}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n}from"./B785hxeE.chunk.js";import{t as r}from"./C2w0pmFW.chunk.js";import{t as i}from"./wrLrTezN.chunk.js";import{t as a}from"./BXTI9cmX.chunk.js";import{u as o}from"./BX0wDJmp.chunk.js";import{l as ee,y as s,z as te}from"./NlCAcBdo.chunk.js";import{t as ne}from"./DGmmTRu72.chunk.js";import{t as c}from"./DZX1tZ-D2.chunk.js";import{t as l}from"./CVHQXNzi2.chunk.js";import{t as u}from"./DbSUQ2A12.chunk.js";import{t as d}from"./BrbeV-Gn2.chunk.js";import{t as f}from"./LoQS6GjP.chunk.js";import{t as p}from"./CqrjHjAN.chunk.js";import{t as m}from"./eoAypzU3.chunk.js";import{t as re}from"./CgCqPbjJ.chunk.js";import{t as ie}from"./7-GJWRH82.chunk.js";import{t as ae}from"./dLd5d3X22.chunk.js";import{t as oe}from"./B2INd6bh.chunk.js";import{t as h}from"./B3gsVN-_.chunk.js";import{i as se}from"./D-iyHqNw2.chunk.js";import{n as g,t as ce}from"./CpFtf-tI2.chunk.js";import{t as _}from"./DBkEQkKm2.chunk.js";import{t as v}from"./C1loT8MD2.chunk.js";import{r as y}from"./CsWeCs8U2.chunk.js";import{n as le}from"./xa4cS6Fq.chunk.js";import{t as b}from"./jAbfamoi.chunk.js";import{t as ue}from"./WvK58Ge12.chunk.js";import{t as x}from"./CpsbRDII.chunk.js";import"./CCBk_ENs.chunk.js";import{t as de}from"./CvHvrB-t.chunk.js";import{l as fe}from"./BOJK8LI1.chunk.js";import{t as S}from"./DzgAvoez.chunk.js";import{n as C}from"./D6bsI9KZ.chunk.js";import{t as pe}from"./BbgQJe-T.chunk.js";import{t as w}from"./BPavmm8c.chunk.js";import{a as me,i as he,n as ge,t as _e}from"./Bf9r1ZoF2.chunk.js";import{_ as T,a as ve,c as E,d as D,f as O,g as k,h as A,i as j,l as M,m as N,n as P,o as F,p as ye,r as be,s as xe,t as Se,u as Ce}from"./Bld7iWR52.chunk.js";import{n as we,t as Te}from"./B3p3SaM12.chunk.js";import{n as Ee,r as De}from"./BgOLbASl2.chunk.js";import{t as I}from"./DkxWaE9O.chunk.js";var L={chaptersAndSubtitles(e,t){let n={query:`subtitles[customer],chapters`,permissionFilterOption:u.StripMetadata,contentRegion:t};return{url:c.urlBuilder(`{gateway}/v1/objects/${e}`,n),publicUrl:c.urlBuilder(`/api/objects/${e}/subtitles`,n),key:`videos:${e}:subtitles:chapters:${u.StripMetadata}`,formatData:e=>({subtitles:e.subtitles.data,chapters:e.chapters.data})}},subtitleVtt(e,t){return{url:c.urlBuilder(`{player}/srt-to-vtt`,{url:e,fullSentences:!0}),publicUrl:c.urlBuilder(`/api/player/srt-to-vtt`,{url:e,fullSentences:!0}),key:`subtitle:${e}`,formatData:e=>({...t,vtt:e})}}},R=e(r()),z=b(),B={dropdown:`_dropdown_zu639_1`},V=i(),H=`shared.curriculumLinks`;function Oe(e){let{preferredCurriculum:t,availableCurriculums:n,curriculumLinks:r,updateCurriculum:i}=e.curriculums;function a(t){i(t,{shouldLog:!0,locationContext:s.PlayPage,video:e.video})}return!e.canViewCurriculumLinks||!r?.length&&!e.curriculums.mappedCurriculums.length?(0,V.jsx)(V.Fragment,{}):(0,V.jsxs)(`section`,{id:w.CurriculumLinks,ref:t=>{t&&e.headingRef?.current&&e.headingRef.current.set(w.CurriculumLinks,t)},className:`play-page-section`,children:[(0,V.jsx)(`h2`,{className:`h4 me-2 h-100`,children:(0,V.jsx)(g,{namespace:H,phrase:`heading`})}),(0,V.jsx)(I,{availableCurriculums:n,onChangeCurriculum:a,selectedCurriculum:t,className:B.dropdown}),(0,V.jsx)(`div`,{className:`rounded border position-relative`,children:(0,V.jsx)(z.Scrollbars,{autoHeight:!0,autoHeightMax:e.height,children:(0,V.jsx)(`div`,{className:`p-3`,children:(0,V.jsx)(C,{curriculumLinks:e.curriculums.curriculumLinks,onChangeCurriculum:a,hasCompleted:e.curriculums.hasCompleted,mappedCurriculums:e.curriculums.mappedCurriculums,isFetching:e.curriculums.isFetching,getCodeAppLink:(t,n)=>e.hasNewSearch?x.getSearchAppLink(t,{[y]:n}):null,locationContext:s.PlayPage})})})})]})}var ke=`shared.play`;function U(e){let r=le(),i=r.playerRef.current?.isPaused?.(),o=r.playerRef?.current?.hasStarted?.(),{hasPermissions:c}=h(),u=ne(null),{canConsume:f}=d.getCanBeConsumed(e.video),p=F(e.hasTheatreMode,r),g=P(e.hasTheatreMode,r.mode,r.defaultDisplayMode);function v(e){e||y(!1),r.setDefaultDisplayMode?.(e?`theatre`:`normal`),r.playerRef?.current?.toggleTheatreMode?.(e)}function y(e){r.playerRef?.current?.toggleTranscript?.(e)}let{tableOfContentsActiveId:b,setTableOfContentsActiveId:x,controlledId:C,setControlledId:I,tableOfContentsExpanded:L,onToggleTableOfContents:z}=j(e.tableOfContentsId,e.hasTheatreMode,p),B=k(e.video)&&e.featureAccess.canViewGlance,{headingRef:H,headingElements:U}=be(B),W=U.map(t=>({id:t.id,name:Se.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:[...e.video.resources?.data??[],...e.video.links?.data??[]]})})),Ae=d.isVideoTypeArchived(e.video),je=c(n.StudentExperience);De({setActiveId:x,headingElements:U,controlledId:C,setControlledId:I}),Ee(U,C);let G=R.useRef(!1),K=se({settings:u,presentationSlug:e.presentationSlug}),q=K.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems);M({resourcePopupId:e.resourcePopupId,resources:e.video.resources?.data,getResourceAppLink:q});function J(){G.current=!r?.playerRef?.current?.isPaused(),r?.playerRef?.current?.pause()}function Y(){G.current&&r?.playerRef?.current?.play()}let X={hasTheatreMode:e.hasTheatreMode,shouldShowSideTableOfContents:e.shouldShowSideTableOfContents,tableOfContentsExpanded:L,theatreMode:g},Me=xe(X),Ne=ve(X),Pe=r.mode===`picture-in-picture`||e.featureAccess.canViewPublicLayout&&!e.video._canBeConsumed.value,[,Z]=ae(re.PLAY_PAGE_CONTAINER_CLASS_NAME),Fe=e.commonVideoProps.getSubTextType?.(e.video),Ie=e.commonVideoProps.getSubTextAppLink(e.video),Q=we(e.video,c(n.StudentExperience)),$=Q.filter(ue.isResource);R.useEffect(()=>{Z(p?E.theatreModePlayPageContainer:``)},[p]),R.useEffect(()=>()=>Z(``),[]);function Le(){t.trigger({action:m.SignUp.SIGN_UP,application:a.SIGN_UP})}function Re(){if(!f)return Le();o||r.playerRef.current?.play(),y(!0),window.scrollTo({top:0,behavior:`smooth`})}function ze(e){r.playerRef.current?.currentTime(e)}function Be(){if($.length===1){de.downloadResource($[0],{videoId:e.video?.id,videoName:e.video.name},{location:s.PlayPage,actionType:te.Download,entity:ee.Resource});return}t.trigger({application:a.VIDEOS,action:m.Videos.RESOURCE_DOWNLOAD,args:[e.video?.id,e.shareId]})}return(0,V.jsx)(ce.Provider,{value:ke,children:(0,V.jsxs)(`div`,{className:`px-4 play-page-sections-container ${e.shouldShowSideTableOfContents?`row g-0`:``}`,children:[(0,V.jsxs)(`main`,{className:`${E.main} ${Me}`,children:[!!e.breadcrumbs?.length&&(0,V.jsx)(`div`,{className:`mb-2`,children:(0,V.jsx)(S,{breadcrumbs:e.breadcrumbs})}),(0,V.jsx)(_e,{restrictions:e.video._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.video.id,objectTypeId:l.Video,canManageVideoAccess:e.canManageVideoAccess}),Ae&&(0,V.jsx)(me,{typeId:e.video.typeId,hasStudentExperience:je}),(0,V.jsxs)(`section`,{id:w.Video,className:`mb-3 ${oe.GLOBAL_PLAYER_SELECTOR}`,ref:e=>{e&&H?.current&&H.current.set(w.Video,e)},children:[f&&(0,V.jsx)(fe,{objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:e.params?.context,contextId:e.params?.contextId,playNext:e.params?.playNext,moviesAndTv:e.params?.mtv,startTime:e.params?.t??e.params?.startTime,endTime:e.params?.endTime,mode:`default`,location:`play-page`},e.video.id),(0,V.jsx)(`div`,{className:Pe?``:`d-none`,children:(0,V.jsx)(Ce,{video:e.video,appLink:{application:a.SIGN_UP,action:m.SignUp.SIGN_UP},type:r.mode===`picture-in-picture`?`pip`:`public`})})]}),(0,V.jsxs)(`div`,{className:Ne,children:[(0,V.jsxs)(`div`,{className:g?`${E.theatreModeLeftContent}`:`w-100`,children:[(0,V.jsx)(D,{presentationSlug:e.presentationSlug,media:e.video,subTextType:Fe,subtextAppLink:Ie,yearGroups:e.commonVideoProps.yearGroups,audiences:e.audiences,featureAccess:e.featureAccess,shareId:e.shareId,showTitlePadlock:!e.commonVideoProps.hasStudentExperience&&!e.commonVideoProps.hasGuestExperience}),B?(0,V.jsx)(A,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:e=>r.playerRef.current?.currentTime(e),getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:B}):(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:c(n.ViewLibraries)?K.getLibraryAppLink:null,getFolderAppLink:c(n.ViewLibraries)?K.getFolderAppLink:null}),(0,V.jsx)(Oe,{height:368,curriculums:e.curriculums,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks,headingRef:H,video:e.video,hasNewSearch:e.hasNewSearch}),(0,V.jsx)(Te,{headingRef:H,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.commonVideoProps.imageCdnUrl,getAppLink:q,analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:ie.Fallbacks.RESOURCE_THUMBNAIL,onDownloadClick:Be,resources:Q,downloadableResources:$,aboutResourcesAppLink:_.getAboutResourceAppLink()}),(0,V.jsx)(ye,{presentationSlug:e.presentationSlug,headingRef:H,video:e.video,interactives:e.interactives,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,commonVideoProps:e.commonVideoProps}),(0,V.jsx)(N,{presentationSlug:e.presentationSlug,video:e.video,headingRef:H,clips:e.clips,canViewClips:e.featureAccess.canViewClips,audiences:e.audiences,analyticsData:{videoId:e.video.id,videoName:e.video.name},commonVideoProps:e.commonVideoProps}),B&&(0,V.jsx)(T,{video:e.video,currentUser:e.currentUser,headingRef:H,onLaunchImmersiveReader:J,onExitImmersiveReader:Y,getTagAppLink:K.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,showHeading:!0,getPartnerProfileAppLink:K.getPartnerProfileAppLink,getPartnerDashboardHubAppLink:K.getPartnerDashboardHubAppLink,getLibraryAppLink:K.getLibraryAppLink,getFolderAppLink:K.getFolderAppLink}),e.shouldShowTranscript&&(0,V.jsx)(pe,{headingRef:H,video:e.video,subtitles:e.subtitles,vttSubtitles:e.vttSubtitles,chapters:e.chapters,onShowInVideo:Re,signUpLink:{action:m.SignUp.SIGN_UP,application:a.SIGN_UP},setStartTime:ze,isBot:e.isBot,isPaused:i,isAuthenticated:e.currentUser.isAuthenticated,playerApiUrl:e.playerApiUrl}),e.featureAccess.canViewCitations&&(0,V.jsx)(ge,{headingRef:H,media:e.video,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:e.presentationSlug}),(0,V.jsx)(he,{presentationSlug:e.presentationSlug,currentVideo:e.video,headingRef:H,commonVideoProps:e.commonVideoProps,relatedVideos:e.relatedVideos,currentUser:e.currentUser,getVideoAppLink:(t,n)=>_.getAppLink(t,{...n,context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv,includeContext:e.currentUser?.isAuthenticated},e.presentationSlug),audiences:e.audiences,moviesAndTv:e.params.mtv})]}),p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!0,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})]}),!p&&(0,V.jsx)(O,{isExpanded:L,setIsExpanded:z,toggleTheatreMode:e.hasTheatreMode?v:null,items:W,activeId:b,setControlledId:I,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents,isTheatreMode:!1,hasTranscription:e.hasTheatreMode,shouldShow:W.length>=3})]})})}function W(e,t){let n=o(p.currentUser()),{canViewTranscript:r}=v({objectId:e,objectTypeId:l.Video}),i=o(t?f.sharedVideo(e,t):f.video(e)),a=r&&!!i.data?._curationTags?.value?.isClickViewCurated;return{shouldShowTranscript:a,shouldFetchTranscript:a&&!n.data?.isAuthenticated}}export{U as n,L as r,W as t};
2
+ //# sourceMappingURL=B3AhKFfz.chunk.js.map