@clickview/lite 0.55.3-rc.1 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{431-lite-c2c2516537.chunk.css → 2992-lite-3ecbb95727.chunk.css} +1 -0
- package/dist/css/{6054-lite-0b2c72f84f.chunk.css → 3490-lite-74b16654a2.chunk.css} +1 -0
- package/dist/css/{4690-lite-e90867b3fe.chunk.css → 4690-lite-656c11bf50.chunk.css} +1 -1
- package/dist/css/{729-lite-f72fc7b813.chunk.css → 4860-lite-bd73841f9b.chunk.css} +1 -1
- package/dist/css/{1019-lite-bbcf2bff27.chunk.css → 6341-lite-f146164a09.chunk.css} +3 -3
- package/dist/css/{4860-lite-f72fc7b813.chunk.css → 729-lite-bd73841f9b.chunk.css} +1 -1
- package/dist/css/{8046-lite-036035a6f0.chunk.css → 8046-lite-319bb5a9c1.chunk.css} +1 -1
- package/dist/css/{6596-lite-bb28584922.chunk.css → 8784-lite-caf4b7e145.chunk.css} +2 -2
- package/dist/css/{2548-lite-bbcf2bff27.chunk.css → 8945-lite-f146164a09.chunk.css} +3 -3
- package/dist/css/{9010-lite-bb28584922.chunk.css → 9355-lite-caf4b7e145.chunk.css} +2 -2
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1169-3298aa69ad-lite.chunk.js → 1169-e4773094dc-lite.chunk.js} +2 -2
- package/dist/scripts/{1169-3298aa69ad-lite.chunk.js.map → 1169-e4773094dc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1379-ca519ec56b-lite.chunk.js → 1379-172a429399-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.map → 1379-172a429399-lite.chunk.js.map} +1 -1
- package/dist/scripts/{184-37af6c4675-lite.chunk.js → 184-e1311aa677-lite.chunk.js} +2 -2
- package/dist/scripts/184-e1311aa677-lite.chunk.js.map +1 -0
- package/dist/scripts/2215-a511f6f54c-lite.chunk.js +2 -0
- package/dist/scripts/2215-a511f6f54c-lite.chunk.js.map +1 -0
- package/dist/scripts/2992-c5bec5b43f-lite.chunk.js +2 -0
- package/dist/scripts/2992-c5bec5b43f-lite.chunk.js.map +1 -0
- package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js +2 -0
- package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js.map +1 -0
- package/dist/scripts/4013-700c541143-lite.chunk.js +3 -0
- package/dist/scripts/4013-700c541143-lite.chunk.js.map +1 -0
- package/dist/scripts/{4554-2192c26ee9-lite.chunk.js → 4554-7367f19919-lite.chunk.js} +2 -2
- package/dist/scripts/4554-7367f19919-lite.chunk.js.map +1 -0
- package/dist/scripts/4690-4abacf2ea2-lite.chunk.js +2 -0
- package/dist/scripts/4690-4abacf2ea2-lite.chunk.js.map +1 -0
- package/dist/scripts/{5220-07af32c6ce-lite.chunk.js → 5220-04f2f3bb42-lite.chunk.js} +3 -3
- package/dist/scripts/5220-04f2f3bb42-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js +2 -0
- package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-09b51a9d32-lite.chunk.js → 624-2c9ac733ba-lite.chunk.js} +3 -3
- package/dist/scripts/{624-09b51a9d32-lite.chunk.js.map → 624-2c9ac733ba-lite.chunk.js.map} +1 -1
- package/dist/scripts/6262-ce32d35813-lite.chunk.js +2 -0
- package/dist/scripts/{640-c3ae02d0a7-lite.chunk.js.map → 6262-ce32d35813-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js → 6341-f07132fa7c-lite.chunk.js} +2 -2
- package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js.map → 6341-f07132fa7c-lite.chunk.js.map} +1 -1
- package/dist/scripts/7076-748eef1eba-lite.chunk.js +3 -0
- package/dist/scripts/7076-748eef1eba-lite.chunk.js.map +1 -0
- package/dist/scripts/{7288-c11287ecc7-lite.chunk.js → 7288-f9ef507dd3-lite.chunk.js} +2 -2
- package/dist/scripts/7288-f9ef507dd3-lite.chunk.js.map +1 -0
- package/dist/scripts/{729-594be12089-lite.chunk.js → 729-10f6b0cef3-lite.chunk.js} +2 -2
- package/dist/scripts/{729-594be12089-lite.chunk.js.map → 729-10f6b0cef3-lite.chunk.js.map} +1 -1
- package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js +2 -0
- package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js.map +1 -0
- package/dist/scripts/8046-485ecb0ed7-lite.chunk.js +2 -0
- package/dist/scripts/8046-485ecb0ed7-lite.chunk.js.map +1 -0
- package/dist/scripts/8252-146bee4416-lite.chunk.js +2 -0
- package/dist/scripts/8252-146bee4416-lite.chunk.js.map +1 -0
- package/dist/scripts/8784-d6862c97bc-lite.chunk.js +2 -0
- package/dist/scripts/{6596-aa83b99b19-lite.chunk.js.map → 8784-d6862c97bc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1019-8f977b5095-lite.chunk.js → 8945-3ea21e765e-lite.chunk.js} +2 -2
- package/dist/scripts/{1019-8f977b5095-lite.chunk.js.map → 8945-3ea21e765e-lite.chunk.js.map} +1 -1
- package/dist/scripts/9355-44d72e25e0-lite.chunk.js +2 -0
- package/dist/scripts/{9010-fe4907051e-lite.chunk.js.map → 9355-44d72e25e0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js → 9395-e07cb08942-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.map → 9395-e07cb08942-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-13da35c4ee-lite.chunk.js → 9478-250b1e9dcf-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.map → 9478-250b1e9dcf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-225db845ab-lite.chunk.js → 953-e3f732e20e-lite.chunk.js} +3 -3
- package/dist/scripts/{953-225db845ab-lite.chunk.js.map → 953-e3f732e20e-lite.chunk.js.map} +1 -1
- package/dist/scripts/9569-c6292540d7-lite.chunk.js +2 -0
- package/dist/scripts/9569-c6292540d7-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-360989040d.min.js → bundle-f1c26ac44d.min.js} +3 -3
- package/dist/scripts/bundle-f1c26ac44d.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1753-6aa1c10a83-lite.chunk.js +0 -2
- package/dist/scripts/1753-6aa1c10a83-lite.chunk.js.map +0 -1
- package/dist/scripts/184-37af6c4675-lite.chunk.js.map +0 -1
- package/dist/scripts/2142-d6e297d5a7-lite.chunk.js +0 -2
- package/dist/scripts/2142-d6e297d5a7-lite.chunk.js.map +0 -1
- package/dist/scripts/4013-7b878e3212-lite.chunk.js +0 -3
- package/dist/scripts/4013-7b878e3212-lite.chunk.js.map +0 -1
- package/dist/scripts/431-0487ecd6e4-lite.chunk.js +0 -2
- package/dist/scripts/431-0487ecd6e4-lite.chunk.js.map +0 -1
- package/dist/scripts/4554-2192c26ee9-lite.chunk.js.map +0 -1
- package/dist/scripts/4690-ab20eb70b5-lite.chunk.js +0 -2
- package/dist/scripts/4690-ab20eb70b5-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-07af32c6ce-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-13efc0f166-lite.chunk.js +0 -2
- package/dist/scripts/5936-13efc0f166-lite.chunk.js.map +0 -1
- package/dist/scripts/6054-d3677cdee9-lite.chunk.js +0 -2
- package/dist/scripts/6054-d3677cdee9-lite.chunk.js.map +0 -1
- package/dist/scripts/640-c3ae02d0a7-lite.chunk.js +0 -2
- package/dist/scripts/6596-aa83b99b19-lite.chunk.js +0 -2
- package/dist/scripts/696-2d01721d18-lite.chunk.js +0 -2
- package/dist/scripts/696-2d01721d18-lite.chunk.js.map +0 -1
- package/dist/scripts/7076-ec18ce09c9-lite.chunk.js +0 -3
- package/dist/scripts/7076-ec18ce09c9-lite.chunk.js.map +0 -1
- package/dist/scripts/7288-c11287ecc7-lite.chunk.js.map +0 -1
- package/dist/scripts/7895-78f20c123f-lite.chunk.js +0 -2
- package/dist/scripts/7895-78f20c123f-lite.chunk.js.map +0 -1
- package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js +0 -2
- package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js.map +0 -1
- package/dist/scripts/9010-fe4907051e-lite.chunk.js +0 -2
- package/dist/scripts/bundle-360989040d.min.js.map +0 -1
- /package/dist/css/{640-lite-45164266aa.chunk.css → 6262-lite-45164266aa.chunk.css} +0 -0
- /package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.LICENSE.txt → 1379-172a429399-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4013-7b878e3212-lite.chunk.js.LICENSE.txt → 4013-700c541143-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-07af32c6ce-lite.chunk.js.LICENSE.txt → 5220-04f2f3bb42-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-09b51a9d32-lite.chunk.js.LICENSE.txt → 624-2c9ac733ba-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7076-ec18ce09c9-lite.chunk.js.LICENSE.txt → 7076-748eef1eba-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.LICENSE.txt → 9395-e07cb08942-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.LICENSE.txt → 9478-250b1e9dcf-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-225db845ab-lite.chunk.js.LICENSE.txt → 953-e3f732e20e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-360989040d.min.js.LICENSE.txt → bundle-f1c26ac44d.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7288-c11287ecc7-lite.chunk.js","mappings":"mHAAA,IAAYA,E,iBAAZ,SAAYA,GACV,qCACA,0CACD,CAHD,CAAYA,IAAAA,EAAoB,I,uCCApBC,ECAAC,E,kEDAZ,SAAYD,GACV,0BACA,6BACD,CAHD,CAAYA,IAAAA,EAAyB,KCArC,SAAYC,GACV,gCACA,4CACD,CAHD,CAAYA,IAAAA,EAAmB,K,ICAnBC,E,o3CAAZ,SAAYA,GACV,oBACA,iCACA,cACA,sBACA,YACA,8BACA,mBACD,CARD,CAAYA,IAAAA,EAAU,KC2Bf,IAAMC,EAAsB,CACjCC,SAAQ,SACNC,EACAC,GAIkB,IAHlBC,EAAA,uDAAsC,CAAC,EACvCC,EAAe,uCACfC,EAAyC,uCACzCC,EAAkB,uCAEZC,EAA4B,CAAEC,MAAOC,EAAA,qBAAqCP,EAAUC,IAEtFC,IACFG,EAAcH,OAASA,GAEzB,IAAIM,EAAM,gBAAH,OAAmBT,EAAU,YAAIC,GAGxC,OAFAQ,GAAOC,OAAOC,KAAKL,GAAeM,KAAI,SAAAH,GAAG,OAAIH,EAAcG,EAAI,IAAEI,KAAK,KAE/D,CACLC,IAAKC,EAAA,aAAqB,0BAAD,OAA2Bf,EAAU,UAAUM,GACxEG,IAAAA,EACAL,QAAAA,EACAC,MAAAA,EAEJ,EAEAW,QAAO,SAACC,GACN,MAAO,CACLH,IAAK,sBAAF,OAAwBG,EAAE,iBAC7BR,IAAK,gBAAF,OAAkBQ,GAEzB,EAEAC,iBAAgB,SAACD,EAAYd,GAC3B,IAAQgB,EAAmD,qBAAjCC,EAAiC,oBAAhBC,EAAgB,gBAErDd,EAAQ,CAAC,UAAD,OACFY,EAAgB,qBAAaG,EAAA,YAAwB,YAAIA,EAAA,QAAoB,sBAC9EF,EAAe,qBAAaE,EAAA,YAAwB,YAAIA,EAAA,QAAoB,6BACrED,EAAW,qBAAaC,EAAA,YAAwB,YAAIA,EAAA,QAAoB,OAGpFC,EAAqB,CACzBhB,MAAO,IAAF,OAAMA,EAAMM,KAAK,KAAI,4BAC1BW,uBAAwBC,EAAA,iBAM1B,OAHItB,IACFoB,EAAOpB,OAASA,GAEX,CACLW,IAAKC,EAAA,aAAqB,wBAAD,OAAyBE,EAAE,YAAYM,GAChEd,IAAK,uBAAF,OAAyBQ,EAAE,YAAId,GAEtC,EAEAuB,gBAAe,SACbC,EACAvB,EACAC,EACAuB,G,MAEMC,EAAmB,CAAE,eAAgB,eAAgB,sBAK3D,OAHgB,QAAZ,EAAAF,EAAKG,eAAO,eAAEC,SAChBJ,EAAKG,QAAQE,SAAQ,SAAAf,GAAE,OAAIY,EAAiBI,KAAK,gBAAD,OAAiBhB,GAAK,IAEjE,CACLH,IAAK,4BACLL,IAAK,sBACLoB,iBAAAA,EACAK,KAAMC,EAAA,OACNR,KAAAA,EACAvB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEAQ,sBAAqB,SAACT,GAGpB,MAAO,CACLb,IAAK,4BACLL,IAAK,sBACLoB,iBALuB,CAAE,eAAgB,eAAgB,sBAMzDK,KAAMC,EAAA,OACNR,KAAAA,EAEJ,EAEAU,YAAW,SAAC,GAUX,IATCC,EAAK,EAALA,MACAlC,EAAO,EAAPA,QACAC,EAAK,EAALA,MACAuB,EAAM,EAANA,OAOA,MAAO,CACLd,IAAK,qBACLL,IAAK,eACLkB,KAAMW,EACNJ,KAAMC,EAAA,OACNN,iBAAkB,CAAE,eAAgB,aAAc,gBAClDzB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEAW,WAAU,SACRC,EACAC,EACArC,EACAC,EACAuB,GAEA,IAAMc,EAAkB,CAAC,gBAAD,OAAiBF,EAAKG,SAK9C,OAHIF,EAAcG,aAAeJ,EAAKG,OAAOC,YAC3CF,EAAgBT,KAAK,eAEhB,CACLnB,IAAK,qBACLL,IAAK,YACLyB,KAAMC,EAAA,MACNR,KAAMa,EACNX,iBAAkB,CAAC,sBACnBzB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEAiB,YAAW,SACT7C,EACA2C,EACA1C,GAIkB,IAHlBC,EAAA,uDAAsC,CAAC,EACvCC,EAAe,uCACfC,EAAqE,uCACrEC,EAAkB,uCAElB,EAAsBG,EAAA,wBAAwC,CAC5DR,WAAAA,EACA2C,OAAAA,EACA1C,SAAAA,EACAC,YAAAA,EACAC,OAAAA,IALMwB,EAAI,EAAJA,KAAMlB,EAAG,EAAHA,IAQd,MAAO,CACLK,IAAK,sBACLa,KAAMA,EACNO,KAAMC,EAAA,OACN1B,IAAAA,EACAL,QAAAA,EACAC,MAAAA,EAEJ,EAEAyC,iBAAgB,SACd9C,EACA2C,EACA1C,GAGkB,IAFlBC,EAAA,uDAAsC,CAAC,EACvCE,EAAqC,uCACrCC,EAAkB,uCAEZsB,EAAOnB,EAAA,kBAAkC,CAAER,WAAAA,EAAY2C,OAAAA,EAAQ1C,SAAAA,EAAUC,YAAAA,IAE3EO,EAAM,kBAGV,MAAO,CACLK,IAAK,0BACLL,IAJFA,GAAOsC,EAAA,wBAAmCpB,GAKxCA,KAAAA,EACAO,KAAMC,EAAA,OACNa,WAAW,EACX5C,QAAAA,EACAC,MAAAA,EAEJ,EAEA4C,qBAAoB,SAACC,GAQnB,IAAQP,EAAmEO,EAAnEP,OAAQ3C,EAA2DkD,EAA3DlD,WAAYC,EAA+CiD,EAA/CjD,SAAQ,EAAuCiD,EAArChD,YAAAA,OAAW,IAAG,GAAC,EAAC,EAAE4B,EAAmBoB,EAAnBpB,QAASqB,EAAUD,EAAVC,MAE3DC,EAAaD,IAAUzD,EAAA,qBACzBC,EAA0B0D,aAC1B1D,EAA0B2D,WAExBC,EAAU/C,EAAA,2BAA2CR,EAAYC,EAAUC,GAE7EO,EAAM,sBAAH,OAAyBkC,EAAM,YAAI3C,EAAU,YAAImD,EAAK,KAC7D1C,GAAOC,OAAOC,KAAK4C,GAASC,OAAO5C,KAAI,SAAAH,GAAG,OAAI8C,EAAQ9C,EAAI,IAAEI,KAAK,KACjEJ,GAAO,IAAMqB,EAAQjB,KAAK,KAE1B,IAAMc,EAA+B,CAEnC8B,QAAS,CAAC,QACVC,WAAY7D,EAAW8D,KACvBC,WAAW,EACX1B,KAAMtC,EAAoBiE,mBAG1BlB,OAAQA,EAAOC,WACf5C,WAAYA,EAAW4C,WACvBjB,KAAM,CACJwB,MAAAA,EACAC,WAAAA,EACAU,aAAc,EAAF,aACNV,EAAU,eAAgB,CAACpD,KAGnC+D,UAAWjC,EACXyB,QAAAA,GAeF,MAAO,CACLzC,IAAK,kCACLoB,KAAMC,EAAA,OACN1B,IAAAA,EACAkB,KAAAA,EACAqB,WAAW,EACXgB,WAlBiB,SAACrC,GAClB,IAAMsC,EAAWtC,EAAKuC,UACtB,OAAIf,IAAUzD,EAAA,qBACLuE,EAEFvD,OAAOC,KAAKsD,GAAUE,QAAO,SAACC,EAAkB3D,GAGrD,OADA2D,EAAK3D,EAAI4D,OAAO,GAAGC,cAAgB7D,EAAI8D,MAAM,IAAMN,EAASxD,GACrD2D,CACT,GAAG,CAAC,EACN,EAUF,EAEAI,qBAAoB,SAClB7C,EACA1B,EACAG,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,4BACLL,IAAK,sBACLyB,KAAMC,EAAA,MACNR,KAAAA,EACAvB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EACAC,iBAAkB,CAAC,gBAAH,OAAoBF,EAAK3B,WAAU,YAAIC,IAAQ,SAAO0B,EAAKW,MAAM1B,KAAI,SAAA6D,GAAC,6BAAoBA,EAAE9B,OAAM,KAAG,CAAE,uBAE3H,EAEA+B,aAAY,SACV/C,EACA3B,EACAI,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,8BACLoB,KAAMC,EAAA,OACN1B,IAAK,iBACLkB,KAAAA,EACAvB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EACAoB,WAAW,EACXgB,WAAY,SAACrC,GACX,OAAOA,EAAKgD,cAAc/D,KAAI,SAAAgE,GAAM,MAAK,CACvCC,WAAYD,EAAOC,WACnBvC,MAAO,CAACsC,EAAOpC,MAChB,GACH,EAEJ,EAEAsC,eAAc,SACZnD,EACA3B,EACAI,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,0BAAF,OAA4Bd,EAAU,yBACzCkC,KAAMC,EAAA,OACN1B,IAAK,YAAF,OAAcT,EAAU,kBAAU2B,EAAKoD,WAAWnE,KAAI,YAAQ,SAALoE,KAAiB,IAAEnE,KAAK,MACpFc,KAAAA,EACAvB,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEAqD,kBAAiB,SACftD,EACAuD,EACAlF,EACAI,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,+CAAF,OAAiDoE,GACpDhD,KAAMC,EAAA,OACN1B,IAAK,+BAAF,OAAiCyE,GACpCvD,KAAMA,EAAKW,MACXlC,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EACAoC,WAAY,SAACrC,G,QACLwD,GAA2B,QAAlB,EAAAxD,EAAKgD,qBAAa,eAAE/D,KAAI,SAAAgE,GAAM,MAAK,CAChDC,WAAYD,EAAOC,WACnBvC,MAAO,CAACsC,EAAOpC,MAChB,MAAM,GAED4C,GAAgC,QAAtB,EAAAzD,EAAK0D,yBAAiB,eAAEzE,KAAI,SAAA0E,GAAG,MAAK,CAClDT,WAAYS,EAAIT,WAChBvC,MAAO,CAACgD,EAAI9C,MACb,MAAM,GAEP,MAAO,GAAP,SAAY2C,GAAM,EAAKC,GACzB,EAEJ,EAEA9B,WAAU,SAACtD,GACT,MAAO,CACLc,IAAK,0BAAF,OAA4Bd,EAAU,sCACzCS,IAAK,cAAF,OAAgBT,GAEvB,EAKAuF,aAAY,SAACC,EAAiB7C,EAAgBvC,EAAsBC,GAClE,MAAO,CACLS,IAAK,+BACLL,IAAK,gBACLyB,KAAMC,EAAA,MACNN,iBAAkB,CAAE,cAAe,gBAAF,OAAkBc,IACnDhB,KAAM,CACJ8D,OAAQD,EACRE,WAAY,iBAEdtF,QAAAA,EACAC,MAAAA,EAEJ,EAEAsF,aAAY,SAACC,EAAkBjD,EAAgBvC,EAAsBC,GACnE,MAAO,CACLS,IAAK,gCAAF,OAAkC8E,GACrCnF,IAAK,gBACLyB,KAAMC,EAAA,SACN0D,YAAa,CACXlF,KAAM,CAAC,gBAAD,OAAkBgC,GAAU,eAClCmD,WAAY,SAACnE,GACX,IAAMoE,EAAUpE,EAAK,gBAAD,OAAiBgB,IAC/BqD,EAAiBrE,EAAKsE,YAK5B,OAHAF,EAAQG,OAAS,KACjBF,EAAeE,OAAS,KAEjB,EAAP,4BACmBvD,GAAWoD,GAC3B,cAAgBC,EAErB,GAEF5F,QAAAA,EACAC,MAAAA,EAEJ,EAKA8F,YAAW,SACTnB,EACA5E,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,8BACLL,IAAK,eACLyB,KAAMC,EAAA,MACNR,KAAM,CACJqD,MAAAA,GAEF5E,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEAwE,eAAc,SACZC,EACAjG,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,iCACLL,IAAK,kBACLyB,KAAMC,EAAA,MACNR,KAAM,CACJ2E,gBAAiBD,EAAcC,gBAC/BC,YAAaF,EAAcE,aAE7BnG,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEA4E,mBAAkB,SAChB7D,EACA1C,EACAsG,EACAE,EACArG,EACAC,EACAuB,GAEA,MAAO,CACLd,IAAK,2CACLL,IAAK,mBAAF,OAAqBR,EAAQ,YAAI0C,GACpCT,KAAMC,EAAA,MACNR,KAAM,CACJgB,OAAAA,EACA4D,YAAAA,EACAE,kBAAAA,GAEFrG,QAAAA,EACAC,MAAAA,EACAuB,OAAAA,EAEJ,EAEA8E,sBAAqB,SAAC/D,EAAgBvC,EAAsBC,GAC1D,MAAO,CACLS,IAAK,sCACLL,IAAK,wBACLyB,KAAMC,EAAA,OACNR,KAAM,CAAEgB,OAAAA,GACRvC,QAAAA,EACAC,MAAAA,EAEJ,EAEAsG,uBAAsB,SAAChE,EAAgB3C,EAAoBI,EAAsBC,GAC/E,MAAO,CACLS,IAAK,4CACLL,IAAK,4BACLyB,KAAMC,EAAA,OACNR,KAAM,CAAEG,QAAS,CAACa,GAAS3C,WAAAA,GAC3BI,QAAAA,EACAC,MAAAA,EAEJ,EAEAuG,wBAAuB,SACrBjE,EACA3C,EACAI,EACAC,GAEA,MAAO,CACLS,IAAK,8CACLL,IAAK,0BACLyB,KAAMC,EAAA,OACNR,KAAM,CAAEgB,OAAAA,EAAQ3C,WAAAA,GAChBI,QAAAA,EACAC,MAAAA,EAEJ,EAKAwG,UAAS,SACP7G,EACA2C,EACA1C,GACwC,IAAxCC,EAAA,uDAAsC,CAAC,EAEjCyB,EAAOnB,EAAA,kBAAkC,CAAER,WAAAA,EAAY2C,OAAAA,EAAQ1C,SAAAA,EAAUC,YAAAA,IAE3EO,EAAM,oBAGV,OAFAA,GAAOsC,EAAA,wBAAmCpB,GAEnC,CACLb,IAAK,4BACLa,KAAAA,EACAO,KAAMC,EAAA,OACN1B,IAAAA,EACAuC,WAAW,EAEf,EAEA8D,sBAAqB,SAACC,GACpB,MAAO,CACLjG,IAAKC,EAAA,aAAqB,4CAA6C,CAAEE,GAAI8F,IAC7EtG,IAAK,iBAAF,OAAmBsG,EAAIvD,OAAO3C,KAAK,MACtCmG,iBAAkB,CAChBC,YAAa,UAGnB,EAEAC,qBAAoB,SAAClH,GACnB,MAAO,CACLc,IAAK,0BAAF,OAA4Bd,EAAU,uBACzCS,IAAK,sBAAF,OAAwBT,GAC3BgD,WAAW,EAEf,EAEAmE,eAAc,SAACnH,GACb,MAAO,CACLc,IAAK,0BAAF,OAA4Bd,EAAU,4BACzCS,IAAK,2BAAF,OAA6BT,GAChCgD,WAAW,EAEf,EAEAoE,kBAAiB,SAACpH,EAAoBqH,GACpC,MAAO,CACLvG,IAAK,0BAAF,OAA4Bd,EAAU,4BACzCS,IAAK,2BAAF,OAA6BT,EAAU,WAC1CkC,KAAMC,EAAA,OACNN,iBAAkB,2BAAF,OAA6B7B,GAC7C2B,KAAM0F,EAEV,EAEAC,aAAY,WACV,MAAO,CACLxG,IAAK,sDACLL,IAAK,gBACLuC,WAAW,EAEf,EAEAuE,mBAAkB,SAChBC,EACAC,GAEA,MAAO,CACL3G,IAAK,wCAAF,OAA0C0G,GAC7C/G,IAAK,uBACLyB,KAAMC,EAAA,MACNR,KAAM,CAAE8F,OAAAA,GACRzE,WAAW,EACXnB,iBAAkB,CAAC,iBAEvB,EAEA6F,qBAAoB,SAClB1H,EACA2B,EACAvB,EACAC,GAEA,MAAO,CACLS,IAAK,0BAAF,OAA4Bd,EAAU,qBACzCS,IAAK,wBAAF,OAA0BT,GAC7BkC,KAAMC,EAAA,MACNR,KAAAA,EACAE,iBAAkB,CAAE,eAAgB,gBACpCzB,QAAAA,EACAC,MAAAA,EAEJ,E","sources":["file:///app/packages/libs/shared/src/enums/AggregateSearchField.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchNestedPath.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchType.ts","file:///app/packages/libs/shared/src/enums/SearchType.ts","file:///app/packages/projects/lite/src/apps/user-manager/flight-requests/UserManagerRequests.ts"],"sourcesContent":["export enum AggregateSearchField {\n YearGroupValues = 'yearGroups.value',\n UserProfilesStatus = 'userProfiles.status'\n}","export enum AggregateSearchNestedPath {\n yearGroups = 'yearGroups',\n userProfiles = 'userProfiles'\n}","export enum AggregateSearchType {\n TermsGroupBy = 'terms-group-by',\n NestedTermsGroupBy = 'nested-terms-group-by',\n}","export enum SearchType {\n Content = 'content',\n OnlineContent = 'online_content',\n User = 'user',\n Customer = 'customer',\n Tag = 'tag',\n Organisation = 'organisation',\n Channel = 'channel'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SearchResults, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BulkCreateOrValidateUserRequest, BulkCreateUsersResponse, BulkDeleteUsersRequest, BulkInviteUsersRequest, BulkInviteUsersResponse, BulkUpdateUserStatusRequest, BulkUserEmailCheckRequest, BulkUserEmailCheckResponse, BulkUsersCreationOrAddValidateResponse, BulkValidateUsersResponse, ChangePasswordRequest, EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { AggregateSearchField } from 'libs/shared/enums/AggregateSearchField';\nimport { AggregateSearchNestedPath } from 'libs/shared/enums/AggregateSearchNestedPath';\nimport { AggregateSearchType } from 'libs/shared/enums/AggregateSearchType';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { FileIdType } from 'libs/shared/enums/Images';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { SearchType } from 'libs/shared/enums/SearchType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { User, UserCollection } from 'libs/shared/interfaces';\nimport { AggregateSearchRequest } from 'libs/shared/interfaces/requests/AggregateSearchRequest';\n\nimport { JoinRequestStatus } from 'apps/user-manager/enums/JoinRequestStatus';\n\nimport { UpdateSsoYearGroupMappings } from '../interfaces/UpdateSsoYearGroupMappings';\n\n\nexport const UserManagerRequests = {\n getUsers(\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (users: UserCollection) => void,\n error?: () => void\n ): Flight.Request {\n const backendParams: HashObject = { query: UserManagerHelper.buildGetUsersQuery(userType, queryParams) };\n\n if (cursor)\n backendParams.cursor = cursor;\n\n let key = `school:users:${customerId}:${userType}`;\n key += Object.keys(backendParams).map(key => backendParams[key]).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/customers/${customerId}/users`, backendParams),\n key,\n success,\n error\n };\n },\n\n getUser(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/users/${id}?query=avatar`,\n key: `school:users:${id}`\n };\n },\n\n getStudentVideos(id: string, cursor?: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const query = [\n `videos[${VIDEO_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `clips[${CLIP_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`\n ];\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `school:users:videos:${id}:${cursor}`\n };\n },\n\n bulkRemoveUsers(\n data: BulkDeleteUsersRequest,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n if (data.userIds?.length)\n data.userIds.forEach(id => invalidationKeys.push(`school:users:${id}`));\n\n return {\n url: '{gateway}/v1/users/delete',\n key: 'delete:school:users',\n invalidationKeys,\n type: HttpVerbs.POST,\n data,\n success,\n error,\n always\n };\n },\n\n removeUsersFromSchool(data: BulkDeleteUsersRequest): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n return {\n url: '{gateway}/v1/users/remove',\n key: `remove:school:users`,\n invalidationKeys,\n type: HttpVerbs.POST,\n data\n };\n },\n\n createUsers({\n users,\n success,\n error,\n always\n }: {\n users: BulkCreateOrValidateUserRequest,\n success?: (res: BulkCreateUsersResponse) => void,\n error?: () => void,\n always?: () => void,\n }): Flight.Request {\n return {\n url: '{gateway}/v1/users',\n key: 'create:users',\n data: users,\n type: HttpVerbs.POST,\n invalidationKeys: [ 'school:users', 'user:count', 'search:users' ],\n success,\n error,\n always\n };\n },\n\n updateUser(\n user: EditUserRequest,\n currentUserId: string,\n success?: (updatedUser?: User) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const updateStateKeys = [`school:users:${user.userId}`];\n\n if (currentUserId.toString() === user.userId.toString())\n updateStateKeys.push('currentuser');\n\n return {\n url: '{gateway}/v1/users',\n key: 'edit:user',\n type: HttpVerbs.PUT,\n data: user,\n invalidationKeys: ['search:aggregation'],\n success,\n error,\n always\n };\n },\n\n searchUsers(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (results: SearchResults<SearchResultsObject<User>>) => void,\n error?: () => void\n ): Flight.Request {\n const { data, key } = UserManagerHelper.buildSearchDataAndKey({\n customerId,\n userId,\n userType,\n queryParams,\n cursor\n });\n\n return {\n url: `{gateway}/v3/search`,\n data: data,\n type: HttpVerbs.POST,\n key,\n success,\n error\n };\n },\n\n getSearchUserIds(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n success?: (userIds: string[]) => void,\n error?: () => void\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:ids`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: '{gateway}/v3/search/ids',\n key,\n data,\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error\n };\n },\n\n getSearchAggregation(options: {\n userId: string,\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams,\n userIds: string[],\n field: AggregateSearchField\n }): Flight.Request {\n const { userId, customerId, userType, queryParams = {}, userIds, field } = options;\n\n const nestedPath = field === AggregateSearchField.UserProfilesStatus\n ? AggregateSearchNestedPath.userProfiles\n : AggregateSearchNestedPath.yearGroups;\n\n const filters = UserManagerHelper.buildSearchFiltersObject(customerId, userType, queryParams);\n\n let key = `search:aggregation:${userId}:${customerId}:${field}:`;\n key += Object.keys(filters).sort().map(key => filters[key]).join(':');\n key += ':' + userIds.join(':');\n \n const data: AggregateSearchRequest = {\n // Fixed\n indices: ['user'],\n searchType: SearchType.User,\n isLearner: false,\n type: AggregateSearchType.NestedTermsGroupBy,\n\n // Dynamic\n userId: userId.toString(),\n customerId: customerId.toString(),\n data: {\n field,\n nestedPath,\n termsFilters: {\n [`${nestedPath}.customerId`]: [customerId]\n }\n },\n idFilters: userIds,\n filters\n };\n\n const formatData = (data: any) => {\n const response = data.termCount;\n if (field !== AggregateSearchField.UserProfilesStatus)\n return response;\n\n return Object.keys(response).reduce((prev: HashObject, key: string) => {\n // Our ObjectStatus enum is capitalised, but it's lower case in the search index\n prev[key.charAt(0).toUpperCase() + key.slice(1)] = response[key];\n return prev;\n }, {});\n };\n\n return {\n url: '{gateway}/v1/search/aggregation',\n type: HttpVerbs.POST,\n key,\n data,\n normalize: false,\n formatData\n };\n },\n\n bulkToggleActivation(\n data: BulkUpdateUserStatusRequest,\n userType: UserGroup,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/status`,\n key: 'update:users:status',\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n always,\n invalidationKeys: [ `school:users:${data.customerId}:${userType}`, ...data.users.map(u => `school:users:${u.userId}`), 'search:aggregation' ]\n };\n },\n\n bulkValidate(\n data: BulkCreateOrValidateUserRequest,\n customerId?: string,\n success?: (res: ErroredUsers) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/validate',\n type: HttpVerbs.POST,\n key: 'validate:users',\n data,\n success,\n error,\n always,\n normalize: false,\n formatData: (data: BulkValidateUsersResponse) => {\n return data.failedResults.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n }));\n }\n };\n },\n\n bulkCheckEmail(\n data: BulkUserEmailCheckRequest,\n customerId: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/email-statuses`,\n type: HttpVerbs.POST,\n key: `validate:${customerId}:email:${data.userEmails.map(({ email }) => email).join(',')}`,\n data,\n success,\n error,\n always\n };\n },\n\n bulkUsersValidate(\n data: BulkCreateOrValidateUserRequest,\n canInviteExistingUsers: boolean,\n customerId?: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v2/users/validate?allowEmailInUse=${canInviteExistingUsers}`,\n type: HttpVerbs.POST,\n key: `validate:email:in:use:users:${canInviteExistingUsers}`,\n data: data.users,\n success,\n error,\n always,\n formatData: (data: BulkUsersCreationOrAddValidateResponse) => {\n const failed = data.failedResults?.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n })) || [];\n\n const succeed = data.successfulResults?.map(res => ({\n errorCodes: res.errorCodes,\n users: [res.user]\n })) || [];\n\n return [ ...failed, ...succeed ];\n }\n };\n },\n\n yearGroups(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/year-groups?query={orderby:value}`,\n key: `yeargroups:${customerId}`\n };\n },\n\n /**\n * Avatar requests\n */\n updateAvatar(imageId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/avatar',\n key: 'update:avatar',\n type: HttpVerbs.PUT,\n invalidationKeys: [ 'currentuser', `school:users:${userId}` ],\n data: {\n fileId: imageId,\n fileIdType: FileIdType.ImageAPIv2\n },\n success,\n error\n };\n },\n\n deleteAvatar(avatarId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/avatar/${avatarId}`,\n key: 'delete:avatar',\n type: HttpVerbs.DELETE,\n updateState: {\n keys: [ `school:users:${userId}`, 'currentuser' ],\n updateData: (data: HashObject) => {\n const userObj = data[`school:users:${userId}`];\n const currentUserObj = data.currentuser;\n\n userObj.avatar = null;\n currentUserObj.avatar = null;\n\n return {\n [`school:users:${userId}`]: userObj,\n ['currentuser']: currentUserObj\n };\n }\n },\n success,\n error\n };\n },\n\n /**\n * Account settings\n */\n changeEmail(\n email: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/email`,\n key: 'change:email',\n type: HttpVerbs.PUT,\n data: {\n email\n },\n success,\n error,\n always\n };\n },\n\n changePassword(\n passwordModel: ChangePasswordRequest,\n success?: () => void,\n error?: (jqXHR: JQuery.jqXHR) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/password`,\n key: 'change:password',\n type: HttpVerbs.PUT,\n data: {\n currentPassword: passwordModel.currentPassword,\n newPassword: passwordModel.newPassword\n },\n success,\n error,\n always\n };\n },\n\n changeUserPassword(\n userId: string,\n userType: UserGroup,\n newPassword: string,\n changeOnNextLogin: boolean,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/admin/change-password`,\n key: `change:password:${userType}:${userId}`,\n type: HttpVerbs.PUT,\n data: {\n userId,\n newPassword,\n changeOnNextLogin\n },\n success,\n error,\n always\n };\n },\n\n resendActivationEmail(userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/activation',\n key: 'send:activation:email',\n type: HttpVerbs.POST,\n data: { userId },\n success,\n error\n };\n },\n\n sendPasswordResetEmail(userId: string, customerId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/account-reminder',\n key: 'send:password:reset:email',\n type: HttpVerbs.POST,\n data: { userIds: [userId], customerId },\n success,\n error\n };\n },\n\n resendVerificationEmail(\n userId: string,\n customerId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/email-verification',\n key: 'send:verification:email',\n type: HttpVerbs.POST,\n data: { userId, customerId },\n success,\n error\n };\n },\n \n /**\n * Other\n */\n userCount(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {}\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:count`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: `{gateway}/v3/search/count`,\n data,\n type: HttpVerbs.POST,\n key,\n normalize: false\n };\n },\n\n authenticationMethods(ids: string[]): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/users/authentication-methods`, { id: ids }),\n key: `login:methods:${ids.sort().join(':')}`,\n normalizeOptions: {\n idAttribute: 'userId'\n }\n };\n },\n\n getIdentityProviders(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/identity-providers`,\n key: `identity:providers:${customerId}`,\n normalize: false\n };\n },\n\n getSsoMappings(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}`,\n normalize: false\n };\n },\n\n updateSsoMappings(customerId: string, mappings: UpdateSsoYearGroupMappings): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}:update`,\n type: HttpVerbs.POST,\n invalidationKeys: `sso:year:group:mappings:${customerId}`,\n data: mappings\n };\n },\n\n joinRequests(): Flight.Request {\n return {\n url: '{gateway}/v1/customers/join-requests?status=pending',\n key: 'join:requests',\n normalize: false\n };\n },\n\n resolveJoinRequest(\n requestId: string,\n status: JoinRequestStatus\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/join-requests/${requestId}`,\n key: 'resolve:join:request',\n type: HttpVerbs.PUT,\n data: { status },\n normalize: false,\n invalidationKeys: ['join:requests']\n };\n },\n // to invite or add a existing user to a customer\n inviteUserToCustomer(\n customerId: string,\n data: BulkInviteUsersRequest,\n success?: (res: BulkInviteUsersResponse) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/invitation`,\n key: `invite:user:customer:${customerId}`,\n type: HttpVerbs.PUT,\n data,\n invalidationKeys: [ 'school:users', 'search:users' ],\n success,\n error\n };\n }\n};\n\n"],"names":["AggregateSearchField","AggregateSearchNestedPath","AggregateSearchType","SearchType","UserManagerRequests","getUsers","customerId","userType","queryParams","cursor","success","error","backendParams","query","UserManagerHelper","key","Object","keys","map","join","url","UrlHelper","getUser","id","getStudentVideos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","CurationStatus","params","permissionFilterOption","PermissionFilterOption","bulkRemoveUsers","data","always","invalidationKeys","userIds","length","forEach","push","type","HttpVerbs","removeUsersFromSchool","createUsers","users","updateUser","user","currentUserId","updateStateKeys","userId","toString","searchUsers","getSearchUserIds","ObjectHelper","normalize","getSearchAggregation","options","field","nestedPath","userProfiles","yearGroups","filters","sort","indices","searchType","User","isLearner","NestedTermsGroupBy","termsFilters","idFilters","formatData","response","termCount","reduce","prev","charAt","toUpperCase","slice","bulkToggleActivation","u","bulkValidate","failedResults","result","errorCodes","bulkCheckEmail","userEmails","email","bulkUsersValidate","canInviteExistingUsers","failed","succeed","successfulResults","res","updateAvatar","imageId","fileId","fileIdType","deleteAvatar","avatarId","updateState","updateData","userObj","currentUserObj","currentuser","avatar","changeEmail","changePassword","passwordModel","currentPassword","newPassword","changeUserPassword","changeOnNextLogin","resendActivationEmail","sendPasswordResetEmail","resendVerificationEmail","userCount","authenticationMethods","ids","normalizeOptions","idAttribute","getIdentityProviders","getSsoMappings","updateSsoMappings","mappings","joinRequests","resolveJoinRequest","requestId","status","inviteUserToCustomer"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7895],{50690:(e,t,a)=>{a.d(t,{b:()=>i});var n=a(12788),i={renderInPortalIfExists:function(e,t){return t?(0,n.createPortal)(e,t):e}}},84963:(e,t,a)=>{a.d(t,{r:()=>d});var n=a(32735),i=a(23481),r=a(83914),o=a(76177),l=a(35223);const c={tag:"XRj8d",tooltip:"X6mLk"};var s="specialEventCalendar.comingSoonTag";function d(e){return n.createElement(o.u,{title:i.T.getPhrase(s,"tooltip"),spanHackClassName:"d-block ".concat(c.tooltip),spanHack:!0},n.createElement("div",{className:"d-flex text-dark align-items-center ".concat(c.tag," ").concat(e.className)},n.createElement(r.x,{svgName:l.vn.Timer}),!e.onlyIcon&&i.T.getPhrase(s,"comingSoon")))}},73679:(e,t,a)=>{a.d(t,{s:()=>o});var n=a(32735),i=a(36848);const r={dateItem:"I3SBm",label:"PRORs",body:"RfiM_",bodyDay:"ZOVny",bodyRange:"vYhXN",bodyMonth:"mYslO",month:"EPkkQ"};function o(e){var t,a,o;return n.createElement(i.F,{appLink:null===(t=e.getAppLink)||void 0===t?void 0:t.call(e),className:"text-decoration-none text-center bg-white text-dark border border-3 ".concat(null===(a=e.theme)||void 0===a?void 0:a.border," rounded-3 d-block fw-semibold ").concat(e.className),analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions},n.createElement("div",{className:"position-relative ".concat(r.dateItem)},n.createElement("div",{className:"".concat(null===(o=e.theme)||void 0===o?void 0:o.background," py-1 ").concat(r.label," d-flex align-items-center justify-content-center")},e.label?e.label:n.createElement(n.Fragment,null," ")),n.createElement("div",{className:"".concat(function(){switch(e.body.type){case"range":return r.bodyRange;case"day":return r.bodyDay;case"month":return r.bodyMonth}}()," ").concat(r.body," my-2")},e.body.text),n.createElement("div",{className:"mb-0 ".concat(r.month)},e.month)))}},83657:(e,t,a)=>{a.d(t,{e:()=>s});var n=a(32735),i=a(91967),r=a(10874),o=a(76177),l=a(42735),c=a(86509);function s(e){var t=n.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),a=[],s=[];t.forEach((function(e){e.button?a.push(e):s.push(e)}));var d="d-flex";return e.className&&(d+=" ".concat(e.className)),a.length||s.length?n.createElement("div",{className:d},a.length?a.map((function(t,a){return n.createElement(n.Fragment,{key:a},function(){if(t.label){var a=i.q.isFunction(t.label)?t.label:function(){return n.createElement(n.Fragment,null,t.label)};return n.createElement(l.K,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled},a())}var c=n.createElement(r.h,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize,ariaLabel:t.tooltip});return t.tooltip?n.createElement(o.u,{title:t.tooltip,spanHack:!0},c):c}())})):n.createElement(n.Fragment,null),e.sortComponent&&e.sortComponent,s.length?n.createElement(c.m,{actions:s,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):n.createElement(n.Fragment,null)):n.createElement(n.Fragment,null)}},86509:(e,t,a)=>{a.d(t,{m:()=>f});var n=a(32735),i=a(91967),r=a(81886),o=a(45157),l=a(49985),c=a(36848),s=a(83914),d=a(76177),m=a(35223);const u={dropdownToggle:"UCAnJ"};function p(){return n.createElement(n.Fragment,null,n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),n.createElement("div",{style:{padding:"0.53125rem 1rem"}},n.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function g(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function v(e){var t=i.q.isFunction(e.action.label)?e.action.label:function(){return n.createElement(n.Fragment,null,e.action.label)};if(e.action.appLink)return n.createElement(c.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:g(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),n.createElement("span",{className:"align-middle"},t()));function a(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&l.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),i.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&r.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?n.createElement("a",{className:g(e.action.className),onClick:a,href:e.action.href},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),n.createElement("span",{className:"align-middle"},t())):n.createElement("span",{className:"cursor-pointer ".concat(g(e.action.className)),onClick:a,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&a(e)}},e.action.svgName&&n.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function f(e){if(!e.actions||!e.actions.length)return n.createElement(n.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),a="dropdown";e.className&&(a+=" ".concat(e.className));var i,r="actions-dropdown-".concat(o.Y.getRandomInt()),l="dropdown-toggle px-0 ".concat(u.dropdownToggle);return e.dropdownToggleClassName&&(l+=" ".concat(e.dropdownToggleClassName)),n.createElement("div",{className:a},n.createElement("button",{className:l,type:"button",id:r,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:t?e.fetchMore:null},n.createElement(s.x,{svgName:m.vn.More,size:e.dropdownToggleSvgSize})),n.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":r},t?n.createElement(p,null):e.actions.map((function(e,t){var a=void 0!==i&&i!==e.group;return i=e.group,e.tooltip?n.createElement("li",{key:t},a&&n.createElement("hr",{className:"dropdown-divider",role:"separator"}),n.createElement(d.u,{title:e.tooltip,spanHack:!0},n.createElement(v,{action:e}))):n.createElement("li",{key:t},a&&n.createElement("hr",{className:"dropdown-divider",role:"separator"}),n.createElement(v,{action:e}))}))))}f.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:s.S.Small}},44522:(e,t,a)=>{a.d(t,{p:()=>S,v:()=>x});var n=a(32735),i=a(110),r=a(50690),o=a(84963),l=a(73679),c=a(83657),s=a(23481),d=a(36848),m=a(83914),u=a(35223),p="shared.backButton";function g(e){var t=Object.assign({textShadow:!0},e),a=t.backToName,i=t.appLink,r=t.color,o=t.extraClasses,l=t.textShadow,c=a?s.T.getPhrase(p,"backTo",{backToName:a}):s.T.getPhrase(p,"back"),g="black"===r?"":"text-white",v=l?"text-shadow":"";return n.createElement(d.F,{appLink:i,className:"d-inline-flex align-items-center h5 mb-0 ".concat(o," ").concat(g," ").concat(v)},n.createElement(m.x,{svgName:u.vn.ChevronLeft,size:m.S.Medium}),n.createElement("span",{className:"ms-1"},c))}g.defaultProps={color:"black",extraClasses:""};var v=a(36518),f=a(83345),b=a(10587),h=a(94232),y=a(54610),E=a(79967),N=a(67453);const w={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var C="".concat(b.y[y.__.Banners].width,":").concat(b.y[y.__.Banners].height);function k(e){return e.length<160?"h1":w.headingLarge}var S=n.memo((function(e){var t,a,s,d,m=e.heading,u=e.banner,p=e.imageCdnUrl,b=e.actions,S=e.sortComponent,x=e.blockColourClass,L=e.specialEvent,T=n.useContext(h.n),I=(0,E.k)().xxl?1920:1200,O=n.useMemo((function(){if(!L||e.showComingSoon)return!1;var t=i.O.format(new Date,"YYYY-MM-DD");return L.endDate?L.startDate<=t&&L.endDate>=t:L.startDate===t}),[L]),D=e.imageOptions||{width:I,ratio:C,resizeType:y.Nq.Cover},A=!!u&&!!p&&N.j.createBannerUrl(u,{fallbackBaseUrl:p,fallbackCategoryName:m,type:y.__.Banners},D),P={className:"banner banner-header ".concat(e.bannerClassName),style:A?{backgroundImage:"url('".concat(A,"')")}:{}};!u&&x&&(delete P.style,P.className+=" ".concat(x));var j=e.detailsComponent;return r.b.renderInPortalIfExists(n.createElement("header",Object.assign({},P),n.createElement("div",{className:"container ".concat(w.container," position-relative inner-banner")},e.backButtonAppLink&&n.createElement("div",{className:"pt-3"},n.createElement(g,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),n.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(w.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?w.bannerContentWithLogo:""))},!!L&&n.createElement("div",{className:"position-relative ".concat(w.specialEventContainer)},n.createElement(l.s,{body:{type:L.endDate?"range":"day",text:L.endDate?"".concat(i.O.format(L.startDate,"DD"),"-").concat(i.O.format(L.endDate,"DD")):i.O.format(L.startDate,"DD")},month:i.O.format(L.startDate,"MMMM"),theme:e.calendarTheme})),n.createElement("div",null,O&&n.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},n.createElement(f.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&n.createElement(o.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),n.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&n.createElement("div",{className:"".concat(w.logoContainerLeft," d-none d-md-block partial-loading-background rounded-circle overflow-hidden me-3")},(null===(a=e.logo)||void 0===a?void 0:a.url)&&n.createElement(v.w,{src:N.j.createUrl(null===(s=e.logo)||void 0===s?void 0:s.url,{size:y.h2.Medium})})),n.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(w.heading," ").concat(k(m)," ").concat(e.alignLogoLeft?"w-50":"")},m,j&&n.createElement(j,null)))),!!b&&n.createElement("div",{className:w.actionsContainer},n.createElement(c.e,{actions:b,sortComponent:S,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(d=e.logo)||void 0===d?void 0:d.url)&&n.createElement("div",{className:w.logoContainer},n.createElement("img",{src:N.j.createUrl(e.logo.url,{size:y.h2.Small}),className:"rounded-circle"})))),null==T?void 0:T.container)}),(function(e,t){var a,n;return e.actions===t.actions&&e.heading===t.heading&&(null===(a=e.logo)||void 0===a?void 0:a.url)===(null===(n=t.logo)||void 0===n?void 0:n.url)}));function x(){var e=n.useContext(h.n);return r.b.renderInPortalIfExists(n.createElement("div",{className:"partial-banner partial-loading-background ".concat(w.banner)}),null==e?void 0:e.container)}},49935:(e,t,a)=>{a.d(t,{Oo:()=>v,b2:()=>f});var n=a(32735),i=a(23481),r=a(36848),o=a(86764),l=a(3747),c=a(5859),s=a(35223),d=a(83914);function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(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)?u(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(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 p=i.T.encloseNamespace("shared.breadcrumbComponent"),g=n.forwardRef((function(e,t){var a=e.breadcrumb,i=a.name,o=a.appLink,l=a.active,c=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(l?" active":"")},l?n.createElement("strong",null,i):n.createElement(r.F,{appLink:o,ref:t},c&&n.createElement(d.x,{svgName:s.vn.ChevronLeft,size:d.S.Small}),n.createElement("span",{className:c?"ms-2":""},i)))})),v=function(e){var t=e.breadcrumbs,a=(0,l.a)(o.r.XS),i=(null==t?void 0:t.length)||0,r=m(n.useState(!1),2),c=r[0],s=r[1],d=m(n.useState(!1),2),u=d[0],v=d[1],f=n.useRef();if(n.useEffect((function(){var e,a=null!==(e=null==t?void 0:t.reduce((function(e,t){return e+t.name.length}),0))&&void 0!==e?e:0;i>4&&a>64&&s(!0)}),[null==t?void 0:t.length]),n.useLayoutEffect((function(){var e;u&&(null===(e=f.current)||void 0===e||e.focus())}),[f.current,u]),!i||a&&i<2)return n.createElement(n.Fragment,null);if(a)return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(g,{breadcrumb:t[i-2],withBackIcon:!0})));var b=n.createElement(g,{breadcrumb:t[0]}),h=i>2?n.createElement(g,{breadcrumb:t[1]}):n.createElement(n.Fragment,null),y=i>3?n.createElement(g,{breadcrumb:t[i-2]}):n.createElement(n.Fragment,null),E=i>1?n.createElement(g,{breadcrumb:t[i-1]}):n.createElement(n.Fragment,null),N=t.slice(2,i-2);return n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},b,h,c?n.createElement("li",{className:"breadcrumb-item"},n.createElement("button",{className:"btn-link",onClick:function(){s(!1),v(!0)},"aria-label":p("expand")},"...")):N.map((function(e,t){return n.createElement(g,{key:t,breadcrumb:e,ref:0===t?f:null})})),y,E))},f=n.memo((function(e){var t=e.numItems,a=void 0===t?3:t;return(0,l.a)(o.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:a}).map((function(e,t){var a=e.width;return n.createElement("li",{key:t,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:a},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},88513:(e,t,a)=>{a.d(t,{B:()=>g});var n=a(32735),i=a(23481),r=a(65858),o=a(36848),l=a(83914),c=a(17082),s=a(35223),d=a(49542);const m={seeMore:"yv0FS"};var u=i.T.encloseNamespace("shared.widgetHeader");function p(e){return n.createElement("div",{className:"ms-3 ".concat(m.seeMore)},n.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),{descriptor:r._S.SeeMore}),className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":"")},n.createElement("p",{className:"hover-text-underline text-dark curated-widget-heading"},u("seeAll"))))}function g(e){var t,a,i=!!e.description;if(!e.name&&!e.description)return n.createElement(n.Fragment,null);var r=d.d.isBelowContentMinimum(e.content,e.widgetTypeId),u=null!==(a=null===(t=c.u[e.widgetTypeId])||void 0===t?void 0:t.minContent)&&void 0!==a?a:0;return n.createElement("div",{className:"curated-widget-header"},n.createElement("div",{className:"d-flex justify-content-between"},!!e.name&&n.createElement("div",{className:m.title},n.createElement(o.F,{appLink:e.appLink,analyticsOptions:e.analyticsOptions,analyticsData:e.analyticsData,className:"text-decoration-none ".concat(e.appLink?"curated-widget-link":""),onClick:e.onClick},n.createElement("h2",{className:"h4 curated-widget-heading"},e.isPreviewing&&r&&n.createElement(l.x,{svgName:s.vn.WarningOutline,title:"Widget is below the minimum content threshold of ".concat(u," and won't be displayed."),tooltipSpanHack:!0,tooltipSpanHackClassName:"d-inline text-danger me-1"}),e.name))),!!e.appLink&&!i&&!!e.showSeeMoreLink&&n.createElement(p,Object.assign({},e))),i&&n.createElement("div",{className:"d-flex justify-content-between align-items-end"},n.createElement("p",{className:"description curated-widget-description ".concat(m.description)},n.createElement("span",null,e.description)),!!e.appLink&&!!e.showSeeMoreLink&&n.createElement(p,Object.assign({},e))))}},47770:(e,t,a)=>{a.d(t,{K:()=>c});var n=a(32735),i=a(68050),r=a(69111),o=a(88513),l=a(91028);function c(e){return n.createElement(n.Fragment,null,n.createElement(o.B,{name:e.name,description:e.description}),n.createElement(i.Z,{className:"mb-n2"},e.content.map((function(t){var a;return n.createElement(r.Z,{className:"position-relative pb-2",key:t.id,xs:12,sm:6,lg:e.hasTableOfContents?6:4,xl:4},n.createElement(l.V,{data:t,getChildAppLink:function(t){var a,n;return null===(n=null===(a=e.appLinks)||void 0===a?void 0:a.classification)||void 0===n?void 0:n.call(a,t)},analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,highlightOnHover:null===(a=e.settings)||void 0===a?void 0:a.hasTopicDirectories,isLarge:!0}))}))))}},82032:(e,t,a)=>{a.d(t,{q:()=>x});var n=a(32735),i=a(68050),r=a(69111),o=a(88513),l=a(23481),c=a(65858),s=a(36848),d=a(11607),m=a(75163),u=a(5465),p=a(83914),g=a(2284),v=a(54610),f=a(35223),b=a(87114),h=a(110);const y={isNew:"KLRzE",newVideos:"xozwy",badge:"NWZxu",icon:"G9W_I"};var E=l.T.encloseNamespace("shared.subjectStatsBadge");function N(e){var t=b.i.getCounts(e.classification).newVideoCount,a=function(){if(e.classification.status===g.W.ComingSoon)return"coming-soon";var a=e.classification.datePublished;return a&&h.O.timeSince(a,"day")<=30?"new-topic":t>0?"new-videos":null}();return n.createElement("div",{className:function(){var e="fw-semibold d-inline-block rounded-pill px-2 ".concat(y.badge);switch(a){case"coming-soon":return e+" bg-light ps-1 d-inline-flex align-items-center";case"new-topic":return e+" ".concat(y.isNew);case"new-videos":return e+" ".concat(y.newVideos);default:return""}}()},"coming-soon"===a&&n.createElement(p.x,{svgName:f.vn.TimerSmall,className:"svg-container ".concat(y.icon),size:p.S.ExtraSmall}),function(){switch(a){case"coming-soon":return E("comingSoon");case"new-topic":return E("new");case"new-videos":return E("newVideos",{smartCount:t});default:return""}}())}var w=a(83616);function C(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 k=l.T.encloseNamespace("shared.subjectStatsWidgetItem");function S(e){var t,a,i,r,o,l,h=(o=n.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(o)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(o,l)||function(e,t){if(e){if("string"==typeof e)return C(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)?C(e,t):void 0}}(o,l)||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=h[0],E=h[1],S=(null===(t=e.classification)||void 0===t?void 0:t.status)===g.W.ComingSoon,x=b.i.isFollowing(e.classification),L=b.i.getCounts(e.classification),T=L.videoCount,I=L.resourceCount,O=L.newVideoCount,D=L.childClassificationCount,A=function(){var t="";if(T&&(t+="".concat(k("videos",{smartCount:T})," ")),I&&(t+=" • ".concat(k("resources",{smartCount:I}))),b.i.isTopLevelTopic(e.classification)&&D>0){if(!t)return k("topics",{smartCount:D});t="".concat(k("topics",{smartCount:D})," • ")+t}return t}();return n.createElement(s.F,{className:"d-flex no-decoration rounded ".concat(w.Z.container),appLink:null===(a=e.getAppLink)||void 0===a?void 0:a.call(e,e.classification),analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:null===(i=e.classification)||void 0===i?void 0:i.id,name:null===(r=e.classification)||void 0===r?void 0:r.name,presentationId:e.classification.presentationId,comingSoon:!!S,dashboardVideoCount:T,dashboardResourceCount:I,dashboardNewVideosCount:O,datePublished:e.classification.datePublished}),analyticsOptions:Object.assign(Object.assign({location:c.LZ.SubjectStatsWidgetItem},e.analyticsOptions),{actionType:c.Vw.Click,entity:c.py.Classification,descriptor:c._S.Cover})},!y&&n.createElement(u.oy,{type:u.mS.Subject,extraClasses:"ms-2 ".concat(w.Z.fallbackImage)}),n.createElement("div",{className:"".concat(w.Z.cover," me-2 rounded overflow-hidden")},n.createElement(m.Z,{data:e.classification.cover,imageOptions:{size:v.h2.Medium},imageClassName:S?"opacity-50":"",onLoad:function(){return E(!0)}},e.canFollowTopics&&n.createElement(d.L,{onClick:function(t){var a;t.stopPropagation(),t.preventDefault(),e.canFollowTopics&&(null===(a=e.onToggleFollowClassification)||void 0===a||a.call(e,e.classification,c.LZ.SubjectStatsWidgetItem))},className:"\n align-items-center justify-content-center cursor-pointer\n ".concat(w.Z.bellContainer," ").concat(x?w.Z.followed:"","\n ")},n.createElement(p.x,{svgName:f.vn.BellFilled,className:"svg-container ".concat(w.Z.bell)}),n.createElement(p.x,{svgName:f.vn.Bell,className:"svg-container ".concat(w.Z.bellOutline)})))),n.createElement("div",null,n.createElement("h3",{className:"h6 mb-0 clamp-2 mt-1"},e.classification.name),!!A&&n.createElement("p",{className:"mb-0 ".concat(w.Z.subText)},A),n.createElement(N,{classification:e.classification})))}function x(e){return n.createElement(n.Fragment,null,n.createElement(o.B,{name:e.name,description:e.description}),n.createElement(i.Z,{className:"mb-n2"},e.content.map((function(t){var a;return n.createElement(r.Z,{className:"position-relative pb-2",key:t.id,xs:12,sm:6,lg:e.hasTableOfContents?6:4,xl:4},n.createElement(S,{classification:t,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,getAppLink:null===(a=e.appLinks)||void 0===a?void 0:a.classification,onToggleFollowClassification:e.onToggleFollowClassification,canFollowTopics:!1}))}))))}},65163:(e,t,a)=>{a.d(t,{QL:()=>n.Q,eb:()=>n.e});var n=a(16450);a(14244)},29420:(e,t,a)=>{a.d(t,{T:()=>s});var n=a(32735),i=a(82182);function r(e){return r="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},r(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(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 c=400;function s(e){var t=e.type,a=e.state,l=e.containerRef,s=e.mediaQuery,d=o(n.useState(!1),2),m=d[0],u=d[1],p=o(n.useState({}),2),g=p[0],v=p[1],f=o(n.useState(null),2),b=f[0],h=f[1],y=n.useMemo((function(){return i.V.isTouchScreen()}),[]);return n.useEffect((function(){"dynamic"===t&&l.current&&a.containerLeftPosition&&!y&&setTimeout((function(){return function(){var e,t=a;if(null===(e=l.current)||void 0===e?void 0:e.children){var n=Array.from(l.current.children).reduce((function(e,a){var n,i,o,l=null==a?void 0:a.getBoundingClientRect(),c=l.left<t.containerRightPosition&&l.right>t.containerLeftPosition;return Object.assign(Object.assign({},e),(n={},i=a.id,o=c?{"aria-hidden":!1}:{"aria-hidden":!0,inert:"true"},(i=function(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}(i))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o,n))}),{});v(n)}}()}),c+50)}),[l.current,s,a.offset,a.containerLeftPosition]),{isTabbing:m,onFocusWidget:function(e){document.querySelector(".user-is-tabbing")&&(u(!0),h(e))},onBlurWidget:function(){document.querySelector(".user-is-tabbing")||(u(!1),h(null))},getFixedAttributes:function(e){var t=a;return y||e>=t.offset-t.viewableItems&&e<t.offset?{"aria-hidden":!1}:{inert:"true","aria-hidden":!0}},dynamicAttributes:g,focusNext:function(){setTimeout((function(){if(l.current){for(var e=l.current.querySelectorAll("li[aria-hidden]"),t=null,a=b+1;a<e.length&&!t;a++)t=e[a].querySelector('a[tabindex="0"]');t&&t.focus()}}),c+100)},focusPrev:function(){setTimeout((function(){if(l.current){for(var e=l.current.querySelectorAll("li[aria-hidden]"),t=null,a=b-1;a>=0&&!t;a--)t=e[a].querySelector('a[tabindex="0"]');t&&t.focus()}}),c+100)}}}},2192:(e,t,a)=>{a.d(t,{M:()=>h,Q:()=>y});var n=a(32735),i=a(45157),r=a(36848),o=a(60376),l=a(5465),c=a(83914),s=a(83345),d=a(54610),m=a(67453),u=a(45778),p=a(35223),g=a(92038),v="shared.subjectWidgetItem",f=function(e){var t=e.name,a=e.multiline,i=e.noUnderLine,r="".concat(g.Z.comingSoonPanel," \n d-flex flex-column align-items-center justify-content-center px-3 text-center"),o="";return a?o+=" ".concat(g.Z.clamped," clamp-2"):(r+=" text-nowrap",o+=" text-truncate"),n.createElement("div",{className:r},n.createElement("small",{className:"text-secondary"},n.createElement(s.x,{namespace:v,phrase:"comingSoon"})),n.createElement("p",{className:"".concat(i?"":g.Z.name," h6")},n.createElement("span",{className:o},t)))},b=function(e){var t=e.name,a=e.multiline,i=e.subtitle,r=e.noUnderLine,o=e.newVideosCount,l="px-3 d-flex flex-column justify-content-center",c="".concat(r?"":g.Z.name," h6");return a?c+=" ".concat(o?"clamp-2":"clamp-3"," text-start"):(l+=" text-nowrap text-truncate",c+=" text-truncate mb-0"),n.createElement("div",{className:l},i&&n.createElement("div",{className:"text-secondary clamp-1 ".concat(g.Z.text)},i),n.createElement("div",{className:c,title:t},t),!!o&&n.createElement("div",{className:"fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ".concat(g.Z.newVideos)},n.createElement(s.x,{namespace:v,phrase:"newVideos",options:{smartCount:o}})))};function h(e){var t,a=m.j.createUrl(e.coverUrl,{size:e.isLarge?d.h2.Medium:d.h2.Small}),r=void 0;u.G.isClassification(e.data)&&(r=e.data);var s={name:e.data.name,multiline:e.isLarge||e.multiline,subtitle:e.subtitle,noUnderLine:e.highlightOnHover,newVideosCount:e.showNewVideosCount?null===(t=null==r?void 0:r.externalMetadata)||void 0===t?void 0:t.childDashboardNewVideoCount:0};return n.createElement("div",{className:"".concat(e.themeColor?g.Z.hasThemeColor:"border"," d-flex position-relative ").concat(e.className," ").concat(g.Z.widgetItem," ").concat(e.isSelected?"border-success border-2":""," ").concat(e.highlightOnHover&&!e.themeColor?"bg-light-blue-hover":""),style:e.themeColor?{"--themeColor":e.themeColor}:{},id:"".concat(e.data.id,"-").concat(i.Y.getRandomInt())},e.isSelected&&n.createElement("div",{className:"".concat(g.Z.selectedMask," border-2")}),n.createElement("div",{className:"".concat(g.Z.imagePanel," ").concat(e.isLarge?g.Z.large:"")},e.isSelected&&!e.hideCheckmark&&n.createElement("div",{className:g.Z.selected},n.createElement(o.f,{svgName:p.vn.Check,svgSize:c.S.Large,textVariant:"white",variant:"green"})),n.createElement("div",{className:"".concat(g.Z.image," ").concat(e.imageClassName),style:e.coverUrl?{backgroundImage:"url('".concat(a,"')")}:{}}),!e.hideFallback&&n.createElement(l.oy,{type:l.mS.Subject,extraClasses:e.isLarge?g.Z.large:""})),e.isComingSoon?n.createElement(f,Object.assign({},s)):n.createElement(b,Object.assign({},s)))}function y(e){var t,a=e.getChildAppLink?e.getChildAppLink(e.data):null;return n.createElement(n.Fragment,null,a?n.createElement(r.F,{className:g.Z.appLink,appLink:a,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,appLinkOptions:null===(t=e.getChildAppLinkOptions)||void 0===t?void 0:t.call(e)},n.createElement(h,Object.assign({},e))):n.createElement(h,Object.assign({},e)))}},43741:(e,t,a)=>{a.d(t,{M:()=>s,Q:()=>c});var n=a(32735),i=a(45157),r=a(5465),o=a(92038);function l(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 c=function(){var e,t,a=(e=n.useState(i.Y.getRandomInt(5)+3+"rem"),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,i,r,o,l=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(n=r.call(a)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(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)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return n.createElement("div",{className:"border d-flex position-relative me-2 ".concat(o.Z.widgetItem)},n.createElement("div",{className:o.Z.imagePanel}),n.createElement("div",{className:"px-2",style:{width:a}}),n.createElement("div",{className:o.Z.partialIcon},n.createElement(r.oy,{type:r.mS.Subject})))},s=function(){return n.createElement("div",{className:"border d-flex position-relative me-2 ".concat(o.Z.widgetItem)},n.createElement("div",{className:"".concat(o.Z.partialLargeImage)}),n.createElement("div",{className:"px-2"}),n.createElement("div",{className:o.Z.partialIcon},n.createElement(r.oy,{type:r.mS.Subject,extraClasses:o.Z.partialLargeFallback})))}},91028:(e,t,a)=>{a.d(t,{V:()=>s});var n=a(32735),i=a(65858),r=a(2192),o=a(52641),l=a(2284),c=a(40424),s=n.memo((function(e){var t,a,s,d,m,u,p,g=e.data.id===c.OL.ClassificationDirectory,v=(null===(t=e.data)||void 0===t?void 0:t.status)===l.W.ComingSoon,f=function(e,t){var a;if((null==t?void 0:t.length)>=o._.MULTI_PRESENTATION_THRESHOLD)return null===(a=null==t?void 0:t.find((function(t){return t.id===e})))||void 0===a?void 0:a.name}(e.data.presentationId,null==e?void 0:e.availablePresentations),b=Object.assign(Object.assign({},e.analyticsData),{id:(null===(a=e.analyticsData)||void 0===a?void 0:a.id)||(null===(s=e.data)||void 0===s?void 0:s.id),name:null===(d=e.data)||void 0===d?void 0:d.name,presentationId:(null===(m=e.analyticsData)||void 0===m?void 0:m.presentationId)||e.data.presentationId,comingSoon:!!v}),h=Object.assign(Object.assign({location:i.LZ.ClassificationListItem,entity:i.py.Classification},e.analyticsOptions),{actionType:i.Vw.Click,descriptor:i._S.Cover});return n.createElement(r.Q,Object.assign({},e,{analyticsData:b,analyticsOptions:h,coverUrl:null===(u=e.data.cover)||void 0===u?void 0:u.url,subtitle:(null===(p=e.getSubtitle)||void 0===p?void 0:p.call(e,e.data))||f,isComingSoon:v,themeColor:g?e.themeColor:""}))}))},9513:(e,t,a)=>{a.d(t,{Ml:()=>i.M,Qh:()=>i.Q,Vz:()=>n.V});var n=a(91028),i=a(43741),r=(a(32735),a(65858));a(36848),a(83914),a(83345),a(35223),a(92038),r.Vw.Click,r.py.UserSetting,r._S.Tile,a(2786),r.Vw.Click,r.py.Url,r._S.Tile},43872:(e,t,a)=>{a.d(t,{V:()=>d});var n=a(32735),i=a(82182),r=a(31069),o=a(91967),l=new Image;l.src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=";var c=function(e){e.dataTransfer.setDragImage&&o.q.isFunction(e.dataTransfer.setDragImage)&&e.dataTransfer.setDragImage(l,0,0)},s=i.V.isTouchScreen(),d=n.forwardRef((function(e,t){var a,i,o,l,d=e.children,m=e.positionType,u=e.onDrag,p=e.onDragEnd,g=e.onTouchMove,v=e.onTouchEnd,f=e.percentageDragged,b=e.position,h=void 0===b?0:b;return n.createElement("ul",Object.assign({className:"list-unstyled d-flex flex-nowrap position-relative w-100 mb-0",style:(i=h,o=m,l=f,o===r.C.Percentage&&l&&(i-=l),{transform:"translate3d(".concat(i).concat(o,", 0px, 0px)"),transition:"transform .4s ease-in-out"}),ref:t},(a={},u&&p&&(a.draggable=!0,a.onDragEnd=p,a.onDragStart=c,a.onDragOver=u),g&&v&&s&&(a.onTouchMoveCapture=g,a.onTouchEndCapture=v),a)),d)}))},16930:(e,t,a)=>{a.d(t,{W:()=>m,f:()=>s});var n=a(32735),i=a(23481),r=a(83914),o=a(35223);const l="VSAPU",c="kgeXh";var s,d=i.T.encloseNamespace("shared.widgetButton");!function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(s||(s={}));var m=n.memo((function(e){var t,a,i,m=e.direction===s.Left,u=m?o.vn.ChevronLeft:o.vn.ChevronRight;return e.hide?n.createElement(n.Fragment,null):n.createElement("div",{className:"_ejId",style:"videos"===(null===(a=e.state)||void 0===a?void 0:a.contents)?{paddingBottom:56.25/(null===(i=e.state)||void 0===i?void 0:i.viewableItems)+"%"}:{height:"100%"}},e.useGradientBackdrop&&n.createElement("div",{className:m?"".concat("Pt3nx"," ").concat(e.leftGradientClassName):"".concat("ZuAif"," ").concat(e.rightGradientClassName)}),!e.hideExtendedClickableArea&&n.createElement("button",{onClick:e.onClick,className:"".concat("AtsWP"," ").concat(m?l:c),tabIndex:-1}),n.createElement("button",{className:"".concat((t="BVcIS",t+=m?" ".concat(l," ").concat(e.leftButtonClassName):" ".concat(c," ").concat(e.rightButtonClassName))," ").concat("gAsE9"," ").concat(e.className||""),onClick:e.onClick,"aria-label":d(m?"previous":"next")},e.hoverText&&n.createElement("span",{className:"ps-3 pe-2 ".concat("APA36")},e.hoverText),n.createElement(r.x,{svgName:u,size:r.S.Medium,className:"svg-container d-inline-block ".concat("Ev4hr")})))}))},2284:(e,t,a)=>{var n;a.d(t,{W:()=>n}),function(e){e.Draft="Draft",e.ComingSoon="ComingSoon",e.Published="Published"}(n||(n={}))},31069:(e,t,a)=>{var n;a.d(t,{C:()=>n}),function(e){e.Percentage="%",e.Pixels="px"}(n||(n={}))},10841:(e,t,a)=>{var n;a.d(t,{n:()=>n}),function(e){e.Init="init",e.Next="next",e.Previous="previous",e.Resize="resize",e.Drag="drag",e.Update="update",e.JumpToIndex="jump-to-index"}(n||(n={}))},81514:(e,t,a)=>{a.d(t,{V:()=>r});var n=a(86764),i=a(3747);function r(){var e=(0,i.a)(n.r.XS),t=(0,i.a)(n.r.SM),a=(0,i.a)(n.r.MD),r=(0,i.a)(n.r.LG),o=(0,i.a)(n.r.XL),l=(0,i.a)(n.r.XXL),c=n.r.LG;return e&&(c=n.r.XS),t&&(c=n.r.SM),a&&(c=n.r.MD),r&&(c=n.r.LG),o&&(c=n.r.XL),l&&(c=n.r.XXL),c}},97461:(e,t,a)=>{a.r(t),a.d(t,{PresentationTopicsView:()=>Z});var n=a(32735),i=a(23481),r=a(20354),o=a(65858),l=a(36848),c=a(44522),s=a(49935),d=a(10874),m=a(83345),u=a(47770),p=a(82032),g=a(65163),v=a(9513),f=a(54610),b=a(78479),h=a(42308),y=a(21750),E=a(39151),N=a(79967),w=a(22902),C=a(79612),k=a(37802),S=a(35223),x=a(87114),L=a(99742),T=a(14070),I=a(97291),O=a(51855),D=a(86698),A=a(33192),P=(a(28400),a(34181)),j=function(e){return function(t){return(null==t?void 0:t.id)?P.L.getAppLink(t,e||{}):null}};const F={classificationPane:"ftCMX"};var M="subjects.presentationTopics",B=i.T.encloseNamespace(M);function Z(e){var t,a,i,P,Z,U,R,V,z,_=(0,O.G)().isPlugin,H=(0,k.r)(null).hasTopicDirectories,W=(0,N.k)(),X=r.a.useBasicFetch(E.L.config()),Q=(0,D.y)(),q=Q.availablePresentations,G=Q.activePresentation,J=Q.hasPresentationsLoaded,Y=Q.canAccessPresentation,$=(0,w.T)(),K=$.hasPermissions,ee=$.hasLocalPermissions,te=e.queryParams.presentationId||(null==G?void 0:G.id),ae=r.a.useBasicFetch(te&&y.x.presentationById(te)),ne=ae.hasCompleted&&J,ie={name:x.i.getExploreAllTopicsTitle(null===(t=ae.data)||void 0===t?void 0:t.name,null==q?void 0:q.length),banner:{url:x.i.getPresentationLevelImage(null===(a=ae.data)||void 0===a?void 0:a.learningLevel,"topic-banner")}},re=r.a.useBasicFetch(ne&&y.x.topLevelTopics(te||(null===(i=ae.data)||void 0===i?void 0:i.id))),oe=B("pageTitleSubject",{title:null===(P=ae.data)||void 0===P?void 0:P.name});(0,C.M)({title:oe,description:B("pageDescription",{title:null===(Z=ae.data)||void 0===Z?void 0:Z.name}),canonicalLink:A.f.getCanonicalLink(),allowIndexing:A.f.allowIndexing()});var le=j();var ce=!!X.data&&!!q&&re.data,se=Y(null===(U=ae.data)||void 0===U?void 0:U.id),de={presentationId:null===(R=ae.data)||void 0===R?void 0:R.id,presentationName:null===(V=ae.data)||void 0===V?void 0:V.name,widgetId:h.z.Classifications,templateId:b.f.CoverFixedPillListLarge},me=H?p.q:u.K;return n.createElement("main",{className:"bg-white px-4"},ce?n.createElement(c.p,{heading:null==ie?void 0:ie.name,banner:null==ie?void 0:ie.banner,imageCdnUrl:X.data.imageCdnUrl,imageOptions:{size:f.h2.Large}}):n.createElement(c.v,null),n.createElement("div",{className:"py-3 mb-3 ".concat(se?"border-bottom":"")},se?ce?n.createElement(s.Oo,{breadcrumbs:function(){var e;return[{name:B("discover"),appLink:{application:I.O.DASHBOARD,action:T.e.Dashboard.HOME}},{name:x.i.getExploreAllTopicsBreadcrumb(null===(e=ae.data)||void 0===e?void 0:e.name,null==q?void 0:q.length),active:!0}]}()}):n.createElement(s.b2,null):n.createElement(n.Fragment,null)),n.createElement("div",{className:F.classificationPane},ce?n.createElement(me,{id:null===(z=ae.data)||void 0===z?void 0:z.id,name:"",description:"",metadata:{},preferences:[],hasPermissions:K,hasLocalPermissions:ee,widgetTypeId:h.z.Classifications,templateId:b.f.StatsCoverFixedPillListLarge,analyticsData:de,content:null==re?void 0:re.data,analyticsOptions:{location:o.LZ.SlidingListItem},appLinks:{classification:le},imageCdnUrl:X.data.imageCdnUrl,resourceThumbnailFallbackImageUrl:L.W.Fallbacks.RESOURCE_THUMBNAIL,isPlugin:_}):n.createElement(g.QL,{partialLoadingComponent:v.Qh}),ce&&H&&(null==q?void 0:q.length)>1&&n.createElement("ul",{className:"pt-3 list-unstyled"},q.filter((function(e){var t;return e.id!==(null===(t=ae.data)||void 0===t?void 0:t.id)})).map((function(e){var t,a,i;return n.createElement("li",{key:e.id},n.createElement(l.F,{className:"d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ".concat(F.link," ").concat(x.i.getMappedPresentationBackgroundColour(null==e?void 0:e.learningLevel)),appLink:{application:I.O.SUBJECT,action:T.e.Subjects.PRESENTATION_TOPICS,params:{presentationId:e.id}},appLinkOptions:{middlewareOptions:{presentationSlug:e.vanitySlug}},analyticsData:{id:e.id,name:e.name,description:e.description,currentPresentationId:null===(t=ae.data)||void 0===t?void 0:t.id,currentPresentationName:null===(a=ae.data)||void 0===a?void 0:a.name,currentPresentationDescription:null===(i=ae.data)||void 0===i?void 0:i.description},analyticsOptions:{entity:o.py.Presentation,actionType:o.Vw.Click,location:o.LZ.PresentationClassifications}},n.createElement("div",{className:"h4 text-shadow mb-0"},q.length>2||W.sm||W.xs?n.createElement(m.x,{namespace:M,phrase:"multiPresentationBanner",options:{name:e.name}}):n.createElement(m.x,{namespace:M,phrase:"singlePresentationBanner",options:{name:e.name}})),n.createElement(d.h,{svgName:W.xs?S.vn.Sparkle:S.vn.School,openInNewTab:!0,className:"btn btn-outline-dark",onClick:null},n.createElement(m.x,{namespace:M,phrase:W.xs?"explore":"changeTo",options:{name:e.name}}))))})))))}},83616:(e,t,a)=>{a.d(t,{Z:()=>n});const n={container:"wzt8R",bellContainer:"X7Jgx",bell:"HoKe4",followed:"Pdmdk",bellOutline:"bEQDk",cover:"luOU3",fallbackImage:"ReXqz",subText:"p0kUV"}},92038:(e,t,a)=>{a.d(t,{Z:()=>n});const n={appLink:"fFjKN",name:"A_by9",selectedMask:"xSQtR",widgetItem:"Ys9W_",hasThemeColor:"DX2ua",text:"JfAoy",imagePanel:"aUNDc",partialLargeImage:"RuLxv",selected:"BViJb",image:"LkTep",dragHandle:"CJqvP",large:"R5clw",comingSoonPanel:"Wa2PG",newVideos:"s61h8",editSubjectsItem:"gGNFD",allSubjectsItem:"IHdlJ",logoContainer:"Nzaes",draggingItem:"zUOye",partialLargeFallback:"FmJP9",partialIcon:"sdZuo"}},68050:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(95685),i=a.n(n),r=a(32735),o=a(46304),l=a(74512);const c=r.forwardRef((({bsPrefix:e,className:t,as:a="div",...n},r)=>{const c=(0,o.vE)(e,"row"),s=(0,o.pi)(),d=(0,o.zG)(),m=`${c}-cols`,u=[];return s.forEach((e=>{const t=n[e];let a;delete n[e],null!=t&&"object"==typeof t?({cols:a}=t):a=t;const i=e!==d?`-${e}`:"";null!=a&&u.push(`${m}${i}-${a}`)})),(0,l.jsx)(a,{ref:r,...n,className:i()(t,c,...u)})}));c.displayName="Row";const s=c}}]);
|
|
2
|
-
//# sourceMappingURL=7895-78f20c123f-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7895-78f20c123f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/generic-calendar-date.scss","file:///app/packages/libs/shared/src/apps/calendar/components/generic-calendar-date/GenericCalendarDate.tsx","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/subject-stats-badge.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-badge/SubjectStatsBadge.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate.tsx","file:///app/packages/libs/shared/src/components/widgets/hooks/useWidgetKeyboard.ts","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/CoverPill.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/PartialSubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/EditSubjectsWidgetLink.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/AllSubjectsWidgetLink.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/ClassificationStatus.ts","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/apps/subjects/utils/ClassificationAppLinks.ts","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/presentation-topics.scss","file:///app/packages/projects/lite/src/apps/subjects/views/presentation-topics/PresentationTopicsView.tsx","file:///app/packages/libs/shared/src/components/widgets/items/subject-stats-widget-item/subject-stats-widget-item.scss","file:///app/packages/libs/shared/src/components/widgets/items/subject-widget-item/cover-pill.scss","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dateItem\":\"I3SBm\",\"label\":\"PRORs\",\"body\":\"RfiM_\",\"bodyDay\":\"ZOVny\",\"bodyRange\":\"vYhXN\",\"bodyMonth\":\"mYslO\",\"month\":\"EPkkQ\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './generic-calendar-date.scss';\n\nexport interface GenericCalendarDateProps {\n label?: string;\n body: {\n type: 'month' | 'range' | 'day';\n text: string;\n };\n month?: string;\n getAppLink?: () => Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n className?: string;\n theme?: CalendarTheme;\n}\n\nexport function GenericCalendarDate(props: GenericCalendarDateProps): JSX.Element {\n function getBodyClass(): string {\n switch (props.body.type) {\n case 'range':\n return styles.bodyRange;\n case 'day':\n return styles.bodyDay;\n case 'month':\n return styles.bodyMonth;\n }\n }\n\n return (\n <AppLink\n appLink={props.getAppLink?.()}\n className={`text-decoration-none text-center bg-white text-dark border border-3 ${props.theme?.border} rounded-3 d-block fw-semibold ${props.className}`}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n <div className={`position-relative ${styles.dateItem}`}>\n <div className={`${props.theme?.background} py-1 ${styles.label} d-flex align-items-center justify-content-center`}>\n {props.label ? props.label : <> </>}\n </div>\n <div className={`${getBodyClass()} ${styles.body} my-2`}>\n {props.body.text}\n </div>\n <div className={`mb-0 ${styles.month}`}>\n {props.month}\n </div>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={DateHelper.format(specialEvent.startDate, 'MMMM')}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block partial-loading-background rounded-circle overflow-hidden me-3`}>\n {props.logo?.url &&\n <LazyImage src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })} />}\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Small })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\n );\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n isPreviewing?: boolean;\n content?: any[];\n widgetTypeId?: WidgetTypeId;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n const isBelowMinimum = WidgetHelper.isBelowContentMinimum(props.content, props.widgetTypeId);\n const minContent = WidgetTypeIdConfig[props.widgetTypeId]?.minContent ?? 0;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.isPreviewing && isBelowMinimum && (\n <SvgContainer\n svgName={cvSvgLibrary.WarningOutline}\n title={`Widget is below the minimum content threshold of ${minContent} and won't be displayed.`}\n tooltipSpanHack\n tooltipSpanHackClassName='d-inline text-danger me-1'\n />\n )}\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item/SubjectWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function CoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectWidgetItem\n data={c}\n getChildAppLink={(c: Classification) => props.appLinks?.classification?.(c)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n highlightOnHover={props.settings?.hasTopicDirectories}\n isLarge\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"isNew\":\"KLRzE\",\"newVideos\":\"xozwy\",\"badge\":\"NWZxu\",\"icon\":\"G9W_I\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport styles from './subject-stats-badge.scss';\n\ntype ClassificationBadgeType = 'coming-soon' | 'new-topic' | 'new-videos';\n\nconst namespace = 'shared.subjectStatsBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsBadgeProps {\n classification: Classification;\n}\n\nexport function SubjectStatsBadge(props: SubjectStatsBadgeProps): JSX.Element {\n const { newVideoCount } = TopicsHelper.getCounts(props.classification);\n\n function getBadgeType(): ClassificationBadgeType {\n if (props.classification.status === ClassificationStatus.ComingSoon)\n return 'coming-soon';\n\n const { datePublished } = props.classification;\n if (!!datePublished && DateHelper.timeSince(datePublished, 'day') <= 30)\n return 'new-topic';\n\n if (newVideoCount > 0)\n return 'new-videos';\n\n return null;\n }\n\n const badgeType = getBadgeType();\n\n function getBadgeClass(): string {\n const baseClass = `fw-semibold d-inline-block rounded-pill px-2 ${styles.badge}`;\n\n switch (badgeType) {\n case 'coming-soon':\n return baseClass + ' bg-light ps-1 d-inline-flex align-items-center';\n case 'new-topic':\n return baseClass + ` ${styles.isNew}`;\n case 'new-videos':\n return baseClass + ` ${styles.newVideos}`;\n default:\n return '';\n }\n }\n\n function getBadgeText(): string {\n switch (badgeType) {\n case 'coming-soon':\n return getPhrase('comingSoon');\n case 'new-topic':\n return getPhrase('new');\n case 'new-videos':\n return getPhrase('newVideos', { smartCount: newVideoCount });\n default:\n return '';\n }\n }\n\n return (\n <div className={getBadgeClass()}>\n {badgeType === 'coming-soon' && (\n <SvgContainer\n svgName={cvSvgLibrary.TimerSmall}\n className={`svg-container ${styles.icon}`}\n size={SvgContainerSize.ExtraSmall}\n />\n )}\n\n {getBadgeText()}\n </div>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { SubjectStatsBadge } from './subject-stats-badge/SubjectStatsBadge';\n\nimport styles from './subject-stats-widget-item.scss';\n\nconst namespace = 'shared.subjectStatsWidgetItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubjectStatsWidgetItemProps {\n classification: Classification;\n getAppLink: (classification: Classification) => Core.AppLink;\n onToggleFollowClassification: (classification: Classification, location: LocationContext) => void;\n canFollowTopics: boolean;\n\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function SubjectStatsWidgetItem(props: SubjectStatsWidgetItemProps): JSX.Element {\n const [ hasLoadedImage, setHasLoadedImage ] = React.useState(false);\n const isComingSoon = props.classification?.status === ClassificationStatus.ComingSoon;\n const isFollowing = TopicsHelper.isFollowing(props.classification);\n\n const {\n videoCount,\n resourceCount,\n newVideoCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n function onToggleFollowClassification(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n e.preventDefault();\n\n if (!props.canFollowTopics)\n return;\n\n props.onToggleFollowClassification?.(props.classification, LocationContext.SubjectStatsWidgetItem);\n }\n\n function getSubtext(): string {\n let text = '';\n\n if (videoCount)\n text += `${getPhrase('videos', { smartCount: videoCount })} `;\n\n if (resourceCount)\n text += ` • ${getPhrase('resources', { smartCount: resourceCount })}`;\n\n if (TopicsHelper.isTopLevelTopic(props.classification) && childClassificationCount > 0) {\n if (!text)\n return getPhrase('topics', { smartCount: childClassificationCount });\n\n text = `${getPhrase('topics', { smartCount: childClassificationCount })} • ` + text;\n }\n\n return text;\n }\n\n const subText = getSubtext();\n\n return (\n <AppLink\n className={`d-flex no-decoration rounded ${styles.container}`}\n appLink={props.getAppLink?.(props.classification)}\n analyticsData={{\n ...props.analyticsData,\n id: props.classification?.id,\n name: props.classification?.name,\n presentationId: props.classification.presentationId,\n comingSoon: !!isComingSoon,\n dashboardVideoCount: videoCount,\n dashboardResourceCount: resourceCount,\n dashboardNewVideosCount: newVideoCount,\n datePublished: props.classification.datePublished\n }}\n analyticsOptions={{\n location: LocationContext.SubjectStatsWidgetItem,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: EntityType.Classification,\n descriptor: ClickDescriptor.Cover\n }}\n >\n {!hasLoadedImage && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={`ms-2 ${styles.fallbackImage}`}\n />\n )}\n <div className={`${styles.cover} me-2 rounded overflow-hidden`}>\n <BaseImage\n data={props.classification.cover}\n imageOptions={{ size: ImageSize.Medium }}\n imageClassName={isComingSoon ? 'opacity-50' : ''}\n onLoad={() => setHasLoadedImage(true)}\n >\n {props.canFollowTopics && (\n <DivButton\n onClick={onToggleFollowClassification}\n className={`\n align-items-center justify-content-center cursor-pointer\n ${styles.bellContainer} ${isFollowing ? styles.followed : ''}\n `}\n >\n <SvgContainer\n svgName={cvSvgLibrary.BellFilled}\n className={`svg-container ${styles.bell}`}\n />\n <SvgContainer\n svgName={cvSvgLibrary.Bell}\n className={`svg-container ${styles.bellOutline}`}\n />\n </DivButton>\n )}\n </BaseImage>\n\n </div>\n <div>\n <h3 className={`h6 mb-0 clamp-2 mt-1`}>\n {props.classification.name}\n </h3>\n\n {!!subText && (\n <p className={`mb-0 ${styles.subText}`}>\n {subText}\n </p>\n )}\n\n <SubjectStatsBadge classification={props.classification} />\n </div>\n </AppLink>\n );\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { SubjectStatsWidgetItem } from 'libs/shared/components/widgets/items/subject-stats-widget-item/SubjectStatsWidgetItem';\nimport { Classification } from 'libs/shared/interfaces';\n\nexport function StatsCoverFixedPillListLargeWidgetTemplate(props: WidgetTemplateProps<Classification[]>): JSX.Element {\n /**\n * For V1 of the release of topic directories, we will not be exposing the following icon.\n * This is because currently following is useless. Once we have implemented an email for when\n * coming soon topics are released, we will enable this.\n */\n // const canFollowTopics = props.hasPermissions(PermissionName.FollowSubjects) && !!props.onToggleFollowClassification;\n\n return (\n <>\n <WidgetHeader name={props.name} description={props.description} />\n <Row className='mb-n2'>\n {props.content.map(c => {\n return (\n <Col className={`position-relative pb-2`} key={c.id} xs={12} sm={6} lg={props.hasTableOfContents ? 6 : 4} xl={4}>\n <SubjectStatsWidgetItem\n classification={c}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n getAppLink={props.appLinks?.classification}\n onToggleFollowClassification={props.onToggleFollowClassification}\n // canFollowTopics={canFollowTopics}\n canFollowTopics={false}\n />\n </Col>\n );\n })}\n </Row>\n </>\n );\n}","import React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidgetState } from 'libs/shared/components/widgets/dynamic-widget';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\n\n// Sync with transition time in SlidingListContainer.tsx\nconst SLIDER_ANIMATION_TIME = 400;\n\ntype FixedWidgetKeyboardOptions = {\n type: 'fixed',\n state: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>\n mediaQuery?: never;\n}\n\ntype DynamicWidgetKeyboardOptions = {\n type: 'dynamic',\n state: DynamicWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>\n mediaQuery: string\n}\n\ntype UseWidgetKeyboard = FixedWidgetKeyboardOptions | DynamicWidgetKeyboardOptions\n\nexport function useWidgetKeyboard(options: UseWidgetKeyboard) {\n const { type, state, containerRef, mediaQuery } = options;\n\n const [ isTabbing, setIsTabbing ] = React.useState(false);\n const [ dynamicAttributes, setDynamicAttributes ] = React.useState<HashObject>({});\n const [ focusedWidgetIndex, setFocusedWidgetIndex ] = React.useState(null);\n\n const isTouch = React.useMemo(() => UserAgentHelper.isTouchScreen(), []);\n\n /**\n * Get accessibility attributes for dynamic widget items\n * */\n React.useEffect(() => {\n if (type !== 'dynamic' || !containerRef.current || !(state as DynamicWidgetState).containerLeftPosition || isTouch) return;\n\n setTimeout(() => getDynamicAttributes(), SLIDER_ANIMATION_TIME + 50);\n }, [\n containerRef.current,\n mediaQuery,\n (state as DynamicWidgetState).offset,\n (state as DynamicWidgetState).containerLeftPosition\n ]);\n\n function getDynamicAttributes() {\n const dynamicWidgetState = state as DynamicWidgetState;\n\n if (!containerRef.current?.children)\n return;\n\n const focusableItems = Array.from(containerRef.current.children).reduce((acc, item) => {\n const rect = item?.getBoundingClientRect();\n\n /**\n * When any part of the widget item is visible it should be focusable,\n * otherwise prevent interaction and the slider should be the next focusable element\n * */\n const isItemVisable =\n rect.left < dynamicWidgetState.containerRightPosition &&\n rect.right > dynamicWidgetState.containerLeftPosition;\n\n return {\n ...acc,\n [item.id]: isItemVisable\n ? {\n 'aria-hidden': false\n } : {\n 'aria-hidden': true,\n 'inert': 'true'\n }\n };\n }, {});\n\n setDynamicAttributes(focusableItems);\n }\n\n /**\n * Get accessibility attributes for fixed widget items\n * */\n function getFixedAttributes(index?: number) {\n const fixedWidgetState = state as FixedWidgetState;\n\n const isItemVisible =\n isTouch ||\n index >= (fixedWidgetState.offset - fixedWidgetState.viewableItems) &&\n index < fixedWidgetState.offset;\n if (isItemVisible) {\n return {\n 'aria-hidden': false\n };\n }\n\n return {\n 'inert': 'true',\n 'aria-hidden': true\n };\n }\n\n /**\n * When the user is not signed in, there may be videos which are not focusable.\n * setTimeout is required because the transition time is 400ms\n */\n function focusNext() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let nextFocusableElement: HTMLElement = null;\n\n for (let i = (focusedWidgetIndex + 1); i < items.length; i++) {\n if (nextFocusableElement)\n break;\n\n nextFocusableElement = items[i].querySelector('a[tabindex=\"0\"]');\n }\n\n if (nextFocusableElement)\n nextFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function focusPrev() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let prevFocusableElement: HTMLElement = null;\n for (let i = focusedWidgetIndex - 1; i >= 0; i--) {\n if (prevFocusableElement) break;\n\n const item = items[i];\n prevFocusableElement = item.querySelector('a[tabindex=\"0\"]');\n }\n\n if (prevFocusableElement)\n prevFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function onFocusWidget(index: number) {\n if (document.querySelector('.user-is-tabbing')) {\n setIsTabbing(true);\n setFocusedWidgetIndex(index);\n }\n }\n\n function onBlurWidget() {\n if (!document.querySelector('.user-is-tabbing')) {\n setIsTabbing(false);\n setFocusedWidgetIndex(null);\n }\n }\n\n return {\n isTabbing,\n onFocusWidget,\n onBlurWidget,\n getFixedAttributes,\n dynamicAttributes,\n focusNext,\n focusPrev\n };\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { BaseObject, Classification, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\nconst namespace = 'shared.subjectWidgetItem';\n\ninterface NamePanelProps {\n name: string;\n multiline?: boolean;\n subtitle?: string;\n noUnderLine?: boolean;\n newVideosCount?: number;\n}\n\nconst ComingSoonNamePanel = ({ name, multiline, noUnderLine }: NamePanelProps) => {\n let wrapperClassName = `${styles.comingSoonPanel} \n d-flex flex-column align-items-center justify-content-center px-3 text-center`;\n\n let textClassName = '';\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap';\n textClassName += ' text-truncate';\n } else {\n textClassName += ` ${styles.clamped} clamp-2`;\n }\n\n return (\n <div className={wrapperClassName}>\n <small className='text-secondary'><Text namespace={namespace} phrase='comingSoon' /></small>\n <p className={`${noUnderLine ? '' : styles.name} h6`}><span className={textClassName}>{name}</span></p>\n </div>\n );\n};\n\nconst NormalNamePanel = ({ name, multiline, subtitle, noUnderLine, newVideosCount }: NamePanelProps) => {\n let wrapperClassName = 'px-3 d-flex flex-column justify-content-center';\n let textClassName = `${noUnderLine ? '' : styles.name} h6`;\n\n if (!multiline) {\n wrapperClassName += ' text-nowrap text-truncate';\n textClassName += ' text-truncate mb-0';\n } else {\n textClassName += ` ${newVideosCount ? 'clamp-2' : 'clamp-3'} text-start`;\n }\n\n return (\n <div className={wrapperClassName}>\n {subtitle && <div className={`text-secondary clamp-1 ${styles.text}`}>{subtitle}</div>}\n <div className={textClassName} title={name}>{name}</div>\n {!!newVideosCount && (\n <div className={`fw-semibold d-inline-block rounded-pill px-2 mt-1 bg-light-green w-fit h-fit text-green ${styles.newVideos}`}>\n <Text namespace={namespace} phrase='newVideos' options={{ smartCount: newVideosCount }} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface CoverPillWidgetItemProps<T extends BaseObject> {\n data: T;\n getChildAppLink?: (data: T) => Core.AppLink;\n getChildAppLinkOptions?: () => Core.AppLinkOptions;\n isLarge?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n availablePresentations?: Presentation[];\n getSubtitle?: (data: T) => string;\n multiline?: boolean;\n // set to true it will highlight on hover and also remove the hover text underline\n highlightOnHover?: boolean;\n showNewVideosCount?: boolean;\n themeColor?: string;\n}\n\ninterface CoverPillWidgetContentProps<T> extends CoverPillWidgetItemProps<T> {\n coverUrl?: string;\n subtitle?: string;\n isComingSoon?: boolean;\n className?: string;\n imageClassName?: string;\n isSelected?: boolean;\n hideFallback?: boolean;\n hideCheckmark?: boolean;\n themeColor?: string;\n}\n\nexport function CoverPillWidgetContent(props: CoverPillWidgetContentProps<BaseObject>): JSX.Element {\n const coverUrl = ImageHelper.createUrl(props.coverUrl, { size: props.isLarge ? ImageSize.Medium : ImageSize.Small });\n\n let classification: Classification | undefined = undefined;\n if (MasterTypeHelper.isClassification(props.data)) {\n classification = props.data;\n }\n\n const childProps = {\n name: props.data.name,\n multiline: props.isLarge || props.multiline,\n subtitle: props.subtitle,\n noUnderLine: props.highlightOnHover,\n newVideosCount: props.showNewVideosCount ? classification?.externalMetadata?.childDashboardNewVideoCount : 0\n };\n\n return (\n <div\n className={`${props.themeColor ? styles.hasThemeColor : 'border'} d-flex position-relative ${props.className} ${styles.widgetItem} ${props.isSelected ? 'border-success border-2' : ''} ${props.highlightOnHover && !props.themeColor ? 'bg-light-blue-hover' : ''}`}\n style={props.themeColor ? { '--themeColor': props.themeColor } as unknown as React.CSSProperties : {}}\n id={`${props.data.id}-${RandomHelper.getRandomInt()}`}\n >\n {props.isSelected && (\n <div className={`${styles.selectedMask} border-2`} />\n )}\n\n <div className={`${styles.imagePanel} ${props.isLarge ? styles.large : ''}`}>\n {props.isSelected && !props.hideCheckmark && (\n <div className={styles.selected}>\n <IconCircle svgName={cvSvgLibrary.Check} svgSize={SvgContainerSize.Large} textVariant='white' variant='green' />\n </div>\n )}\n\n <div\n className={`${styles.image} ${props.imageClassName}`}\n style={props.coverUrl ? { backgroundImage: `url('${coverUrl}')` } : {}}\n />\n {!props.hideFallback && (\n <ImageFallback\n type={ImageFallbackType.Subject}\n extraClasses={props.isLarge ? styles.large : ''}\n />\n )}\n </div>\n\n {props.isComingSoon\n ? <ComingSoonNamePanel {...childProps} />\n : <NormalNamePanel {...childProps} />\n }\n </div>\n );\n}\n\nexport function CoverPillWidgetContentWrapper(props: CoverPillWidgetContentProps<BaseObject>) {\n const appLink = props.getChildAppLink ? props.getChildAppLink(props.data) : null;\n\n return (\n <>\n {appLink ? (\n <AppLink\n className={styles.appLink}\n appLink={appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n appLinkOptions={props.getChildAppLinkOptions?.()}\n >\n <CoverPillWidgetContent {...props} />\n </AppLink>\n ) : (<CoverPillWidgetContent {...props} />)\n }\n </>\n );\n}","import * as React from 'react';\n\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\n\nimport styles from './cover-pill.scss';\n\nexport const PartialSubjectWidgetItem = () => {\n const [width] = React.useState(RandomHelper.getRandomInt(5) + 3 + 'rem');\n\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={styles.imagePanel} />\n <div className='px-2' style={{ width }} />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} />\n </div>\n </div>\n );\n};\n\nexport const PartialLargeSubjectWidgetItem = () => {\n return (\n <div className={`border d-flex position-relative me-2 ${styles.widgetItem}`}>\n <div className={`${styles.partialLargeImage}`} />\n <div className='px-2' />\n <div className={styles.partialIcon}>\n <ImageFallback type={ImageFallbackType.Subject} extraClasses={styles.partialLargeFallback} />\n </div>\n </div>\n );\n};","import * as React from 'react';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CoverPillWidgetContentWrapper, CoverPillWidgetItemProps } from 'libs/shared/components/widgets/items/subject-widget-item/CoverPill';\nimport { TopicsConstants } from 'libs/shared/constants/TopicsConstants';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { Classification, CuratedDashboardAppLink, Presentation } from 'libs/shared/interfaces';\n\nfunction usePresentationName(presentationId: string, availablePresentations: Presentation[]): string {\n const showPresentationName = availablePresentations?.length >= TopicsConstants.MULTI_PRESENTATION_THRESHOLD;\n\n if (!showPresentationName) {\n return undefined;\n }\n\n return availablePresentations?.find(p => p.id === presentationId)?.name;\n}\n\nfunction SubjectWidgetItem(props: CoverPillWidgetItemProps<Classification>): JSX.Element {\n const isTopicDiretoryItem = props.data.id === CuratedDashboardAppLink.ClassificationDirectory;\n const isComingSoon = props.data?.status === ClassificationStatus.ComingSoon;\n const presentationName = usePresentationName(props.data.presentationId, props?.availablePresentations);\n\n const analyticsData = {\n ...props.analyticsData,\n id: props.analyticsData?.id || props.data?.id,\n name: props.data?.name,\n presentationId: props.analyticsData?.presentationId || props.data.presentationId,\n comingSoon: !!isComingSoon\n };\n\n const analyticsOptions = {\n location: LocationContext.ClassificationListItem,\n entity: EntityType.Classification,\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Cover\n };\n\n return (\n <CoverPillWidgetContentWrapper\n {...props}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n coverUrl={props.data.cover?.url}\n subtitle={props.getSubtitle?.(props.data) || presentationName}\n isComingSoon={isComingSoon}\n themeColor={isTopicDiretoryItem ? props.themeColor : ''}\n />\n );\n}\n\nconst Memoized = React.memo(SubjectWidgetItem);\n\nexport { Memoized as SubjectWidgetItem };","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './cover-pill.scss';\n\ninterface EditSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.UserSetting,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function EditSubjectsWidgetLink(props: EditSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.editSubjectsItem} d-flex position-relative px-3 justify-content-center align-items-center`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-preference' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <SvgContainer svgName={cvSvgLibrary.Edit} className='me-2 align-middle d-inline-block svg-container' />\n <p className='h6 align-middle text-truncate'><Text namespace='shared.subjectWidgetItem' phrase='edit' /></p>\n </div>\n </AppLink>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { ClickViewLogoInverted } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './cover-pill.scss';\n\ninterface AllSubjectsWidgetLinkProps {\n appLink: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n descriptor: ClickDescriptor.Tile\n};\n\nexport function AllSubjectsWidgetLink(props: AllSubjectsWidgetLinkProps): JSX.Element {\n const className =\n `${styles.allSubjectsItem}\n d-flex flex-column position-relative px-2\n align-items-center justify-content-center text-nowrap bg-navy`;\n\n return (\n <AppLink\n appLink={props.appLink}\n className='text-decoration-none'\n analyticsData={{ ...props.analyticsData, type: 'subject-all' }}\n analyticsOptions={ { ...props.analyticsOptions, ...analyticsOptions }}\n >\n <div className={className}>\n <div className={styles.logoContainer}>\n <ClickViewLogoInverted />\n </div>\n <p className='h6 pt-2 px-3 mb-0'><Text namespace='shared.subjectWidgetItem' phrase='all' /></p>\n </div>\n </AppLink>\n );\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n \n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n // Sync with transition time in useWidgetKeyboard.ts\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLUListElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLUListElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLUListElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <ul\n className='list-unstyled d-flex flex-nowrap position-relative w-100 mb-0'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </ul>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nconst namespace = 'shared.widgetButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <button\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n tabIndex={-1}\n />\n )}\n\n <button\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n aria-label={isLeft ? getPhrase('previous') : getPhrase('next')}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </button>\n </div>\n );\n});","// Maps to enum in SubjectApi but uses the\n// key rather than the value as SubjectsApi returns the key.\nexport enum ClassificationStatus {\n Draft = 'Draft',\n ComingSoon = 'ComingSoon',\n Published = 'Published'\n}","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Classification, Playlist } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport const getClassificationAppLink = (params?: HashObject) =>\n (classification?: Classification): Core.AppLink => {\n if (!classification?.id)\n return null;\n\n return ClassificationAppLinkHelper.getAppLink(classification, params || {});\n };\n\nexport const getPlaylistAppLink = (playlist: Playlist, classificationId: string): Core.AppLink => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ],\n params: { classificationId }\n});\n\nexport const getAllTopicsAppLink = (presentationId?: string): Core.AppLink => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: presentationId ? { presentationId } : {}\n});","// extracted by mini-css-extract-plugin\nexport default {\"classificationPane\":\"ftCMX\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { StatsCoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/stats-cover-fixed-pill-list-large/StatsCoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { getClassificationAppLink } from 'apps/subjects/utils/ClassificationAppLinks';\n\nimport styles from './presentation-topics.scss';\n\nconst namespace = 'subjects.presentationTopics';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface PresentationTopicsViewQueryParams {\n presentationId?: string;\n}\n\ninterface PresentationTopicsViewProps {\n queryParams: PresentationTopicsViewQueryParams;\n}\n\nexport function PresentationTopicsView(props: PresentationTopicsViewProps): React.ReactElement {\n const { isPlugin } = usePluginHelper();\n const { hasTopicDirectories } = useSettings(null);\n const breakpoints = useBreakpoints();\n\n /**\n * Data fetching\n */\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const {\n availablePresentations,\n activePresentation,\n hasPresentationsLoaded,\n canAccessPresentation\n } = usePresentation();\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n\n /**\n * We'll prefer the presentationId query param, but fallback to the\n * user's activePresentation where the queryParam doesn't exist.\n */\n const initialPresentationId = props.queryParams.presentationId || activePresentation?.id;\n\n const currentPresentation = Flight.useBasicFetch<Presentation>(\n initialPresentationId &&\n ClassificationRequests.presentationById(initialPresentationId)\n );\n\n const hasLoaded = currentPresentation.hasCompleted && hasPresentationsLoaded;\n\n const classification = {\n name: TopicsHelper.getExploreAllTopicsTitle(currentPresentation.data?.name, availablePresentations?.length),\n banner: {\n url: TopicsHelper.getPresentationLevelImage(currentPresentation.data?.learningLevel, 'topic-banner')\n }\n } as Classification;\n\n const children = Flight.useBasicFetch<Classification[]>(\n hasLoaded &&\n ClassificationRequests.topLevelTopics(initialPresentationId || currentPresentation.data?.id)\n );\n\n const title = getPhrase('pageTitleSubject', { title: currentPresentation.data?.name });\n\n useSetPageMetadata({\n title,\n description: getPhrase('pageDescription', { title: currentPresentation.data?.name }),\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing()\n });\n\n const classificationAppLinkFn = getClassificationAppLink();\n\n function getBreadcrumbs(): Breadcrumb[] {\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: TopicsHelper.getExploreAllTopicsBreadcrumb(currentPresentation.data?.name, availablePresentations?.length),\n active: true\n }];\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = !!config.data && !!availablePresentations && children.data;\n const canViewBreadcrumbs = canAccessPresentation(currentPresentation.data?.id);\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: currentPresentation.data?.id,\n presentationName: currentPresentation.data?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n const TemplateComponent = hasTopicDirectories\n ? StatsCoverFixedPillListLargeWidgetTemplate\n : CoverFixedPillListLargeWidgetTemplate;\n \n return (\n <main className='bg-white px-4'>\n {dataLoaded\n ? (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n imageOptions={{ size: ImageSize.Large }}\n />\n ) : <PartialBannerHeader />\n }\n <div className={`py-3 mb-3 ${canViewBreadcrumbs ? 'border-bottom' : ''}`}>\n {(() => {\n if (!canViewBreadcrumbs)\n return <></>;\n\n if (!dataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ? (\n <TemplateComponent\n id={currentPresentation.data?.id}\n name=''\n description=''\n metadata={{}}\n preferences={[]}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n widgetTypeId={WidgetTypeId.Classifications}\n templateId={WidgetTemplate.StatsCoverFixedPillListLarge}\n analyticsData={analyticsData}\n content={children?.data}\n analyticsOptions={{ location: LocationContext.SlidingListItem }}\n appLinks={{ classification: classificationAppLinkFn }}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n isPlugin={isPlugin}\n />\n ) : (\n <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />\n )}\n\n {dataLoaded && hasTopicDirectories && availablePresentations?.length > 1 && (\n <ul className='pt-3 list-unstyled'>\n {availablePresentations.filter(p => p.id !== currentPresentation.data?.id).map(presentation => {\n return (\n <li key={presentation.id}>\n <AppLink\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link} ${TopicsHelper.getMappedPresentationBackgroundColour(presentation?.learningLevel)}`}\n appLink={{\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS,\n params: { presentationId: presentation.id }\n }}\n appLinkOptions={{ middlewareOptions: { presentationSlug: presentation.vanitySlug } }}\n analyticsData={{\n id: presentation.id,\n name: presentation.name,\n description: presentation.description,\n currentPresentationId: currentPresentation.data?.id,\n currentPresentationName: currentPresentation.data?.name,\n currentPresentationDescription: currentPresentation.data?.description\n }}\n analyticsOptions={{\n entity: EntityType.Presentation,\n actionType: UserAction.Click,\n location: LocationContext.PresentationClassifications\n }}\n >\n <div className='h4 text-shadow mb-0'>\n {(availablePresentations.length > 2 || breakpoints.sm || breakpoints.xs) ? (\n <Text namespace={namespace} phrase='multiPresentationBanner' options={{ name: presentation.name }} />\n ) : (\n <Text namespace={namespace} phrase='singlePresentationBanner' options={{ name: presentation.name }} />\n )}\n </div>\n <IconButton\n svgName={breakpoints.xs ? cvSvgLibrary.Sparkle : cvSvgLibrary.School}\n openInNewTab\n className='btn btn-outline-dark'\n onClick={null}\n >\n <Text\n namespace={namespace}\n phrase={breakpoints.xs ? 'explore' : 'changeTo'}\n options={{ name: presentation.name }}\n />\n </IconButton>\n </AppLink>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </main>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"wzt8R\",\"bellContainer\":\"X7Jgx\",\"bell\":\"HoKe4\",\"followed\":\"Pdmdk\",\"bellOutline\":\"bEQDk\",\"cover\":\"luOU3\",\"fallbackImage\":\"ReXqz\",\"subText\":\"p0kUV\"};","// extracted by mini-css-extract-plugin\nexport default {\"appLink\":\"fFjKN\",\"name\":\"A_by9\",\"selectedMask\":\"xSQtR\",\"widgetItem\":\"Ys9W_\",\"hasThemeColor\":\"DX2ua\",\"text\":\"JfAoy\",\"imagePanel\":\"aUNDc\",\"partialLargeImage\":\"RuLxv\",\"selected\":\"BViJb\",\"image\":\"LkTep\",\"dragHandle\":\"CJqvP\",\"large\":\"R5clw\",\"comingSoonPanel\":\"Wa2PG\",\"newVideos\":\"s61h8\",\"editSubjectsItem\":\"gGNFD\",\"allSubjectsItem\":\"IHdlJ\",\"logoContainer\":\"Nzaes\",\"draggingItem\":\"zUOye\",\"partialLargeFallback\":\"FmJP9\",\"partialIcon\":\"sdZuo\"};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","GenericCalendarDate","AppLink","appLink","getAppLink","theme","border","analyticsData","analyticsOptions","background","label","body","type","getBodyClass","text","month","Actions","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","length","map","idx","key","href","onClick","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","id","size","showDivider","undefined","group","defaultProps","S","BackButton","textShadow","backToName","color","extraClasses","backPhrase","colorClass","textShadowClass","RATIO","getSizeClass","heading","BannerHeader","banner","imageCdnUrl","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","Date","endDate","startDate","imageOptions","ratio","resizeType","url","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","backgroundImage","DetailsComponent","detailsComponent","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","calendarTheme","Text","phrase","LazyImage","src","container","prevProps","nextProps","PartialBannerHeader","getPhrase","BreadcrumbItem","ref","breadcrumb","name","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","second","secondLast","last","rest","slice","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","SeeMore","descriptor","WidgetHeader","hasDescription","description","isBelowMinimum","WidgetHelper","content","widgetTypeId","minContent","WidgetTypeIdConfig","isPreviewing","tooltipSpanHack","tooltipSpanHackClassName","showSeeMoreLink","CoverFixedPillListLargeWidgetTemplate","c","xs","sm","lg","hasTableOfContents","xl","data","getChildAppLink","appLinks","classification","highlightOnHover","settings","hasTopicDirectories","isLarge","SubjectStatsBadge","newVideoCount","TopicsHelper","badgeType","status","ClassificationStatus","datePublished","getBadgeType","baseClass","getBadgeClass","smartCount","getBadgeText","SubjectStatsWidgetItem","hasLoadedImage","setHasLoadedImage","isComingSoon","isFollowing","videoCount","resourceCount","childClassificationCount","subText","getSubtext","presentationId","comingSoon","dashboardVideoCount","dashboardResourceCount","dashboardNewVideosCount","location","actionType","entity","ImageFallback","BaseImage","cover","imageClassName","onLoad","canFollowTopics","DivButton","stopPropagation","onToggleFollowClassification","StatsCoverFixedPillListLargeWidgetTemplate","Row","Col","SLIDER_ANIMATION_TIME","useWidgetKeyboard","options","state","containerRef","mediaQuery","isTabbing","setIsTabbing","dynamicAttributes","setDynamicAttributes","focusedWidgetIndex","setFocusedWidgetIndex","isTouch","containerLeftPosition","setTimeout","dynamicWidgetState","children","focusableItems","Array","from","acc","item","rect","getBoundingClientRect","isItemVisable","left","containerRightPosition","right","getDynamicAttributes","offset","onFocusWidget","index","document","querySelector","onBlurWidget","getFixedAttributes","fixedWidgetState","viewableItems","focusNext","items","querySelectorAll","nextFocusableElement","i","focusPrev","prevFocusableElement","ComingSoonNamePanel","multiline","noUnderLine","wrapperClassName","textClassName","NormalNamePanel","subtitle","newVideosCount","CoverPillWidgetContent","coverUrl","childProps","showNewVideosCount","externalMetadata","childDashboardNewVideoCount","themeColor","isSelected","hideCheckmark","textVariant","variant","hideFallback","CoverPillWidgetContentWrapper","appLinkOptions","getChildAppLinkOptions","PartialSubjectWidgetItem","PartialLargeSubjectWidgetItem","Memoized","isTopicDiretoryItem","presentationName","availablePresentations","find","p","usePresentationName","getSubtitle","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","contents","paddingBottom","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","leftButtonClassName","rightButtonClassName","hoverText","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","getClassificationAppLink","params","ClassificationAppLinkHelper","PresentationTopicsView","isPlugin","usePluginHelper","useSettings","breakpoints","config","ConfigRequests","usePresentation","activePresentation","hasPresentationsLoaded","canAccessPresentation","usePermissions","hasPermissions","hasLocalPermissions","initialPresentationId","queryParams","currentPresentation","ClassificationRequests","hasLoaded","hasCompleted","learningLevel","useSetPageMetadata","canonicalLink","SeoHelper","allowIndexing","classificationAppLinkFn","dataLoaded","canViewBreadcrumbs","widgetId","WidgetTypeId","templateId","WidgetTemplate","TemplateComponent","application","getBreadcrumbs","metadata","preferences","resourceThumbnailFallbackImageUrl","ImageUrls","partialLoadingComponent","filter","presentation","middlewareOptions","presentationSlug","vanitySlug","currentPresentationId","currentPresentationName","currentPresentationDescription","IconButton","bsPrefix","as","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8046],{41630:(e,t,n)=>{n.d(t,{X:()=>C});var r=n(32735),a=n(44645),i=n(17327),c=n.n(i),l=n(56050),o=n(23481),m=n(81886),u=n(2786),s=n(93264),_=n(40424);const d={worksheet:"Bv47P",interaction:"efkgi",timepointCell:"ffoDR",interactionCell:"rKBEu",checkbox:"ilhe4",multipleChoiceAnswer:"TqhFx",shortAnswerTextArea:"voJCM",image:"go2dV",cvLogo:"Z4GOw",copyright:"petLf"};function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function p(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=v(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=v(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==v(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=/{([^{}]*)}/g;function E(e){return r.createElement("div",{className:"mb-2"},e.interaction.name)}function b(e){return r.createElement(r.Fragment,null,r.createElement(E,{interaction:e.interaction}),r.createElement("table",null,r.createElement("tbody",null,e.interaction.actionableItems.map((function(e){return r.createElement("tr",{key:e.id},r.createElement("td",null,r.createElement("div",{className:"border ".concat(d.checkbox)})),r.createElement("td",{className:"break-word align-top"},r.createElement("div",{className:d.multipleChoiceAnswer},e.name)))})))))}var g=p(p(p(p(p(p({},_.Z9.Annotation,(function(e){return r.createElement("div",{dangerouslySetInnerHTML:{__html:e.interaction.data.annotation}})})),_.Z9.Image,(function(e){return r.createElement(r.Fragment,null,r.createElement(E,{interaction:e.interaction}),r.createElement("img",{className:d.image,src:e.interaction.data.url}))})),_.Z9.MissingWord,(function(e){var t=e.interaction.data.sentence.replace(f,(function(t,n){var r=2*e.interaction.actionableItems.find((function(e){return e.order.toString()===n})).name.length;return Array(r+1).join("_")}));return r.createElement("div",null,t)})),_.Z9.MultipleChoice,b),_.Z9.TrueOrFalse,b),_.Z9.ShortAnswer,(function(e){return r.createElement(r.Fragment,null,r.createElement(E,{interaction:e.interaction}),r.createElement("div",{className:"border w-100 ".concat(d.shortAnswerTextArea)}))})),y=o.T.encloseNamespace("interactives.printableInteractiveWorksheet");function h(e){var t=g[e.interaction.typeId];return t?r.createElement("tr",{className:d.interaction},r.createElement("td",{className:"align-top ".concat(d.timepointCell)},s.T.ToDisplayDuration(e.visibleAt)),r.createElement("td",{className:"break-word ".concat(d.interactionCell)},r.createElement(t,{interaction:e.interaction}))):r.createElement(r.Fragment,null)}function w(e){return r.createElement(r.Fragment,null,e.interactive.timepoints.map((function(e,t){return e.interactions.map((function(n,a){return r.createElement(h,{key:"".concat(t,":").concat(a),interaction:n,visibleAt:e.visibleAt})}))})))}function k(e){var t=(new Date).getFullYear();return r.createElement("div",{id:e.worksheetElementId,className:d.worksheet},r.createElement("div",{className:"row pb-2"},r.createElement("div",{className:"col-6"},y("name")," ______________________________"),r.createElement("div",{className:"col-6"},y("date")," ______________________________")),r.createElement("h1",null,r.createElement("strong",null,y("questionSheet"),":")," ",e.interactive.name),r.createElement("table",null,r.createElement("tbody",null,r.createElement(w,{interactive:e.interactive}))),r.createElement("div",{className:d.cvLogo},r.createElement(u.$S,null)),e.isClickViewContent&&r.createElement("span",{className:d.copyright},y("copyright",{year:t})))}var N=o.T.encloseNamespace("interactives.utils");function C(e,t,n){var i=document.getElementById("print-region");if(i||m.Q.Ry.throw(new l.H("Could not find print region in layout")),e){var o="printable-interactive-".concat(e.id),u=(0,a.s)(i);u.render(r.createElement("div",{className:"d-none"},r.createElement(k,{worksheetElementId:o,interactive:e,isClickViewContent:t}))),window.setTimeout((function(){c()({printable:o,type:"html",documentTitle:N("worksheetTitle",{interactiveName:e.name}),targetStyles:["*"],style:"@page { size: A4; margin: 1.5cm 0; }",onLoadingEnd:function(){n&&n(),u.unmount()},font_size:"14px"})}),200)}}},59678:(e,t,n)=>{n.r(t),n.d(t,{PrintInteractiveView:()=>s});var r=n(32735),a=n(23481),i=n(20354),c=n(9111),l=n(50023),o=n(20768),m=n(41630),u=a.T.encloseNamespace("interactives.printInteractive");function s(e){var t=i.a.useBasicFetch(o.b.interactiveMetadata(e.id)),n=i.a.useBasicFetch(t.data?o.b.interactive(t.data.interactiveId):null);return r.useEffect((function(){var r;n.data&&(0,m.X)(n.data,null===(r=t.data._isClickViewCurated)||void 0===r?void 0:r.value,e.closePopup)}),[!!n.data]),r.createElement(c.G,{title:u("popupTitle"),closePopup:e.closePopup,showLoadingSpinner:!n.data,size:"lg"},r.createElement(l.E,null))}}}]);
|
|
2
|
-
//# sourceMappingURL=8046-62f4cbb4d1-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8046-62f4cbb4d1-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/printable-interactive-worksheet.scss","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractionContent.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet.tsx","file:///app/packages/projects/lite/src/apps/interactives/utils/PrintInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/views/print-interactive/PrintInteractiveView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"worksheet\":\"Bv47P\",\"interaction\":\"efkgi\",\"timepointCell\":\"ffoDR\",\"interactionCell\":\"rKBEu\",\"checkbox\":\"ilhe4\",\"multipleChoiceAnswer\":\"TqhFx\",\"shortAnswerTextArea\":\"voJCM\",\"image\":\"go2dV\",\"cvLogo\":\"Z4GOw\",\"copyright\":\"petLf\"};","import React from 'react';\n\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst MISSING_WORD_REGEX = /{([^{}]*)}/g;\n\ninterface PrintableInteractionContentProps {\n interaction: Interaction;\n}\n\nfunction InteractionName(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div className='mb-2'>{props.interaction.name}</div>\n );\n}\n\nfunction AnnotationInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div dangerouslySetInnerHTML={{ __html: props.interaction.data.annotation }}></div>\n );\n}\n\nfunction ImageInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <img className={styles.image} src={props.interaction.data.url} />\n </>\n );\n}\n\nfunction MissingWordInteraction(props: PrintableInteractionContentProps): JSX.Element {\n function replaceMissingWord(match: string, val: string): string {\n const actionableItem = props.interaction.actionableItems.find(a => a.order.toString() === val);\n const width = 2 * actionableItem.name.length;\n return Array(width + 1).join('_');\n }\n\n const formatted = (props.interaction.data.sentence as string).replace(MISSING_WORD_REGEX, replaceMissingWord);\n\n return (\n <div>{formatted}</div>\n );\n}\n\nfunction MultipleChoiceInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <table>\n <tbody>\n {props.interaction.actionableItems.map(a => (\n <tr key={a.id}>\n <td>\n <div className={`border ${styles.checkbox}`} />\n </td>\n <td className='break-word align-top'>\n <div className={styles.multipleChoiceAnswer}>\n {a.name}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n );\n}\n\nfunction ShortAnswerInteractive(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <div className={`border w-100 ${styles.shortAnswerTextArea}`} />\n </>\n );\n}\n\nexport const PrintableInteractionComponentLookup: {\n [typeId: number]: (props: PrintableInteractionContentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: AnnotationInteraction,\n [InteractionTypeId.Image]: ImageInteraction,\n [InteractionTypeId.MissingWord]: MissingWordInteraction,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceInteraction,\n [InteractionTypeId.TrueOrFalse]: MultipleChoiceInteraction,\n [InteractionTypeId.ShortAnswer]: ShortAnswerInteractive\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Interaction, Interactive } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { PrintableInteractionComponentLookup } from './PrintableInteractionContent';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.printableInteractiveWorksheet');\n\ninterface PrintableInteractionProps {\n interaction: Interaction;\n visibleAt: number;\n}\n\nfunction PrintableInteraction(props: PrintableInteractionProps): JSX.Element {\n const InteractionComponent = PrintableInteractionComponentLookup[props.interaction.typeId];\n\n if (!InteractionComponent)\n return <></>;\n\n return (\n <tr className={styles.interaction}>\n <td className={`align-top ${styles.timepointCell}`}>\n {DurationHelper.ToDisplayDuration(props.visibleAt)}\n </td>\n <td className={`break-word ${styles.interactionCell}`}>\n <InteractionComponent interaction={props.interaction} />\n </td>\n </tr>\n );\n}\n\ninterface PrintableInteractiveQuestionsProps {\n interactive: Interactive;\n}\n\nfunction PrintableInteractiveQuestions(props: PrintableInteractiveQuestionsProps): JSX.Element {\n return (\n <>\n {props.interactive.timepoints.map((timepoint, i) => (\n timepoint.interactions.map((interaction, j) => (\n <PrintableInteraction key={`${i}:${j}`} interaction={interaction} visibleAt={timepoint.visibleAt} />\n ))\n ))}\n </>\n );\n}\n\ninterface PrintableInteractiveWorksheetProps {\n worksheetElementId: string;\n interactive: Interactive;\n isClickViewContent: boolean;\n}\n\nexport function PrintableInteractiveWorksheet(props: PrintableInteractiveWorksheetProps): JSX.Element {\n const year = (new Date()).getFullYear();\n\n return (\n <div id={props.worksheetElementId} className={styles.worksheet}>\n <div className='row pb-2'>\n <div className='col-6'>{getPhrase('name')} ______________________________</div>\n <div className='col-6'>{getPhrase('date')} ______________________________</div>\n </div>\n <h1>\n <strong>{getPhrase('questionSheet')}:</strong> {props.interactive.name}\n </h1>\n <table>\n <tbody>\n <PrintableInteractiveQuestions interactive={props.interactive} />\n </tbody>\n </table>\n <div className={styles.cvLogo}>\n <ClickViewLogo />\n </div>\n {props.isClickViewContent &&\n <span className={styles.copyright}>{getPhrase('copyright', { year })}</span>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport printJS from 'print-js';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { PrintableInteractiveWorksheet } from 'apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.utils');\n\nexport function printInteractive(interactive: Interactive, isCVContent: boolean, onDone?: () => void): void {\n const printRegion = document.getElementById('print-region');\n\n if (!printRegion)\n Core.ErrorHelper.throw(new DevError('Could not find print region in layout'));\n\n if (!interactive)\n return;\n\n const worksheetElementId = `printable-interactive-${interactive.id}`;\n\n const root = createRoot(printRegion);\n\n function print(): void {\n printJS({\n printable: worksheetElementId,\n type: 'html',\n documentTitle: getPhrase('worksheetTitle', { interactiveName: interactive.name }),\n targetStyles: ['*'],\n style: '@page { size: A4; margin: 1.5cm 0; }',\n onLoadingEnd: () => {\n onDone && onDone();\n root.unmount();\n },\n /**\n * font_size is deprecated but a bug in print.js still applies the default (12pt) if it\n * is omitted, overriding any custom/inline styles. \n * This value is the same as the one found in in .worksheet in printable-interactive-worksheet.scss\n */\n font_size: '14px'\n });\n }\n\n root.render(\n <div className='d-none'>\n <PrintableInteractiveWorksheet\n worksheetElementId={worksheetElementId}\n interactive={interactive}\n isClickViewContent={isCVContent}\n />\n </div>\n );\n\n window.setTimeout(() => {\n print();\n }, 200);\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { printInteractive } from 'apps/interactives/utils/PrintInteractive';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.printInteractive');\n\ninterface PrintInteractiveViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function PrintInteractiveView(props: PrintInteractiveViewProps): React.ReactElement {\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.id)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n\n React.useEffect(() => {\n if (!interactive.data)\n return;\n\n printInteractive(interactive.data, interactiveMetadata.data._isClickViewCurated?.value, props.closePopup);\n }, [!!interactive.data]);\n\n return (\n <Popup\n title={getPhrase('popupTitle')}\n closePopup={props.closePopup}\n showLoadingSpinner={!interactive.data}\n size='lg'\n >\n <PopupLoadingSpinner />\n </Popup>\n );\n}\n"],"names":["MISSING_WORD_REGEX","InteractionName","props","className","interaction","name","MultipleChoiceInteraction","actionableItems","map","a","key","id","PrintableInteractionComponentLookup","dangerouslySetInnerHTML","__html","data","annotation","src","url","formatted","sentence","replace","match","val","width","find","order","toString","length","Array","join","getPhrase","LanguageService","PrintableInteraction","InteractionComponent","typeId","DurationHelper","visibleAt","PrintableInteractiveQuestions","interactive","timepoints","timepoint","i","interactions","j","PrintableInteractiveWorksheet","year","Date","getFullYear","worksheetElementId","ClickViewLogo","isClickViewContent","printInteractive","isCVContent","onDone","printRegion","document","getElementById","DevError","root","render","window","setTimeout","printable","type","documentTitle","interactiveName","targetStyles","style","onLoadingEnd","unmount","font_size","PrintInteractiveView","interactiveMetadata","interactiveId","_isClickViewCurated","value","closePopup","title","showLoadingSpinner","size"],"sourceRoot":""}
|