@clickview/lite 0.69.1-dev.0 → 0.69.1-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{9985-lite-3c49d1b796.chunk.css → 3902-lite-5eaa7e7ae0.chunk.css} +1 -2
  3. package/dist/css/{555-lite-1b5aa9652d.chunk.css → 4356-lite-b05b606d3d.chunk.css} +1 -2
  4. package/dist/css/{2636-lite-f995954232.chunk.css → 4527-lite-4d1b877b3f.chunk.css} +4 -0
  5. package/dist/css/{1239-lite-8152f713c8.chunk.css → 7210-lite-a568e8ec1e.chunk.css} +1 -0
  6. package/dist/languages/en.json +1 -1
  7. package/dist/scripts/1210-7afb28caac-lite.chunk.js +2 -0
  8. package/dist/scripts/1210-7afb28caac-lite.chunk.js.map +1 -0
  9. package/dist/scripts/1386-332e63f68c-lite.chunk.js +2 -0
  10. package/dist/scripts/1386-332e63f68c-lite.chunk.js.map +1 -0
  11. package/dist/scripts/232-1522c00252-lite.chunk.js +3 -0
  12. package/dist/scripts/232-1522c00252-lite.chunk.js.map +1 -0
  13. package/dist/scripts/2392-19e4bb187b-lite.chunk.js +3 -0
  14. package/dist/scripts/2392-19e4bb187b-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{2640-536c550749-lite.chunk.js → 2640-052f4606f6-lite.chunk.js} +2 -2
  16. package/dist/scripts/2640-052f4606f6-lite.chunk.js.map +1 -0
  17. package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js +2 -0
  18. package/dist/scripts/300-3d9f3cd4e3-lite.chunk.js.map +1 -0
  19. package/dist/scripts/3079-0a333d6805-lite.chunk.js +2 -0
  20. package/dist/scripts/3079-0a333d6805-lite.chunk.js.map +1 -0
  21. package/dist/scripts/3110-eee18143c6-lite.chunk.js +2 -0
  22. package/dist/scripts/3110-eee18143c6-lite.chunk.js.map +1 -0
  23. package/dist/scripts/312-693aa30814-lite.chunk.js +2 -0
  24. package/dist/scripts/312-693aa30814-lite.chunk.js.map +1 -0
  25. package/dist/scripts/3902-39aaff7ce9-lite.chunk.js +2 -0
  26. package/dist/scripts/3902-39aaff7ce9-lite.chunk.js.map +1 -0
  27. package/dist/scripts/4229-477b1858dc-lite.chunk.js +2 -0
  28. package/dist/scripts/4229-477b1858dc-lite.chunk.js.map +1 -0
  29. package/dist/scripts/4356-36ce3ceec1-lite.chunk.js +2 -0
  30. package/dist/scripts/4356-36ce3ceec1-lite.chunk.js.map +1 -0
  31. package/dist/scripts/4527-42075d96f4-lite.chunk.js +2 -0
  32. package/dist/scripts/4527-42075d96f4-lite.chunk.js.map +1 -0
  33. package/dist/scripts/{4845-f3646fb657-lite.chunk.js → 4845-9b4657e696-lite.chunk.js} +2 -2
  34. package/dist/scripts/4845-9b4657e696-lite.chunk.js.map +1 -0
  35. package/dist/scripts/5679-444d9a7f76-lite.chunk.js +2 -0
  36. package/dist/scripts/5679-444d9a7f76-lite.chunk.js.map +1 -0
  37. package/dist/scripts/6046-104677f08c-lite.chunk.js +2 -0
  38. package/dist/scripts/6046-104677f08c-lite.chunk.js.map +1 -0
  39. package/dist/scripts/{6188-e108abca25-lite.chunk.js → 6188-77fc2f3ec5-lite.chunk.js} +2 -2
  40. package/dist/scripts/6188-77fc2f3ec5-lite.chunk.js.map +1 -0
  41. package/dist/scripts/6351-dff9edbb16-lite.chunk.js +3 -0
  42. package/dist/scripts/6351-dff9edbb16-lite.chunk.js.map +1 -0
  43. package/dist/scripts/6973-c4cb114bd7-lite.chunk.js +2 -0
  44. package/dist/scripts/6973-c4cb114bd7-lite.chunk.js.map +1 -0
  45. package/dist/scripts/7210-2e4563178c-lite.chunk.js +3 -0
  46. package/dist/scripts/7210-2e4563178c-lite.chunk.js.map +1 -0
  47. package/dist/scripts/7480-3564c0c2da-lite.chunk.js +2 -0
  48. package/dist/scripts/7480-3564c0c2da-lite.chunk.js.map +1 -0
  49. package/dist/scripts/7482-13e6f78c32-lite.chunk.js +2 -0
  50. package/dist/scripts/7482-13e6f78c32-lite.chunk.js.map +1 -0
  51. package/dist/scripts/9040-be65e4eb1e-lite.chunk.js +2 -0
  52. package/dist/scripts/9040-be65e4eb1e-lite.chunk.js.map +1 -0
  53. package/dist/scripts/{bundle-90d3c7fd15.min.js → bundle-32e967af87.min.js} +3 -3
  54. package/dist/scripts/{bundle-90d3c7fd15.min.js.map → bundle-32e967af87.min.js.map} +1 -1
  55. package/package.json +1 -1
  56. package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js +0 -2
  57. package/dist/scripts/1210-3cbdc62b0a-lite.chunk.js.map +0 -1
  58. package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js +0 -3
  59. package/dist/scripts/1239-ed9b8aadb4-lite.chunk.js.map +0 -1
  60. package/dist/scripts/1386-d93ee75e0c-lite.chunk.js +0 -2
  61. package/dist/scripts/1386-d93ee75e0c-lite.chunk.js.map +0 -1
  62. package/dist/scripts/2392-acfd69dfa3-lite.chunk.js +0 -3
  63. package/dist/scripts/2392-acfd69dfa3-lite.chunk.js.map +0 -1
  64. package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js +0 -2
  65. package/dist/scripts/2636-63e5f2c9e6-lite.chunk.js.map +0 -1
  66. package/dist/scripts/2640-536c550749-lite.chunk.js.map +0 -1
  67. package/dist/scripts/3036-d18c598435-lite.chunk.js +0 -2
  68. package/dist/scripts/3036-d18c598435-lite.chunk.js.map +0 -1
  69. package/dist/scripts/4229-75ba28a266-lite.chunk.js +0 -2
  70. package/dist/scripts/4229-75ba28a266-lite.chunk.js.map +0 -1
  71. package/dist/scripts/4266-e856b96643-lite.chunk.js +0 -3
  72. package/dist/scripts/4266-e856b96643-lite.chunk.js.map +0 -1
  73. package/dist/scripts/4598-f326dc1aec-lite.chunk.js +0 -2
  74. package/dist/scripts/4598-f326dc1aec-lite.chunk.js.map +0 -1
  75. package/dist/scripts/4845-f3646fb657-lite.chunk.js.map +0 -1
  76. package/dist/scripts/555-d811b49435-lite.chunk.js +0 -2
  77. package/dist/scripts/555-d811b49435-lite.chunk.js.map +0 -1
  78. package/dist/scripts/6046-44c115a89c-lite.chunk.js +0 -2
  79. package/dist/scripts/6046-44c115a89c-lite.chunk.js.map +0 -1
  80. package/dist/scripts/6188-e108abca25-lite.chunk.js.map +0 -1
  81. package/dist/scripts/6317-49be898c73-lite.chunk.js +0 -2
  82. package/dist/scripts/6317-49be898c73-lite.chunk.js.map +0 -1
  83. package/dist/scripts/6973-ede6601614-lite.chunk.js +0 -2
  84. package/dist/scripts/6973-ede6601614-lite.chunk.js.map +0 -1
  85. package/dist/scripts/7075-9a76ce47c9-lite.chunk.js +0 -3
  86. package/dist/scripts/7075-9a76ce47c9-lite.chunk.js.map +0 -1
  87. package/dist/scripts/7480-02bc4e08a3-lite.chunk.js +0 -2
  88. package/dist/scripts/7480-02bc4e08a3-lite.chunk.js.map +0 -1
  89. package/dist/scripts/9040-9393c59004-lite.chunk.js +0 -2
  90. package/dist/scripts/9040-9393c59004-lite.chunk.js.map +0 -1
  91. package/dist/scripts/9985-c488ab5f65-lite.chunk.js +0 -2
  92. package/dist/scripts/9985-c488ab5f65-lite.chunk.js.map +0 -1
  93. /package/dist/css/{3036-lite-1b3e9aa905.chunk.css → 3079-lite-1b3e9aa905.chunk.css} +0 -0
  94. /package/dist/css/{7075-lite-a377febbb0.chunk.css → 6351-lite-a377febbb0.chunk.css} +0 -0
  95. /package/dist/scripts/{4266-e856b96643-lite.chunk.js.LICENSE.txt → 232-1522c00252-lite.chunk.js.LICENSE.txt} +0 -0
  96. /package/dist/scripts/{1239-ed9b8aadb4-lite.chunk.js.LICENSE.txt → 2392-19e4bb187b-lite.chunk.js.LICENSE.txt} +0 -0
  97. /package/dist/scripts/{2392-acfd69dfa3-lite.chunk.js.LICENSE.txt → 6351-dff9edbb16-lite.chunk.js.LICENSE.txt} +0 -0
  98. /package/dist/scripts/{7075-9a76ce47c9-lite.chunk.js.LICENSE.txt → 7210-2e4563178c-lite.chunk.js.LICENSE.txt} +0 -0
  99. /package/dist/scripts/{bundle-90d3c7fd15.min.js.LICENSE.txt → bundle-32e967af87.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6351-dff9edbb16-lite.chunk.js","mappings":";8JACA,SAAgB,KAAO,QAAQ,MAAQ,SCajC,SAAUA,EAAYC,GAC1B,OACE,2BAASC,UAAU,+CACjB,uBAAKA,UAAS,iBAAYD,EAAME,SAAW,kBAAoB,qBAAoB,UACjF,uBAAKD,UAAS,UAAK,OAAW,YAAID,EAAMG,aAAY,qEAClD,gBAACC,EAAA,EAAY,CAACC,QAASL,EAAMK,QAASC,KAAMF,EAAAG,EAAA,SAE9C,uBAAKN,UAAU,2BACb,sBAAIA,UAAU,WAAWD,EAAMQ,QAET,iBAAhBR,EAAMS,OACZ,uBAAKR,UAAS,UAAK,QAAY,sFAC5BD,EAAMS,QAIZT,EAAMU,SAGb,oCCjCO,IAAMC,EAAoB,CAC/BC,SAAU,OACVC,WAAY,uMACZC,WAAY,MACZC,MAAO,yGCKH,SAAUC,EAA2BhB,GACzC,OACE,gBAACiB,EAAA,EAAmB,CAClBC,OAAQlB,EAAMkB,OACdjB,UAAWD,EAAMC,UACjBkB,WAAY,EACZC,YAAY,OAGlB,2BCNMC,EAAY,8BACZC,EAAYC,EAAA,mBAAiCF,GAO7C,SAAUG,EAAqBxB,SAC7ByB,GAAiC,QAAhB,EAAAzB,EAAM0B,kBAAU,eAAED,gBAAiB,EAAIzB,EAAM0B,WAAWD,eAAiB,KAC1FN,EAAaQ,KAAKC,MAAwC,IAAlC5B,EAAM0B,WAAWD,gBAEzCI,GAAoB7B,EAAM8B,OAAOC,QACjC/B,EAAM8B,OAAOE,aACbhC,EAAM8B,OAAOG,gBAEnB,OACE,gBAAClC,EAAA,EAAW,CACVS,MAAOc,EAAU,SACjBjB,QAAS,WACTF,aAAa,6BAEb,uBAAKF,UAAU,yDACVD,EAAM0B,YACP,gCACE,gBAACT,EAAA,EAAmB,CAClBE,WAAYM,EACZP,OAAQD,EAAA,gBAEV,qBAAGhB,UAAU,eACgB,iBAAnBwB,EACJI,EACA,gBAACK,EAAA,EAAI,CAACb,UAAWA,EAAWc,OAAO,kBAAkBC,QAAS,CAAEjB,WAAAA,KAC9D,gBAACe,EAAA,EAAI,CAACb,UAAWA,EAAWc,OAAO,eAAeC,QAAS,CAAEjB,WAAAA,KAC/D,gBAACe,EAAA,EAAI,CAACb,UAAWA,EAAWc,OAAO,kBAK3CnC,EAAM0B,YACN,gCACE,gBAACV,EAA0B,CAACE,OAAQD,EAAA,kBAMhD,mEC3DMoB,EAAgB,CACpB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,gICII,EAAY,2BACZ,EAAYd,EAAA,mBAAiC,GAE7Ce,EAA2C,CAC/C9B,MAAO,CACL+B,KAAM,MAERC,QAAS,CACPC,SAAS,GAEXC,MAAO,CACLC,gBAAiB,cACjBC,QAAS,CAAE,EAAG,EAAG,EAAG,IAEtBC,OAAQ,CACNC,UAAW,IACXC,aAAc,GAEhBC,YAAa,CACXC,IAAK,CACHC,kBAAkB,EAClBC,OAAQ,UACRC,WAAY,CACVX,SAAS,GAEXY,cAAc,EACdC,YAAa,EACbhD,KAAM,SAUN,SAAUiD,EAAkBvD,GAChC,ICCiCwD,IAxCjCC,EAEAC,EACAC,EAEMC,EAEAC,EDgCAC,ECfF,SAA0BN,GAC9B,QAAMO,EAAaP,EAAKQ,WAAU,SAAAC,GAAK,MAAmB,UAAfA,EAAMC,IAAgB,IAGjE,GAAIH,GAAc,EAAG,CACnB,IAAOI,KAAeX,EAAKY,OAAOL,EAAY,KAAE,s4BAA9B,GAElBP,EAAKa,KAAKF,EACX,CACD,OAAOX,EAAKc,MAAK,SAACC,EAAGC,WAGnB,OAFaC,SAAwC,QAA9B,EAAAF,EAAEL,KAAgBQ,MAAM,cAAM,eAAG,IAC3CD,SAAwC,QAA9B,EAAAD,EAAEN,KAAgBQ,MAAM,cAAM,eAAG,GAE1D,GACF,CDCoBC,ECvClBlB,EDuC8CzD,EAAMyD,OCrCpDC,EDqC8E,GCpC9EC,EDoDA,SAAuBM,GACrB,MAAiB,YAAVA,EAAsB,QAAUA,CACzC,ECpDML,EAA6B,CAAC,EAIpCC,OAFMA,EAAcJ,EDgCwC,oBC9B5DI,EAAae,SAAQ,SAAAC,SACdA,EAAGX,QAAQR,aAAY,EAAZA,EAAcoB,SAASD,EAAGX,KAAKa,kBAG/CnB,EAAOiB,EAAGX,MAAuB,QAAf,EAAAN,EAAOiB,EAAGX,aAAK,QAAI,EACrCN,EAAOiB,EAAGX,OAASW,EAAGpE,MACxB,IAE0BuE,EAAA,SAAmBC,OAAOC,KAAKtB,GAAQuB,KAAI,SAAAlB,GAAK,MAAK,CAC7EC,KAAMP,EAAgBA,EAAcM,GAASA,EAC7CmB,EAAGxB,EAAOK,GACVoB,KAAM,MACP,IAAI,QFpBOF,KAAI,SAACG,EAAGC,GAAG,OAAK,+BACvBD,GAAC,CACJvE,MAAOsB,EAAckD,EAAMlD,EAAcmD,SAAO,MCqC5CC,ECCmC,QAAlC,EAAAjC,OAD0BA,EDAKM,QCC3B,EAAJN,EAAMkC,QAAO,SAACnB,EAAGC,GAAC,OAAKD,EAAIC,EAAEY,CAAC,GAAE,UAAE,QAAI,KDkB7C,OACE,gBAACrF,EAAA,EAAW,CACVS,MAAO,EAAU,SAEjBL,aAAa,0BAEbE,QAAS,iBAERyD,aAAS,EAATA,EAAW0B,QACV,gCACE,qBAAGvF,UAAU,QAAO,gBAACiC,EAAA,EAAI,CAACb,UAAW,EAAWc,OAAO,aAAaC,QAAS,CAAEqD,WAAAA,MAE/E,uBAAKxF,UAAU,sCACb,gBAAC,IAAe,CACd0F,WAAY,IACZvD,QAhCZ,SACEoB,GAEA,OAAO,OAAP,wBACKlB,GAAoB,CACvBsD,OAAQ,CAAC,CACPP,KAAM,MACNnB,KAAM,EAAU,SAChBV,KAAAA,KAGN,CAqBqBqC,CAAgB/B,GACzBgC,eAAgB,CACd7F,UAAW,aAMnB,gBAAC8F,EAAA,EAAU,CAAC9F,UAAU,gBACpB,gBAAC8F,EAAA,QAAgB,CAACC,IAAKhG,EAAMiG,gBAAiBhG,UAAU,gBACxD,gBAAC8F,EAAA,UAAkB,CAAC9F,UAAU,MAAK,gBAACiC,EAAA,EAAI,CAACb,UAAW,EAAWc,OAAO,aACtE,gBAAC4D,EAAA,OAAe,CAAC9F,UAAU,SAAQ,gBAACiC,EAAA,EAAI,CAACb,UAAW,EAAWc,OAAO,iBAKhF,2BEtGA,SAAgB,gBAAkB,QAAQ,eAAiB,SCGrD,SAAU+D,IACd,OACE,2BACE,uBAAKjG,UAAU,gBACb,uBAAKA,UAAU,OACb,uBAAKA,UAAS,UAAK,kBAAsB,0CAE3C,uBAAKA,UAAU,OACb,uBAAKA,UAAS,UAAK,kBAAsB,0CAE3C,uBAAKA,UAAW,kBACd,uBAAKA,UAAS,UAAK,kBAAsB,2CAI7C,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,UACb,uBAAKA,UAAS,UAAK,kBAAsB,2CAKnD,66CCxBA,IAMakG,EAA0B,YAYrC,WAAYC,EAAuBhE,GAAyC,MAIzC,mGAJyC,UAC1E,gZAAMgE,EAAQhE,KAETiE,eAAiBjE,EAAQiE,eAC9B,EAAKC,OAAO,EAAKD,gBAAgB,CACnC,CAAC,mUAEM,WACLE,KAAKD,QAAQC,KAAKF,eACpB,GAAC,oBAEO,SAAOG,GACbA,EAAQD,KAAKE,WAAaF,KAAKG,WACjC,GAAC,sBAEO,WACN,iBAAqBH,KAAKI,SAAU,MACpCJ,KAAKF,gBAAiB,EACtBE,KAAKH,SAASQ,0BAA0BC,cAAcN,KAAKF,gBAC3DE,KAAKH,SAASU,SAAS,oCACzB,GAAC,uBAEO,WACN,oBAAwBP,KAAKI,SAAU,MACvCJ,KAAKF,gBAAiB,EACtBE,KAAKH,SAASQ,0BAA0BC,cAAcN,KAAKF,gBAC3DE,KAAKH,SAASW,YAAY,oCAC5B,GAEA,yBAIO,SAAYC,GACjBA,EAAMC,0BACR,GAAC,sBAEM,SAASC,EAAkBC,EAAkBC,GAK7Cb,KAAKc,eACRd,KAAKe,aAAef,KAAKe,aAAaC,KAAKhB,MAC3CA,KAAKc,cAAe,GAGlBd,KAAKI,UACPJ,KAAKI,SAASa,oBAAoB,QAASjB,KAAKe,cAElDf,KAAKI,SAAW,iBAAqB,MAAO,CAC1C1G,UAAW,2DACXwH,UAAW,uCAEblB,KAAKI,SAASe,iBAAiB,QAASnB,KAAKe,cAE7C,UAIMK,KAAE,yGAAkBT,EAAS,CACjCjH,UAAW,iCACXwH,UANgB,6GAOfL,IAQH,OAFAO,EAAGjH,SAAS,GAAGkH,YAAYrB,KAAKI,UAEzBgB,CACT,oFAAC,CApFoC,CANtB,iBAAqB,aA6FtC,sBAA0B,4BAA6BxB,6BCnFjD,SAAU0B,EAAsB7H,SAC9B8H,EAAY9H,EAAM+H,YAAYC,WAAWC,MAAK,SAAAC,GAClD,IAAMC,EAAgBD,EAAEE,UAAY,IAEpC,OAAOzG,KAAK0G,MAAMrI,EAAMsI,QAAU3G,KAAK0G,MAAMF,IACxCxG,KAAK4G,KAAKvI,EAAMsI,QAAU3G,KAAK4G,KAAKJ,EAC3C,IAEA,KAA4B,QAAvB,EAAAL,aAAS,EAATA,EAAWU,oBAAY,eAAEhD,QAC5B,OAAO,iCAET,IAAMgD,EAAeV,EAAUU,aAAahD,OAlBb,EAmB3BsC,EAAUU,aAAaC,MAAM,EAAGC,GAChCZ,EAAUU,aAERG,EAAqBb,EAAUU,aAAahD,OAASgD,EAAahD,OAExE,OACE,uBAAKvF,UAAU,mCACZuI,EAAarD,KAAI,SAACyD,EAAGrD,GAAG,OACvB,gBAACsD,EAAA,EAAgB,CACfC,IAAKvD,EACLwD,YAAaH,EACbI,cAAc,EACdC,cAAc,QACd,MAEDN,GACD,uBACE1I,UAAW,4GAC8C,WAEpD0I,IAKf,8uBCxCO,IAAM,EAA2C,CACtDnI,MAAO,CACL+B,KAAM,MAER2G,MAAO,CACLC,SAAS,EACTC,WAAY,EACZC,WAAY,GAEdxG,OAAQ,CACNJ,SAAS,GAEXD,QAAS,CACPC,SAAS,GAEX6G,KAAM,CACJC,SAAW,CACTrC,QAAS,iBACTsC,GAAI,gBACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJlJ,SAAU,CACP,CACCwG,QAAS,OACT2C,OAAQ,GAET,CACC3C,QAAS,OACT2C,OAAQ,OAOZ,SAAUhE,EAAgBiE,EAAeC,GAC7C,MAAO,CACLC,YAAY,EACZpH,QAAS,CAAE,GAAI,EAAG,EAAG,GACrBkH,MAAAA,EACAC,OAAAA,EAEJ,i4CCtCA,IAAME,GAAY,iBAAqB,aAEvC,yBAAgC,KAChC,+BAAsC,UAAW,aAa1C,IAAMC,GAAkB,YAI7B,WAAY9D,EAAuBhE,GAAiC,MAI7C,mGAJ6C,UAClE,mZAAMgE,EAAQhE,KAET+H,aACL,EAAKC,gBAAgB,CACvB,CAAC,kUAEM,WAAU,WACf7D,KAAKH,SAASiE,OAAM,kBAAM,EAAKC,YAAY,GAC7C,GAAC,2BAEM,WACL,MAAO,uBACT,GAAC,sBAEM,SAASpD,EAAkBC,EAAkBC,GAClD,UAGA,oHAAsBF,EAAS,OAAF,wBACxBC,GAAU,CACblH,UAAWsG,KAAKgE,gBAChB9C,UANgB,iGAOfL,GACL,GAAC,yBAEM,SAAYoD,GACbA,EACFjE,KAAK+D,aAEL/D,KAAKkE,cACT,GAAC,2BAEO,WAAa,WACnBlE,KAAKmE,YAAcnE,KAAKmE,YAAYnD,KAAKhB,MACzCA,KAAKoE,YAAcpE,KAAKoE,YAAYpD,KAAKhB,MAEzCA,KAAKH,SAASwE,GAAG,eAAgBrE,KAAKoE,aAEtCpE,KAAKqE,GAAGrE,KAAKoB,KAAM,UAAWpB,KAAKmE,aAEnCnE,KAAKH,SAASwE,GAAG,WAAW,WAC1B,EAAKxE,SAASyE,IAAI,eAAgB,EAAKF,aAEvC,EAAKE,IAAI,EAAKlD,KAAM,UAAW,EAAK+C,YACtC,GACF,GAAC,yBAEO,SAAY1D,GACb,0BAA8BA,KAG/BT,KAAKH,SAAS0E,SAChBvE,KAAKH,SAAS2E,OAIhBxE,KAAKH,SAAS4E,QAChB,GAAC,wBAEO,WAAU,WAChB,IAAIzE,KAAK7D,MAAT,CAGA,IAAMuI,EAAkB1E,KAAK2E,qBAM7B,GAAKD,EAAL,CAKA,IAAME,EAAyB5E,KAAKoB,KAAKyD,cAAc,wBAEvD7E,KAAK7D,MAAQ,UAAiByI,EAAW5E,KAAK8E,oBAAoBJ,GAJjE,MAFC1E,KAAKH,SAASkF,IAAI,QAAQ,kBAAM,EAAKhB,YAAY,GAT3C,CAgBV,GAAC,yBAEO,WACN,IAAMW,EAAkB1E,KAAK2E,qBAExB3E,KAAK7D,OAAUuI,GAGpB1E,KAAK7D,MAAM6I,QAAQN,EAAgBnB,MAAOmB,EAAgBlB,OAC5D,GAAC,0BAEO,iBACI,QAAV,EAAAxD,KAAK7D,aAAK,SAAE8I,UACZjF,KAAK7D,MAAQ,IACf,GAAC,gCAEO,WACN,IAAM+I,EAAgBlF,KAAKH,SAASsF,SAAS,iBACvCC,EAAsBF,aAAa,EAAbA,EAAeG,gBAErC9B,EAAQvD,KAAKoB,KAAKkE,YAExB,OAAKF,GAAwB7B,EAKtB,CACLA,MAAAA,EACAC,OAJiBxD,KAAKH,SAAS0F,oBAAzB/B,OAIW4B,GANV,IAQX,GAAC,iCAEO,SAAoB,GAAkC,IDlCjCI,EAzDMC,EAkBHjE,ECyEF+B,EAAK,EAALA,MAAOC,EAAM,EAANA,OACnC,OAAO,OAAP,wBACK,GAAoB,CACvBrH,MAAOmD,EAAgBiE,EAAOC,GAC9BkC,OD/F+BD,EC+FHzF,KAAK2F,SAASF,QD5FvC,CAILG,IAAgB,KANDxK,KAAKwK,IAAG,MAARxK,KAAI,EAAQqK,IAO3BI,IAAK,EACLhD,WAAY,EACZC,WAAY,EACZgD,eAAe,EACfC,aAAa,EACbC,WAAW,EACXpD,SAAS,ICkFPqD,SD9E4BzE,EC8EDxB,KAAK2F,SAASnE,YD7EtC,CACL0E,UAAW,WACT,IAAMC,EAA4B3E,EA0DxC,SAAsCA,EAA0BO,GAC9D,OAAO,IAAAqE,sBACL,gBAAC9E,EAAqB,CAACS,KAAMA,EAAMP,YAAaA,IAEpD,CA7DU6E,CAA6B7E,EAAaxB,KAAKsG,GAC/C,GAEJ,MACE,mGACgD,mBACnC,EAAAC,EAAA,GAAWvG,KAAKsG,GAAE,aAAW,UACrCH,GAHL,8FAKyF,6DACjCnG,KAAKnB,EAAC,WAN9D,cAUJ,EACA2H,WAAY,SACVC,EACAC,EACAC,GAEA,IACMC,EAAO5G,KAAK7D,MAAM0K,UAAYJ,EAC9BH,EAAIK,EAAMG,MAAQL,EAAa,EAErC,MAAO,CAELH,EAAGlL,KAAKyK,IAAIzK,KAAKwK,IAAIU,EANV,GAMoBM,GAC/B/H,EAAGmB,KAAK7D,MAAM4K,QAElB,EACAC,SAAS,EACTC,QAAS,IC4CPxK,aDxCyB+I,ECwCGxF,KAAKwF,uBAAuBxE,KAAKhB,MDvC1D,CACLkH,KAAM,CACJP,MAAO,CACLzJ,OAAQ,CACNiK,UAAW,WACT3B,EAAuBxF,KAAKsG,EAC9B,EACAc,SAAU,WACR5B,EAAuB,KACzB,KAINnG,OAAQ,CACNgI,OAAQ,CACNnL,SAAS,MCyBXmD,OAAQ,CAAC,CACPP,KAAM,OACN7B,KAAM+C,KAAK2F,SAASF,WAG1B,GAAC,oCAEO,SAAuBa,GACzBtG,KAAK2F,SAAS2B,kBAChBtH,KAAK2F,SAAS2B,iBAAiBhB,GAEjC,IAAMiB,EAA4BvH,KAAKoB,KAAKyD,cAAc,sCAEhD,OAANyB,GAKJ,iBAAqBiB,EAAW,6CAChCA,EAAUC,MAAMC,KAAO,GAAH,OAAMnB,EAAItG,KAAK2F,SAASF,QAAQxG,OAAS,IAAG,MAL9D,oBAAwBsI,EAAW,4CAMvC,oFAAC,CA9I4B,CAAQ7D,0kCAiJvC,sBAA0B,oBAAqBC,ICtK/C,IAQM+D,GAAwB,YAG5B,WAAY7H,EAAuBhE,GAAuC,MAOrE,mGAPqE,UACxE,oZAAMgE,EAAQhE,KAETA,QAAUA,EAEfgE,EAAOiE,OAAM,WACX,EAAKF,YACP,IAAG,CACL,CAAC,mUAEO,iBACD5D,KAAK2H,mBAGV3H,KAAKH,OAAO+H,SAAS,oBAAqB,CACxCnC,QAASzF,KAAKnE,QAAQ4J,QACtBjE,YAAaxB,KAAKnE,QAAQ2F,YAC1B8F,iBAAkBtH,KAAKnE,QAAQyL,oBAGsB,QAArC,EAAAtH,KAAKH,OAAOsF,SAAS,wBAAgB,eAAEA,SAAS,cACxD0C,QAAQ,CAChBC,MAAO,EACPC,KAAMnI,EACNjC,KAAM,4BACN9B,QAAS,CAAEiE,gBAAgB,KAE/B,GAAC,2BAEM,SAAcmE,GACnB,IAAM+D,EAAoBhI,KAAKH,OAAOsF,SAAS,qBAC/C6C,SAAAA,EAAmBC,YAAYhE,EACjC,GAAC,4BAEO,iBACN,OAA2B,QAApB,EAAAjE,KAAKnE,QAAQ4J,eAAO,eAAEtG,QAAO,SAAC+I,EAAKC,GAAG,OAAKD,EAAMC,CAAG,GAAE,IAAK,CACpE,oFAAC,CAvC2B,CARf,cAAkB,WAkDjC,mBAAuB,0BAA2BT,snCCnDlD,IAWMU,GAAyB,YAG7B,WAAYvI,EAAuBhE,GAAwC,MAKc,mGALd,UACzE,oZAAMgE,KAEDhE,QAAUA,EAEf,EAAKgE,OAAOkF,IAAI,kBAAkB,kBAAM,EAAKlF,OAAOiE,MAAM,EAAKF,WAAW5C,KAAK,GAAM,IAAE,CACzF,CAAC,mUAEO,WAEN,cAAqBhB,KAAKH,OAAQ,WAAY,cAAeG,KAAKqI,cAAcrH,KAAKhB,OAErFA,KAAKH,OAAOU,SAAS,wBACvB,GAAC,2BAEO,SAAc+H,GACpBtI,KAAKuI,YAAYD,EACnB,GAAC,yBAEO,SAAYA,GACFtI,KAAKH,OAAO2I,WAAWrD,SAAS,mBAAmBA,SAAS,WAEpEyC,SAAS,IAAI,KAAoB5H,KAAKH,OAAQ,CACpD2B,YAAaxB,KAAKnE,QAAQ2F,YAC1B8G,MAAAA,IAEJ,oFAAC,CA7B4B,CAXhB,cAAkB,ovPA2CjC,mBAAuB,2BAA4BF,QCjCtCK,GAAc,YAIzB,WAAYxF,EAAsBpH,GAA6B,8fACvDoH,EAAIpH,GACZ,CAAC,0UAES,WACR,MAAO,mBACT,GAAC,oCAES,WACR,MAAO,gBACT,GAAC,6BAEe,SAAgB6M,GAA8B,8QAC5D,EAAMC,gBAAe,UAACD,GAEtB1I,KAAK4I,6BAA6BF,GAClC1I,KAAK6I,kBAAkBH,GACvB1I,KAAK8I,8BAA8BJ,GAAgB,2TACpD,0CAEO,SAA6BA,SACnC1I,KAAKH,OAAOQ,wBAAwB,CAClCoF,QAASzF,KAAKnE,QAAQ4J,QACtBjE,YAA0C,QAA7B,EAAAkH,EAAeK,sBAAc,eAAEvH,YAC5C8F,iBAAkBtH,KAAKnE,QAAQyL,kBAEnC,GAAC,+BAEO,SAAkBoB,SAOpBM,EANEC,EAAsC,eAA7BP,EAAeQ,UACxBC,EAA6C,sBAA7BT,EAAeQ,UAErC,IAAKD,GAAWE,KAIZF,IACFD,EAAWN,EAAeK,iBAExBI,IACFH,EAAwC,QAA7B,EAAAN,EAAeK,sBAAc,eAAEC,WAD5C,CAQA,IAAKA,EACH,MAAMI,MAAM,qBAEdpJ,KAAKH,OAAOwJ,WAAW,CACrBC,UAAWN,EAASM,UACpBC,QAASP,EAASO,SAPnB,CASH,GAAC,2CAEO,SAA8Bb,WAC9BlH,EAA2C,QAA7B,EAAAkH,EAAeK,sBAAc,eAAEvH,aAEjB,QAA7B,EAAAkH,EAAeK,sBAAc,eAAEvH,eAGpCxB,KAAKsI,MAAQ,wBAA2CtI,KAAKH,OAAQ6I,GAErE1I,KAAKH,OAAO2J,yBAAyB,CAAEhI,YAAAA,IACzC,GAAC,+BAES,WACR,MAAO,CACLiI,gBAAgB,EAEpB,qFAAC,CA3EwB,CAAQ,KCf7B,SAAUC,GAAuBjQ,GACrC,IAAMkQ,EAAM,SAAa,MACnBC,EAAY,SAA4B,MAM9C,OAJA,aAAgB,WACdA,EAAUC,QAAU,IAAIpB,GAAckB,EAAIE,QAASpQ,EACrD,GAAG,IAGD,uBAAKkQ,IAAKA,GAEd,CCdA,UAAgB,gBAAkB,QAAQ,kBAAoB,QAAQ,QAAU,QAAQ,0BAA4B,QAAQ,iCAAmC,QAAQ,wBAA0B,SCWjM,IACM,GAAY3O,EAAA,mBADA,iCAUZ,SAAU8O,GAAuBrQ,GACrC,IAAMsQ,EAAwB,SAA6B,MAErDtE,GAAU,OAAehM,EAAM0B,YAiBrC,OACE,uBAAKzB,UAAU,iDACb,uBAAKA,UAAU,qBAMb,uBAAKA,UAAW,uBAChB,uBAAKA,UAAW,oBACd,gBAACgQ,GAAsB,CACrBM,QAASvQ,EAAMuQ,QACfC,UAAW,IAAIC,IAAIzQ,EAAM0Q,cACzBC,sBAAsB,OACtB3E,QAASA,EACT6B,iBA9BV,SAA2BvF,GACzB,IAAMX,EAAK2I,EAAsBF,QAE5BzI,IAGQ,OAATW,GAKJX,EAAGiJ,UAAUC,IAAI,qCACjBlJ,EAAGoG,MAAMC,KAAO,GAAH,OAAM1F,EAAO0D,EAAQxG,OAAS,IAAG,MAL5CmC,EAAGiJ,UAAUE,OAAO,qCAMxB,EAkBUC,YAAY,WAIlB,uBAAK9Q,UAAU,OACb,uBAAKA,UAAU,qBACb,gBAAC+Q,EAAA,EAAiB,CAChBtP,WAAY1B,EAAM0B,WAClBzB,UAAW,aAEb,uBAAKiQ,IAAKI,EAAuBrQ,UAAW,gCAE9C,uBAAKA,UAAU,uCACb,8BACG,GAAU,YAEb,uBAAKA,UAAU,QACb,gBAAC+Q,EAAA,EAAuB,SAMpC,CChFA,UAAgB,eAAiB,SCiC3B,SAAUC,GAAgBjR,SAC9B,OACE,iCACIA,EAAMkR,eAAiB,gBAAChL,EAAsB,MAEhD,uBAAKjG,UAAU,gBACZD,EAAMkR,eACL,gCACE,uBAAKjR,UAAU,OACb,gBAACsD,EAAiB,CAACE,OAAQzD,EAAMmR,WAAYlL,gBAAiBmL,EAAA,2BAEhE,uBAAKnR,UAAU,OACb,gBAACuB,EAAoB,CAACE,WAAY1B,EAAMqR,oBAAqBvP,OAAQ9B,EAAMsR,yBAE7E,uBAAKrR,UAAW,mBACd,gBAACoQ,GAAsB,CACrB3O,WAAY1B,EAAMqR,oBAClBd,QAASvQ,EAAMuQ,QAAQA,QACvBG,aAAc1Q,EAAMuR,OAAOb,aAC3Bc,YAAaxR,EAAMuR,OAAOC,gBAMjCxR,EAAMyR,iBACL,uBAAKxR,UAAU,UACb,gBAACyR,EAAA,EAAe,CACd5I,KAAK,OAAmB,OAAD,wBAAM9I,EAAMsR,uBAA0BtR,EAAM2R,yBACnEjQ,WAAY1B,EAAM4R,qBAAqBpO,KACvCzB,MAAO/B,EAAM+B,MACbyP,YAAyB,QAAZ,EAAAxR,EAAMuR,cAAM,eAAEC,YAC3BK,eAAgB7R,EAAM6R,eACtBC,QAAM,EACNC,aAAc/R,EAAM+R,iBAOlC","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/insight-card.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-card/InsightCard.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PartialPercentageIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/amount-watched/InsightAmountWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/ChartColourUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/insights/total-views/InsightTotalViews.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/SharedUserActivityPieChartUtils.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/partial-insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay-chart-options.tsx","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay.ts","file:///app/packages/projects/player/src/plugins/engagement-overlay-plugin/engagement-overlay-plugin.ts","file:///app/packages/projects/player/src/plugins/interactive-plugin/interactive-seek-bar-plugin.ts","file:///app/packages/projects/player/src/players/reports/reports-player.ts","file:///app/packages/projects/player/src/react/ReportsPlayer.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/video-engagement-overlay.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/insights-heatmap.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-heatmap/InsightsHeatmap.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import React from 'react';\n\nimport { PercentageIndicator, PercentageIndicatorLayout } from './PercentageIndicator';\n\ninterface PartialPercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n className?: string;\n}\n\nexport function PartialPercentageIndicator(props: PartialPercentageIndicatorProps): JSX.Element {\n return (\n <PercentageIndicator\n layout={props.layout}\n className={props.className}\n percentage={0}\n customLabel='--%'\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { PartialPercentageIndicator } from 'libs/shared/components/percentage-indicator/PartialPercentageIndicator';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightAmountWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightAmountWatchedProps {\n engagement: Engagement;\n params: FilterQueryParams;\n}\n\nexport function InsightAmountWatched(props: InsightAmountWatchedProps) {\n const engagementRate = props.engagement?.engagementRate > 0 ? props.engagement.engagementRate : null;\n const percentage = Math.round(props.engagement.engagementRate * 100);\n\n const everyoneSelected = !props.params.users\n && !props.params.classrooms\n && !props.params.classroomGroups;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='d-flex flex-column align-items-center my-auto gap-2'>\n {!!props.engagement &&\n <>\n <PercentageIndicator\n percentage={engagementRate}\n layout={PercentageIndicatorLayout.LabelInside}\n />\n <p className='text-center'>\n {typeof engagementRate === 'number'\n ? everyoneSelected ?\n <Text namespace={namespace} phrase='everyoneWatched' options={{ percentage }} />\n : <Text namespace={namespace} phrase='usersWatched' options={{ percentage }} />\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n </>\n }\n {!props.engagement &&\n <>\n <PartialPercentageIndicator layout={PercentageIndicatorLayout.LabelInside} />\n </>\n }\n </div>\n </InsightCard>\n );\n}","const CHART_COLOURS = [\n '#FF9300', // Pizazz\n '#38A2E8', // Picton Blue\n '#7A76E8', // Portage\n '#B679C7', // East Side\n '#F7847B', // Froly\n '#D9584F', // Red (Not in the Primary palette)\n '#FFCD52', // Yellow (Not in the Primary Palette)\n '#5DC786', // Emerald\n '#40BCC3', // Perolous\n '#40C2BB' // Puerto rico\n];\n\nexport function mixinSeriesColours<T>(data: T[]): T[] {\n return data.map((d, idx) => ({\n ...d,\n color: CHART_COLOURS[idx % CHART_COLOURS.length]\n }));\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { getTotalEventCount, groupEvents, sortByYearGroup } from 'libs/shared/apps/analytics/utils/SharedUserActivityPieChartUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightTotalViews';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n chart: {\n backgroundColor: 'transparent',\n spacing: [ 0, 0, 0, 0 ]\n },\n legend: {\n itemStyle: CHART_FONT_STYLES,\n itemDistance: 8\n },\n plotOptions: {\n pie: {\n allowPointSelect: true,\n cursor: 'pointer',\n dataLabels: {\n enabled: false\n },\n showInLegend: true,\n borderWidth: 0,\n size: '80%'\n }\n }\n};\n\ninterface InsightTotalViewsProps {\n events: VideoViewEventResponse;\n emptyStateImage: string;\n}\n\nexport function InsightTotalViews(props: InsightTotalViewsProps) {\n const chartData = sortByYearGroup(groupEvents(props.events, 'yearGroupCount', [], getSeriesName));\n const totalViews = getTotalEventCount(chartData);\n\n function getChartOptions(\n data: Highcharts.PointOptionsObject[]\n ): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n series: [{\n type: 'pie',\n name: getPhrase('title'),\n data\n }]\n };\n }\n\n function getSeriesName(group: string): string {\n return group === 'Unknown' ? 'Staff' : group;\n }\n\n return (\n <InsightCard\n title={getPhrase('title')}\n // Replace with ultra marine + light colour\n svgClassName='bg-light-blue text-blue'\n // Add visibility icon \n svgName={cvSvgLibrary.VisibleOn}\n >\n {chartData?.length ? (\n <>\n <p className='mb-0'><Text namespace={namespace} phrase='totalViews' options={{ totalViews }} /></p>\n\n <div className='d-flex justify-content-center h-75'>\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions(chartData)}\n containerProps={{\n className: `w-100`\n }}\n />\n </div>\n </>\n ) : (\n <EmptyState className='pt-0 my-auto'>\n <EmptyState.Image src={props.emptyStateImage} className='w-75 h-auto'></EmptyState.Image>\n <EmptyState.Heading className='h4'><Text namespace={namespace} phrase='noViews' /></EmptyState.Heading>\n <EmptyState.Info className='w-100'><Text namespace={namespace} phrase='notWatched' /></EmptyState.Info>\n </EmptyState>\n )}\n </InsightCard>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { BaseAnalyticsEventResponse, GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UnionEventResponse } from 'libs/shared/apps/analytics/interfaces/UnionEvent';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { mixinSeriesColours } from 'libs/shared/apps/analytics/utils/ChartColourUtils';\n\ntype EventResponseGroupByAttributes = keyof Pick<VideoViewEventResponse, 'contentTypeCount'>\n | keyof Pick<BaseAnalyticsEventResponse, 'userTypeCount' | 'yearGroupCount'>;\n\nexport function groupEvents(\n events: UnionEventResponse,\n groupBy: EventResponseGroupByAttributes,\n groupsToOmit?: string[],\n getSeriesName?: (group: string) => string\n): Highcharts.PointOptionsObject[] {\n const groups: HashObject<number> = {};\n\n const eventCounts = events[groupBy as keyof UnionEventResponse] as GroupedAnalyticsCount[];\n\n eventCounts?.forEach(ev => {\n if (!ev.name || groupsToOmit?.includes(ev.name.toLowerCase()))\n return;\n\n groups[ev.name] = groups[ev.name] ?? 0;\n groups[ev.name] += ev.count;\n });\n\n return mixinSeriesColours(ArrayHelper.sortBy(Object.keys(groups).map(group => ({\n name: getSeriesName ? getSeriesName(group) : group,\n y: groups[group],\n type: 'pie'\n })), 'name'));\n}\n\nexport function sortByYearGroup(data: Highcharts.PointOptionsObject[]) {\n const staffIndex = data.findIndex(group => group.name === 'Staff');\n\n // Move Staff to last index\n if (staffIndex > -1) {\n const [staffObject] = data.splice(staffIndex, 1);\n\n data.push(staffObject);\n }\n return data.sort((a, b) => {\n const numA = parseInt((a.name as string).match(/\\d+/)?.[0]);\n const numB = parseInt((b.name as string).match(/\\d+/)?.[0]);\n return numA - numB;\n });\n}\n\nexport function getTotalEventCount(data?: Highcharts.PointOptionsObject[]): number | null {\n return data?.reduce((a, b) => a + b.y, 0) ?? null;\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"nKLWa\",\"videoContainer\":\"WF2iA\"};","import React from 'react';\n\nimport styles from './partial-insights-heatmap.scss';\n\nexport function PartialInsightsHeatmap() {\n return (\n <div>\n <div className='row g-3 mb-3'>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className={styles.videoContainer}>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import videojs, { VideoJsPlayer } from 'video.js';\n\nconst MenuItem = videojs.getComponent('MenuItem');\n\ninterface EngagementOverlayMenuItemOptions extends videojs.MenuItemOptions {\n overlayVisible: boolean\n}\n\nexport class EngagementOverlayMenuItem extends MenuItem {\n private toggleEl: Element;\n private overlayVisible: boolean;\n\n /**\n * Because we want to bind our listener in createEl\n * and createEl runs in super. We store if we've bounud\n * our handler, so we only call bind once and \n * the call to removeEventListener will still work\n */\n private handlerBound: boolean;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayMenuItemOptions) {\n super(player, options);\n\n this.overlayVisible = options.overlayVisible;\n this.toggle(this.overlayVisible);\n }\n\n public handleToggle(): void {\n this.toggle(!this.overlayVisible);\n }\n\n private toggle(state: boolean): void {\n state ? this.toggleOn() : this.toggleOff();\n }\n\n private toggleOn(): void {\n videojs.dom.addClass(this.toggleEl, 'on');\n this.overlayVisible = true;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().addClass('cv-reports-player-overlay-visible');\n }\n\n private toggleOff(): void {\n videojs.dom.removeClass(this.toggleEl, 'on');\n this.overlayVisible = false;\n this.player().engagementOverlayPlugin().toggleOverlay(this.overlayVisible);\n this.player().removeClass('cv-reports-player-overlay-visible');\n }\n\n /**\n * Because we extend MenuItem which will close the menu by default\n * we need to halt the event propogation here\n */\n public handleClick(event: videojs.EventTarget.Event): void {\n event.stopImmediatePropagation();\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): HTMLLIElement {\n /**\n * Bind our event listener only once\n * see the comment where handlerBound is defined\n */\n if (!this.handlerBound) {\n this.handleToggle = this.handleToggle.bind(this);\n this.handlerBound = true;\n }\n\n if (this.toggleEl)\n this.toggleEl.removeEventListener('click', this.handleToggle);\n\n this.toggleEl = videojs.dom.createEl('div', {\n className: `custom-toggle custom-toggle-info toggle-option float-end`,\n innerHTML: '<span class=\"handle\"></span></div>'\n });\n this.toggleEl.addEventListener('click', this.handleToggle);\n\n const innerHTML = `\n <span class=\"vjs-menu-item-text\">Heat Map</span>\n <span class=\"cv-toggle-container\"></span>`;\n\n const el = super.createEl(tagName, {\n className: 'vjs-menu-item cv-cog-menu-item',\n innerHTML\n }, attributes);\n\n /**\n * Indexing into the child this way is only safe to do because\n * we know that the el only has two children\n */\n el.children[1].appendChild(this.toggleEl);\n\n return el;\n }\n}\n\nvideojs.registerComponent('EngagementOverlayMenuItem', EngagementOverlayMenuItem);\n","import React from 'react';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interactive } from 'libs/shared/interfaces';\n\nconst MAX_INTERACTIONS_TO_SHOW = 3;\n\ninterface TimepointInteractionsProps {\n interactive: Interactive;\n time: number;\n}\n\nexport function TimepointInteractions(props: TimepointInteractionsProps): JSX.Element {\n const timepoint = props.interactive.timepoints.find(t => {\n const timepointTime = t.visibleAt / 1000;\n \n return Math.floor(props.time) === Math.floor(timepointTime)\n || Math.ceil(props.time) === Math.ceil(timepointTime);\n });\n\n if (!timepoint?.interactions?.length)\n return <></>;\n\n const interactions = timepoint.interactions.length > MAX_INTERACTIONS_TO_SHOW\n ? timepoint.interactions.slice(0, MAX_INTERACTIONS_TO_SHOW - 1)\n : timepoint.interactions;\n\n const hiddenInteractions = timepoint.interactions.length - interactions.length;\n\n return (\n <div className='d-flex justify-content-end ms-2'>\n {interactions.map((i, idx) => (\n <InteractionLabel\n key={idx}\n interaction={i}\n showQuestion={false}\n iconClassName='ms-1'\n />\n ))}\n {!!hiddenInteractions &&\n <div\n className={'interaction-type-icon d-flex justify-content-center'\n + ' align-items-center border border-dark text-body ms-1'}\n >\n {`+${hiddenInteractions}`}\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport Highcharts from 'highcharts';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { TimepointInteractions } from 'projects/player/plugins/engagement-overlay-plugin/components/timepoint-interactions/timepoint-interactions';\nimport { formatTime } from 'projects/player/utils/formatTime';\n\nexport const STATIC_CHART_OPTIONS: Highcharts.Options = {\n title: {\n text: null\n },\n xAxis: {\n visible: false,\n minPadding: 0,\n maxPadding: 0\n },\n legend: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n defs: {\n gradient: ({\n tagName: 'linearGradient',\n id: 'area-gradient',\n x1: 0,\n y1: 1,\n x2: 0,\n y2: 0,\n children: [\n ({\n tagName: 'stop',\n offset: 0\n } as Highcharts.ASTNode),\n ({\n tagName: 'stop',\n offset: 1\n } as Highcharts.ASTNode)\n ]\n } as Highcharts.ASTNode)\n }\n};\n\nexport function getChartOptions(width: number, height: number): Highcharts.ChartOptions {\n return {\n styledMode: true,\n spacing: [ 15, 0, 0, 0 ],\n width,\n height\n };\n}\n\nexport function getYAxisChartOptions(heatMap: number[]): Highcharts.YAxisOptions {\n const maxValue = Math.max(...heatMap);\n\n return {\n /**\n * To prevent max values from being cut off, we pad them relative to the chart scale.\n */\n max: maxValue * 1.05,\n min: 0,\n minPadding: 0,\n maxPadding: 0,\n allowDecimals: true,\n startOnTick: false,\n endOnTick: false,\n visible: false\n };\n}\n\nexport function getTooltipOptions(interactive?: Interactive): Highcharts.TooltipOptions {\n return {\n formatter: function () {\n const timepointInteractionsHtml = interactive\n ? getTimepointInteractionsHtml(interactive, this.x)\n : '';\n\n return (\n '<div class=\"cv-engagement-tooltip bg-white rounded\">'\n + '<div class=\"d-flex justify-content-between\">'\n + `<strong>${formatTime(this.x)}</strong>`\n + `${timepointInteractionsHtml}`\n + '</div>'\n + '<div class=\"d-flex justify-content-between rounded bg-light cv-view-count-container\">'\n + `<strong>Views</strong> <span class=\"cv-view-count\">${this.y}</span>`\n + '</div>'\n + '</div>'\n );\n },\n positioner: function (\n labelWidth: number,\n labelHeight: number,\n point: Highcharts.TooltipPositionerPointObject\n ) {\n const minX = 0;\n const maxX = this.chart.plotWidth - labelWidth;\n const x = point.plotX - labelWidth / 2;\n \n return {\n // Clamp x between min and max\n x: Math.min(Math.max(x, minX), maxX),\n y: this.chart.plotTop\n };\n },\n useHTML: true,\n padding: 0\n };\n}\n\nexport function getPlotOptions(moveTimepointIndicator: (x: number | null) => void): Highcharts.PlotOptions {\n return {\n area: {\n point: {\n events: {\n mouseOver: function () {\n moveTimepointIndicator(this.x);\n },\n mouseOut: function () {\n moveTimepointIndicator(null);\n }\n }\n }\n },\n series: {\n marker: {\n enabled: false\n }\n }\n };\n}\n\nfunction getTimepointInteractionsHtml(interactive: Interactive, time: number): string {\n return renderToStaticMarkup(\n <TimepointInteractions time={time} interactive={interactive} />\n );\n}","import Highcharts from 'highcharts';\nimport videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport {\n getChartOptions,\n getPlotOptions,\n getTooltipOptions,\n getYAxisChartOptions,\n STATIC_CHART_OPTIONS\n} from './engagement-overlay-chart-options';\n\nimport './engagement-overlay.scss';\n\nconst Component = videojs.getComponent('Component');\n\nHighcharts.AST.allowedTags.push('g');\nHighcharts.AST.allowedAttributes.push('viewBox', 'transform');\n\ninterface ChartDimensions {\n width: number;\n height: number;\n}\n\ninterface EngagementOverlayOptions extends videojs.ComponentOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class EngagementOverlay extends Component {\n public options_: EngagementOverlayOptions;\n private chart: Highcharts.Chart;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayOptions) {\n super(player, options);\n\n this.initialize();\n this.bindListeners();\n }\n\n public initialize(): void {\n this.player().ready(() => this.buildChart());\n }\n\n public buildCSSClass(): string {\n return 'cv-engagement-overlay';\n }\n\n public createEl(tagName?: string, properties?: any, attributes?: any): Element {\n const innerHTML = '<div class=\"cv-engagement-chart\"></div>'\n + '<div class=\"cv-engagement-timepoint-indicator\"></div>';\n\n return super.createEl(tagName, {\n ...properties,\n className: this.buildCSSClass(),\n innerHTML\n }, attributes);\n }\n\n public toggleChart(show: boolean): void {\n if (show)\n this.buildChart();\n else\n this.destroyChart();\n }\n\n private bindListeners(): void {\n this.handleClick = this.handleClick.bind(this);\n this.resizeChart = this.resizeChart.bind(this);\n\n this.player().on('playerresize', this.resizeChart);\n\n this.on(this.el(), 'mouseup', this.handleClick);\n\n this.player().on('dispose', () => {\n this.player().off('playerresize', this.resizeChart);\n\n this.off(this.el(), 'mouseup', this.handleClick);\n });\n }\n\n private handleClick(event: videojs.EventTarget.Event): void {\n if (!videojs.dom.isSingleLeftClick(event))\n return;\n\n if (this.player().paused()) {\n this.player().play();\n return;\n }\n\n this.player().pause();\n }\n\n private buildChart(): void {\n if (this.chart)\n return;\n\n const chartDimensions = this.getChartDimensions();\n\n /**\n * The dimensions calculation relies on the control bar and progress control\n * being visible, so if it isn't, we wait for the play event.\n */\n if (!chartDimensions) {\n this.player().one('play', () => this.buildChart());\n return;\n }\n\n const container: HTMLElement = this.el().querySelector('.cv-engagement-chart');\n\n this.chart = Highcharts.chart(container, this.getHighchartOptions(chartDimensions));\n }\n\n private resizeChart(): void {\n const chartDimensions = this.getChartDimensions();\n\n if (!this.chart || !chartDimensions)\n return;\n\n this.chart.setSize(chartDimensions.width, chartDimensions.height);\n }\n\n private destroyChart(): void {\n this.chart?.destroy();\n this.chart = null;\n }\n\n private getChartDimensions(): ChartDimensions {\n const collapserator = this.player().getChild('collapserator');\n const collapseratorHeight = collapserator?.currentHeight();\n\n const width = this.el().clientWidth;\n\n if (!collapseratorHeight || !width)\n return null;\n\n const { height } = this.player().currentDimensions();\n \n return {\n width,\n height: height - collapseratorHeight\n };\n }\n\n private getHighchartOptions({ width, height }: ChartDimensions): Highcharts.Options {\n return {\n ...STATIC_CHART_OPTIONS,\n chart: getChartOptions(width, height),\n yAxis: getYAxisChartOptions(this.options_.heatMap),\n tooltip: getTooltipOptions(this.options_.interactive),\n plotOptions: getPlotOptions(this.moveTimepointIndicator.bind(this)),\n series: [{\n type: 'area',\n data: this.options_.heatMap\n }]\n };\n }\n\n private moveTimepointIndicator(x: number | null): void {\n if (this.options_.onTimepointHover)\n this.options_.onTimepointHover(x);\n\n const indicator: HTMLDivElement = this.el().querySelector('.cv-engagement-timepoint-indicator');\n\n if (x === null) {\n videojs.dom.removeClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n return;\n }\n\n videojs.dom.addClass(indicator, 'cv-engagement-timepoint-indicator-visible');\n indicator.style.left = `${x / this.options_.heatMap.length * 100}%`;\n }\n}\n\nvideojs.registerComponent('EngagementOverlay', EngagementOverlay);","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { CogButton } from 'projects/player/components/cog-button/cog-button';\nimport { EngagementOverlay } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\nimport { EngagementOverlayMenuItem } from 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay-menu-item/engagement-overlay-menu-item';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/components/engagement-overlay/engagement-overlay';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface EngagementOverlayPluginOptions {\n heatMap: number[];\n interactive?: Interactive;\n onTimepointHover?: (time: number | null) => void;\n}\n\nclass EngagementOverlayPlugin extends Plugin {\n private options: EngagementOverlayPluginOptions;\n\n constructor(player: VideoJsPlayer, options: EngagementOverlayPluginOptions) {\n super(player, options);\n\n this.options = options;\n\n player.ready(() => {\n this.initialize();\n });\n }\n \n private initialize(): void {\n if (!this.hasHeatMapData())\n return;\n\n this.player.addChild('engagementOverlay', {\n heatMap: this.options.heatMap,\n interactive: this.options.interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n\n const cogButton = this.player.getChild('collapserator')?.getChild('cogButton') as CogButton;\n cogButton.addItem({\n index: 0,\n ctor: EngagementOverlayMenuItem,\n name: 'EngagementOverlayMenuItem',\n options: { overlayVisible: true }\n });\n }\n\n public toggleOverlay(show: boolean): void {\n const engagementOverlay = this.player.getChild('engagementOverlay') as EngagementOverlay;\n engagementOverlay?.toggleChart(show);\n }\n\n private hasHeatMapData(): boolean {\n return this.options.heatMap?.reduce((acc, val) => acc + val, 0) > 0;\n }\n}\n\nvideojs.registerPlugin('engagementOverlayPlugin', EngagementOverlayPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n engagementOverlayPlugin(options?: EngagementOverlayPluginOptions): EngagementOverlayPlugin;\n }\n}","import videojs, { VideoJsPlayer } from 'video.js';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { InteractiveBarItems } from 'projects/player/plugins/interactive-plugin/components/seek-bar/interactive-bar-items';\nimport { TrackHelper } from 'projects/player/utils/track-helper';\n\nimport './interactive-plugin-styles.scss';\n\nconst Plugin = videojs.getPlugin('plugin');\n\ninterface InteractiveSeekBarPluginOptions {\n interactive: Interactive;\n}\n\n/**\n * This plugin will just render the interactive seek bar (i.e. just the interaction markers).\n * The user won't be able to interact with any of the interactions.\n * Currently this is just used in reports-player\n */\nclass InteractiveSeekBarPlugin extends Plugin {\n private options: InteractiveSeekBarPluginOptions;\n\n constructor(player: VideoJsPlayer, options: InteractiveSeekBarPluginOptions) {\n super(player);\n\n this.options = options;\n\n this.player.one('loadedmetadata', () => this.player.ready(this.initialize.bind(this)));\n }\n\n private initialize(): void {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n TrackHelper.useTrack(this.player, 'metadata', 'interactive', this.onTrackLoaded.bind(this));\n\n this.player.addClass('cv-interactive-plugin');\n }\n\n private onTrackLoaded(track: TextTrack): void {\n this.addChildren(track);\n }\n\n private addChildren(track: TextTrack): void {\n const seekBar = this.player.controlBar.getChild('progressControl').getChild('SeekBar');\n\n seekBar.addChild(new InteractiveBarItems(this.player, {\n interactive: this.options.interactive,\n track\n }));\n }\n}\n\nvideojs.registerPlugin('interactiveSeekBarPlugin', InteractiveSeekBarPlugin);\n\ndeclare module 'video.js' {\n export interface VideoJsPlayer {\n interactiveSeekBarPlugin(options?: InteractiveSeekBarPluginOptions): InteractiveSeekBarPlugin;\n }\n}","import { Interactive } from 'libs/shared/interfaces';\n\nimport { ClipData } from 'projects/player/interfaces/models/ClipData';\nimport { PlaybackObject } from 'projects/player/interfaces/models/PlaybackObject';\nimport { BasePlayer, BasePlayerOptions } from 'projects/player/players/base-player';\nimport { AnalyticsPlayerType } from 'projects/player/services/analytics-service';\nimport { InteractiveTrackHelper } from 'projects/player/utils/interactive-track-helper';\n\nimport './reports-player.scss';\n\nimport 'projects/player/plugins/engagement-overlay-plugin/engagement-overlay-plugin';\nimport 'projects/player/plugins/clip-plugin/clip-plugin';\nimport 'projects/player/plugins/interactive-plugin/interactive-seek-bar-plugin';\n\nexport interface ReportsPlayerOptions extends BasePlayerOptions {\n heatMap: number[];\n onTimepointHover?: (time: number | null) => void;\n}\n\nexport class ReportsPlayer extends BasePlayer {\n protected options: ReportsPlayerOptions;\n private track: TextTrack;\n\n constructor(id: string | Element, options: ReportsPlayerOptions) {\n super(id, options);\n }\n\n protected getPlayerClassName(): string {\n return 'cv-reports-player';\n }\n\n protected getAnalyticsPlayerType(): AnalyticsPlayerType {\n return 'reports-player';\n }\n\n protected async additionalSetup(playbackObject: PlaybackObject): Promise<void> {\n super.additionalSetup(playbackObject);\n\n this.setupEngagementOverlayPlugin(playbackObject);\n this.setupUpClipPlugin(playbackObject);\n this.setupInteractiveSeekBarPlugin(playbackObject);\n }\n\n private setupEngagementOverlayPlugin(playbackObject: PlaybackObject): void {\n this.player.engagementOverlayPlugin({\n heatMap: this.options.heatMap,\n interactive: playbackObject.additionalData?.interactive as Interactive,\n onTimepointHover: this.options.onTimepointHover\n });\n }\n\n private setupUpClipPlugin(playbackObject: PlaybackObject): void {\n const isClip = playbackObject.mediaType === 'MasterClip';\n const isInteractive = playbackObject.mediaType === 'MasterInteractive';\n\n if (!isClip && !isInteractive)\n return;\n\n let clipData: ClipData;\n if (isClip)\n clipData = playbackObject.additionalData;\n \n if (isInteractive) {\n clipData = playbackObject.additionalData?.clipData;\n\n // Not all interactives will have clip data\n if (!clipData)\n return;\n }\n\n if (!clipData)\n throw Error('Invalid clip data');\n\n this.player.clipPlugin({\n startTime: clipData.startTime,\n endTime: clipData.endTime\n });\n }\n\n private setupInteractiveSeekBarPlugin(playbackObject: PlaybackObject): void {\n const interactive = playbackObject.additionalData?.interactive as Interactive;\n\n if (!playbackObject.additionalData?.interactive)\n return;\n\n this.track = InteractiveTrackHelper.getInteractiveTrack(this.player, playbackObject);\n\n this.player.interactiveSeekBarPlugin({ interactive });\n }\n\n protected getSeekBarOptions(): any {\n return {\n ignoreChapters: true\n };\n }\n}\n","import React from 'react';\n\nimport { ReportsPlayer, ReportsPlayerOptions } from 'projects/player/players/reports/reports-player';\n\nexport function ClickViewReportsPlayer(props: ReportsPlayerOptions): React.ReactElement {\n const ref = React.useRef(null);\n const playerRef = React.useRef<ReportsPlayer>(null);\n\n React.useEffect(() => {\n playerRef.current = new ReportsPlayer(ref.current, props);\n }, []);\n\n return (\n <div ref={ref}></div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"playerContainer\":\"fGWsk\",\"playerPlaceholder\":\"v1MjE\",\"heatMap\":\"lp1Yn\",\"heatMapTimepointIndicator\":\"yOOK6\",\"heatMapTimepointIndicatorVisible\":\"rTXmB\",\"partialLoadingContainer\":\"gW1HU\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap, EngagementHeatMapLegend } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { getFullHeatMap } from 'libs/shared/apps/analytics/utils/EngagementUtils';\nimport { Engagement } from 'libs/shared/interfaces';\n\nimport { ClickViewReportsPlayer } from 'projects/player/react/ReportsPlayer';\n\nimport styles from './video-engagement-overlay.scss';\n\nconst namespace = 'shared.videoEngagementOverlay';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoEngagementOverlayProps {\n engagement: Engagement;\n viewKey: string;\n imageCdnUrl: string;\n playerApiUrl: string;\n}\n\nexport function VideoEngagementOverlay(props: VideoEngagementOverlayProps): JSX.Element {\n const timepointIndicatorRef = React.useRef<HTMLDivElement>(null);\n\n const heatMap = getFullHeatMap(props.engagement);\n\n function setHoverTimepoint(time: number | null): void {\n const el = timepointIndicatorRef.current;\n\n if (!el)\n return;\n\n if (time === null) {\n el.classList.remove(styles.heatMapTimepointIndicatorVisible);\n return;\n }\n\n el.classList.add(styles.heatMapTimepointIndicatorVisible);\n el.style.left = `${time / heatMap.length * 100}%`;\n }\n\n return (\n <div className='bg-white border rounded overflow-hidden h-100'>\n <div className='position-relative'>\n {/**\n * The below div is an empty 16:9 rectangle which maintains this component's\n * height while the player is loading.\n */\n }\n <div className={styles.playerPlaceholder} />\n <div className={styles.playerContainer}>\n <ClickViewReportsPlayer\n viewKey={props.viewKey}\n playerApi={new URL(props.playerApiUrl)}\n hotkeyElQuerySelector='body'\n heatMap={heatMap}\n onTimepointHover={setHoverTimepoint}\n aspectRatio='16:9'\n />\n </div>\n </div>\n <div className='p-3'>\n <div className='position-relative'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n <div ref={timepointIndicatorRef} className={styles.heatMapTimepointIndicator} />\n </div>\n <div className='d-flex justify-content-between mt-2'>\n <strong>\n {getPhrase('heatmap')}\n </strong>\n <div className='w-33'>\n <EngagementHeatMapLegend />\n </div>\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"videoContainer\":\"cpl68\"};","import React from 'react';\n\nimport { EngagementTable } from 'libs/shared/apps/analytics/components/engagement-table/EngagementTable';\nimport { InsightAmountWatched } from 'libs/shared/apps/analytics/components/insights/amount-watched/InsightAmountWatched';\nimport { InsightTotalViews } from 'libs/shared/apps/analytics/components/insights/total-views/InsightTotalViews';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { getFilterParamsKey } from 'libs/shared/apps/analytics/utils/FilterParamUtils';\nimport { Config, Engagement, IndividualEngagementResponse, PlayerViewKey, User } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/partial-loading/PartialInsightsHeatmap';\nimport { VideoEngagementOverlay } from 'apps/my-shares/components/video-engagement-overlay/VideoEngagementOverlay';\n\nimport styles from './insights-heatmap.scss';\n\ninterface InsightsHeatmapProps {\n hasDataLoaded: boolean;\n tableDataLoaded: boolean;\n videoViews: VideoViewEventResponse;\n aggregateEngagement: Engagement;\n audienceAppLinkParams: AudienceQueryParams;\n dateRangeAppLinkParams: DateRangeQueryParams;\n individualEngagement: IndividualEngagementResponse;\n viewKey: PlayerViewKey;\n config: Config;\n users: User[];\n anonymiseUsers: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function InsightsHeatmap(props: InsightsHeatmapProps) {\n return (\n <>\n {!props.hasDataLoaded && <PartialInsightsHeatmap />}\n\n <div className='row g-3 mb-3'>\n {props.hasDataLoaded &&\n <>\n <div className='col'>\n <InsightTotalViews events={props.videoViews} emptyStateImage={ImageUrls.EmptyStates.MY_VIDEOS} />\n </div>\n <div className='col'>\n <InsightAmountWatched engagement={props.aggregateEngagement} params={props.audienceAppLinkParams} />\n </div>\n <div className={styles.videoContainer}>\n <VideoEngagementOverlay\n engagement={props.aggregateEngagement}\n viewKey={props.viewKey.viewKey}\n playerApiUrl={props.config.playerApiUrl}\n imageCdnUrl={props.config.imageCdnUrl}\n />\n </div>\n </>\n }\n\n {props.tableDataLoaded &&\n <div className='col-12'>\n <EngagementTable\n key={getFilterParamsKey({ ...props.audienceAppLinkParams, ...props.dateRangeAppLinkParams })}\n engagement={props.individualEngagement.data}\n users={props.users}\n imageCdnUrl={props.config?.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n border\n anonSessions={props.anonSessions}\n />\n </div>\n }\n </div>\n </>\n );\n}"],"names":["InsightCard","props","className","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","PartialPercentageIndicator","PercentageIndicator","layout","percentage","customLabel","namespace","getPhrase","LanguageService","InsightAmountWatched","engagementRate","engagement","Math","round","everyoneSelected","params","users","classrooms","classroomGroups","Text","phrase","options","CHART_COLOURS","STATIC_CHART_OPTIONS","text","credits","enabled","chart","backgroundColor","spacing","legend","itemStyle","itemDistance","plotOptions","pie","allowPointSelect","cursor","dataLabels","showInLegend","borderWidth","InsightTotalViews","data","events","groupsToOmit","getSeriesName","groups","eventCounts","chartData","staffIndex","findIndex","group","name","staffObject","splice","push","sort","a","b","parseInt","match","sortByYearGroup","forEach","ev","includes","toLowerCase","ArrayHelper","Object","keys","map","y","type","d","idx","length","totalViews","reduce","highcharts","series","getChartOptions","containerProps","EmptyState","src","emptyStateImage","PartialInsightsHeatmap","EngagementOverlayMenuItem","player","overlayVisible","toggle","this","state","toggleOn","toggleOff","toggleEl","engagementOverlayPlugin","toggleOverlay","addClass","removeClass","event","stopImmediatePropagation","tagName","properties","attributes","handlerBound","handleToggle","bind","removeEventListener","innerHTML","addEventListener","el","appendChild","TimepointInteractions","timepoint","interactive","timepoints","find","t","timepointTime","visibleAt","floor","time","ceil","interactions","slice","MAX_INTERACTIONS_TO_SHOW","hiddenInteractions","i","InteractionLabel","key","interaction","showQuestion","iconClassName","xAxis","visible","minPadding","maxPadding","defs","gradient","id","x1","y1","x2","y2","offset","width","height","styledMode","Component","EngagementOverlay","initialize","bindListeners","ready","buildChart","buildCSSClass","show","destroyChart","handleClick","resizeChart","on","off","paused","play","pause","chartDimensions","getChartDimensions","container","querySelector","getHighchartOptions","one","setSize","destroy","collapserator","getChild","collapseratorHeight","currentHeight","clientWidth","currentDimensions","moveTimepointIndicator","heatMap","yAxis","options_","max","min","allowDecimals","startOnTick","endOnTick","tooltip","formatter","timepointInteractionsHtml","renderToStaticMarkup","getTimepointInteractionsHtml","x","formatTime","positioner","labelWidth","labelHeight","point","maxX","plotWidth","plotX","plotTop","useHTML","padding","area","mouseOver","mouseOut","marker","onTimepointHover","indicator","style","left","EngagementOverlayPlugin","hasHeatMapData","addChild","addItem","index","ctor","engagementOverlay","toggleChart","acc","val","InteractiveSeekBarPlugin","onTrackLoaded","track","addChildren","controlBar","ReportsPlayer","playbackObject","additionalSetup","setupEngagementOverlayPlugin","setupUpClipPlugin","setupInteractiveSeekBarPlugin","additionalData","clipData","isClip","mediaType","isInteractive","Error","clipPlugin","startTime","endTime","interactiveSeekBarPlugin","ignoreChapters","ClickViewReportsPlayer","ref","playerRef","current","VideoEngagementOverlay","timepointIndicatorRef","viewKey","playerApi","URL","playerApiUrl","hotkeyElQuerySelector","classList","add","remove","aspectRatio","EngagementHeatMap","InsightsHeatmap","hasDataLoaded","videoViews","ImageUrls","aggregateEngagement","audienceAppLinkParams","config","imageCdnUrl","tableDataLoaded","EngagementTable","dateRangeAppLinkParams","individualEngagement","anonymiseUsers","border","anonSessions"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6973],{5255:(e,t,n)=>{n.d(t,{Y:()=>i});var r=n(20354),a=n(30439);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function i(e){var t,n=r.a.useBasicFetch(e&&a.o.getAnonSessions(e));return(null===(t=n.data)||void 0===t?void 0:t.length)?n.data.reduce((function(e,t){return Object.assign(Object.assign({},e),(n={},r=t.sessionId,a=t,(r=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(r))in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,n));var n,r,a}),{}):{}}},41196:(e,t,n)=>{n.d(t,{W:()=>o});var r=n(20354),a=n(71553),s=n(20768),i=n(31949);function o(e,t,n){var o,u=r.a.useBasicFetch(i.N.currentUser()),l=r.a.useBasicFetch(!!e&&s.b.interactiveMetadata(e)),c=r.a.useBasicFetch(!!(null===(o=l.data)||void 0===o?void 0:o.interactiveId)&&s.b.interactive(l.data.interactiveId)),d=!!u.data&&!!c.data&&!!t;return r.a.useBasicFetch(d&&a.I.interactiveResultSet(l.data.interactiveId,l.data.id,u.data,t,n))}},26025:(e,t,n)=>{n.d(t,{B:()=>s});var r=n(1048),a=n(75795),s={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.users,s=t.classrooms,i=t.classroomGroups,o=function(e){var n=t[e];if(n)return Array.isArray(n)?n:[n]},u={};return n&&(u.users=o("users")),s&&(u.classrooms=o("classrooms")),i&&(u.classroomGroups=o("classroomGroups")),u},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=r.t.isObject(e.params)?e.params:{},n=t.from,s=t.to,i=t.rangeName,o={};return n&&(o.from=n),s&&(o.to=s),i&&(o.rangeName=i),o}}},40003:(e,t,n)=>{n.d(t,{Hb:()=>m,NG:()=>b,W5:()=>d,eO:()=>v,nG:()=>l,wO:()=>p,zn:()=>u});var r=n(23481),a=n(110),s=n(57266),i=r.T.encloseNamespace("shared.analyticsUtils");function o(e){var t=a.O.convertDateToUTC(e);return a.O.format(t,"YYYY-MM-DDTHH:mm:ss")}function u(){return new Date(2021,0,1)}function l(){return new Date}function c(e){return e.find((function(e){return!!e.default}))}function d(e,t){if(t)return e.find((function(e){return e.name===t}))}function m(){var e=u(),t=(new Date).getFullYear(),n=t===e.getFullYear();return[{name:i("today"),startDate:new Date,endDate:new Date},{name:i("thisMonth"),startDate:new Date(t,(new Date).getMonth(),1),endDate:new Date},{name:i("lastThreeMonths"),startDate:new Date(t,(new Date).getMonth()-2,1),endDate:new Date},{name:i("lastSixMonths"),startDate:new Date(t,(new Date).getMonth()-5,1),endDate:new Date},{name:i("thisYear"),startDate:new Date(t,0,1),endDate:new Date},{name:i("lastYear"),startDate:new Date(t-1,0,1),endDate:new Date(t,0,0),disabled:n,tooltip:n?i("lastYearDisabled"):""},{name:i("allTime"),startDate:a.O.subtract(new Date,5,"years"),endDate:new Date,default:!0}]}function f(e){return a.O.format(e,"YYYY-MM-DD")}function v(e){return e.name?{rangeName:e.name}:{from:f(e.startDate),to:f(e.endDate)}}function b(e,t){var n=t.to,r=t.from,i=t.rangeName,o=d(e,i);if(o)return r||n?void s.e.updateParams(v(o),{replace:!0,merge:!0,keysToRemove:["from","to"]}):o;var m=c(e);if(r&&n&&a.O.isValid(r)&&a.O.isValid(n)){var f=!0,b=a.O.convertDateToUTC(new Date(r)),p=a.O.convertDateToUTC(new Date(n));a.O.isBefore(b,u(),"day")&&(b=u(),f=!1),a.O.isAfter(p,l(),"day")&&(p=l(),f=!1),a.O.isAfter(b,p)&&(b=m.startDate,p=m.endDate,f=!1);var g={startDate:b,endDate:p,name:f?i||"custom":""};if(f)return g;s.e.updateParams(v(g),{replace:!0,merge:!0,keysToRemove:["rangeName"]})}else s.e.updateParams(v(m),{replace:!0,merge:!0,keysToRemove:["rangeName"]})}function p(e,t){var n=function(e){return o(a.O.startOf(e,"day"))},r=function(e){return o(a.O.endOf(e,"day"))},s=d(e,t.rangeName);if(s)return{start:n(f(s.startDate)),end:r(f(s.endDate))};if(t.from&&t.to)return{start:n(t.from),end:r(t.to)};var i=c(e);return{start:n(f(i.startDate)),end:r(f(i.endDate))}}},43503:(e,t,n)=>{n.r(t),n.d(t,{InteractiveStudentResultsView:()=>S});var r=n(32735),a=n(23481),s=n(20354),i=n(2948),o=n(5255),u=n(41196),l=n(9193),c=n(26025),d=n(26136),m=n(40003),f=n(3218),v=n(9111),b=n(38143),p=n(39151),g=n(20768),y=n(26304),w=n(91286),h=n(93322);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var D=a.T.encloseNamespace("shared.interactiveStudentResults");function S(e){var t,n,a,S,A,O,C=(A=(0,i.D)(b.g.ANONYMISE_USERS),O=1,function(e){if(Array.isArray(e))return e}(A)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,i,o=[],u=!0,l=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=s.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,a=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return o}}(A,O)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(A,O)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,h.F)();var E=s.a.useBasicFetch(g.b.interactiveMetadata(e.interactiveId)),R=s.a.useBasicFetch((null===(t=E.data)||void 0===t?void 0:t.interactiveId)&&g.b.interactive(E.data.interactiveId)),I=c.B.getDateRangeAppLinkParams(),N=(0,u.W)(e.interactiveId,(0,m.wO)((0,m.Hb)(),I)),M=s.a.useBasicFetch(p.L.config()),j=(0,o.Y)(e.shareId);(0,w.v)([E,N]),(0,y.b)(E);var T=(0,l.D)(null===(n=R.data)||void 0===n?void 0:n.id,null===(a=E.data)||void 0===a?void 0:a.id,e.closePopup),F=T.markedAnswers,B=T.addMarkedAnswers,U=T.submitMarkedAnswers,Y=null===(S=N.data)||void 0===S?void 0:S.students.find((function(t){var n,r,a,s,i;return e.userId?(null===(r=null===(n=t.user)||void 0===n?void 0:n.id)||void 0===r?void 0:r.toString())===(null===(a=e.userId)||void 0===a?void 0:a.toString()):!!e.sessionId&&(null===(s=t.sessionId)||void 0===s?void 0:s.toString())===(null===(i=e.sessionId)||void 0===i?void 0:i.toString())})),P=Y?D("heading",{studentName:(0,d.B2)((0,d.DV)(Y,j),C)}):"",L=!!R.data&&!!N.data&&!!M.data;return r.createElement(v.G,{title:P,showLoadingSpinner:!L,closePopup:e.closePopup,size:"lg"},L&&r.createElement(f.R,{interactive:R.data,studentResults:Y,markedAnswers:F,addMarkedAnswers:B,submitMarkedAnswers:U,imageCdnUrl:M.data.imageCdnUrl,selectedInteractionId:e.interactionId,onClickClose:e.closePopup,anonymiseUsers:C,reportsStyling:e.reportsStyling,anonSessions:j}))}},3218:(e,t,n)=>{n.d(t,{R:()=>D});var r=n(32735),a=n(69087),s=n(26136),i=n(39157),o=n(69186),u=n(86572),l=n(28972),c=n(83140),d=n(80845),m=n(23481),f=n(2102),v=n(36532),b=m.T.encloseNamespace("interactives.studentResponseList");function p(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-end pt-3"},r.createElement("div",null,!e.showSubmitButtonSpinner&&r.createElement("button",{className:"btn btn-link",onClick:e.onClickClose},b("close")),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:b("demoOnly"),spanHack:!0,spanHackClassName:"d-inline-flex"},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},b("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},b("submitAnswers")))))}var g=m.T.encloseNamespace("interactives.studentResponseList");function y(e){var t=Object.keys(e.markedAnswers).length;return r.createElement("div",{className:"d-flex justify-content-between pb-3"},r.createElement("div",{className:"d-flex"},!!e.summary.unanswered&&r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("unanswered")),e.summary.unanswered),r.createElement("div",{className:"bg-light rounded p-2 me-2"},r.createElement("strong",{className:"me-2"},g("score")),e.summary.awaitingMarking?r.createElement("em",null,g("pending")):"".concat(Math.round(100*e.summary.percentCorrect),"%"))),!!e.interactionsToMark.length&&r.createElement(r.Fragment,null,e.isDemo?r.createElement(v.u,{id:"submitAnswers",title:g("demoOnly"),spanHack:!0},r.createElement("button",{className:"btn btn-outline-dark pointer-events-none",disabled:!t},g("submitAnswers"))):r.createElement(f.m,{variant:"outline-dark",onClick:e.onClickSubmit,disabled:!t,showSpinner:e.showSubmitButtonSpinner},g("submitAnswers"))))}const w={awaitingMarking:"MvGb5"};function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,i,o=[],u=!0,l=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=s.call(n)).done)&&(o.push(r.value),o.length!==t);u=!0);}catch(e){l=!0,a=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function D(e){var t,n,m,f,v=h(r.useState(!1),2),b=v[0],g=v[1],k=(t=r.useRef(null),n=h(r.useState(!1),2),m=n[0],f=n[1],r.useEffect((function(){t.current&&!m&&(f(!0),requestAnimationFrame((function(){return t.current.scrollIntoView({behavior:"smooth",block:"center"})})))}),[t.current,m]),t),D=(0,i.Rt)(e.interactive,e.studentResults),S=(0,d.Q)(e.interactive),A=function(e,t){return e.filter((function(e){return c.A.isInteractionCorrect(e,(0,d.j_)(t))===l.w.AwaitingMarking}))}(S,e.studentResults);function O(){g(!0),e.submitMarkedAnswers()}return r.createElement(r.Fragment,null,r.createElement(y,{summary:D,interactionsToMark:A,markedAnswers:e.markedAnswers,onClickSubmit:O,showSubmitButtonSpinner:b,isDemo:e.isDemo}),r.createElement("ul",{className:"list-unstyled"},S.map((function(t,n){var l,c=t.id.toString()===(null===(l=e.selectedInteractionId)||void 0===l?void 0:l.toString()),d=A.some((function(e){return e.id===t.id})),m=(0,s.B2)((0,s.DV)(e.studentResults,e.anonSessions),e.anonymiseUsers),f="p-2 mb-3 rounded";return c&&(f+=" border-2 border-info shadow"),f+=d?" ".concat(w.awaitingMarking):" border",r.createElement("li",{key:n,className:f,ref:c?k:null},r.createElement("div",{className:"d-flex mb-2"},r.createElement(u.y,{interaction:t,iconClassName:"flex-shrink-0"})),e.reportsStyling?r.createElement(o.O,{interaction:t,studentResults:e.studentResults,markedStatus:(0,i.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,className:"bg-light ps-2",showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):r.createElement(a.d,{interaction:t,studentResults:e.studentResults,markedStatus:(0,i.HI)(t.id,e.studentResults,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymisedUserName:m,showFeedback:!0}))}))),r.createElement(p,{interactionsToMark:A,markedAnswers:e.markedAnswers,onClickSubmit:O,onClickClose:e.onClickClose,showSubmitButtonSpinner:b,isDemo:e.isDemo}))}},94644:(e,t,n)=>{n.d(t,{r:()=>c});var r=n(50242),a=n(81886),s=n(67058),i=n(14553),o=n(49267),u=n(49075),l={notFound:s.d,forbidden:{rating:i.q,yearLevel:i.q,region:o.a,privacy:i.q},badRequest:u._,internalServerError:u._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var s;s="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);s&&a.Q.Ry.isStatusCodeError(s)&&(s!==r.o.InternalServer?s!==r.o.NotFound?s!==r.o.Forbidden?n.badRequest||a.Q.Ry.throw(new i.badRequest):n.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):n.notFound||a.Q.Ry.throw(new i.notFound):n.internalServerError||a.Q.Ry.throw(new u._))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var r=n(32735),a=n(94644);function s(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,r.useEffect)((function(){i.forEach((function(e){(0,a.r)(e.statusCode,t,n)}))}),[s(i),t,n])}},57266:(e,t,n)=>{n.d(t,{e:()=>i});var r=n(81886),a=n(1048),s=n(75795),i={updateParams:function(e,t){var n=s.O.getCurrentRoute().appLink,i="string"==typeof n.params?r.Q.Ab.DeserializeQueryParams(n.params):n.params;t.keysToRemove&&(i=a.t.omit(i,t.keysToRemove));var o=(null==t?void 0:t.merge)?Object.assign(Object.assign({},i),e):e,u=Object.assign(Object.assign({},n),{params:o});a.t.isEqual(n,u)||r.Q.C$.trigger(u,a.t.omit(t,["merge","keysToRemove"]))}}}}]);
2
+ //# sourceMappingURL=6973-c4cb114bd7-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/6973-c4cb114bd7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseAnonSessions.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseFetchInteractiveResults.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/DateRangeUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/views/interactive-student-results/InteractiveStudentResultsView.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListFooter.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/student-response-list/student-response-list.scss","file:///app/packages/libs/shared/src/apps/student-response-list/StudentResponseList.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\n\nexport interface AnonSession {\n sessionId: string;\n sessionName: string;\n}\n\nexport interface AnonSessions extends Record<string, AnonSession> {}\n\nexport function useAnonSessions(shareId: string): AnonSessions {\n const anonSessions = Flight.useBasicFetch<AnonSession[]>(shareId && ShareRequests.getAnonSessions(shareId));\n\n if (!anonSessions.data?.length)\n return {};\n\n return anonSessions.data.reduce((prev, current) => ({ ...prev, [current.sessionId]: current }), {});\n}","import { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { AnalyticsRequestFilter, CurrentUser, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nexport function useFetchInteractiveResults(\n interactiveMetadataId: string,\n requestFilter: AnalyticsRequestFilter,\n includePublicResults?: boolean\n): Flight.Response<InteractiveResultSet> {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(!!interactiveMetadataId &&\n InteractiveRequests.interactiveMetadata(interactiveMetadataId));\n\n const interactive = Flight.useBasicFetch<Interactive>(!!interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const shouldFetchResults = !!currentUser.data && !!interactive.data && (!!requestFilter);\n\n return Flight.useBasicFetch<InteractiveResultSet>(shouldFetchResults &&\n InteractiveResultsRequests.interactiveResultSet(\n interactiveMetadata.data.interactiveId,\n interactiveMetadata.data.id,\n currentUser.data,\n requestFilter,\n includePublicResults\n ));\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { DateRange } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function convertDateToUtcDateTimeString(date: Date): string {\n const utc = DateHelper.convertDateToUTC(date);\n return DateHelper.format(utc, 'YYYY-MM-DDTHH:mm:ss');\n}\n\nexport function getMinDate(): Date {\n return new Date(2021, 0, 1);\n}\n\nexport function getMaxDate(): Date {\n return new Date();\n}\n\nexport function getDefaultDateRange(dateRangePresets: DateRange[]): DateRange {\n return dateRangePresets.find(range => !!range.default);\n}\n\nexport function getPresetRangeByName(dateRangePresetss: DateRange[], rangeName: string): DateRange | undefined {\n if (!rangeName)\n return;\n\n const presets = dateRangePresetss;\n \n return presets.find(p => p.name === rangeName);\n}\n\nexport function getGenericDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastTwelveMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 11, 1),\n endDate: new Date(),\n default: true\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n }\n ];\n}\n\nexport function getInsightsDateRangePresets(): DateRange[] {\n const minDate = getMinDate();\n const currentYear = (new Date()).getFullYear();\n\n const isMinDateThisYear = currentYear === minDate.getFullYear();\n\n return [\n {\n name: getPhrase('today'),\n startDate: new Date(),\n endDate: new Date()\n },\n {\n name: getPhrase('thisMonth'),\n startDate: new Date(currentYear, new Date().getMonth(), 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastThreeMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 2, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastSixMonths'),\n startDate: new Date(currentYear, new Date().getMonth() - 5, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('thisYear'),\n startDate: new Date(currentYear, 0, 1),\n endDate: new Date()\n },\n {\n name: getPhrase('lastYear'),\n startDate: new Date(currentYear - 1, 0, 1),\n endDate: new Date(currentYear, 0, 0),\n disabled: isMinDateThisYear,\n tooltip: isMinDateThisYear ? getPhrase('lastYearDisabled') : ''\n },\n {\n name: getPhrase('allTime'),\n startDate: DateHelper.subtract(new Date(), 5, 'years'),\n endDate: new Date(),\n default: true\n }\n ];\n}\n\nexport function formatDateQueryParam(date: Date): string {\n return DateHelper.format(date, 'YYYY-MM-DD');\n}\n\nexport function getRouteQueryParams(dateRange: DateRange): DateRangeQueryParams {\n if (dateRange.name)\n return { rangeName: dateRange.name };\n\n return {\n from: formatDateQueryParam(dateRange.startDate),\n to: formatDateQueryParam(dateRange.endDate)\n };\n}\n\nexport function useGetDateRangeFromQueryParams(\n dateRangePresets: DateRange[],\n dateRangeQueryParams: DateRangeQueryParams\n): DateRange | null {\n const { to, from, rangeName } = dateRangeQueryParams;\n \n const presetRange = getPresetRangeByName(dateRangePresets, rangeName);\n\n if (presetRange) {\n if (!from && !to)\n return presetRange;\n\n /**\n * If a rangeName has been set, we don't use to and from so we remove them from the url params.\n */\n AppRouteHelper.updateParams(\n getRouteQueryParams(presetRange),\n { replace: true, merge: true, keysToRemove: [ 'from', 'to' ]}\n );\n return;\n }\n\n const defaultDateRange = getDefaultDateRange(dateRangePresets);\n\n /**\n * If a param is missing, or one of them isn't a valid date, short-circuit the logic below.\n */\n if (!from || !to || !DateHelper.isValid(from) || !DateHelper.isValid(to)) {\n AppRouteHelper.updateParams(\n getRouteQueryParams(defaultDateRange),\n { replace: true, merge: true, keysToRemove: ['rangeName']}\n );\n return;\n }\n\n let initialDateRangeValid = true;\n\n let startDate = DateHelper.convertDateToUTC(new Date(from));\n let endDate = DateHelper.convertDateToUTC(new Date(to));\n\n if (DateHelper.isBefore(startDate, getMinDate(), 'day')) {\n startDate = getMinDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(endDate, getMaxDate(), 'day')) {\n endDate = getMaxDate();\n initialDateRangeValid = false;\n }\n\n if (DateHelper.isAfter(startDate, endDate)) {\n startDate = defaultDateRange.startDate;\n endDate = defaultDateRange.endDate;\n initialDateRangeValid = false;\n }\n\n const dateRange: DateRange = {\n startDate,\n endDate,\n name: initialDateRangeValid\n ? rangeName || 'custom'\n : ''\n };\n\n if (initialDateRangeValid)\n return dateRange;\n\n /**\n * If one or both of the date params were invalid, we trigger a route update.\n */\n AppRouteHelper.updateParams(getRouteQueryParams(dateRange), { replace: true, merge: true, keysToRemove: ['rangeName']});\n}\n\nexport function getStartEndParams(\n dateRangePresetss: DateRange[],\n filterParams: FilterQueryParams\n): { start: string; end: string } {\n const getStartDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.startOf(date, 'day'));\n const getEndDate = (date: string) => convertDateToUtcDateTimeString(DateHelper.endOf(date, 'day'));\n\n const presetRange = getPresetRangeByName(dateRangePresetss, filterParams.rangeName);\n\n /**\n * If the user has chosen a preset range, lookup the start and end dates as they won't be\n * in the query params.\n */\n if (presetRange)\n return {\n start: getStartDate(formatDateQueryParam(presetRange.startDate)),\n end: getEndDate(formatDateQueryParam(presetRange.endDate))\n };\n\n /**\n * If they have chosen a custom date range, use their chosen start and end dates.\n */\n if (filterParams.from && filterParams.to)\n return {\n start: getStartDate(filterParams.from),\n end: getEndDate(filterParams.to)\n };\n\n /**\n * The below should never be hit\n */\n const defaultRange = getDefaultDateRange(dateRangePresetss);\n\n return {\n start: getStartDate(formatDateQueryParam(defaultRange.startDate)),\n end: getEndDate(formatDateQueryParam(defaultRange.endDate))\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { StudentResponseList } from 'libs/shared/apps/student-response-list/StudentResponseList';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveStudentResults';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractiveStudentResultsViewProps extends PopupViewProps {\n userId: string;\n interactiveId: string;\n interactionId?: string;\n reportsStyling?: boolean;\n sessionId?: string;\n shareId?: string;\n}\n\nexport function InteractiveStudentResultsView(props: InteractiveStudentResultsViewProps): JSX.Element {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = useFetchInteractiveResults(\n props.interactiveId,\n getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const anonSessions = useAnonSessions(props.shareId);\n\n useHandleObjectError([ interactiveMetadata, results ]);\n useCannotConsumeError(interactiveMetadata);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n props.closePopup\n );\n\n const studentResults = results.data?.students.find(s => {\n if (props.userId)\n return s.user?.id?.toString() === props.userId?.toString();\n\n if (props.sessionId)\n return s.sessionId?.toString() === props.sessionId?.toString();\n\n return false;\n });\n\n const popupTitle = studentResults\n ? getPhrase('heading', { studentName: anonymiseUserName(getUserOrAnonSession(studentResults, anonSessions), anonymiseUsers) })\n : '';\n const dataLoaded = !!interactive.data && !!results.data && !!config.data;\n\n return (\n <Popup\n title={popupTitle}\n showLoadingSpinner={!dataLoaded}\n closePopup={props.closePopup}\n size='lg'\n >\n {dataLoaded &&\n <StudentResponseList\n interactive={interactive.data}\n studentResults={studentResults}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={submitMarkedAnswers}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n onClickClose={props.closePopup}\n anonymiseUsers={anonymiseUsers}\n reportsStyling={props.reportsStyling}\n anonSessions={anonSessions}\n />\n }\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListFooterProps {\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n onClickClose: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListFooter(props: StudentResponseListFooterProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-end pt-3'>\n <div>\n {!props.showSubmitButtonSpinner &&\n <button className='btn btn-link' onClick={props.onClickClose}>\n {getPhrase('close')}\n </button>\n }\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip\n id='submitAnswers'\n title={getPhrase('demoOnly')}\n spanHack\n spanHackClassName='d-inline-flex'\n >\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.studentResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StudentResponseListHeaderProps {\n summary: ResultsSummary;\n interactionsToMark: Interaction[];\n markedAnswers: MarkedAnswerHash;\n onClickSubmit: () => void;\n showSubmitButtonSpinner: boolean;\n isDemo?: boolean;\n}\n\nexport function StudentResponseListHeader(props: StudentResponseListHeaderProps): JSX.Element {\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n return (\n <div className='d-flex justify-content-between pb-3'>\n <div className='d-flex'>\n {!!props.summary.unanswered &&\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('unanswered')}</strong>\n {props.summary.unanswered}\n </div>\n }\n <div className='bg-light rounded p-2 me-2'>\n <strong className='me-2'>{getPhrase('score')}</strong>\n {props.summary.awaitingMarking\n ? <em>{getPhrase('pending')}</em>\n : `${Math.round(props.summary.percentCorrect * 100)}%`\n }\n </div>\n </div>\n {!!props.interactionsToMark.length && (\n <>\n {props.isDemo ? (\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack>\n <button\n className='btn btn-outline-dark pointer-events-none'\n disabled={!numMarkedAnswers}\n >\n {getPhrase('submitAnswers')}\n </button>\n </Tooltip>\n ) : (\n <SpinnerButton\n variant='outline-dark'\n onClick={props.onClickSubmit}\n disabled={!numMarkedAnswers}\n showSpinner={props.showSubmitButtonSpinner}\n >\n {getPhrase('submitAnswers')}\n </SpinnerButton>\n )}\n </>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"MvGb5\"};","import React from 'react';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { AnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName, getUserOrAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus, getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, Interactive, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getInteractions, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport { StudentResponseListFooter } from './StudentResponseListFooter';\nimport { StudentResponseListHeader } from './StudentResponseListHeader';\n\nimport styles from './student-response-list.scss';\n\nfunction getInteractionsToMark(\n interactions: Interaction[],\n studentResults: StudentResults\n): Interaction[] {\n return interactions.filter(i => {\n return InteractiveCorrectnessHelper.isInteractionCorrect(\n i,\n getStudentResult(studentResults)\n ) === InteractionCorrectness.AwaitingMarking;\n });\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nfunction useScrollSelectedInteractionIntoView(): React.MutableRefObject<HTMLLIElement> {\n const ref = React.useRef<HTMLLIElement>(null);\n const [ scrolled, setScrolled ] = React.useState(false);\n\n // Only scroll once\n React.useEffect(() => {\n if (!ref.current || scrolled)\n return;\n\n setScrolled(true);\n requestAnimationFrame(() => ref.current.scrollIntoView({ behavior: 'smooth', block: 'center' }));\n }, [ ref.current, scrolled ]);\n\n return ref;\n}\n\ninterface StudentResponseListProps {\n interactive: Interactive;\n markedAnswers: MarkedAnswerHash;\n studentResults: StudentResults;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n onClickClose: () => void;\n imageCdnUrl: string;\n selectedInteractionId?: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n isDemo?: boolean;\n anonSessions?: AnonSessions;\n}\n\nexport function StudentResponseList(props: StudentResponseListProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const selectedInteractionRef = useScrollSelectedInteractionIntoView();\n\n const summary = getStudentResultsSummary(props.interactive, props.studentResults);\n const interactions = getInteractions(props.interactive);\n const questionsToMark = getInteractionsToMark(interactions, props.studentResults);\n\n function onClickSubmit(): void {\n setShowSpinner(true);\n props.submitMarkedAnswers();\n }\n\n return (\n <>\n <StudentResponseListHeader\n summary={summary}\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n <ul className='list-unstyled'>\n {interactions.map((interaction, idx) => {\n const isSelected = interaction.id.toString() === props.selectedInteractionId?.toString();\n const markingRequired = questionsToMark.some(q => q.id === interaction.id);\n const anonymisedUserName = anonymiseUserName(\n getUserOrAnonSession(props.studentResults, props.anonSessions),\n props.anonymiseUsers\n );\n\n let className = 'p-2 mb-3 rounded';\n\n if (isSelected)\n className += ' border-2 border-info shadow';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n else\n className += ' border';\n\n return (\n <li key={idx} className={className} ref={isSelected ? selectedInteractionRef : null}>\n <div className='d-flex mb-2'>\n <InteractionLabel\n interaction={interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n className='bg-light ps-2'\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={interaction}\n studentResults={props.studentResults}\n markedStatus={getMarkedStatus(interaction.id, props.studentResults, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymisedUserName={anonymisedUserName}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n <StudentResponseListFooter\n interactionsToMark={questionsToMark}\n markedAnswers={props.markedAnswers}\n onClickSubmit={onClickSubmit}\n onClickClose={props.onClickClose}\n showSubmitButtonSpinner={showSpinner}\n isDemo={props.isDemo}\n />\n </>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\n }\n};"],"names":["useAnonSessions","shareId","anonSessions","data","length","reduce","prev","current","sessionId","useFetchInteractiveResults","interactiveMetadataId","requestFilter","includePublicResults","currentUser","interactiveMetadata","interactive","interactiveId","shouldFetchResults","I","id","AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getPhrase","convertDateToUtcDateTimeString","date","utc","getMinDate","Date","getMaxDate","getDefaultDateRange","dateRangePresets","find","range","getPresetRangeByName","dateRangePresetss","p","name","getInsightsDateRangePresets","minDate","currentYear","getFullYear","isMinDateThisYear","startDate","endDate","getMonth","disabled","tooltip","default","formatDateQueryParam","getRouteQueryParams","dateRange","useGetDateRangeFromQueryParams","dateRangeQueryParams","presetRange","replace","merge","keysToRemove","defaultDateRange","initialDateRangeValid","getStartEndParams","filterParams","getStartDate","getEndDate","start","end","defaultRange","InteractiveStudentResultsView","props","anonymiseUsers","dateRangeAppLinkParams","results","config","closePopup","markedAnswers","addMarkedAnswers","submitMarkedAnswers","studentResults","students","s","userId","user","toString","popupTitle","studentName","dataLoaded","title","showLoadingSpinner","size","imageCdnUrl","selectedInteractionId","interactionId","onClickClose","reportsStyling","LanguageService","StudentResponseListFooter","numMarkedAnswers","Object","keys","className","showSubmitButtonSpinner","onClick","interactionsToMark","isDemo","Tooltip","spanHack","spanHackClassName","SpinnerButton","variant","onClickSubmit","showSpinner","StudentResponseListHeader","summary","unanswered","awaitingMarking","Math","round","percentCorrect","StudentResponseList","ref","scrolled","setScrolled","setShowSpinner","selectedInteractionRef","requestAnimationFrame","scrollIntoView","behavior","block","interactions","questionsToMark","filter","i","InteractiveCorrectnessHelper","InteractionCorrectness","getInteractionsToMark","map","interaction","idx","isSelected","markingRequired","some","q","anonymisedUserName","InteractionLabel","iconClassName","InteractionResponse","markedStatus","markInteraction","showFeedback","responseComponentClass","InteractionResponseItem","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","useEffect","forEach","AppRouteHelper","updateParams","options","currentParams","updatedParams","updatedAppLink"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 7210-2e4563178c-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7210,2392],{18488:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(99940),a=n(97395),o={namespace:"share-v2"},i={createShare:function(e,t,n,a){return{url:"/api/share/v2/shares",key:"create:share-v2",type:r.k.POST,data:e,normalizeOptions:o,invalidationKeys:["sent:shares-v2"],success:t,error:n,always:a}},updateShare:function(e,t,n,a,i){return{url:"/api/share/v2/shares/".concat(e),key:"update:share-v2:".concat(e),type:r.k.PUT,data:t,normalizeOptions:o,invalidationKeys:["share-v2:permanent-link:object","share-v2:".concat(e)],success:n,error:a,always:i}},getShare:function(e,t,n,a){return{url:"/api/share/v2/shares/".concat(e),key:"share-v2:".concat(e),bootstrapName:"share-v2:".concat(e),type:r.k.GET,normalizeOptions:o,success:t,error:n,always:a}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=Object.values(e).join(":");return{url:a._.urlBuilder("/api/share/v2/shares/sent",e),key:"sent:shares-v2:".concat(i),formatData:function(t){return{data:t,count:t.length,pagination:{cursors:{next:null,previous:e.cursor}}}},type:r.k.GET,normalize:!1,success:t,error:n,always:o}},getShareLinkByObjectId:function(e){return{url:a._.urlBuilder("/api/share/v2/shares/permanent-link",{objectId:e}),key:"share-v2:permanent-link:object:".concat(e),type:r.k.POST,normalizeOptions:o}},getPrivacy:function(e){return{url:"{gateway}/v1/objects/".concat(e,"/access"),key:"privacy:".concat(e),normalize:!1}}}},79145:(e,t,n)=>{n.d(t,{I:()=>b});var r,a=n(23481),o=n(20354),i=n(49985),c=n(65858);!function(e){e.InstantFeedback="instant_feedback",e.PreventSkipping="prevent_skipping"}(r||(r={}));var s=n(18488),l=n(21750),u=n(43012),d=n(20768),m=n(5112),f=n(60011),p=n(1575),h=n(40841);function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function g(e,t,n){return(t=function(e){var t=function(e){if("object"!=v(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=v(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==v(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=a.T.encloseNamespace("sharev2.utils"),b={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["video","interactive","clip"].includes(e)},getEnabledIntegrations:function(e,t){return h._.getShareIntegrations(e,t).filter((function(e){return e.enabled})).map((function(e){return e.id}))},getFetchFunctionByType:function(e){switch(e){case"video":return function(e){return o.a.useBasicFetch(p.R.video(e))};case"playlist":return function(e){return o.a.useBasicFetch(m.C.getPlaylist(e))};case"subject":return function(e,t){return o.a.useBasicFetch(l.x.classification(e,t))};case"series":return function(e){return o.a.useBasicFetch(f.J.series(e))};case"interactive":return function(e){return o.a.useBasicFetch(d.b.interactiveMetadata(e))};case"clip":return function(e){return o.a.useBasicFetch(u.e.clip(e))}}},getAnalyticsEntity:function(e){switch(e){case"playlist":return c.py.Playlist;case"subject":return c.py.Classification;case"video":return c.py.Video;case"series":return c.py.Series;case"interactive":return c.py.Interactive;case"clip":return c.py.Clip}},getAnalyticsOptions:function(e){return{entity:b.getAnalyticsEntity(e),location:c.LZ.Popup,workflowPhase:c.eu.Complete}},updateShareLink:function(e,t,n,r,a,l,u,d){o.a.fetch(e,s.o.updateShare(r.shareId,a,(function(e){i.k.logUserAction(Object.assign(Object.assign({},e),{objectName:t.name}),i.k.mergeOptions(b.getAnalyticsOptions(n),{actionType:c.Vw.Edit,entity:c.py.ShareLink,eventVersion:c.eq.V3})),u&&u(e),l.success(y("editSuccess",{name:t.name,escapeText:!0}))}),(function(){d&&d(),l.error(y("editError",{name:t.name,escapeText:!0}))})))},getShareSettingsInitialValues:function(e,t){var n={preventSkipping:(null==t?void 0:t.preventScrubbing)||!1,instantFeedback:(null==t?void 0:t.immediateFeedback)||!1},a=g(g({},r.InstantFeedback,"instantFeedback"),r.PreventSkipping,"preventSkipping");return e.options.reduce((function(e,t){return Object.keys(a).includes(t.option)?("True"===t.value?e[a[t.option]]=!0:"False"===t.value&&(e[a[t.option]]=!1),e):e}),n)}}},9806:(e,t,n)=>{n.d(t,{k:()=>x});var r=n(32735),a=n(65858),o=n(64249),i=n(15611),c=n(7432),s=n(11834),l=n(83345),u=n(56754),d=n(86348),m=n(7733),f=n(54610),p=n(4594),h=n(68626),v=n(9085),g=n(67453),y=n(31908);const b={thumbnailFallbackSvg:"D4JFs",posterFallbackSvg:"bjUWl",coverFallbackSvg:"kdLpt",thumbnailContainer:"d3CKN",insightsMask:"KM76U",requireMarking:"peLH7",badge:"mVu0E",bar:"zO3MS",a:"K1jW5",expandBar:"YITJl",b:"tCpLF",c:"lC0cq"};var E="shared.sharedObjectImage",S="rounded overflow-hidden";function w(){return r.createElement("div",{className:"d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center"},r.createElement("div",{className:"position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3"}),r.createElement("div",{className:"d-flex align-items-end gap-2 h-50 z-1"},r.createElement("div",{className:"d-flex align-items-end h-50"},r.createElement("div",{className:"".concat(b.bar," ").concat(b.a," rounded shadow")})),r.createElement("div",{className:"d-flex align-items-end h-75"},r.createElement("div",{className:"".concat(b.bar," ").concat(b.b," rounded shadow")})),r.createElement("div",{className:"d-flex align-items-end h-100"},r.createElement("div",{className:"".concat(b.bar," ").concat(b.c," rounded shadow")}))))}function x(e){var t=r.useCallback((function(t){var n;t&&e.fixedHeight&&(t.style.width="".concat(t.offsetHeight*(n=e.object,y.M.isVideoType(n)?16/9:n.typeId===p.E.Playlist?1:n.typeId===p.E.Series?9/16:void 0),"px"))}),[]),n=y.M.isVideoType(e.object),x=function(e){var t=g.j.getDisplayImageFromObject(e);if(y.M.isVideoType(e))return{image:t,imageType:f.__.Thumbnails,imageClassName:S,imageFallbackComponent:r.createElement(s.oy,{type:s.mS.Video})};switch(e.typeId){case p.E.Series:return{image:t,imageType:f.__.TallPosters,imageClassName:S,imageFallbackComponent:r.createElement(s.oy,{type:s.mS.Series,svgContainerClassName:b.posterFallbackSvg})};case p.E.Playlist:return{image:t,imageType:f.__.Covers,imageClassName:(null==t?void 0:t.url)?S:"".concat(S," ").concat((0,v.x)(e.name,m.o)),imageFallbackComponent:r.createElement(s.oy,{type:s.mS.Playlist,svgContainerClassName:(null==t?void 0:t.url)?b.coverFallbackSvg:"d-none",extraClasses:!(null==t?void 0:t.url)&&"bg-transparent"})}}}(e.object),k=x.image,N=x.imageType,C=x.imageClassName,I=x.imageFallbackComponent,O=e.showVideoMetadata?{}:{hideDuration:!0,hideMask:!0,hideRating:!0,hideVideoTypeBadge:!0};return r.createElement("div",{className:"d-flex align-items-center justify-content-center w-100 h-100"},r.createElement("div",{ref:t,className:e.fixedHeight?"h-100":"w-100"},n&&r.createElement("div",{className:"".concat(b.thumbnailContainer," position-relative")},e.showInsightsMask&&r.createElement(w,null),r.createElement(i.F,{appLink:e.appLink},r.createElement(d.u,Object.assign({video:e.object,size:e.thumbnailSize,imageOptions:e.imageOptions,textPosition:h.z.Independent,type:"cosmetic"},O))),!!e.requireMarking&&r.createElement("div",{className:"".concat(e.showInsightsMask&&b.requireMarking," position-absolute bottom-0 end-0 z-1 m-2")},r.createElement("div",{className:"".concat(b.badge," d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2")},r.createElement(l.x,{namespace:E,phrase:"requireMarking",options:{smartCount:e.requireMarking}})))),!n&&r.createElement(r.Fragment,null,"videos"in e.object?r.createElement(u.I,{collection:e.object,imageOptions:e.imageOptions,appLink:e.appLink,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:o.I.getAnalyticsEntity(e.object.type),actionType:a.Vw.Click,location:e.locationContext},showMask:e.showCollectionMask,showVideoCount:e.showVideoCount}):r.createElement(c.Z,{data:null==k?void 0:k.url,imageType:N,imageOptions:e.imageOptions,appLink:e.appLink,className:C,analyticsData:{id:e.object.id,name:e.object.name},analyticsOptions:{entity:o.I.getAnalyticsEntity(e.object.type),actionType:a.Vw.Click,location:e.locationContext}},I))))}x.defaultProps={imageOptions:{size:f.h2.Small}}},56754:(e,t,n)=>{n.d(t,{I:()=>E});var r=n(32735),a=n(75896),o=n(65858),i=n(15611),c=n(83914),s=n(83345);const l={thumbnailTitle:"OsWjL"};function u(e){return r.createElement("h3",{title:e.title,className:"h6"},e.title)}function d(e){return e.appLink?r.createElement(i.F,{appLink:e.appLink,className:"".concat(l.thumbnailTitle)},r.createElement(u,Object.assign({},e))):r.createElement(u,Object.assign({},e))}var m=n(86348),f=n(62335),p=n(4594),h=n(68626),v=n(45778),g=n(35223);const y={badge:"M4zat",mask:"r0Ztg",thumbnailContainer:"uD9dz"};var b="shared.collectionThumbnail";function E(e){var t,n,l,u,E=function(){var t,n=null===(t=e.collection)||void 0===t?void 0:t.videos;if(n){if(!n.count&&e.collection.typeId===p.E.Playlist){var r=e.collection;r.clips.count&&(n=r.clips),r.interactives.count&&(n=r.interactives)}return a.m.first(n.data)}}(),S=function(){var t,n,r=0;if(e.collection.videos&&e.collection.videos.count&&(r+=e.collection.videos.count),e.collection.typeId===p.E.Playlist){var a=e.collection;(null===(t=a.interactives)||void 0===t?void 0:t.count)&&(r+=a.interactives.count),(null===(n=a.clips)||void 0===n?void 0:n.count)&&(r+=a.clips.count)}return r}(),w=(null===(t=e.title)||void 0===t?void 0:t.length)||(null===(n=e.subText)||void 0===n?void 0:n.length),x=Object.assign({id:e.collection.id.toString(),name:e.collection.name},e.analyticsData),k=Object.assign({actionType:o.Vw.Click,entity:(u=e.collection,v.G.isType(u,p.E.Playlist)?o.py.Playlist:v.G.isType(u,p.E.Series)?o.py.Series:void 0)},e.analyticsOptions);return r.createElement("div",null,r.createElement("div",{className:"position-relative ".concat(y.thumbnailContainer," z-1")},r.createElement(i.F,{appLink:e.appLink,analyticsData:x,analyticsOptions:k,preventFocus:!0},e.showMask&&r.createElement("div",{className:"".concat(y.mask," position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none")},r.createElement("div",{className:"".concat(y.badge," d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2")},r.createElement(c.x,{svgName:g.vn.Play,className:"svg-container text-white"}),r.createElement("p",{className:"d-inline fw-medium text-white mb-0"},(null===(l=e.hoverText)||void 0===l?void 0:l.length)?r.createElement("span",null,e.hoverText):r.createElement(s.x,{namespace:b,phrase:"playAll"})))),E&&r.createElement(m.u,{video:E,imageOptions:e.imageOptions,textPosition:h.z.Independent,type:"cosmetic",hideMask:!0,hideRating:!0,hideDuration:!0,hideVideoTypeBadge:!0}),!E&&r.createElement("div",{className:"ratio ratio-16x9 bg-light rounded-3"},r.createElement("div",{className:"d-flex justify-content-center align-items-center"},r.createElement(c.x,{svgName:g.vn.Play,className:"w-33 opacity-25 text-gray-400"}))),e.showVideoCount&&r.createElement("div",{className:"".concat(y.badge," d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2")},r.createElement(c.x,{svgName:g.vn.Series,className:"svg-container text-white me-1"}),r.createElement("p",{className:"d-inline fw-semibold text-white mb-0"},r.createElement(s.x,{namespace:b,phrase:"videos",options:{count:S,smartCount:S}}))))),w&&r.createElement("div",{className:"mt-2 d-flex flex-column"},e.subText&&r.createElement(f.m,{title:e.subText,appLink:e.subTextAppLink},e.subText),e.title&&r.createElement(d,{title:e.collection.name,appLink:e.titleAppLink})))}},41661:(e,t,n)=>{var r;n.d(t,{D:()=>r}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(r||(r={}))},40841:(e,t,n)=>{n.d(t,{_:()=>c});var r=n(23481),a=n(41661),o=n(65728),i=r.T.encloseNamespace("shared.shared-utils"),c={getShareIntegrations:function(e,t){return[{id:a.D.GoogleClassroom,name:i("googleClassroom"),enabled:e,settingName:o.E.ShareToGoogleClassroom},{id:a.D.MicrosoftTeams,name:i("msftTeams"),enabled:t,settingName:o.E.ShareToMicrosoftTeams}]}}},58518:(e,t,n)=>{n.d(t,{k:()=>o});var r=n(32735),a=n(83523);function o(e){return r.createElement("div",{className:"d-flex justify-content-between align-items-start"},r.createElement("div",null,r.createElement("label",{className:"m-0",htmlFor:""},e.title),r.createElement("p",{className:"m-0 text-secondary"},e.description)),r.createElement("div",null,r.createElement(a.Z,{onClick:e.onClick,on:e.toggled})))}},93975:(e,t,n)=>{var r;n.d(t,{y:()=>r}),function(e){e.Link="Link",e.Classroom="Classroom",e.Open="Open",e.Live="Live"}(r||(r={}))},91574:(e,t,n)=>{n.d(t,{o:()=>i});var r=n(99940),a=n(97395),o={namespace:"share-v2"},i={createShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares",key:"create:share-v2:link",type:r.k.POST,data:e,normalizeOptions:o,invalidationKeys:["share:link:object:".concat(e.objectId),"privacy:".concat(e.objectId),"sent:shares","get:share-v2:shares:object"],success:t,error:n,always:a}},getShareLink:function(e,t,n,a){return{url:"/api/share/v2/shares/".concat(e),key:"get:share-v2:link:".concat(e),type:r.k.GET,normalizeOptions:o,success:t,error:n,always:a}},getSharesByObjectId:function(e,t,n,a){return{url:"/api/share/v2/shares/objects/".concat(e),key:"get:share-v2:shares:object:".concat(e),type:r.k.GET,normalizeOptions:o,success:t,error:n,always:a}},getSentShares:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i={scopeId:e.scopeId,limit:e.limit||25,offset:parseInt(e.cursor)||0},c=Object.values(i).join(":");return{url:a._.urlBuilder("/api/share/v2/shares/sent",i),key:"sent:shares-v2:".concat(c),formatData:function(e){return{data:e,count:e.length,pagination:{cursors:{next:i.offset+e.length}}}},type:r.k.GET,normalize:!1,success:t,error:n,always:o}},createPincode:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"create:share-v2:pincode",type:r.k.POST}},getPincode:function(e){return{url:"/api/share/v2/shares/pincode?code=".concat(e),key:"get:share-v2:pincode:".concat(e)}},getPincodeByShareId:function(e){return{url:"/api/share/v2/shares/".concat(e,"/pincode"),key:"get:share-v2:".concat(e,":pincode")}}}},86350:(e,t,n)=>{n.d(t,{t:()=>d});var r,a=n(20354),o=n(30439);!function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(r||(r={}));var i=n(93975),c=n(91574);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function l(){l=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function d(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},"")}catch(e){d=function(e,t,n){return e[t]=n}}function m(e,t,n,r){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),c=new P(r||[]);return a(i,"_invoke",{value:O(e,n,c)}),i}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=m;var p="suspendedStart",h="suspendedYield",v="executing",g="completed",y={};function b(){}function E(){}function S(){}var w={};d(w,i,(function(){return this}));var x=Object.getPrototypeOf,k=x&&x(x(A([])));k&&k!==n&&r.call(k,i)&&(w=k);var N=S.prototype=b.prototype=Object.create(w);function C(e){["next","throw","return"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function n(a,o,i,c){var l=f(e[a],e,o);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"==s(d)&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,c)}))}c(l.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,n,r){var a=p;return function(o,i){if(a===v)throw Error("Generator is already running");if(a===g){if("throw"===o)throw i;return{value:e,done:!0}}for(r.method=o,r.arg=i;;){var c=r.delegate;if(c){var s=j(c,r);if(s){if(s===y)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===p)throw a=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=v;var l=f(t,n,r);if("normal"===l.type){if(a=r.done?g:h,l.arg===y)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(a=g,r.method="throw",r.arg=l.arg)}}}function j(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,j(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var o=f(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var i=o.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,y):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function A(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(s(t)+" is not iterable")}return E.prototype=S,a(N,"constructor",{value:S,configurable:!0}),a(S,"constructor",{value:E,configurable:!0}),E.displayName=d(S,u,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===E||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,d(e,u,"GeneratorFunction")),e.prototype=Object.create(N),e},t.awrap=function(e){return{__await:e}},C(I.prototype),d(I.prototype,c,(function(){return this})),t.AsyncIterator=I,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var i=new I(m(e,n,r,a),o);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},C(N),d(N,u,"Generator"),d(N,i,(function(){return this})),d(N,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=A,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(T),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(s&&l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,y):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),T(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;T(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:A(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),y}},t}var u=function(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{s(r.next(e))}catch(e){o(e)}}function c(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,c)}s((r=r.apply(e,t||[])).next())}))};function d(e){var t,n=a.a.useBasicFetch(o.o.getPrivacy(e)),s=a.a.useGetFetchAsync(),d=null===(t=n.data)||void 0===t?void 0:t.canManageAccess;return{createShareLink:function(e){return u(this,void 0,void 0,l().mark((function t(){var r;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.data){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,s(c.o.createShareLink({objectId:e.objectId,type:i.y.Link,privacy:e.privacy,optionRequest:{preventSkipping:e.preventSkipping,instantFeedback:e.instantFeedback}}));case 4:return r=t.sent,t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})))},createDirectShare:function(e){return u(this,void 0,void 0,l().mark((function t(){var a,o;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.data){t.next=2;break}return t.abrupt("return");case 2:return a=e.requireSignIn?r.Direct:r.PinCode,t.next=5,s(c.o.createShareLink({objectId:e.objectId,type:i.y.Classroom,privacy:a,optionRequest:{preventSkipping:e.preventShipping,instantFeedback:e.instantFeedback},recipientRequest:e.recipients.map((function(t){return{recipientId:t,message:e.message,scopeId:e.scopeId}}))}));case 5:if(o=t.sent,a!==r.PinCode){t.next=9;break}return t.next=9,s(c.o.createPincode(o.shareId));case 9:return t.abrupt("return",o);case 10:case"end":return t.stop()}}),t)})))},createOpenSession:function(e){return u(this,void 0,void 0,l().mark((function t(){var a,o;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.data){t.next=2;break}return t.abrupt("return");case 2:return a=r.PinCode,e.requireSignIn&&(a=e.respectRatingsAndRestrictions?d?r.JustMySchool:r.Protected:d?r.JustMySchoolOverrideRestriction:r.ProtectedOverrideRestriction),t.next=6,s(c.o.createShareLink({objectId:e.objectId,type:i.y.Open,privacy:a,optionRequest:{preventSkipping:e.preventSkipping,instantFeedback:e.instantFeedback}}));case 6:if(o=t.sent,a!==r.PinCode){t.next=10;break}return t.next=10,s(c.o.createPincode(o.shareId));case 10:return t.abrupt("return",o);case 11:case"end":return t.stop()}}),t)})))},canManageAccess:d,hasCompleted:n.hasCompleted}}},72951:(e,t,n)=>{n.d(t,{x:()=>o});var r=n(75896),a=n(4594),o={getFlattenedRecipients:function(e){return r.m.flatten(e.map((function(e){var t;return null!==(t=e.recipients)&&void 0!==t?t:[]})))},getClassoomIds:function(e){var t=o.getFlattenedRecipients(e).map((function(e){return e.scopeId?e.scopeId.toString():e.recipientId&&e.recipientTypeId===a.E.Classroom?e.recipientId.toString():void 0}));return r.m.uniq(t.filter((function(e){return!!e})))},getClassroomIdFromShare:function(e){var t,n=null===(t=e.recipients)||void 0===t?void 0:t[0];if(n)return n.scopeId?n.scopeId.toString():n.recipientId&&n.recipientTypeId===a.E.Classroom?n.recipientId.toString():void 0},getClassroomForShare:function(e,t){var n=o.getClassroomIdFromShare(e);if(n)return t.find((function(e){return e.id.toString()===n.toString()}))}}},87210:(e,t,n)=>{n.r(t),n.d(t,{FlowSelectorView:()=>se});var r=n(32735),a=n(39202),o=n(20354),i=n(75896),c=n(79145),s=n(91693),l=n(9111),u=n(31949),d=n(35223),m=n(99742),f=n(14070),p=n(97291),h=n(88630),v=n(93975),g=n(91574),y=n(72951),b=n(11607);const E={optionImage:"_uLZl"};function S(e){return r.createElement("div",{className:"bg-white rounded-bottom-3 p-3"},r.createElement("div",{className:"d-flex justify-content-center align-items-center gap-3"},e.options.map((function(t){return r.createElement(b.L,{onClick:function(){return e.onClick(t)},className:"text-center cursor-pointer p-3 border rounded-3 user-select-none w-50",key:t.id},r.createElement("img",{src:t.image,className:"img-fluid my-3 w-75 ".concat(E.optionImage),draggable:!1}),r.createElement("h2",{className:"h3"},t.title),r.createElement("p",{className:"mb-0"},t.description))}))))}var w=n(42648),x=n(82602),k=n(65858),N=n(9806),C=n(12528),I=n(83914),O=n(54610);const j={previousSharesList:"LZvYG",previousSharesListItem:"LEwrl"};function L(e){return r.createElement("div",{className:"d-flex flex-column mt-3 border rounded overflow-hidden ".concat(j.previousSharesList)},r.createElement(w.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:200},e.data.shares.reverse().map((function(t){var n,a;return r.createElement(b.L,{key:t.shareId,onClick:e.onClick,className:"p-3 ".concat(j.previousSharesListItem)},r.createElement("div",{className:"row"},r.createElement("div",{className:"col-1 d-flex align-items-center"},r.createElement(N.k,{locationContext:k.LZ.PlayPage,object:e.data.entity,imageOptions:{size:O.h2.Small},thumbnailSize:"sm",showVideoMetadata:!1})),r.createElement("div",{className:"col-3 d-flex align-items-center"},r.createElement("span",{className:"clamp-2 align-self-center"},e.data.entity.name)),r.createElement("div",{className:"col-3 d-flex align-items-center"},r.createElement("div",{className:"d-flex flex-row gap-1 align-items-center"},r.createElement("div",null,r.createElement(C.f,{variant:"teal",textVariant:"white",svgName:d.vn.Classrooms,svgSize:I.S.Standard})),r.createElement("span",null,null!==(a=null===(n=y.x.getClassroomForShare(t,e.data.classrooms))||void 0===n?void 0:n.name)&&void 0!==a?a:"Unknown"))),r.createElement("p",{className:"mb-0 col-2 d-flex align-items-center"},t.viewCount||0," views"),r.createElement("p",{className:"mb-0 col-2 d-flex align-items-center"},(0,x.WU)(t.dateCreated)),r.createElement("div",{className:"col-1 d-flex align-items-center"},r.createElement("a",{onClick:function(){return e.onClick(t)},className:"cursor-pointer text-info"},"View"))))}))))}var T=n(13876),P=n(39151),A=n(80130);const _={searchInput:"udDMG"};function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function R(e){return e.classrooms.length?r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("h3",{className:"h6 m-0"},"My Classrooms"),r.createElement("div",null,e.classrooms.map((function(t){var n,a,o,i,c=null!==(a=null===(n=t.enrolments)||void 0===n?void 0:n.count)&&void 0!==a?a:0;return r.createElement("div",{className:"d-flex align-items-center",key:t.id,onClick:function(){return e.onClassroomSelected(t)}},r.createElement("div",{className:"d-flex align-items-center bg-light-hover px-2 py-1 w-100 rounded gap-2 cursor-pointer justify-content-between"},r.createElement("div",{className:"w-100 d-flex align-items-center gap-2"},r.createElement(A.Z.Check,{type:"radio",name:"classroom-radio",id:"classroom-radio",value:t.id,onChange:function(){return e.onClassroomSelected(t)},checked:t.id===(null===(o=e.selectedClassroom)||void 0===o?void 0:o.id)}),r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement("div",null,r.createElement(C.f,{svgName:d.vn.Classrooms,svgSize:I.S.Standard,variant:"teal",textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("div",{className:"w-100"},r.createElement("label",{className:"m-0"},null==t?void 0:t.name),r.createElement("p",{className:"m-0 text-muted font-size-sm"},c," ",c>1?"students":"student")))),(null===(i=e.selectedClassroom)||void 0===i?void 0:i.id)===t.id&&r.createElement("div",{className:"d-flex align-items-center justify-content-end w-100"},r.createElement("a",{className:"cursor-pointer text-info",onClick:e.onSelectGroupsOrStudents},"Select specific groups or students"))))})))):r.createElement("div",{className:"d-flex flex-column gap-2 justify-content-center align-items-center"},r.createElement("img",{src:m.W.EmptyStates.Search.RESULTS,width:"30%",alt:"No results found"}),r.createElement("h4",{className:"h6 m-0"},'No results found for "',e.searchQuery,'"'),r.createElement("p",{className:"mb-0"},"Contact your school administrator to assign you to a classroom or ",r.createElement("a",{className:"p-0 text-info cursor-pointer",onClick:e.onClickCreateOpenClassroom},"create an Open classroom.")))}function M(e){var t,n,a=(t=r.useState(""),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return F(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],i=a[1],c=o?e.classrooms.filter((function(e){return e.name.toLowerCase().includes(o.toLowerCase())})):e.classrooms;return r.createElement("div",{className:"d-flex flex-column gap-3 ".concat(e.className," mb-3")},r.createElement("div",{className:"position-relative"},r.createElement("div",{className:"position-absolute top-50 start-0 translate-middle-y p-1"},r.createElement(I.x,{svgName:d.vn.Search,size:I.S.Standard})),r.createElement("input",{type:"text",placeholder:"Search for a classroom you teach",value:o,onChange:function(e){return i(e.target.value)},className:"form-control pe-1 py-2 border-dark ".concat(_.searchInput)})),r.createElement(R,{searchQuery:o,classrooms:c,selectedClassroom:e.selectedClassroom,onSelectGroupsOrStudents:e.onSelectGroupsOrStudents,onClassroomSelected:e.onClassroomSelected,onClickCreateOpenClassroom:e.onClickCreateOpenClassroom}))}var G=n(58518);function V(e){var t,n=(null===(t=e.selectedClassroom.enrolments)||void 0===t?void 0:t.count)||0;return r.createElement("div",{className:"d-flex align-items-center w-100 rounded gap-2 justify-content-between"},r.createElement("div",{className:"d-flex align-items-center gap-2 w-100"},r.createElement("div",null,r.createElement(C.f,{svgName:d.vn.Classrooms,svgSize:I.S.Standard,variant:"teal",textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("div",{className:"w-100"},r.createElement("label",{className:"m-0"},e.selectedClassroom.name),r.createElement("p",{className:"m-0 text-muted font-size-sm"},n," ",n>1?"students":"student"))),r.createElement("div",{className:"d-flex align-items-center justify-content-end w-100"},r.createElement("a",{className:"cursor-pointer text-info",onClick:e.onChangeClassroom},"Change classroom")))}function z(e){return r.createElement("div",{className:"d-flex flex-column gap-4 ".concat(e.className)},r.createElement(V,{selectedClassroom:e.selectedClassroom,onChangeClassroom:e.onChangeClassroom}),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("h4",{className:"h6 m-0"},"Access"),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(G.k,{title:"Classroom students select their name when accessing video",description:"Collect student data without the fuss of signing in.",toggled:!e.requireSignIn,onClick:e.onToggleRequireSignIn}))),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("h4",{className:"h6 m-0"},"Settings"),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(G.k,{title:"Prevent skipping ahead",description:"Students cannot skip ahead to parts of the video they have not watched",toggled:e.preventSkippingAhead,onClick:e.onTogglePreventSkippingAhead})),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(G.k,{title:"Enable instant feedback",description:"Allow students to see feedback on their answers before continuing",toggled:e.enableInstantFeedback,onClick:e.onToggleEnableInstantFeedback}))),r.createElement("div",null,r.createElement("label",null,"Add a message (optional)"),r.createElement("br",null),r.createElement("textarea",{className:"form-control",placeholder:"Type a message...",value:e.message,onChange:function(t){return e.onChangeMessage(t.target.value)}})))}var B=n(86350),D=n(97408),q=n(89965),H=n(64818);const U={avatarContainer:"CEbd9"};function W(e){return function(e){if(Array.isArray(e))return Z(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Y(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return c}}(e,t)||Y(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Y(e,t){if(e){if("string"==typeof e)return Z(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Z(e,t):void 0}}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function J(e){return e.entities.length?r.createElement("div",{className:"d-flex flex-column"},e.entities.map((function(t){var n=e.selectedEntities.includes(t);return r.createElement(b.L,{key:t.id,className:"d-flex align-items-center bg-light-hover px-2 py-1 w-100 rounded gap-2 cursor-pointer justify-content-between",onClick:function(){return e.onSelectEntity(t)}},r.createElement("div",{className:"w-100 d-flex align-items-center"},r.createElement(q.X,{name:"classroom-group",id:"classroom-group",onChange:function(){return e.onSelectEntity(t)},checked:n}),r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement("div",null,e.renderIcon?e.renderIcon(t):r.createElement(C.f,{svgName:d.vn.Group,svgSize:I.S.Standard,variant:"pink",textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("div",{className:"w-100"},e.renderTitle?e.renderTitle(t):r.createElement("label",{className:"m-0"},t.name)))))}))):r.createElement(r.Fragment,null,e.emptyState)}function K(e){return e.length?e.map((function(e){return e.id})):[]}function Q(e){var t=$(r.useState("all"),2),n=t[0],a=t[1],o=$(r.useState([]),2),i=o[0],c=o[1],l=$(r.useState([]),2),u=l[0],m=l[1],f=$(r.useState(!1),2),p=f[0],h=f[1],v=$(r.useState(!1),2),g=v[0],y=v[1],b=e.students.length,E="".concat(b," ").concat(b>1?"students":"student");return r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(V,{onChangeClassroom:e.onChangeClassroom,selectedClassroom:e.classroom}),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement("h3",{className:"h6 m-0"},"Share to ",E,":"),r.createElement("div",null,r.createElement(q.X,{id:"all",checked:"all"===n,label:"All ".concat(E),onChange:function(){a("all"),c([]),m([]),e.onChangeRecipients([])}}))),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("div",null,r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h3",{className:"h6 m-0 p-0"},"Groups (",e.groups.length,")"),r.createElement(s.h,{svgName:p?d.vn.ChevronUp:d.vn.ChevronDown,onClick:function(){return h(!p)}})),p&&r.createElement(J,{entities:e.groups,selectedEntities:i,onSelectEntity:function(t){m([]);var n=W(i);i.includes(t)?n=i.filter((function(e){return e!==t})):n.push(t),n.length?a("groups"):a("all"),c(n),e.onChangeRecipients(K(n))},emptyState:r.createElement("div",null,"No groups found.")})),r.createElement("div",null,r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h3",{className:"h6 m-0 p-0"},"Students (",e.students.length,")"),r.createElement(s.h,{svgName:g?d.vn.ChevronUp:d.vn.ChevronDown,onClick:function(){return y(!g)}})),g&&r.createElement(J,{entities:e.students,selectedEntities:u,onSelectEntity:function(t){c([]);var n=W(u);u.includes(t)?n=u.filter((function(e){return e!==t})):n.push(t),n.length?a("students"):a("all"),m(n),e.onChangeRecipients(K(n))},emptyState:r.createElement("div",null,"No students found."),renderTitle:function(e){return r.createElement("label",{className:"m-0"},H.l.getFullName(e))},renderIcon:function(t){var n;return r.createElement("div",{className:U.avatarContainer},r.createElement(D.q,{imageCdnUrl:e.imageCdnUrl,initials:H.l.getInitials(t.name,t.surname),imageUrl:null===(n=t.avatar)||void 0===n?void 0:n.url}))}}))))}function X(e){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X(e)}function ee(){ee=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof g?t:g,i=Object.create(o.prototype),c=new L(r||[]);return a(i,"_invoke",{value:C(e,n,c)}),i}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var m="suspendedStart",f="suspendedYield",p="executing",h="completed",v={};function g(){}function y(){}function b(){}var E={};l(E,i,(function(){return this}));var S=Object.getPrototypeOf,w=S&&S(S(T([])));w&&w!==n&&r.call(w,i)&&(E=w);var x=b.prototype=g.prototype=Object.create(E);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function N(e,t){function n(a,o,i,c){var s=d(e[a],e,o);if("throw"!==s.type){var l=s.arg,u=l.value;return u&&"object"==X(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(u).then((function(e){l.value=e,i(l)}),(function(e){return n("throw",e,i,c)}))}c(s.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function C(t,n,r){var a=m;return function(o,i){if(a===p)throw Error("Generator is already running");if(a===h){if("throw"===o)throw i;return{value:e,done:!0}}for(r.method=o,r.arg=i;;){var c=r.delegate;if(c){var s=I(c,r);if(s){if(s===v)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===m)throw a=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=p;var l=d(t,n,r);if("normal"===l.type){if(a=r.done?h:f,l.arg===v)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(a=h,r.method="throw",r.arg=l.arg)}}}function I(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,I(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),v;var o=d(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,v;var i=o.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function j(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function L(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function T(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(X(t)+" is not iterable")}return y.prototype=b,a(x,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:y,configurable:!0}),y.displayName=l(b,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,l(e,s,"GeneratorFunction")),e.prototype=Object.create(x),e},t.awrap=function(e){return{__await:e}},k(N.prototype),l(N.prototype,c,(function(){return this})),t.AsyncIterator=N,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var i=new N(u(e,n,r,a),o);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},k(x),l(x,s,"Generator"),l(x,i,(function(){return this})),l(x,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=T,L.prototype={constructor:L,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(s&&l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),j(n),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;j(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:T(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}function te(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ne(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ne(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var re=function(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{s(r.next(e))}catch(e){o(e)}}function c(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,c)}s((r=r.apply(e,t||[])).next())}))};function ae(e){var t=te(r.useState("select-classroom"),2),n=t[0],i=t[1],c=te(r.useState(),2),s=c[0],d=c[1],m=te(r.useState([]),2),v=m[0],g=m[1],y=te(r.useState(!1),2),b=y[0],E=y[1],S=te(r.useState(!1),2),w=S[0],x=S[1],k=te(r.useState(!0),2),N=k[0],C=k[1],I=te(r.useState(""),2),O=I[0],j=I[1],L=te(r.useState(!1),2),A=L[0],_=L[1],F=(0,B.t)(e.objectId).createDirectShare,R=o.a.useBasicFetch(u.N.currentUser()),G=o.a.useBasicFetch(R.data&&h.F.getPublishedWithStudents(R.data.id)),V=o.a.useBasicFetch(P.L.config()),D=o.a.useBasicFetch("narrow-selection"===n&&s&&h.F.getClassroomStudents(s.id)),q=o.a.useBasicFetch("narrow-selection"===n&&s&&h.F.getClassroomGroups(s.id));function H(){a.C$.trigger({application:p.O.SHARE_V2,action:f.e.ShareV2.OPEN_CLASSROOM,args:[e.objectId],params:{objectId:e.objectId,entityType:e.entityType}})}var U=!!R.data&&!!G.data&&!!V.data,W=!!q.data&&!!D.data,$="narrow-selection"===n?U&&W:U;return r.createElement(l.G,Object.assign({title:"Assign to ClickView classroom",showLoadingSpinner:!$,size:"lg",bodyClassName:"d-flex flex-column gap-3"},e),function(){var e,t,a,o,c,l;if(!U)return null;switch(n){case"select-classroom":return r.createElement(M,{classrooms:null!==(t=null===(e=G.data)||void 0===e?void 0:e.data)&&void 0!==t?t:[],selectedClassroom:s,onClassroomSelected:d,onSelectGroupsOrStudents:function(){return i("narrow-selection")},onClickCreateOpenClassroom:H});case"narrow-selection":return r.createElement(Q,{imageCdnUrl:V.data.imageCdnUrl,students:null!==(o=null===(a=null==D?void 0:D.data)||void 0===a?void 0:a.data)&&void 0!==o?o:[],groups:null!==(l=null===(c=null==q?void 0:q.data)||void 0===c?void 0:c.data)&&void 0!==l?l:[],classroom:s,onChangeRecipients:function(e){return g(e)},onChangeClassroom:function(){return i("select-classroom")}});case"settings":return r.createElement(z,{selectedClassroom:s,requireSignIn:N,enableInstantFeedback:w,preventSkippingAhead:b,message:O,onToggleRequireSignIn:function(){return C(!N)},onTogglePreventSkippingAhead:function(){return E(!b)},onToggleEnableInstantFeedback:function(){return x(!w)},onChangeClassroom:function(){return i("select-classroom")},onChangeMessage:j})}}(),r.createElement(T.u,{className:"settings"===n?"justify-content-end":"justify-content-between"},"settings"!==n&&r.createElement(T.u.Submit,{variant:"link",onClick:function(){console.log("Creating a new classroom..")},text:"Create a new classroom",className:"text-info p-0"}),r.createElement("div",null,r.createElement(T.u.Cancel,{variant:"link",onClick:function(){"select-classroom"!==n?["narrow-selection","settings"].includes(n)&&i("select-classroom"):e.closePopup()},text:"Back"}),r.createElement(T.u.Submit,{variant:"dark",onClick:function(){s&&(["select-classroom","narrow-selection"].includes(n)?i("settings"):"settings"!==n||function(){re(this,void 0,void 0,ee().mark((function t(){var n,r;return ee().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(s){t.next=2;break}return t.abrupt("return");case 2:return _(!0),t.next=5,F({objectId:e.objectId,preventShipping:b,instantFeedback:w,requireSignIn:N,message:O,recipients:v.length?v:[null==s?void 0:s.id],scopeId:null==s?void 0:s.id});case 5:n=t.sent,r={video:f.e.Insights.VIDEO_SHARE_OPTIONS,clip:f.e.Insights.CLIP_SHARE_OPTIONS,interactive:f.e.Insights.INTERACTIVE_SHARE_OPTIONS,series:f.e.Insights.SERIES_SHARE_OPTIONS,playlist:f.e.Insights.PLAYLIST_SHARE_OPTIONS},a.C$.trigger({application:p.O.INSIGHTS,action:r[e.entityType],args:[e.objectId],params:{shareId:n.shareId}}),_(!1);case 9:case"end":return t.stop()}}),t)})))}())},text:"settings"===n?"Assign":"Next",disabled:!s,showSpinner:A}))))}var oe=n(22392);function ie(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ce(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ce(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ce(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function se(e){var t,n,b=ie(r.useState(""),2),E=b[0],w=b[1],x=ie(r.useState(!0),2),k=x[0],N=x[1],C=o.a.useBasicFetch(g.o.getSharesByObjectId(e.objectId)),I=(null===(t=C.data)||void 0===t?void 0:t.filter((function(e){return e.type===v.y.Classroom})))||[],O=o.a.useBasicFetch(u.N.currentUser()),j=c.I.getFetchFunctionByType(e.entityType)(e.objectId,null===(n=O.data)||void 0===n?void 0:n.id),T=i.m.uniq(I.map(y.x.getClassroomIdFromShare).filter((function(e){return!!e}))),P=o.a.useBasicFetch(C.hasCompleted&&h.F.getClassroomsByIds(T));if("classroom"===E)return r.createElement(ae,Object.assign({},e,{closePopup:function(){return w("")}}));if("session"===E)return r.createElement(oe.SessionFlowView,Object.assign({},e,{closePopup:function(){return w("")}}));var A=[{id:"classroom",title:"ClickView classroom",description:"Only students from your chosen classroom can view the video.",image:m.W.Share.CLASSROOM_SHARE},{id:"session",title:"Open classroom",description:"Allow any students who have the PIN, QR code or link to access the video for 30 days.",image:m.W.Share.OPEN_CLASSROOM}],_=!!(O.data&&j.data&&C.data&&P.data);return r.createElement(l.G,{size:"lg",title:"Assign",showLoadingSpinner:!_,closePopup:e.closePopup,contentClassName:_?"bg-transparent border-0":"",bodyClassName:"p-0 d-flex flex-column gap-3"},_?r.createElement(r.Fragment,null,r.createElement(S,{options:A,onClick:function(e){return w(e.id)}}),I.length?r.createElement("div",{className:"bg-white rounded-3 p-3"},r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h3",{className:"h6 m-0 p-0"},"Previous assignments (",I.length,")"),r.createElement(s.h,{svgName:k?d.vn.ChevronUp:d.vn.ChevronDown,onClick:function(){return N(!k)}})),k&&r.createElement(L,{data:{shares:I,classrooms:P.data,entity:j.data},onClick:function(t){var n={video:f.e.Insights.VIDEO_SHARE_OPTIONS,clip:f.e.Insights.CLIP_SHARE_OPTIONS,interactive:f.e.Insights.INTERACTIVE_SHARE_OPTIONS,series:f.e.Insights.SERIES_SHARE_OPTIONS,playlist:f.e.Insights.PLAYLIST_SHARE_OPTIONS};a.C$.trigger({application:p.O.INSIGHTS,action:n[e.entityType],args:[e.objectId],params:{shareId:t.shareId}})}})):null):null)}},22392:(e,t,n)=>{n.r(t),n.d(t,{SessionFlowView:()=>b});var r=n(32735),a=n(39202),o=n(9111),i=n(13876),c=n(14070),s=n(97291),l=n(12528),u=n(35223),d=n(58518);function m(e){var t=e.requireSignIn,n=e.respectRatingsAndRestrictions,a=e.preventSkippingAhead,o=e.enableInstantFeedback,i=e.className,c=e.message,s=e.onToggleRequireSignIn,m=e.onToggleRespectRatingsAndRestrictions,f=e.onTogglePreventSkippingAhead,p=e.onToggleEnableInstantFeedback,h=e.onChangeMessage;return r.createElement("div",{className:"d-flex flex-column gap-4 ".concat(i)},r.createElement("div",{className:"d-flex align-items-center"},r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("div",null,r.createElement(l.f,{svgName:u.vn.VisibleOn,variant:"blue",textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("div",{className:"d-flex flex-column ms-2"},r.createElement("label",{className:"m-0"},"Open Session"),r.createElement("span",{className:"text-secondary"},"Anyone can view for 30 days")))),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("h4",{className:"h6 m-0"},"Access"),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(d.k,{title:"Require students to sign in",description:"Best way to gather student data linked to their ClickView accounts",toggled:t,onClick:s}),r.createElement(d.k,{title:"Respect ratings and restrictions of video",description:"Only students from Year 4 and above can view this video. Will require students to sign in.",toggled:n,onClick:m}))),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("h4",{className:"h6 m-0"},"Settings"),r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement(d.k,{title:"Prevent skipping ahead",description:"Students cannot skip ahead to parts of the video they have not watched",toggled:a,onClick:f}),r.createElement(d.k,{title:"Enable instant feedback",description:"Allow students to see feedback on their answers before continuing",toggled:o,onClick:p}))),r.createElement("div",{className:"d-flex flex-column gap-2"},r.createElement("label",{className:"m-0"},"Add a message (optional)"),r.createElement("textarea",{value:c,className:"form-control rounded w-100 h-100",placeholder:"Type a message...",onChange:function(e){return h(e.target.value)}})))}var f=n(86350);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function h(){h=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),c=new P(r||[]);return a(i,"_invoke",{value:O(e,n,c)}),i}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var m="suspendedStart",f="suspendedYield",v="executing",g="completed",y={};function b(){}function E(){}function S(){}var w={};l(w,i,(function(){return this}));var x=Object.getPrototypeOf,k=x&&x(x(A([])));k&&k!==n&&r.call(k,i)&&(w=k);var N=S.prototype=b.prototype=Object.create(w);function C(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function I(e,t){function n(a,o,i,c){var s=d(e[a],e,o);if("throw"!==s.type){var l=s.arg,u=l.value;return u&&"object"==p(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(u).then((function(e){l.value=e,i(l)}),(function(e){return n("throw",e,i,c)}))}c(s.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,n,r){var a=m;return function(o,i){if(a===v)throw Error("Generator is already running");if(a===g){if("throw"===o)throw i;return{value:e,done:!0}}for(r.method=o,r.arg=i;;){var c=r.delegate;if(c){var s=j(c,r);if(s){if(s===y)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===m)throw a=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=v;var l=d(t,n,r);if("normal"===l.type){if(a=r.done?g:f,l.arg===y)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(a=g,r.method="throw",r.arg=l.arg)}}}function j(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,j(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var o=d(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var i=o.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,y):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function A(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(p(t)+" is not iterable")}return E.prototype=S,a(N,"constructor",{value:S,configurable:!0}),a(S,"constructor",{value:E,configurable:!0}),E.displayName=l(S,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===E||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l(e,s,"GeneratorFunction")),e.prototype=Object.create(N),e},t.awrap=function(e){return{__await:e}},C(I.prototype),l(I.prototype,c,(function(){return this})),t.AsyncIterator=I,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var i=new I(u(e,n,r,a),o);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},C(N),l(N,s,"Generator"),l(N,i,(function(){return this})),l(N,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=A,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(T),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(s&&l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,y):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),T(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;T(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:A(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),y}},t}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var y=function(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{s(r.next(e))}catch(e){o(e)}}function c(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,c)}s((r=r.apply(e,t||[])).next())}))};function b(e){var t=(0,f.t)(e.objectId).createOpenSession,n=v(r.useState(!1),2),l=n[0],u=n[1],d=v(r.useState(!1),2),p=d[0],g=d[1],b=v(r.useState(!1),2),E=b[0],S=b[1],w=v(r.useState(!1),2),x=w[0],k=w[1],N=v(r.useState(""),2),C=N[0],I=N[1],O=v(r.useState(!1),2),j=O[0],L=O[1];return r.createElement(o.G,Object.assign({title:"Assign to an Open classroom",showLoadingSpinner:!1,size:"lg",bodyClassName:"d-flex flex-column gap-3"},e),r.createElement(m,{requireSignIn:E,respectRatingsAndRestrictions:x,enableInstantFeedback:p,preventSkippingAhead:l,message:C,onToggleRequireSignIn:function(){return S(!E)},onToggleRespectRatingsAndRestrictions:function(){return k(!x)},onTogglePreventSkippingAhead:function(){return u(!l)},onToggleEnableInstantFeedback:function(){return g(!p)},onChangeMessage:I}),r.createElement(i.u,null,r.createElement(i.u.Cancel,{variant:"link",onClick:function(){e.closePopup()},text:"Back"}),r.createElement(i.u.Submit,{variant:"dark",onClick:function(){return y(this,void 0,void 0,h().mark((function n(){var r,o;return h().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return L(!0),n.next=3,t({instantFeedback:p,preventSkipping:l,requireSignIn:E,respectRatingsAndRestrictions:x,objectId:e.objectId});case 3:r=n.sent,o={video:c.e.Insights.VIDEO_SHARE_OPTIONS,clip:c.e.Insights.CLIP_SHARE_OPTIONS,interactive:c.e.Insights.INTERACTIVE_SHARE_OPTIONS,series:c.e.Insights.SERIES_SHARE_OPTIONS,playlist:c.e.Insights.PLAYLIST_SHARE_OPTIONS},a.C$.trigger({application:s.O.INSIGHTS,action:o[e.entityType],args:[e.objectId],params:{shareId:r.shareId}});case 6:case"end":return n.stop()}}),n)})))},showSpinner:j,text:"Assign"})))}},82602:(e,t,n)=>{n.d(t,{WU:()=>l});var r=["second","minute","hour","day","week","month","year"],a=["秒","分钟","小时","天","周","个月","年"],o={},i=function(e,t){o[e]=t},c=[60,60,24,7,365/7/12,12];function s(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var l=function(e,t,n){var r=function(e,t){return(+(t?s(t):new Date)-+s(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,r=e=Math.abs(e),a=0;e>=c[a]&&a<c.length;a++)e/=c[a];return(e=Math.floor(e))>(0==(a*=2)?9:1)&&(a+=1),t(e,a,r)[n].replace("%s",e.toString())}(r,function(e){return o[e]||o.en_US}(t))};i("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=r[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),i("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=a[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
3
+ //# sourceMappingURL=7210-2e4563178c-lite.chunk.js.map