@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/7482-13e6f78c32-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,C,gHCxBMC,EAAwB,SAACC,GAC7B,MAAO,CACLJ,MAAO,CACLK,KAAM,MAERC,QAAS,CACPC,SAAS,GAEXC,MAAO,CACLR,MAAO,CACLK,KAAM,MAERI,OAAQ,CACNF,SAAS,GAEXG,cAAe,EACfC,kBAAmB,EACnBC,aAAa,EACbC,WAAW,EACXC,KAAM,IAERC,MAAO,CACLf,MAAO,CACLK,KAAMD,EACNY,OAAQ,EACRC,MAAO,KAETR,OAAQ,CACNQ,MAAO,KAETC,UAAW,GAEbC,OAAQ,CACNZ,SAAS,GAEXa,MAAO,CACLC,KAAM,SACNC,gBAAiB,cACjBC,OAAQ,QACRC,WAAY,IAEdC,YAAa,CACXC,OAAQ,CACNC,WAAY,CACVpB,SAAS,GAEXqB,qBAAqB,EACrBC,eAAgB,IAIxB,EAQM,SAAUC,EAAatC,GA2B3B,OACE,gBAAC,IAAe,CACduC,WAAY,IACZC,SA5BIC,EAAOzC,EAAM0C,UACbC,EAAqBhC,EAAsBX,EAAMY,OAEjDgC,EAAwC,QAA9B,YAAkBH,EAAKI,eAAO,eAAEJ,KAAKK,MAAK,SAACL,GAAmC,OAAKA,EAAKM,EAAI,CAAC,IAEtG,OAAP,wBACKJ,GAAkB,CACrB3B,MAAO,OAAF,wBACA2B,EAAmB3B,OAClB4B,EAAU,CACZtB,KAAM,IACJ,CACFA,IAAK,EACL0B,IAAK,IAGTzB,MAAO,OAAF,sCACAoB,EAAmBpB,OACnBvB,EAAMuB,OAAK,CACd0B,WAAYR,EAAKQ,aAEnBJ,OAAQJ,EAAKI,YAtBjB,I,EACQJ,EACAE,EAEAC,CA4BV,C,6FCpGA,SAAgB,OAAS,QAAQ,MAAQ,SCezC,IAAMM,EAAY,EAYZ,SAAUC,EAAmBnD,GACjC,OACE,gCACGA,EAAMoD,SAASC,OACd,sBAAIpD,UAAU,sBACXD,EAAMoD,SAASE,MAAM,EAAGJ,GAAWK,KAAI,SAACC,EAASC,GAAK,OACrD,sBAAIC,IAAKD,EAAOxD,UAAU,kCACxB,gBAAC0D,EAAA,EAAyB,CACxBC,KAAMJ,EACNK,YAAa7D,EAAM6D,YACnBC,gBAAiB,SACjBC,iBAAiB,OACjBC,iBAAe,EACfC,aAAa,EACbC,eAAgBlE,EAAMkE,iBAGxB,uBAAKjE,UAAU,qCACb,wBAAMA,UAAU,aAA+BkE,IAAvBX,EAAQY,WAA2B,KAAOC,KAAKC,MAA2B,IAArBd,EAAQY,YAAiB,KACtG,gBAACG,EAAA,EAAmB,CAACH,WAAYZ,EAAQY,WAAY9D,KAAM,mBAE1D,KAIT,uBAAKL,UAAU,eACb,uBAAKA,UAAS,UAAK,QAAY,SAASuE,IAAKxE,EAAMyE,WACnD,qBAAGxE,UAAU,sBAAsByE,wBAAyB,CAAEC,OAAQ3E,EAAM4E,kBAI7E5E,EAAMoD,SAASC,QAAUrD,EAAM6E,SAChC,gBAACC,EAAA,EAAO,CAACD,QAAS7E,EAAM6E,QAAS5E,UAAU,qBACxCD,EAAM+E,aAKjB,C,oHCjEA,SAAgB,YAAc,QAAQ,UAAY,S,sGCclD,IAAMC,EAAY,wBACZC,EAAYC,EAAA,mBAAiCF,GA0C7C,SAAUG,EAAenF,G,QACvBoF,EAIN,W,MACQC,EAA6B,CAAEC,MAAO,EAAGC,SAAU,GAEzD,OAAkB,QAAb,EAAAvF,EAAMwF,eAAO,eAAEnC,QAGbrD,EAAMwF,QAAQC,QAAO,SAACC,EAAKC,GAChC,IAAKA,EAAMC,KAAM,OAAOF,EAExB,IAAMG,EArDZ,SAAuBD,GACrB,OAAQA,GACN,IAAK,UACL,IAAK,gBACL,IAAK,MACL,IAAK,aACH,MAAO,QACT,IAAK,QACL,IAAK,OACL,IAAK,YACL,IAAK,UACH,MAAO,WAEb,CAwC6BE,CAAcH,EAAMC,MAE3C,OAAKC,GAELH,EAAIG,GAAkBH,EAAIG,GAAkBF,EAAMlF,MAE3CiF,GAJqBA,CAK9B,GAAGL,GAZMA,CAaX,CArBuBU,GACjBC,EAuBG3B,KAAKrB,IAAG,MAARqB,K,+CAAY4B,OAAOC,KAAKd,GAAgB7B,KAAI,SAAA4C,GAAQ,OAAIf,EAAee,EAAS,M,mjBAtBnFC,EA0BGH,OAAOC,KAAKd,GAAgBiB,QAAO,SAAAF,GAAQ,OAAIf,EAAee,KAAcH,CAAc,IA+C7FtD,EA3BG,CACLO,WAAYgD,OAAOC,KAAKd,GACxBvC,OAAQ,CAAC,CACPhB,KAAM,SACNyE,aAAc,EACdnE,WAAY,CACVpB,SAAS,EACTU,MAAO,IACP8E,QAAQ,EACRC,SAAU,QACVC,MAAM,GAERhE,KAAMwD,OAAOC,KAAKd,GAAgB7B,KAAI,SAAA4C,GACpC,IAAMO,EACe,IAAnBV,GAAwBZ,EAAee,KAAcH,EAEvD,MAAO,CACL/F,UAAW,GAAF,OAAkC,IAA7BmF,EAAee,GAAkB,YAAmB,cAAkB,YAAKO,EAA8B,GAAf,cACxGC,YAAaD,EAAe,EAAI,EAChCE,YAAaF,EAAe,QAAU,GACtC3D,EAAGqC,EAAee,GAEtB,OAON,OACE,gBAACpG,EAAA,EAAW,CACVS,MAAOyE,EAAU,SACjB9E,aAAa,wCACbE,QAAS,cAET,qBAAGJ,UAAU,SACG,QAAb,EAAAD,EAAMwF,eAAO,eAAEa,QAAO,SAAAV,GAAK,OAAIA,EAAMC,IAAI,IAAEvC,QAExC,gBAACwD,EAAA,EAAI,CACH7B,UAAWA,EACX8B,OAAO,cACPtE,QAAS,CACPuE,WAAYX,EAAW/C,OACvB2D,OAA8B,IAAtBZ,EAAW/C,OAAe+C,EAAW,GAAGa,cAAgB,QAIpE,gBAACJ,EAAA,EAAI,CACH7B,UAAWA,EACX8B,OAAO,eAKf,uBAAK7G,UAAU,6BACb,gBAACqC,EAAA,EAAY,CAAC1B,MAAOqE,EAAU,UAAWvC,UAAWA,EAAWnB,MAvE7D,CACLN,OAAQ,CACNiG,SAAS,EACTC,UAAW,WACT,MAAO,iGAAP,OAEmB,OAAW,yCAAiCC,KAAKC,MAAK,kCA/DnF,SAAuBzB,GACrB,IAAIvF,EAAU,GAEd,OAAQuF,GACN,IAAK,WACHvF,EAAU,aACV,MACF,IAAK,QACHA,EAAU,YACV,MACF,IAAK,SACHA,EAAU,YACV,MACF,QAAS,OAIX,OAAOiH,EAAA,UAAiBjH,GAASkH,QAAQ,cAAe,8BAC1D,CA8CgBC,CAAcJ,KAAKC,OAAM,mCAGjC,OAiER,C,oHCrKA,SAAgB,QAAU,QAAQ,0BAA4B,QAAQ,iCAAmC,SCazG,IAAMrC,EAAY,wBACZC,EAAYC,EAAA,mBAAiCF,GAO7C,SAAUyC,EAAezH,GAC7B,IAAM0H,EAAiB1H,EAAM2H,WAAWD,eAAiB,EAAIrD,KAAKC,MAAwC,IAAlCtE,EAAM2H,WAAWD,gBAAwB,KAEjH,OACE,gBAAC3H,EAAA,EAAW,CACVS,MAAOyE,EAAU,SACjB5E,QAAS,WACTF,aAAa,6BAEb,uBAAKF,UAAU,QACb,qBAAGA,UAAU,QACVyH,EAEG,gBAACb,EAAA,EAAI,CAAC7B,UAAWA,EAAW8B,OAAO,kBAAkBtE,QAAS,CAAEkF,eAAAA,KAEhE,gBAACb,EAAA,EAAI,CAAC7B,UAAWA,EAAW8B,OAAO,kBAGtCY,GACD,gBAAC5C,EAAA,EAAO,CAACD,QAAS7E,EAAM4H,eAAgB3H,UAAU,aAChD,gBAAC4G,EAAA,EAAI,CAAC7B,UAAWA,EAAW8B,OAAO,kBAKzC,uBAAK7G,UAAU,QACb,gBAAC4H,EAAA,EAAiB,CAChBF,WAAY3H,EAAM2H,WAClB1H,UAAW,aAIf,qBAAGA,UAAU,uBAAuByH,GAAkB,KAAI,KAC1D,qBAAGzH,UAAU,iCAAgC,gBAAC4G,EAAA,EAAI,CAAC7B,UAAWA,EAAW8B,OAAO,mBAGtF,C,mCC1DO,IAAMgB,EAAoB,CAC/BC,SAAU,OACVC,WAAY,uMACZC,WAAY,MACZC,MAAO,U,0ICYHjD,EAAY,qBADA,oCAoEZ,SAAUtB,EAA0B3D,GACxC,IA1CoB,E,EACpB4D,EAAMM,EAAgBF,EAyCtB,GAzCAJ,GADoB,EA0C8B5D,GAzClD4D,KAAMM,EAAc,EAAdA,eAAgBF,EAAe,EAAfA,gBAMlB,cAAeJ,EACV,CACLgC,MAAM,QAAkBhC,EAAMM,GAC9BiE,QAAS,GACTC,UAAW,MAIR,CACLxC,KAAM1B,GACF,QAAkBN,GAAM,GACxBI,EACE,mBAA0BJ,GAC1B,gBAAuBA,GAC7BuE,QAASvE,EAAKuE,QACdC,UAAsB,QAAX,EAAAxE,EAAKyE,cAAM,eAAEC,MAoBlB1C,EAAI,EAAJA,KAAMuC,EAAO,EAAPA,QAASC,EAAS,EAATA,UAEvB,OACE,gCACE,uBAAKnI,UAAS,UAAK,oBAAsB,YAAID,EAAM8D,gBAAe,oBAChE,gBAAC,IAAM,CACLW,SAAU2D,EACVvE,YAAa7D,EAAM6D,YACnB0E,SAAU,gBAAuB3C,EAAMuC,GACvCK,kBAAmB,cAAexI,EAAM4D,KACxCM,eAAgBlE,EAAMkE,eACtBuE,iBAAkB,EAAAlI,EAAA,SAItB,uBAAKN,UAAWD,EAAM+D,kBACpB,sBAAI9D,UAAU,kCACX2F,GAEF5F,EAAMiE,aAAe,OAAQjE,EAAM4D,MAAQ,qBAAG3D,UAAU,sBAAsBD,EAAM0I,WAAa1I,EAAM0I,WAAW1I,EAAM4D,MArFjI,SAAoBA,GAClB,IAAM+E,EAAW,gBAAuB/E,GAClCgF,EAAO,gBAAuBhF,GAEpC,GAAI+E,IAAa,UACf,OAAIC,IAAS,UACJ3D,EAAU,SAEZA,EAAU,SAGnB,IAAM4D,EAAY,iBAAwBjF,GAO1C,OAAIiF,aAAS,EAATA,EAAWjD,OAA2B,aAAnBiD,EAAUjD,KACxBiD,EAAUjD,KAEZX,EAAU,UACnB,CA+DyIyD,CAAW1I,EAAM4D,QAI1J,CAvCAD,EAA0BmF,SAAW,CACnC7E,aAAa,E,6LCpEf,SAAgB,gBAAkB,QAAQ,GAAK,QAAQ,aAAe,SCiBtE,IACMgB,EAAYC,EAAA,mBADA,mCAGlB,SAAS6D,EAAuBC,GAC9B,IAAMC,EAASC,EAAA,UAAoBF,EAAkB,UAC/CG,EAAYF,EAAOG,EAAA,QACnBC,EAAiBJ,EAAOG,EAAA,aACxBE,EAAaL,EAAOG,EAAA,kBAE1B,OAAID,GAAaE,GAAkBC,EAC1BrE,EAAU,2BAA4B,CAAEkE,UAAAA,EAAWE,eAAAA,EAAgBC,WAAAA,IAExEH,GAAaE,EACRpE,EAAU,qBAAsB,CAAEkE,UAAAA,EAAWE,eAAAA,IAElDF,GAAaG,EACRrE,EAAU,iBAAkB,CAAEkE,UAAAA,EAAWG,WAAAA,IAE9CD,GAAkBC,EACbrE,EAAU,sBAAuB,CAAEoE,eAAAA,EAAgBC,WAAAA,IAExDH,EACKlE,EAAU,QAAS,CAAEkE,UAAAA,IAE1BE,EACKpE,EAAU,aAAc,CAAEoE,eAAAA,IAE/BC,EACKrE,EAAU,SAAU,CAAEqE,WAAAA,SAD/B,CAEF,CAEA,SAASC,EAAevJ,G,cAChB4D,GAAuB,QAAV,EAAA5D,EAAMwJ,YAAI,eAAEC,UAAWL,EAAA,QAAmBpJ,EAAMwJ,KAC7DE,GAAiC,QAAV,EAAA1J,EAAMwJ,YAAI,eAAEC,UAAWL,EAAA,aAAwBpJ,EAAMwJ,KAC5EG,GAA2C,QAAV,EAAA3J,EAAMwJ,YAAI,eAAEC,UAAWL,EAAA,kBACzDpJ,EAAMwJ,KAELI,EAAwB,yFAE9B,OACE,kCACKhG,GACD,gBAACiG,EAAA,EAAO,CAACrJ,MAAK,UAAKoD,EAAKgC,KAAI,YAAIhC,EAAKuE,SAAW2B,UAAQ,EAACC,kBAAkB,eACzE,gBAACC,EAAA,EAAM,CACLvF,SAAqB,QAAX,EAAAb,EAAKyE,cAAM,eAAEC,IACvBzE,YAAa7D,EAAM6D,YACnB0E,SAAU0B,EAAA,cAAuBrG,EAAKgC,KAAMhC,EAAKuE,SACjD+B,aAAc,oBAIjBR,GACD,gBAACG,EAAA,EAAO,CAACrJ,MAAOkJ,EAAU9D,KAAMkE,UAAQ,EAACC,kBAAkB,eACzD,uBAAK9J,UAAW2J,GACd,gBAACO,EAAA,EAAU,CACT9J,QAAS,gBACT+J,QAAShK,EAAAG,EAAA,MACT8J,QAAQ,aAKbV,GACD,gBAACE,EAAA,EAAO,CAACrJ,MAAOmJ,EAAe/D,KAAMkE,UAAQ,EAACC,kBAAkB,eAC9D,uBAAK9J,UAAW2J,GACd,gBAACO,EAAA,EAAU,CACT9J,QAAS,WACTgK,SAAS,OAA4C,QAAvB,EAAAV,EAAeW,gBAAQ,eAAEC,YAOrE,CAOM,SAAUC,EAAwBxK,GACtC,OACE,uBAAKC,UAAS,UAAK,kBAAsB,YAAyB,OAArBD,EAAMyK,WAAsB,KAAY,KACnF,gBAACZ,EAAA,EAAO,CACNrJ,MAAOyE,EAAU,aACjB6E,UAAQ,EACRC,kBAAkB,kGAElB,gBAAC3J,EAAA,EAAY,CAACC,QAAS,eAAwBC,KAA2B,OAArBN,EAAMyK,WAAsBrK,EAAAG,EAAA,MAAyB,QAIlH,CAQM,SAAUmK,EAAiB1K,GAC/B,OACE,uBAAKC,UAAS,UAAK,kBAAsB,YAAyB,OAArBD,EAAMyK,WAAsB,KAAY,KACnF,gBAACZ,EAAA,EAAO,CACNrJ,MAAOR,EAAMa,MAAQoE,EAAU,cAC/B6E,UAAQ,EACRC,kBAAiB,yGAAoG/J,EAAMC,WAAa,KAExI,gBAACG,EAAA,EAAY,CAACC,QAAS,UAAmBC,KAA2B,OAArBN,EAAMyK,WAAsBrK,EAAAG,EAAA,MAAyB,QAI7G,CAeM,SAAUoK,EAAmB3K,GACjC,OACE,gBAAC4K,EAAA,EAAU,iBACL5K,EAAK,CACT6K,MAAO7K,EAAM8K,WACbC,WAAYxB,EACZyB,yBAAwB,UAAK,kBAAsB,YAAyB,OAArBhL,EAAMyK,WAAsB,KAAY,IAC/FQ,iBAAkBlC,EAClBmC,aAAclL,EAAMkL,aACpBC,cAAenL,EAAMmL,gBAG3B,CAhBAR,EAAmBS,aAAe,CAChCC,WAAY,E,uNCpId,IACMpG,EAAY,qBADA,uBAeLqG,EAAkB,CAC7BC,sBAAuB,SAAC/I,GACtB,IAAQgJ,EAA6DhJ,EAA7DgJ,aAAcC,EAA+CjJ,EAA/CiJ,QAASC,EAAsClJ,EAAtCkJ,cAAeC,EAAuBnJ,EAAvBmJ,OAAQC,EAAepJ,EAAfoJ,WAEtD,GAAIJ,IAAiB,WAAoBA,IAAiB,WACxD,MAAO,CAAEK,KAAM,eAAwBhL,KAAMoE,EAAUyG,EAAgB,uBAAyB,4BAMlG,IAAII,MAAMC,QAAQN,GAGlB,OAAQA,EAAQA,SACd,IAAK,SACH,MAAO,CAAEI,KAAM,eAAwBhL,KAAMoE,EAAU,sBACzD,IAAK,YACH,OAAIwG,EAAQO,qBACH,CAAEH,KAAM,eAAwBhL,KAAMoE,EAAU,kBAClD,CACL4G,KAAM,UACNhL,KAAMyK,EAAgBW,qBAAqBN,EAAQC,EAAYF,IAEnE,IAAK,mBACH,OAAID,EAAQO,qBACH,CAAEH,KAAM,UAAmBhL,KAAMoE,EAAUyG,EAAgB,uBAAyB,4BACtF,CACLG,KAAM,UACNhL,KAAMyK,EAAgBW,qBAAqBN,EAAQC,EAAYF,IAMnE,IAAK,aACL,IAAK,UACH,MAAO,CAAEG,KAAM,UAAmBhL,KAAMoE,EAAU,uBACpD,QACE,MAAO,CAAC,EAEd,EAEAiH,eAAgB,SAAC1J,GACf,IAAQ2J,EAAgD3J,EAAhD2J,eAAgBC,EAAgC5J,EAAhC4J,oBAAqBC,EAAW7J,EAAX6J,OAC7C,IAAKF,IAAmBC,EACtB,OAAOd,EAAgBC,sBAAsB/I,GAE/C,IAAK2J,EACH,MAAO,CAAEN,KAAM,UAAmBhL,KAAMoE,EAAU,aAEpD,IAAMqH,EAAU,YAAmBH,GAC7BI,EAAgB,gBAAuBJ,EAAgB,IAAIK,KAAQ,OAEzE,IAAKJ,EAAqB,CACxB,IAAI,EAAOE,EACPrH,EAAU,eACVA,EAAU,SAAU,CAAEwH,KAAMF,IAKhC,OAHIF,IAAW,cACb,EAAOpH,EAAU,YAEZ,CAAE4G,KAAM,WAAoBhL,KAAA,EACpC,CAED,IAAIA,EAAOyL,EACPrH,EAAU,uBACVA,EAAU,iBAAkB,CAAEwH,KAAMF,IAKxC,OAHIF,IAAW,cACbxL,EAAOoE,EAAU,oBAEZ,CAAE4G,KAAM,UAAmBhL,KAAAA,EACpC,EAEAoL,qBAAoB,SAACS,EAAmBd,EAAyBF,G,MAC/D,IAAKgB,IAAUd,EACb,OAAO,KAET,GAAIF,EACF,OAAOzG,EAAU,wBAEnB,IAAK,gBAAwByH,GAC3B,OAAOzH,EAAU,oBAEnB,IAAM0H,EAAc,2BAA4D,QAAnB,EAAAD,EAAME,qBAAa,eAAEvF,OAKlF,GAAIsF,IAAgBA,EAAY9D,UAC9B,OAAO5D,EAAU,cAEnB,IAEI4H,EACAC,EAE8B,EAL5BC,EAAS,cAAsBL,GAGF,E,64BAAA,CAEXd,GAAU,IAAlC,IAAK,EAAL,qBAAoC,KAAzB/C,EAAS,UAIbgE,GAAgBhE,EAAUxB,MAAQwF,EAAaxF,SAClDwF,EAAehE,GAKb8D,GAAe9D,EAAUxB,OAASsF,EAAY9D,WAM9CkE,GAAUlE,EAAUkE,OAAO1F,MAAQ0F,EAAO1F,SAMzCyF,GAAuBjE,EAAUxB,MAAQyF,EAAoBzF,SAChEyF,EAAsBjE,EACzB,CAED,+BAGA,OAAKiE,EAQqB,IAAtBlB,EAAWvI,OACN4B,EAAU,iBAMf6H,EAAoBzF,QAAUwF,EAAaxF,MACtCpC,EAAU,eAAgB,CAAE4D,UAAWgE,EAAajH,OAEtDX,EAAU,iBAAkB,CAAE4D,UAAWiE,EAAoBlH,OAjB3DX,EAAU,YAkBrB,E,mFCnKIA,EAAY,qBADA,qBA6BZ,SAAU2F,EAAW5K,GACzB,IAAMgN,EAAiBhN,EAAM6K,MAAMxH,OAASrD,EAAMqL,WAC9CrL,EAAM6K,MAAMvH,MAAM,EAAGtD,EAAMqL,WAAa,GACxCrL,EAAM6K,MAEJoC,EAAcjN,EAAM6K,MAAMxH,OAAS2J,EAAe3J,OACpDrD,EAAM6K,MAAMvH,MAAMtD,EAAMqL,WAAa,GACrC,GAEE6B,EAAalN,EAAM+K,WACnBoC,EAAoBF,EAAY5J,OAChC+J,EAAkC,OAArBpN,EAAMyK,WAAsB,EAAI,EAkBnD,SAAS4C,EAAgBC,GACvB,MAAO,CACLC,UAAW,cAAF,QAAiBvN,EAAMkL,aAAeoC,EAAM,EAAIA,IAAQF,EAAU,OAC3EI,OAAQxN,EAAMqL,WAAaiC,EAE/B,CAEA,OAA8B,IAA1BN,EAAe3J,QAAuC,IAAvB4J,EAAY5J,OACtC,iCAGP,uBACEpD,UAAU,SACVwB,MAlBK,CACLgM,YAAa,IAAF,QAAQT,EAAe3J,OAAS,GAAM4J,EAAY5J,OAAS,EAAI,IAAMrD,EAAMkL,aAAe,EAAI,IAAMkC,EAAU,QAmBxHpN,EAAMkL,cACL,uBAAKzJ,MAAO,CAAE+L,OAAQxN,EAAMqL,WAAa,IACvC,gBAAC,KAAgB,CAACxK,KAAMb,EAAMmL,cAAeV,WAAYzK,EAAMyK,WAAYxK,UAAU,wBAGxF+M,EAAezJ,KAAI,SAACiG,EAAM8D,GAAG,OAC5B,uBACErN,UAAS,UAAKD,EAAMgL,0BAA4B,IAAMtH,IAAK8F,EAAKkE,GAChEjM,MAAO4L,EAAgBC,IAEvB,gBAACJ,EAAU,CACT1D,KAAMA,EACN3F,YAAa7D,EAAM6D,YACnBJ,MAAO6J,EACPjC,WAAYrL,EAAMqL,aAEhB,MAGL4B,EAAY5J,QACb,uBACEpD,UAAS,UAAKD,EAAMgL,0BAA4B,GAAE,4BAClDvJ,MAAO,CAAE8L,UAAW,cAAF,OAAgBP,EAAe3J,QAAU+J,EAAU,OAAOI,OAAQxN,EAAMqL,WAAa2B,EAAe3J,SAEtH,gBAAC,IAAO,CAAC7C,MAtDXR,EAAMiL,iBACDjL,EAAMiL,iBAAiBgC,GAE5BjN,EAAM2N,cACD1I,EAAkC,UAAxBjF,EAAM2N,cAA4B,QAAU,UAAW,CAAElN,MAAO0M,EAAmBpG,WAAYoG,IAE3GlI,EAAU,QAAS,CAAExE,MAAO0M,EAAmBpG,WAAYoG,IAgD9BrD,UAAQ,EAACC,kBAAkB,eACvD,uBAAK9J,UAAS,yGAAoGD,EAAM4N,iBAAmB,KAAI,WACxIX,EAAY5J,WAO/B,CAjFAuH,EAAWQ,aAAe,CACxBC,WAAY,E,uwBCnBd,IAAMrG,EAAY,oBASZ,SAAU6I,EAAkB7N,GAsBhC,OACE,uBAAKC,UAAS,WAAMD,EAAM8N,WAAa,SAAW,uBAChD,uBAAK7N,UAAYD,EAAM8N,UAAkC,GAAtB,qBAA2B9N,EAAMU,UACpE,uBACET,UAAYD,EAAM8N,UAAoG,GAAxF,GAAH,OAAM,aAAe,uEAE9C9N,EAAM8N,WACN,uBAAK7N,UAAU,4BACb,uBAAKA,UAAU,OAAOuE,IAAK,8BAAqCuJ,MAAO,MACvE,sBAAI9N,UAAU,WAAU,gBAAC,IAAI,CAAC+E,UAAWA,EAAW8B,OAAO,kBAC3D,qBAAG7G,UAAU,QAAO,gBAAC,IAAI,CAAC+E,UAAWA,EAAW8B,OAAO,sBACvD,gBAAC,IAAU,CAACzG,QAAS,WAAoBJ,UAAU,eAAe4E,QAhC5E,W,MACE,GAAI7E,EAAMgO,eAAgB,CACxB,IAAMC,EAAO,SACV,UAAmB,kCACnB,SAAkB,iCAClB,gBAAyB,wCAG5B,MAAO,CACLC,YAAa,aACbC,OAAQF,EAAQjO,EAAM0M,MAAMjD,QAC5B2E,KAAM,CAAY,QAAX,EAAApO,EAAM0M,aAAK,eAAEgB,IACpBW,OAAQ,CACNC,QAAStO,EAAMsO,SAGpB,CAED,OAAO,QAAgBtO,EAAM0M,MAC/B,CAaqF6B,IACzE,gBAAC,IAAI,CAACvJ,UAAWA,EAAW8B,OAAO,aAOjD,C,wEC3DM9B,EAAY,wBAcZ,SAAUwJ,EAAaxO,GAC3B,IAAQyO,EAAoBzO,EAApByO,gBAER,OACE,uBAAKxO,UAAU,sEACb,wBAAMA,UAAU,eAAc,gBAAC,IAAI,CAAC+E,UAAWA,EAAW8B,OAAS2H,EAAgC,WAAd,gBAEnFA,GACA,gBAAC,KAAgB,CAAC5N,KAAMb,EAAMmL,cAAeV,WAAW,KAAKxK,UAAU,uBAGxEwO,KAAoBA,aAAe,EAAfA,EAAiBpL,SACpC,gBAAC,KAAuB,CAACoH,WAAW,OAGrCgE,GACC,gBAAC,KAAkB,CACjB3D,WAAY2D,EACZ5K,YAAa7D,EAAM6D,YACnBwH,WAAYrL,EAAMqL,WAClBZ,WAAW,KACXS,aAAclL,EAAMkL,aACpBC,cAAenL,EAAMmL,gBAK/B,CA/BAqD,EAAapD,aAAe,CAC1BC,WAAY,E,mCChBd,SAAgB,gBAAkB,QAAQ,cAAgB,QAAQ,YAAc,QAAQ,gBAAkB,QAAQ,iBAAmB,QAAQ,iCAAmC,Q,mCCAhL,SAAgB,KAAO,QAAQ,SAAW,Q,oCCD1C,IAAIqD,EAAQ,CAAC,SAAU,SAAU,OAAQ,MAAO,OAAQ,QAAS,QCA7DC,EAAQ,CAAC,IAAK,KAAM,KAAM,IAAK,IAAK,KAAM,KCO1CC,EAAU,CAAC,EAMJC,EAAW,SAAUC,EAAQC,GACpCH,EAAQE,GAAUC,CACtB,ECXIC,EAAY,CACZ,GACA,GACA,GACA,EACA,IAAM,EAAI,GACV,IAOG,SAASC,EAAOC,GACnB,OAAIA,aAAiB1C,KACV0C,GAENC,MAAMD,IAAU,QAAQE,KAAKF,GACvB,IAAI1C,KAAK6C,SAASH,KAC7BA,GAASA,GAAS,IAEbI,OACA/H,QAAQ,QAAS,IACjBA,QAAQ,IAAK,KACbA,QAAQ,IAAK,KACbA,QAAQ,YAAa,SACrBA,QAAQ,IAAK,QACbA,QAAQ,qBAAsB,SAC5B,IAAIiF,KAAK0C,GACpB,CCzBO,IAAIK,EAAS,SAAUC,EAAMV,EAAQW,GAExC,IAAIC,EDgFD,SAAiBF,EAAMG,GAE1B,SADcA,EAAeV,EAAOU,GAAgB,IAAInD,OACpCyC,EAAOO,IAAS,GACxC,CCnFc,CAAQA,EAAMC,GAAQA,EAAKE,cAErC,OD4BG,SAAoBC,EAAMC,GAyB7B,IAhBA,IAAIC,EAAQF,EAAO,EAAI,EAAI,EAWvBG,EAJJH,EAAOvL,KAAK2L,IAAIJ,GAQZtC,EAAM,EACHsC,GAAQZ,EAAU1B,IAAQA,EAAM0B,EAAU3L,OAAQiK,IACrDsC,GAAQZ,EAAU1B,GAgBtB,OAJAsC,EAAOvL,KAAK4L,MAAML,KAEE,IADpBtC,GAAO,GACiB,EAAI,KACxBA,GAAO,GACJuC,EAAWD,EAAMtC,EAAKyC,GAAUD,GAAOvI,QAAQ,KAAMqI,EAAKM,WACrE,CCvEW,CAAWR,EFSC,SAAUZ,GAC7B,OAAOF,EAAQE,IAAWF,EAAe,KAC7C,CEX2B,CAAUE,GACrC,ECNAD,EAAS,SLNM,SAAUe,EAAMtC,GAC3B,GAAY,IAARA,EACA,MAAO,CAAC,WAAY,aACxB,IAAI6C,EAAOzB,EAAMrK,KAAK4L,MAAM3C,EAAM,IAGlC,OAFIsC,EAAO,IACPO,GAAQ,KACL,CAACP,EAAO,IAAMO,EAAO,OAAQ,MAAQP,EAAO,IAAMO,EAC7D,IKAAtB,EAAS,SJPM,SAAUe,EAAMtC,GAC3B,GAAY,IAARA,EACA,MAAO,CAAC,KAAM,OAClB,IAAI6C,EAAOxB,KAASrB,EAAM,IAC1B,MAAO,CAACsC,EAAO,IAAMO,EAAO,IAAUP,EAAO,IAAMO,EAAO,IAC9D,G","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/components/insight-chart/InsightChart.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/insight-student-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insight-student-list/InsightStudentList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/insight-devices.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/devices/InsightDevices.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/insight-heatmap.scss","file:///app/packages/libs/shared/src/apps/analytics/components/insights/heatmap/InsightHeatmap.tsx","file:///app/packages/libs/shared/src/apps/analytics/constants/ChartStyles.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/avatar-list/AvatarList.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/InsightsShareMask.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/shared-to-pill/SharedToPill.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-mask/insights-mask.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"sAmpy\",\"count\":\"faDs4\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './insight-card.scss';\n\ninterface InsightCardProps extends React.PropsWithChildren {\n svgName: string;\n svgClassName: string;\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function InsightCard(props: InsightCardProps) {\n return (\n <section className='d-flex flex-column border rounded p-3 h-100'>\n <div className={`d-flex ${props.subtitle ? 'align-items-top' : 'align-items-center'} mb-2`}>\n <div className={`${styles.icon} ${props.svgClassName} rounded-circle d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={props.svgName} size={SvgContainerSize.Small} />\n </div>\n <div className='d-flex flex-column ms-2'>\n <h2 className='h6 mb-0'>{props.title}</h2>\n </div>\n {typeof props.count === 'number' && (\n <div className={`${styles.count} d-flex justify-content-center align-items-center bg-light rounded-circle ms-auto`}>\n {props.count}\n </div>\n )}\n </div>\n {props.children}\n </section>\n );\n}","import React from 'react';\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\n\nconst getStaticChartOptions = (label: string): Highcharts.Options => {\n return {\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n enabled: false\n },\n gridLineWidth: 0,\n tickPixelInterval: 1,\n startOnTick: false,\n endOnTick: false,\n min: -0.2\n },\n xAxis: {\n title: {\n text: label,\n margin: 8,\n style: CHART_FONT_STYLES\n },\n labels: {\n style: CHART_FONT_STYLES\n },\n lineWidth: 0\n },\n legend: {\n enabled: false\n },\n chart: {\n type: 'column',\n backgroundColor: 'transparent',\n height: '160px',\n spacingTop: 20\n },\n plotOptions: {\n column: {\n dataLabels: {\n enabled: false\n },\n enableMouseTracking: false,\n minPointLength: 8\n }\n }\n };\n};\n\ninterface InsightChartProps {\n label: string;\n chartData: ChartData;\n xAxis?: Highcharts.XAxisOptions;\n}\n\nexport function InsightChart(props: InsightChartProps) {\n function getChartOptions(): Highcharts.Options {\n const data = props.chartData;\n const staticChartOptions = getStaticChartOptions(props.label);\n\n const hasData = ArrayHelper.first(data.series)?.data.some((data: Highcharts.PointOptionsObject) => data.y > 0);\n\n return {\n ...staticChartOptions,\n yAxis: {\n ...staticChartOptions.yAxis,\n ...(hasData ? {\n min: -0.2\n } : {\n min: 0,\n max: 1\n })\n },\n xAxis: {\n ...staticChartOptions.xAxis,\n ...props.xAxis,\n categories: data.categories\n },\n series: data.series\n };\n }\n\n return (\n <HighchartsReact\n highcharts={Highcharts}\n options={getChartOptions()}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"uMuZt\",\"image\":\"WdKiU\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { ProgressCircleSize } from 'libs/shared/components/percentage-indicator/PercentageIndicatorUtils';\n\nimport styles from './insight-student-list.scss';\n\ntype UserPercentage = UserOrAnonSession & {\n percentage?: number;\n}\n\nconst MAX_ITEMS = 3;\n\ninterface InsightStudentListProps {\n students: UserPercentage[];\n imageUrl: string;\n imageCdnUrl: string;\n description: string;\n anonymiseUsers: boolean;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\nexport function InsightStudentList(props: InsightStudentListProps) {\n return (\n <>\n {props.students.length ? (\n <ul className='list-unstyled mb-2'>\n {props.students.slice(0, MAX_ITEMS).map((student, index) => (\n <li key={index} className='d-flex align-items-center mb-2'>\n <UserRecipientItemMetadata\n user={student}\n imageCdnUrl={props.imageCdnUrl}\n avatarClassName={styles.avatar}\n detailsClassName='ms-2'\n showDisplayName\n showSubText={false}\n anonymiseUsers={props.anonymiseUsers}\n />\n\n <div className='d-flex align-items-center ms-auto'>\n <span className='me-2'>{student.percentage === undefined ? '- ' : Math.round(student.percentage * 100)}%</span>\n <PercentageIndicator percentage={student.percentage} size={ProgressCircleSize.ExtraSmall} />\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <div className='text-center'>\n <img className={`${styles.image} mb-2`} src={props.imageUrl} />\n <p className='text-secondary mb-0' dangerouslySetInnerHTML={{ __html: props.description }} />\n </div>\n )}\n\n {!!props.students.length && props.appLink && (\n <AppLink appLink={props.appLink} className='text-info mt-auto'>\n {props.appLinkText}\n </AppLink>\n )}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"purpleChart\":\"OPcvi\",\"grayChart\":\"HlWj7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightChart } from 'libs/shared/apps/analytics/components/insight-chart/InsightChart';\nimport { CHART_FONT_STYLES } from 'libs/shared/apps/analytics/constants/ChartStyles';\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { ChartData } from 'libs/shared/apps/analytics/interfaces/ChartData';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary, SvgHelper } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-devices.scss';\n\nconst namespace = 'shared.insightDevices';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n// Names from UserAgentHelper.getOperatingSystem()\nfunction getDeviceType(name: string) {\n switch (name) {\n case 'Android':\n case 'Windows Phone':\n case 'iOS':\n case 'BlackBerry':\n return 'Phone';\n case 'Linux':\n case 'Unix':\n case 'Macintosh':\n case 'Windows':\n return 'Computer';\n }\n}\n\nfunction getDeviceIcon(name: string) {\n let svgName = '';\n \n switch (name) {\n case 'Computer':\n svgName = cvSvgLibrary.Monitor;\n break;\n case 'Phone':\n svgName = cvSvgLibrary.Mobile;\n break;\n case 'Tablet':\n svgName = cvSvgLibrary.Tablet;\n break;\n default: return;\n }\n \n // Default svg attributes causes Highcharts error\n return SvgHelper.getSvg(svgName).replace(/<svg[^>]*>/g, '<svg class=\"svg-container\">');\n}\n\ninterface InsightDevicesProps {\n osCount: GroupedAnalyticsCount[]\n}\n\nexport function InsightDevices(props: InsightDevicesProps) {\n const categoriesData = getCategoriesData();\n const topDeviceCount = getTopDeviceCount();\n const topDevices = getTopDevices();\n\n function getCategoriesData() {\n const defaultDevices: HashObject = { Phone: 0, Computer: 0 };\n\n if (!props.osCount?.length)\n return defaultDevices;\n\n return props.osCount.reduce((acc, group) => {\n if (!group.name) return acc;\n\n const deviceCategory = getDeviceType(group.name);\n\n if (!deviceCategory) return acc;\n\n acc[deviceCategory] = acc[deviceCategory] + group.count;\n\n return acc;\n }, defaultDevices);\n }\n\n function getTopDeviceCount() {\n return Math.max(...Object.keys(categoriesData).map(category => categoriesData[category]));\n }\n\n function getTopDevices() {\n return Object.keys(categoriesData).filter(category => categoriesData[category] === topDeviceCount);\n }\n\n function getXAxisLabelIcons(): any {\n return {\n labels: {\n useHTML: true,\n formatter: function () {\n return `\n <div class=\"d-flex flex-column align-items-center\">\n <span class=\"${styles.font} font-size-sm text-dark mb-1\">${this.value}</span>\n ${getDeviceIcon(this.value)}\n </div>\n `;\n }\n }\n };\n }\n\n function getChartData(): ChartData {\n return {\n categories: Object.keys(categoriesData),\n series: [{\n type: 'column',\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n overflow: 'allow',\n crop: false\n },\n data: Object.keys(categoriesData).map(category => {\n const highestCount =\n topDeviceCount !== 0 && categoriesData[category] === topDeviceCount;\n\n return {\n className: `${categoriesData[category] === 0 ? styles.grayChart : styles.purpleChart} ${!highestCount ? 'opacity-25' : ''}`,\n borderWidth: highestCount ? 2 : 0,\n borderColor: highestCount ? 'black' : '',\n y: categoriesData[category]\n };\n })\n }]\n };\n }\n\n const chartData = getChartData();\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgClassName='bg-light-ultramarine text-ultramarine'\n svgName={cvSvgLibrary.Monitor}\n >\n <p className='mb-0'>\n {props.osCount?.filter(group => group.name).length\n ? (\n <Text\n namespace={namespace}\n phrase='description'\n options={{\n smartCount: topDevices.length,\n device: topDevices.length === 1 ? topDevices[0].toLowerCase() : null\n }}\n />\n ) : (\n <Text\n namespace={namespace}\n phrase='notViewed'\n />\n )}\n </p>\n\n <div className='position-relative mt-auto'>\n <InsightChart label={getPhrase('device')} chartData={chartData} xAxis={getXAxisLabelIcons()} />\n </div>\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heatMap\":\"Rfr9N\",\"heatMapTimepointIndicator\":\"s6JbA\",\"heatMapTimepointIndicatorVisible\":\"mgjWX\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EngagementHeatMap } from 'libs/shared/apps/analytics/components/engagement-heat-map/EngagementHeatMap';\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Engagement } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insight-heatmap.scss';\n\nconst namespace = 'shared.insightHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightHeatmapProps {\n engagement: Engagement;\n heatmapAppLink: Core.AppLink;\n}\n\nexport function InsightHeatmap(props: InsightHeatmapProps) {\n const engagementRate = props.engagement.engagementRate > 0 ? Math.round(props.engagement.engagementRate * 100) : null;\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Timer}\n svgClassName='bg-light-green text-green'\n >\n <div className='mb-2'>\n <p className='mb-0'>\n {engagementRate\n ? (\n <Text namespace={namespace} phrase='everyoneWatched' options={{ engagementRate }} />\n )\n : <Text namespace={namespace} phrase='notWatched' />\n }\n </p>\n {!!engagementRate &&\n <AppLink appLink={props.heatmapAppLink} className='text-info'>\n <Text namespace={namespace} phrase='viewHeatmap' />\n </AppLink>\n }\n </div>\n\n <div className='mb-2'>\n <EngagementHeatMap\n engagement={props.engagement}\n className={styles.heatMap}\n />\n </div>\n\n <p className='h3 text-center mb-2'>{engagementRate || '--'}%</p>\n <p className='text-center mb-0 font-size-sm'><Text namespace={namespace} phrase='amountWatched' /></p>\n </InsightCard>\n );\n}","export const CHART_FONT_STYLES = {\n fontSize: '12px',\n fontFamily: `\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\"`,\n fontWeight: '400',\n color: '#313543'\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: UserOrAnonSession,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if ('sessionId' in user) {\n return {\n name: anonymiseUserName(user, anonymiseUsers),\n surname: '',\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: UserOrAnonSession;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={'sessionId' in props.user}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {name}\n </h4>\n {props.showSubText && 'id' in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\",\"sm\":\"EgJ0v\",\"sharedAvatar\":\"cW0NT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacyResponse;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy.privacy) {\n case 'public':\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case 'protected':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case 'just_my_customer':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n /**\n * Because we plan to add restricted management later \n * for the time being we treat is the same as private \n */\n case 'restricted':\n case 'private':\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport styles from './insights-mask.scss';\n\nconst namespace = 'lite.insightsMask';\n\ninterface InsightsShareMaskProps extends React.PropsWithChildren {\n hasShared: boolean;\n video: VideoTypes;\n hasShareFlowV2?: boolean;\n shareId?: string;\n}\n\nexport function InsightsShareMask(props: InsightsShareMaskProps) {\n function buildAppLink() {\n if (props.hasShareFlowV2) {\n const actions: Partial<Record<MasterType, string>> = {\n [MasterType.Video]: Actions.Insights.VIDEO_SHARE_OPTIONS,\n [MasterType.Clip]: Actions.Insights.CLIP_SHARE_OPTIONS,\n [MasterType.Interactive]: Actions.Insights.INTERACTIVE_SHARE_OPTIONS\n };\n \n return {\n application: AppChannels.INSIGHTS,\n action: actions[props.video.typeId],\n args: [props.video?.id],\n params: {\n shareId: props.shareId\n }\n };\n }\n\n return getShareAppLink(props.video);\n }\n\n return (\n <div className={`${!props.hasShared && styles.mask} position-relative`}>\n <div className={!props.hasShared ? 'position-absolute' : ''}>{props.children}</div>\n <div\n className={!props.hasShared ? `${styles.backdrop} d-flex flex-column align-items-center justify-content-start py-5` : ''}\n >\n {!props.hasShared && (\n <div className='text-center p-5 m-5 w-50'>\n <img className='mb-3' src={ImageUrls.Insights.SEND_PAPER_PLANE} width={288} />\n <h2 className='h3 mb-3'><Text namespace={namespace} phrase='shareHeading' /></h2>\n <p className='mb-3'><Text namespace={namespace} phrase='shareDescription' /></p>\n <IconButton svgName={cvSvgLibrary.Share} className='btn btn-dark' appLink={buildAppLink()}>\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { AnonymousSharedToAvatar, SharedLinkAvatar, SharedToAvatarList } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.sharedToPill';\n\ninterface SharedToPillProps {\n shareRecipients: BaseObject[];\n hasShareLink?: boolean;\n maxAvatars?: number;\n imageCdnUrl: string;\n shareLinkText?: string;\n}\n\nSharedToPill.defaultProps = {\n maxAvatars: 3\n};\n\nexport function SharedToPill(props: SharedToPillProps) {\n const { shareRecipients } = props;\n\n return (\n <div className='d-flex align-items-center bg-gray-100 rounded-pill w-fit gap-2 p-2'>\n <span className='text-nowrap'><Text namespace={namespace} phrase={!shareRecipients ? 'sharedVia' : 'sharedTo'} /></span>\n\n {!shareRecipients &&\n <SharedLinkAvatar text={props.shareLinkText} avatarSize='sm' className='bg-dark text-white' />\n }\n\n {shareRecipients && !shareRecipients?.length &&\n <AnonymousSharedToAvatar avatarSize='sm' />\n }\n\n {shareRecipients &&\n <SharedToAvatarList\n recipients={shareRecipients}\n imageCdnUrl={props.imageCdnUrl}\n maxAvatars={props.maxAvatars}\n avatarSize='sm'\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"VRTes\",\"backdrop\":\"XzVXl\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["InsightCard","props","className","subtitle","svgClassName","SvgContainer","svgName","size","S","title","count","children","getStaticChartOptions","label","text","credits","enabled","yAxis","labels","gridLineWidth","tickPixelInterval","startOnTick","endOnTick","min","xAxis","margin","style","lineWidth","legend","chart","type","backgroundColor","height","spacingTop","plotOptions","column","dataLabels","enableMouseTracking","minPointLength","InsightChart","highcharts","options","data","chartData","staticChartOptions","hasData","series","some","y","max","categories","MAX_ITEMS","InsightStudentList","students","length","slice","map","student","index","key","UserRecipientItemMetadata","user","imageCdnUrl","avatarClassName","detailsClassName","showDisplayName","showSubText","anonymiseUsers","undefined","percentage","Math","round","PercentageIndicator","src","imageUrl","dangerouslySetInnerHTML","__html","description","appLink","AppLink","appLinkText","namespace","getPhrase","LanguageService","InsightDevices","categoriesData","defaultDevices","Phone","Computer","osCount","reduce","acc","group","name","deviceCategory","getDeviceType","getCategoriesData","topDeviceCount","Object","keys","category","topDevices","filter","borderRadius","inside","overflow","crop","highestCount","borderWidth","borderColor","Text","phrase","smartCount","device","toLowerCase","useHTML","formatter","this","value","SvgHelper","replace","getDeviceIcon","InsightHeatmap","engagementRate","engagement","heatmapAppLink","EngagementHeatMap","CHART_FONT_STYLES","fontSize","fontFamily","fontWeight","color","surname","avatarUrl","avatar","url","initials","showAnonymousUser","anonymousSvgSize","getSubText","userType","role","yearGroup","defaults","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","MasterType","classroomCount","groupCount","SharedToAvatar","item","typeId","classroom","classroomGroup","svgContainerClassName","Tooltip","spanHack","spanHackClassName","Avatar","UserHelper","extraClasses","IconCircle","svgSize","variant","metadata","colour","AnonymousSharedToAvatar","avatarSize","SharedLinkAvatar","SharedToAvatarList","AvatarList","items","recipients","avatarItem","avatarContainerClassname","getHiddenTooltip","hasShareLink","shareLinkText","defaultProps","maxAvatars","ShareLinkHelper","getPrivateIconAndText","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","Array","isArray","overrideRestrictions","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","maxYearGroup","minAllowedYearGroup","rating","itemsToDisplay","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getAvatarStyles","idx","transform","zIndex","marginRight","id","roleToDisplay","numberClassname","InsightsShareMask","hasShared","width","hasShareFlowV2","actions","application","action","args","params","shareId","buildAppLink","SharedToPill","shareRecipients","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","isNaN","test","parseInt","trim","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","abs","floor","toString","unit"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9040],{39902:(e,t,a)=>{a.d(t,{F:()=>v,f:()=>m});var n=a(32735),r=a(20354),i=a(75896);function s(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(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 l(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function d(e){return d="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},d(e)}function c(e,t,a){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=d(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var u=50;function m(e,t){var a=i.m.chunk(e,u).map((function(e){return t(i.m.uniq(e))})),n=r.a.useBasicFetchAll(a),s=i.m.flatten(n.data),l=n.data.length?s.reduce((function(e,t){return Object.assign(Object.assign({},e),c({},t.id,t))}),{}):null;return{itemsArr:s,items:l,isFetching:n.isFetching}}function v(e,t,a){var o,m,v,p,h=a||function(e){return"object"===d(e)?e.id:e},g=n.useRef(new Set),f=(v=n.useState([]),p=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,l=[],o=!0,d=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(l.push(n.value),l.length!==t);o=!0);}catch(e){d=!0,r=e}finally{try{if(!o&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(d)throw r}}return l}}(v,p)||l(v,p)||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.")}()),y=f[0],b=f[1];n.useEffect((function(){if(null==e?void 0:e.length){var a=[];e.forEach((function(e){var t=h(e);g.current.has(t)||(a.push(e),g.current.add(t))})),a.length&&b((function(e){return[].concat(s(e),s(i.m.chunk(a,u).map(t)))}))}}),[null==e?void 0:e.length]);var E=r.a.useBasicFetchAll(y),I=i.m.flatten(E.data),A=E.data.length?I.reduce((function(e,t){return Object.assign(Object.assign({},e),c({},h(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(m=null===(o=E.responses)||void 0===o?void 0:o[0])||void 0===m?void 0:m.hasCompleted),itemsArr:I,items:A,isFetching:E.isFetching}}},50782:(e,t,a)=>{a.d(t,{R:()=>A});var n=a(32735),r=a(82602),i=a(20354),s=a(74901),l=a(40003),o=a(30439),d=a(65853),c=a(64249),u=a(91693),m=a(83345),v=a(39151),p=a(1666),h=a(31949),g=a(17913),f=a(37802),y=a(35223),b=a(86099),E=a(24758),I="insights.shareInfo";function A(e){var t,a,A,N,w,S=i.a.useBasicFetch(v.L.config()),k=(0,f.r)(null).publicInteractiveAttempts,C=Object.assign(Object.assign({},(0,l.wO)((0,l.Hb)(),e.dateRangeAppLinkParams)),(0,s.K)(e.audienceAppLinkParams)),F=i.a.useBasicFetch(h.N.currentUser()),j=i.a.useBasicFetch(e.video&&o.o.getShareLinkByObjectId(e.video.id)),U=i.a.useBasicFetch(e.video&&o.o.getSentDirectShareByObjectId(e.video.id)),O=i.a.useBasicFetch((null===(t=F.data)||void 0===t?void 0:t.customerId)&&c.I.getDirectShareRecipientsRequest(F.data.customerId,U.data)),L=i.a.useBasicFetch(F.data&&e.video&&g.u.views(C,e.video.id,F.data.id,k)),B=i.a.useBasicFetch(e.video&&o.o.getPrivacy(e.video.id)),P=i.a.useBasicFetch((null===(a=F.data)||void 0===a?void 0:a.isAuthenticated)&&p.h.yearGroups(F.data.customerId)),x=j.hasCompleted&&!j.data&&U.hasCompleted&&!U.data,T=j.hasCompleted&&j.data||U.hasCompleted&&U.data&&(!j.data||B.data)&&(!j.data||P.data)&&O.data&&L.data,R=j.data&&B.data&&P.data&&d.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:j.data.isPasswordProtected,linkExpireDate:j.data.linkExpireDate,privacy:B.data,status:j.data.status,yearGroups:P.data}),V=n.useMemo((function(){var e;return null===(e=L.data)||void 0===e?void 0:e.data.reduce((function(e,t){return t.count+e}),0)}),[L.data]),D=(null===(A=U.data)||void 0===A?void 0:A.dateCreated)||(null===(N=j.data)||void 0===N?void 0:N.dateCreated);return n.createElement("div",{className:"mb-4"},T&&n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(m.x,{namespace:I,phrase:"shareInfo"})),n.createElement("div",{className:"d-flex border p-3 rounded-3 align-items-center justify-content-between"},n.createElement("div",{className:"d-flex align-items-center gap-2"},n.createElement(E.A,{shareRecipients:O.data,imageCdnUrl:null===(w=S.data)||void 0===w?void 0:w.imageCdnUrl,hasShareLink:!!j.data,maxAvatars:4,shareLinkText:null==R?void 0:R.text}),"·",n.createElement("p",{className:"mb-0"},(0,r.WU)(D)),!!V&&n.createElement(n.Fragment,null,"·",n.createElement("p",{className:"mb-0"},n.createElement(m.x,{namespace:I,phrase:"views",options:{smartCount:V}})))),n.createElement(u.h,{appLink:(0,b.YK)(e.video),svgName:y.vn.Share,className:"btn btn-outline-dark"},n.createElement(m.x,{namespace:I,phrase:"share"})))),!x&&!T&&n.createElement(n.Fragment,null,n.createElement("div",{className:"h4 partial-loading-background w-25"}," "),n.createElement("div",{className:"p-3 rounded partial-loading-background"},n.createElement("p",{className:"mb-1"}," "))))}},96049:(e,t,a)=>{a.r(t),a.d(t,{VideoInsightsOverviewView:()=>X});var n=a(32735),r=a(23481),i=a(2948),s=a(20354),l=a(75896),o=a(51870),d=a(50916),c=a(84621),u=a(98551),m=a(35223),v=r.T.encloseNamespace("shared.insightStudentsNotWatched");function p(e){var t,a=(null===(t=e.students)||void 0===t?void 0:t.filter((function(t){var a;return!(null===(a=e.watchedIds)||void 0===a?void 0:a.includes(t.id))})))||[];return n.createElement(c.L,{title:v("title"),svgName:m.vn.Puzzle,svgClassName:"bg-light-teal text-teal"},n.createElement(u.y,{students:a,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:v("studentsDisplay"),anonymiseUsers:e.anonymiseUsers}))}var h=r.T.encloseNamespace("shared.insightStudentsWatched");function g(e){return n.createElement(c.L,{title:h("title"),svgName:m.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},n.createElement(u.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:h("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:h("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var f=a(5255),y=a(26025),b=a(26136),E=a(74901),I=a(40003),A=a(30439),N=a(83345),w=a(38143),S=a(4594),k=a(16714),C=a(39151),F=a(31949),j=a(17913),U=a(39902),O=a(91286),L=a(93322),B=a(22902),P=a(79612),x=a(37802),T=a(31908),R=a(99742),V=a(88630),D=a(26203),M=a(53214),W=a(10447),_=a(50782);const H={partialInsights:"qm6HY"};function q(){return n.createElement("div",null,n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-12"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(H.partialInsights," rounded partial-loading-background")}))))}var G=a(14070),Y=a(97291);function $(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)||K(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 K(e,t){if(e){if("string"==typeof e)return z(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?z(e,t):void 0}}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var J="insights.videoInsightsOverview",Q=r.T.encloseNamespace(J);function X(e){var t,a,r,c,u,m,v,h,H=(v=(0,i.D)(w.g.ANONYMISE_USERS),h=1,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,s,l=[],o=!0,d=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(l.push(n.value),l.length!==t);o=!0);}catch(e){d=!0,r=e}finally{try{if(!o&&null!=a.return&&(s=a.return(),Object(s)!==s))return}finally{if(d)throw r}}return l}}(v,h)||K(v,h)||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,L.F)();var z=(0,x.r)(null),X=z.hasClassrooms,Z=z.hasShareFlowV2,ee=(0,B.T)().hasPermissions,te=(0,x.r)(null).publicInteractiveAttempts,ae=s.a.useBasicFetch(F.N.currentUser()),ne=s.a.useBasicFetch(C.L.config()),re=T.M.getVideoRequest(e.videoId,e.typeId),ie=s.a.useBasicFetch(re),se=y.B.getAudienceAppLinkParams(),le=y.B.getDateRangeAppLinkParams(),oe=Object.assign(Object.assign({},(0,I.wO)((0,I.Hb)(),le)),(0,E.K)(se));(0,P.M)({title:ie.data?Q("pageTitle",{video:null===(t=ie.data)||void 0===t?void 0:t.name}):null}),(0,O.v)(ie);var de=s.a.useBasicFetch(ae.data&&j.u.aggregateEngagement(e.videoId,oe,ae.data.id,te)),ce=1===(null===(a=se.classrooms)||void 0===a?void 0:a.length)&&!(null===(r=se.classroomGroups)||void 0===r?void 0:r.length),ue=s.a.useBasicFetch(ce&&V.F.getClassroomStudents(l.m.first(se.classrooms))),me=(0,U.f)((null===(c=de.data)||void 0===c?void 0:c.userIds)||[],(function(e){return A.o.getRecipientsById(e,ae.data.customerId)})),ve=s.a.useBasicFetch(ae.data&&j.u.views(oe,e.videoId,ae.data.id,te)),pe=(0,f.Y)(e.shareId),he=!!e.shareId;function ge(){var e,t,a,n,r;if(!(null===(e=de.data)||void 0===e?void 0:e.userIds)&&!(null===(t=de.data)||void 0===t?void 0:t.sessionIds))return[];var i=null!==(a=me.itemsArr)&&void 0!==a?a:[],s=(null===(r=null===(n=de.data)||void 0===n?void 0:n.sessionIds)||void 0===r?void 0:r.map((function(e){return(0,b.jP)(e,pe)})))||[];return[].concat($(i),$(s))}var fe=ae.data&&ne.data&&ie.data&&de.data&&(!ce||ue.data),ye=Object.assign(Object.assign(Object.assign({},se),le),{shareId:e.shareId}),be=function(e,t,a){return{heatmapAppLink:{application:Y.O.INSIGHTS,action:t===S.E.Clip?G.e.Insights.CLIP_HEATMAP:G.e.Insights.VIDEO_HEATMAP,args:[e],params:a}}}(e.videoId,e.typeId,ye);return n.createElement("div",{className:"px-3"},n.createElement(D.j,{video:ie.data,dateRangeAppLinkParams:le,tabs:function(){var e,t,a;return(null===(e=ie.data)||void 0===e?void 0:e.typeId)===S.E.Clip?(0,W.$o)(null===(t=ie.data)||void 0===t?void 0:t.id,"insights",ye):(0,W.$6)(null===(a=ie.data)||void 0===a?void 0:a.id,"insights",ye)}(),hasAnalytics:ee(k.C.ViewCustomerAnalytics),analyticsWebUrl:null===(u=ne.data)||void 0===u?void 0:u.analyticsWebUrl,hasShareFlowV2:Z,shareId:e.shareId}),n.createElement(_.R,{audienceAppLinkParams:se,dateRangeAppLinkParams:le,video:ie.data}),!fe&&n.createElement(q,null),fe&&n.createElement(M.u,{video:ie.data,hasShared:he,hasShareFlowV2:Z,shareId:e.shareId},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(N.x,{namespace:J,phrase:"studentViewing"}),n.createElement("span",null,": ",ge().length,ue.data?"/".concat(ue.data.data.length):"")),n.createElement("div",{className:"row g-3"},ce&&n.createElement("div",{className:"col-12 col-md"},n.createElement(p,{students:ue.data.data,watchedIds:de.data.userIds,imageCdnUrl:ne.data.imageCdnUrl,heatmapAppLink:be.heatmapAppLink,imageUrl:R.W.Insights.AVATAR,anonymiseUsers:H})),n.createElement("div",{className:"col-12 col-md"},n.createElement(g,{students:ge(),imageCdnUrl:ne.data.imageCdnUrl,heatmapAppLink:be.heatmapAppLink,imageUrl:R.W.Insights.AVATAR,anonymiseUsers:H})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(N.x,{namespace:J,phrase:X?"classEngagement":"engagement"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-12 col-md-6"},n.createElement(o.i,{osCount:null===(m=ve.data)||void 0===m?void 0:m.osCount})),n.createElement("div",{className:"col-12 col-md-6"},n.createElement(d.b,{engagement:de.data,heatmapAppLink:be.heatmapAppLink}))))))}}}]);
2
+ //# sourceMappingURL=9040-be65e4eb1e-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/9040-be65e4eb1e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/share-info/ShareInfoView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/video/overview/VideoInsightsOverviewUtils.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, DirectShare, ShareLink, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nconst namespace = 'insights.shareInfo';\n\ninterface ShareInfoViewProps {\n video: VideoTypes;\n audienceAppLinkParams: AudienceQueryParams;\n dateRangeAppLinkParams: DateRangeQueryParams;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ShareInfoView(props: ShareInfoViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const { publicInteractiveAttempts } = useSettings(null);\n\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), props.dateRangeAppLinkParams),\n ...getAudienceParams(props.audienceAppLinkParams)\n };\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(props.video &&\n ShareRequests.getShareLinkByObjectId(props.video.id));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(props.video &&\n ShareRequests.getSentDirectShareByObjectId(props.video.id));\n const recipients = Flight.useBasicFetch<SharableRecipient[]>(currentUser.data?.customerId &&\n ShareViewHelper.getDirectShareRecipientsRequest(currentUser.data.customerId, sentDirectShare.data));\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data && props.video &&\n VideoViewRequests.views(requestFilter, props.video.id, currentUser.data.id, publicInteractiveAttempts));\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(props.video && ShareRequests.getPrivacy(props.video.id));\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const notShared =\n (shareLink.hasCompleted && !shareLink.data) &&\n (sentDirectShare.hasCompleted && !sentDirectShare.data);\n\n const hasShareData =\n (shareLink.hasCompleted && shareLink.data) ||\n (sentDirectShare.hasCompleted && sentDirectShare.data) &&\n (!shareLink.data || privacy.data) &&\n (!shareLink.data || yearGroups.data) &&\n recipients.data &&\n videoViews.data;\n\n const shareLinkText = shareLink.data && privacy.data && yearGroups.data &&\n ShareLinkHelper.getIconAndText({\n entity: props.video,\n entityTypeId: props.video.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareLink.data.isPasswordProtected,\n linkExpireDate: shareLink.data.linkExpireDate,\n privacy: privacy.data,\n status: shareLink.data.status,\n yearGroups: yearGroups.data\n });\n\n const viewCount = React.useMemo(() => {\n return videoViews.data?.data.reduce((acc, view) => view.count + acc, 0);\n }, [videoViews.data]);\n const dateShared = sentDirectShare.data?.dateCreated || shareLink.data?.dateCreated;\n\n return (\n <div className='mb-4'>\n {hasShareData &&\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='shareInfo' /></h2>\n\n <div className='d-flex border p-3 rounded-3 align-items-center justify-content-between'>\n <div className='d-flex align-items-center gap-2'>\n <SharedToPill\n shareRecipients={recipients.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n hasShareLink={!!shareLink.data}\n maxAvatars={4}\n shareLinkText={shareLinkText?.text}\n />\n ·\n <p className='mb-0'>{formatDate(dateShared)}</p>\n {!!viewCount && (\n <>\n ·\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ smartCount: viewCount }} /></p>\n </>\n )}\n </div>\n <IconButton\n appLink={getShareAppLink(props.video)}\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n </>\n }\n\n {!notShared && !hasShareData &&\n <>\n <div className='h4 partial-loading-background w-25'>&nbsp;</div>\n <div className='p-3 rounded partial-loading-background'>\n <p className='mb-1'>&nbsp;</p>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: UserOrAnonSession[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"qm6HY\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\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\n <h2 className='h4 w-25 partial-loading-background'>&nbsp;</h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { useAnonSessions } from 'libs/shared/apps/analytics/hooks/UseAnonSessions';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { UserOrAnonSession } from 'libs/shared/apps/analytics/interfaces/UserOrAnonSession';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAnonSession } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Config, CurrentUser, Engagement, User, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsShareMask } from 'apps/my-shares/components/insights-mask/InsightsShareMask';\nimport { getInsightsClipTabs, getInsightsVideoTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\nimport { ShareInfoView } from 'apps/my-shares/views/share-info/ShareInfoView';\nimport { PartialVideoInsightsOverview } from 'apps/my-shares/views/video/overview/partial-loading/PartialVideoInsightsOverview';\nimport { getVideoInsightsAppLinks } from 'apps/my-shares/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n videoId: string;\n typeId: MasterType;\n shareId?: string;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms, hasShareFlowV2 } = useSettings(null);\n\n const { hasPermissions } = usePermissions();\n\n const { publicInteractiveAttempts } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const videoRequest = VideoHelper.getVideoRequest(props.videoId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError(video);\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n currentUser.data &&\n VideoViewRequests.aggregateEngagement(\n props.videoId,\n requestFilter,\n currentUser.data.id,\n publicInteractiveAttempts\n )\n );\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const shareRecipients = useBatchFetch<User>(\n aggregateEngagement.data?.userIds || [],\n (ids: string[]) => ShareRequests.getRecipientsById(ids, currentUser.data.customerId)\n );\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data &&\n VideoViewRequests.views(requestFilter, props.videoId, currentUser.data.id, publicInteractiveAttempts));\n\n const anonSessions = useAnonSessions(props.shareId);\n\n const hasShared = !!props.shareId;\n\n function getStudentsList(): UserOrAnonSession[] {\n if (!aggregateEngagement.data?.userIds && !aggregateEngagement.data?.sessionIds)\n return [];\n\n const students = shareRecipients.itemsArr ?? [];\n\n const sessions = aggregateEngagement.data?.sessionIds\n ?.map(sessionId => getAnonSession(sessionId, anonSessions)) || [];\n\n return [ ...students, ...sessions ];\n }\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n video.data &&\n aggregateEngagement.data &&\n (!classroomFilterOnly || classroomStudents.data);\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams,\n shareId: props.shareId\n };\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(props.videoId, props.typeId, params);\n\n function getInsightsOverviewTabs() {\n if (video.data?.typeId === MasterType.Clip) {\n return getInsightsClipTabs(video.data?.id, 'insights', params);\n }\n\n return getInsightsVideoTabs(video.data?.id, 'insights', params);\n }\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsOverviewTabs()}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n analyticsWebUrl={config.data?.analyticsWebUrl}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n />\n\n <ShareInfoView\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n video={video.data}\n />\n\n {!hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {hasDataLoaded &&\n <InsightsShareMask\n video={video.data}\n hasShared={hasShared}\n hasShareFlowV2={hasShareFlowV2}\n shareId={props.shareId}\n >\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{classroomStudents.data ? `/${classroomStudents.data.data.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {classroomFilterOnly && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={classroomStudents.data.data}\n watchedIds={aggregateEngagement.data.userIds}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={videoViews.data?.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={aggregateEngagement.data}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getVideoInsightsAppLinks(id: string, typeId: MasterType, params?: HashObject) {\n return {\n heatmapAppLink: {\n application: AppChannels.INSIGHTS,\n action: typeId === MasterType.Clip ? Actions.Insights.CLIP_HEATMAP : Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n };\n}"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","namespace","ShareInfoView","props","config","publicInteractiveAttempts","requestFilter","dateRangeAppLinkParams","audienceAppLinkParams","currentUser","shareLink","video","sentDirectShare","recipients","customerId","videoViews","privacy","yearGroups","isAuthenticated","notShared","hasShareData","shareLinkText","entity","entityTypeId","typeId","hasStudentExp","isPasswordProtected","linkExpireDate","status","viewCount","view","count","dateShared","dateCreated","className","phrase","shareRecipients","imageCdnUrl","hasShareLink","maxAvatars","text","options","smartCount","appLink","svgName","getPhrase","LanguageService","InsightStudentsNotWatched","studentsNotWatched","students","filter","student","watchedIds","includes","InsightCard","title","svgClassName","InsightStudentList","imageUrl","description","anonymiseUsers","InsightStudentsWatched","heatmapAppLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverviewView","SharedViewModelKeys","useLockContentWidth","useSettings","hasClassrooms","hasShareFlowV2","hasPermissions","usePermissions","UserRequests","ConfigRequests","videoRequest","VideoHelper","videoId","useSetPageMetadata","name","aggregateEngagement","VideoViewRequests","classroomFilterOnly","classrooms","classroomGroups","classroomStudents","ClassroomRequests","ArrayHelper","userIds","ids","ShareRequests","anonSessions","shareId","hasShared","getStudentsList","sessionIds","sessions","sessionId","hasDataLoaded","params","videoInsightsAppLinks","application","action","MasterType","args","getVideoInsightsAppLinks","InsightsHeader","tabs","getInsightsOverviewTabs","hasAnalytics","PermissionName","analyticsWebUrl","InsightsShareMask","Text","ImageUrls","InsightDevices","osCount","InsightHeatmap","engagement"],"sourceRoot":""}