@clickview/lite 0.84.0 → 0.84.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/4945-lite-72ae59fcab.chunk.css +2 -0
- package/dist/css/8852-lite-84d6357a79.chunk.css +1 -0
- package/dist/css/{lite-app-b4540a3be1.css → lite-app-084c45f90e.css} +2 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1202-d96ad80884-lite.chunk.js → 1202-5473d9962d-lite.chunk.js} +2 -2
- package/dist/scripts/{1202-d96ad80884-lite.chunk.js.map → 1202-5473d9962d-lite.chunk.js.map} +1 -1
- package/dist/scripts/171-acb1ef0ae4-lite.chunk.js +2 -0
- package/dist/scripts/171-acb1ef0ae4-lite.chunk.js.map +1 -0
- package/dist/scripts/1726-b08dde1407-lite.chunk.js +2 -0
- package/dist/scripts/1726-b08dde1407-lite.chunk.js.map +1 -0
- package/dist/scripts/1912-52e57d9f16-lite.chunk.js +2 -0
- package/dist/scripts/1912-52e57d9f16-lite.chunk.js.map +1 -0
- package/dist/scripts/{289-669c0c8222-lite.chunk.js → 289-190caa6455-lite.chunk.js} +2 -2
- package/dist/scripts/{289-669c0c8222-lite.chunk.js.map → 289-190caa6455-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3249-0b55dec380-lite.chunk.js → 3249-08a22f8aaf-lite.chunk.js} +2 -2
- package/dist/scripts/3249-08a22f8aaf-lite.chunk.js.map +1 -0
- package/dist/scripts/3840-df2873e349-lite.chunk.js +2 -0
- package/dist/scripts/3840-df2873e349-lite.chunk.js.map +1 -0
- package/dist/scripts/4006-5078eb2c01-lite.chunk.js +3 -0
- package/dist/scripts/4006-5078eb2c01-lite.chunk.js.map +1 -0
- package/dist/scripts/4525-2ade147f5d-lite.chunk.js +2 -0
- package/dist/scripts/4525-2ade147f5d-lite.chunk.js.map +1 -0
- package/dist/scripts/4945-fbbb21cf54-lite.chunk.js +2 -0
- package/dist/scripts/4945-fbbb21cf54-lite.chunk.js.map +1 -0
- package/dist/scripts/4985-6bdacf82c1-lite.chunk.js +2 -0
- package/dist/scripts/4985-6bdacf82c1-lite.chunk.js.map +1 -0
- package/dist/scripts/5002-c0f45922c6-lite.chunk.js +2 -0
- package/dist/scripts/5002-c0f45922c6-lite.chunk.js.map +1 -0
- package/dist/scripts/516-94eeca32e7-lite.chunk.js +2 -0
- package/dist/scripts/516-94eeca32e7-lite.chunk.js.map +1 -0
- package/dist/scripts/5270-55334d53e9-lite.chunk.js +2 -0
- package/dist/scripts/5270-55334d53e9-lite.chunk.js.map +1 -0
- package/dist/scripts/5579-7d9081e134-lite.chunk.js +2 -0
- package/dist/scripts/{5579-a9c152057f-lite.chunk.js.map → 5579-7d9081e134-lite.chunk.js.map} +1 -1
- package/dist/scripts/5712-37a97adc65-lite.chunk.js +2 -0
- package/dist/scripts/5712-37a97adc65-lite.chunk.js.map +1 -0
- package/dist/scripts/639-0bf7cc53f9-lite.chunk.js +2 -0
- package/dist/scripts/639-0bf7cc53f9-lite.chunk.js.map +1 -0
- package/dist/scripts/6909-b5717e92e8-lite.chunk.js +2 -0
- package/dist/scripts/6909-b5717e92e8-lite.chunk.js.map +1 -0
- package/dist/scripts/7459-c1882c6f0d-lite.chunk.js +3 -0
- package/dist/scripts/7459-c1882c6f0d-lite.chunk.js.map +1 -0
- package/dist/scripts/7604-5d2ba346e2-lite.chunk.js +3 -0
- package/dist/scripts/7604-5d2ba346e2-lite.chunk.js.map +1 -0
- package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-899a1d0cb1-lite.chunk.js} +2 -2
- package/dist/scripts/7617-899a1d0cb1-lite.chunk.js.map +1 -0
- package/dist/scripts/7742-95097c976d-lite.chunk.js +2 -0
- package/dist/scripts/7742-95097c976d-lite.chunk.js.map +1 -0
- package/dist/scripts/{7843-f6033528ce-lite.chunk.js → 7843-fc9ddb3b52-lite.chunk.js} +2 -2
- package/dist/scripts/7843-fc9ddb3b52-lite.chunk.js.map +1 -0
- package/dist/scripts/{7867-14c692e69c-lite.chunk.js → 7867-589c7bd788-lite.chunk.js} +3 -3
- package/dist/scripts/7867-589c7bd788-lite.chunk.js.map +1 -0
- package/dist/scripts/{787-dcb3a0a26c-lite.chunk.js → 787-5c7976e8cb-lite.chunk.js} +2 -2
- package/dist/scripts/{787-dcb3a0a26c-lite.chunk.js.map → 787-5c7976e8cb-lite.chunk.js.map} +1 -1
- package/dist/scripts/8056-a3d8fa8728-lite.chunk.js +2 -0
- package/dist/scripts/8056-a3d8fa8728-lite.chunk.js.map +1 -0
- package/dist/scripts/{8672-6967ce8a23-lite.chunk.js → 8672-5637204ae3-lite.chunk.js} +2 -2
- package/dist/scripts/{8672-6967ce8a23-lite.chunk.js.map → 8672-5637204ae3-lite.chunk.js.map} +1 -1
- package/dist/scripts/8852-c39595da59-lite.chunk.js +2 -0
- package/dist/scripts/8852-c39595da59-lite.chunk.js.map +1 -0
- package/dist/scripts/8944-022dbd6a0b-lite.chunk.js +2 -0
- package/dist/scripts/8944-022dbd6a0b-lite.chunk.js.map +1 -0
- package/dist/scripts/9742-c839ec5abb-lite.chunk.js +2 -0
- package/dist/scripts/9742-c839ec5abb-lite.chunk.js.map +1 -0
- package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 9803-9a666cfdef-lite.chunk.js} +3 -3
- package/dist/scripts/9803-9a666cfdef-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-375332cf3f.min.js +3 -0
- package/dist/scripts/{bundle-2bbba2aa8b.min.js.map → bundle-375332cf3f.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/171-36c7520c9c-lite.chunk.js +0 -2
- package/dist/scripts/171-36c7520c9c-lite.chunk.js.map +0 -1
- package/dist/scripts/1726-c79cf77a51-lite.chunk.js +0 -2
- package/dist/scripts/1726-c79cf77a51-lite.chunk.js.map +0 -1
- package/dist/scripts/1912-1f78dc635a-lite.chunk.js +0 -2
- package/dist/scripts/1912-1f78dc635a-lite.chunk.js.map +0 -1
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
- package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
- package/dist/scripts/3249-0b55dec380-lite.chunk.js.map +0 -1
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
- package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
- package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
- package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
- package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
- package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
- package/dist/scripts/5002-7514146621-lite.chunk.js +0 -2
- package/dist/scripts/5002-7514146621-lite.chunk.js.map +0 -1
- package/dist/scripts/5270-d407e1ae84-lite.chunk.js +0 -2
- package/dist/scripts/5270-d407e1ae84-lite.chunk.js.map +0 -1
- package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
- package/dist/scripts/6909-a9b8930e37-lite.chunk.js +0 -2
- package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
- package/dist/scripts/7401-833bc4a088-lite.chunk.js +0 -2
- package/dist/scripts/7401-833bc4a088-lite.chunk.js.map +0 -1
- package/dist/scripts/7604-f664281904-lite.chunk.js +0 -3
- package/dist/scripts/7604-f664281904-lite.chunk.js.map +0 -1
- package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
- package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
- package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
- package/dist/scripts/7867-14c692e69c-lite.chunk.js.map +0 -1
- package/dist/scripts/8056-eec7c2fda0-lite.chunk.js +0 -2
- package/dist/scripts/8056-eec7c2fda0-lite.chunk.js.map +0 -1
- package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
- package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
- package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
- package/dist/scripts/8944-b56c3e61fc-lite.chunk.js +0 -2
- package/dist/scripts/8944-b56c3e61fc-lite.chunk.js.map +0 -1
- package/dist/scripts/9742-5f99d74bb0-lite.chunk.js +0 -2
- package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-2bbba2aa8b.min.js +0 -3
- /package/dist/css/{2074-lite-ac8da6c78b.chunk.css → 4525-lite-ac8da6c78b.chunk.css} +0 -0
- /package/dist/css/{8364-lite-db31e36b79.chunk.css → 7459-lite-db31e36b79.chunk.css} +0 -0
- /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 4006-5078eb2c01-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7604-f664281904-lite.chunk.js.LICENSE.txt → 7459-c1882c6f0d-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7867-14c692e69c-lite.chunk.js.LICENSE.txt → 7604-5d2ba346e2-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7867-589c7bd788-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 9803-9a666cfdef-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-2bbba2aa8b.min.js.LICENSE.txt → bundle-375332cf3f.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/9803-9a666cfdef-lite.chunk.js","mappings":";yKAWA,IAAMA,EAAoB,SAACC,GACzB,OAAQA,GACN,IAAK,KACH,MCbe,QDcjB,IAAK,OACH,MCf8B,QDgBhC,IAAK,QACH,MCjB6D,QDkB/D,IAAK,OACH,MCnB6C,QDqBnD,EAWM,SAAUC,EAAMC,GACpB,OACE,gBAACC,EAAA,EAAY,CACXC,QAAS,WACTC,UAAS,UAAKN,EAAkBG,EAAMF,WAAU,yCAAiCE,EAAMG,YAG7F,CAXAJ,EAAMK,aAAe,CACnBN,UAAW,sLEPP,SAAUO,EAAoBL,GAClC,QAAiH,KAAnE,WAA8D,QAAK,s4BAAzGM,EAAc,KAAEC,EAAiB,KACXC,EAAyBR,EAA/CS,qBAaFC,GAAc,QAAU,KAAe,CAC3CC,qBAAsB,CACpBC,SAAU,MAIRC,GAAU,QAAWH,GAE3B,OACE,gBAAC,KAAU,CACTI,UArBJ,SAAuBC,GACrBR,EAAkB,MAElBP,EAAMgB,cAAcD,EAAOf,EAAMiB,OACnC,EAkBIC,YAhBJ,SAAyBH,SACvBR,EAAkBQ,EAAMI,OAAOC,KAAKC,SACf,QAArB,EAAArB,EAAMsB,uBAAe,gBAAGP,EAC1B,EAcIF,QAASA,EACTU,mBAAoB,MAEnBvB,EAAMwB,SAEP,gBAAC,KAAW,CAACC,cAAe,KAAMC,UAAW,CAAC,MAAqBC,OAAQ,MACxErB,EACC,gBAACE,EAAoB,CAACF,eAAgBA,IACpC,MAIZ,2NCjDA,IAAMsB,EAAY,uBAEZC,EAAuB,+BA6BvB,SAAUC,EAAW9B,GACzB,IA3BM+B,MA6BL,KAFsD,WACrD,SAAuBF,KAAyB,KACjD,s4BAFOG,EAAmB,KAAEC,EAAqB,KAI5CC,EAAqBlC,EAAMmC,eAAiBH,EAE5CI,GAjCAL,GAAc,UAEJM,KAAON,EAAYO,IAAMP,EAAYQ,GAC5C,EAELR,EAAYS,GACP,EAEF,EA2BP,SAASC,IACPR,GAAuBC,GACvB,SAAuBL,GAAuBK,EAChD,CAEA,IAAMQ,EAAqBR,EAAqBlC,EAAM2C,QAAU3C,EAAM2C,QAAQC,MAAM,EAAGR,GAEjFS,EAAyB7C,EAAM2C,QAAQG,OAASV,IAAgBpC,EAAMmC,cAE5E,OACE,gCACE,uBAAKhC,UAAU,qDACZH,EAAM+C,aACL,gBAAC,IAAS,CACR5C,UAAS,qDAAiD0C,EAA4C,GAAnB,kBACnFG,QAASP,GAERI,GACC,gBAAC,IAAK,CAAC/C,UAAWoC,EAAqB,OAAS,UAElD,sBAAI/B,UAAU,WACZ,gBAAC,IAAI,CAACyB,UAAWA,EAAWqB,OAAO,UAAUC,QAAS,CAAEC,MAAOnD,EAAM2C,QAAQG,cAK9EZ,IAAsBW,IACzB,uBAAK1C,UAAU,oDACb,gBAAC,IAAS,CAAC6C,QAASP,EAAgBtC,UAAU,iDAC5C,gBAAC,IAAI,CAACyB,UAAWA,EAAWqB,OAAO,SAASC,QAAS,CAAEC,MAAOnD,EAAM2C,QAAQG,eAI9EZ,IAAsBW,IACxB,uBAAK1C,UAAU,oDACb,gBAAC,IAAS,CAAC6C,QAASP,EAAgBtC,UAAU,iDAC5C,gBAAC,IAAI,CAACyB,UAAWA,EAAWqB,OAAO,cAKxCjD,EAAMoD,aAAepD,EAAMoD,aAAe,kCAG7C,uBAAKjD,UAAU,YACZuC,EAAmBW,IAAI,SAAAC,GAAC,OACvB,uBAAKC,IAAKD,EAAEE,GAAIrD,UAAU,qCACxB,gBAAC,IAAa,CACZsD,OAAQH,EACRI,WAAY1D,EAAM0D,WAClBC,iBAAkB3D,EAAM2D,iBACxBC,KAAM5D,EAAM4D,KACZC,KAAM7D,EAAM6D,OAEV,IAKhB,CAxEA/B,EAAW1B,aAAe,CACxB2C,aAAa,mDCxCf,SAAgB,qBAAuB,QAAQ,uBAAyB,QAAQ,kBAAoB,SCGpG,IAAMe,EAAgB,WAAH,OACjB,uBAAK3D,UAAU,qCACb,uBAAKA,UAAS,UAAK,yBAA6B,gDAChD,uBAAKA,UAAS,UAAK,oBAAwB,0FAAuF,KAG9H,EAGF,SAAU4D,EAAkB,GAAkC,QAAhCZ,MAAAA,OAAK,IAAG,IAAC,EAC3C,OACE,gCACE,uBAAKhD,UAAS,UAAK,uBAA2B,wCAAqC,KACnF,uBAAKA,UAAU,aACZ6D,MAAMb,GAAOc,KAAK,MAAMZ,IAAI,SAACa,EAAGC,GAAC,OAAK,gBAACL,EAAa,CAACP,IAAKY,GAAK,IAIxE,0ICrBA,SAAgB,QAAU,QAAQ,iBAAmB,QAAQ,UAAY,QAAQ,UAAY,QAAQ,UAAY,SC2B3G,SAAUC,EAAcpE,mBACtBqE,EAAerE,EAAMyD,OAAOa,UAC9BC,EAAA,aAAqBvE,EAAMyD,OAAOa,UAAUE,IAAK,CAAEC,KAAM,aACzD,KAEEC,EAA0C,QAAlC,EAA6B,QAA7B,EAAuB,QAAvB,EAAY,QAAZ,EAAA1E,EAAMyD,cAAM,eAAEkB,iBAAS,eAAEvD,YAAI,eAAG,UAAE,eAAEsD,MAC5CE,EAAe5E,EAAM6E,gBAA8B,QAAX,EAAAH,aAAK,EAALA,EAAOI,YAAI,eAAEN,KACvDD,EAAA,aAAqBG,EAAMI,KAAKN,IAAK,CAAEC,KAAM,aAC7C,KAEEM,EAAgC,QAAtB,EAAA/E,EAAM2D,wBAAgB,sBAAG3D,EAAMyD,QAEzCuB,EAAgBhF,EAAMgF,cAAe,eACzCxB,GAAIxD,EAAMyD,OAAOD,GAAGyB,WACpBC,KAAMlF,EAAMyD,OAAOyB,MAChBlF,EAAMgF,oBACPG,EAEEC,EAAmBpF,EAAMoF,iBAAkB,eAC/CC,WAAY,WACZC,OAAQ,aAELtF,EAAMoF,uBACPD,EAEJ,OACE,gBAACI,EAAA,EAAmB,CAClBC,UAAWxF,EAAM4D,MAAQ,CAAEJ,GAAIxD,EAAMyD,OAAOD,GAAIpC,KAAMpB,EAAMyD,QAC5DgC,UAAWzF,EAAM6D,MAAQ,CAAEL,GAAIxD,EAAMyD,OAAOD,GAAIpC,KAAMpB,EAAMyD,QAC5DiC,SAAU,YACVC,UAAW,aAEX,uBAAKxF,UAAU,qBACb,gBAACyF,EAAA,EAAO,CACNzF,UAAU,yCACV0F,QAAS7F,EAAM0D,WAAW1D,EAAMyD,QAChCqC,MAAO9F,EAAMyD,OAAOyB,KACpBF,cAAeA,EACfI,iBAAkBA,GAElB,gBAACW,EAAA,EAAS,CACR3E,KAAMiD,EACN2B,UAAW,gBACXC,eAAe,kBAEf,gBAACC,EAAA,GAAa,CACZhB,KAAMlF,EAAMyD,OAAOyB,KACnBiB,KAAMD,EAAA,UACNE,aAAa,oBAGjB,sBAAIjG,UAAU,0GACZ,wBAAMA,UAAU,yBAAyBH,EAAMyD,OAAOyB,SAGzDH,aAAO,EAAPA,EAASjC,SACR,gBAACuD,EAAA,EAAO,CACNtB,QAASA,EACT5E,UAAW,mBACXmG,yBAA0B,UAE1BC,sBAAuB,SAGxB3B,GACD,uBAAK4B,IAAK5B,EAAczE,UAAS,yBAAoB,aAAoBsG,IAAG,UAAK/B,aAAK,EAALA,EAAOQ,KAAI,SAASY,OAAOpB,aAAK,EAALA,EAAOQ,OAAQ,MAKrI,2eCnFA,IAAMtD,EAAY,0BACZ8E,EAAY,qBAAiC9E,GAa7C,SAAU+E,EAAiB3G,GAC/B,QAAwB4G,EAAmB5G,EAAnC6G,eAE2D,KAAnC,WAAgC,MAAG,ynBAA3D9B,EAAO,KAAE+B,EAAU,KAY3B,OACE,gCACE,uBAAK3G,UAAU,kCACZH,EAAM+G,iBACL,gCACE,gBAAC,IAAQ,CACPvD,GAAG,YACH0B,KAAK,YACL/E,UAAU,eACV6G,QAASJ,EAAeK,YACxBC,SAAUN,EAAeO,aACzBC,cAAeR,EAAeS,sBAEhC,uBAAKlH,UAAU,6CACb,0BACE6C,QAzBd,iBACE8D,EAAoC,QAAzB,EAAA9G,EAAMsH,2BAAmB,sBAAGV,EAAeW,eACxD,EAwBcpH,UAAS,+CAA0CyG,EAAeS,oBAAsB,GAAK,YAC7F7D,GAAG,mBAAkB,iBACN,WAAU,cACb,WAAU,gBACR,OAAM,gBACN,QAAO,aACTkD,EAAU,gBAEtB,gBAAC,IAAI,CAAC9E,UAAWA,EAAWqB,OAAO,aAErC,uBACE9C,UAAU,sDAAqD,kBAC/C,oBAEf4E,EAAQjC,QACPiC,EAAQ1B,IAAI,SAAAmE,GACV,OACE,0BACEjE,IAAKiE,EAAOC,MACZtH,UAAS,wBAAmBqH,EAAOrH,WACnC6C,QAAS,WAAF,OA1C7B,SAA2BwE,GACzB,eAA2BA,EAAO3B,SAElC,kBAA8B2B,EAAOxC,cAAewC,EAAOpC,iBAC7D,CAsCqCsC,CAAkBF,EAAO,GAEvCA,EAAOC,MAGd,MAMTzH,EAAM2H,aACL,uBAAKxH,UAAU,gBACb,gBAACyH,EAAU,CAACzB,KAAK,QAAQ0B,WAAY7H,EAAM6H,WAAYhC,QAAS7F,EAAM0D,eACtE,gBAACkE,EAAU,CAACzB,KAAK,cAAc0B,WAAY7H,EAAM6H,WAAYhC,QAAS7F,EAAM0D,eAC5E,gBAACkE,EAAU,CAACzB,KAAK,OAAO0B,WAAY7H,EAAM6H,WAAYhC,QAAS7F,EAAM0D,iBAMjF,CAQA,SAASkE,EAAW5H,GAClB,IAKI8H,IALEC,EAAW/H,EAAM6H,WAAWG,SAAShI,EAAMmG,MAE3C8B,EAAiBjI,EAAM6F,QACvBqC,EAAgBD,EAAeE,OAKnCL,EADEC,EACQ/H,EAAM6H,WAAWO,OAAO,SAAAC,GAAC,OAAIA,IAAMrI,EAAMmG,IAAI,GAE7C,GAAH,sDAAQnG,EAAM6H,kTAAU,CAAE7H,EAAMmG,OAEzC,IAAMmC,EAAa,OAAH,wBACXL,GAAc,CACjBE,OAAQ,OAAF,wBACDD,GAAa,CAChB/B,KAAM2B,MAIV,SAASS,IACP,MAAmB,UAAfvI,EAAMmG,KAAyB,SAChB,SAAfnG,EAAMmG,KAAwB,QACf,gBAAfnG,EAAMmG,KAA+B,oBAAzC,CACF,CAEA,OACE,gBAAC,IAAO,CACNhG,UAAS,mBAAc4H,EAAW,WAAa,oBAC/ClC,QAASyC,EACTE,UAAS,UAAK9B,EAAU,gBAAe,aAAKA,EAAU6B,OAEtD,gBAAC,IAAI,CAAC3G,UAAWA,EAAWqB,OAAQsF,MAG1C,0GCtHME,EAA8B,CAClCC,SAAU,IACVC,UAAW,CACTC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,QAAS,KAEXC,WAAY,IACZC,oBAAqB,KAGjB,SAAUC,EACdC,GAMkC,IALlCC,EAAA,uDAA+B,CAAC,EAKhCC,EAAA,uDAAgC,CAAC,EAEjC,GAAKF,EAAL,CAGA,IAAIG,EAGFA,EADmB,iBAAVH,EACIA,EAEAA,EAAKI,OAGpB,IAAMC,EAAW,OAAH,wBACTf,GACAW,GAGAE,GAGA,yBAAmCA,KAGpCA,IAAe,mBAMfA,IAAe,aAMfA,IAAe,cAUdD,EAAUL,YACb,aAAuB,IAAIQ,EAASR,YAN/BK,EAAUV,WACb,aAAuB,IAAIa,EAASb,UAAUI,SAX3CM,EAAUX,UACb,aAAuB,IAAIc,EAASd,UAPjCW,EAAUJ,qBACb,aAAuB,IAAI,KAvBvB,CA6CV,yJCtFM,SAAUQ,EACdC,EACAC,GACuC,UAAvCC,EAAA,uDAAqC,GAE3BC,KAAc,YAAe,KAAM,s4BAA1B,GAiBnB,OAfA,YAAgB,WACd,IAAMC,EAAaJ,IAEnB,GAAKI,EASL,OANAA,EAAWC,IAAI,qBACfD,EAAWE,GAAG,oBAAqB,WACjCH,EAAU,SAAAI,GAAC,OAAKA,CAAC,EACnB,GACIN,GACFG,EAAWE,GAAG,SAAUL,GACnB,WAAQG,EAAWC,IAAI,oBAAsB,CACtD,EAAGH,GAEmB,QAAf,EAAAF,WAAe,eAAEQ,QAC1B,8DCzBA,SAASC,EAAiBC,GACxB,OAAOA,EAAW/G,IAAI,SAAAgH,GAAG,OAAIA,EAAIf,UAAU,GAAEgB,KAAK,IACpD,CAGM,SAAUC,EACdC,EACAC,EACAC,GAEA,IAAMN,EAAapG,MAAM2G,QAAQH,GAAeA,EAAc,CAACA,IAE/D,IAAAI,WAAU,WACRR,EAAWS,QAAQ,SAAAR,IACjB,OAAgBA,EAAIf,WAAYmB,EAAcC,EAChD,EACF,EAAG,CAAEP,EAAiBC,GAAaK,EAAcC,GACnD,uECWaI,EAAyB,SAAChB,GAAsE,IAA5C5G,EAAA,uDAAsC,CAAC,EACtG,EAA6CA,EAArC6H,QAAAA,OAAO,IAAG,OAAI,EAAEC,EAAqB9H,EAArB8H,iBAElBC,EAAU/H,EAAQgI,aAAehI,EAAQgI,aAAe,IAAIC,IAE5DC,EAAQ,SAAiCH,GAEzCI,GAAc,SAEdC,GAAiB,OAAYxB,GAC7ByB,GAAgB,OAAYP,GAwClC,SAASQ,IACPJ,EAAM/J,QAAQoK,QACdJ,GACF,CA6BA,SAASK,EAAUC,GAMjB,MALoB,iBAATA,EACTA,EAAOA,EAAK1G,WACW,iBAAT0G,IACdA,EAAOA,EAAKZ,GAAS9F,YAEhBmG,EAAM/J,QAAQuK,IAAID,EAC3B,CAuBA,SAASE,IACP,SAAK/B,aAAU,EAAVA,EAAYhH,SAGVgH,EAAWgC,MAAMJ,EAC1B,CAEA,SAASK,EAAYC,GACnBA,EAAInB,QAAQ,SAAArH,GACV4H,EAAM/J,QAAQ4K,IAAIzI,GAAI,EACxB,GACA6H,GACF,CAUA,OAtHA,YAAgB,WAIVnI,EAAQgI,cAORF,GAAoBO,IAAkBP,IAO1BM,aAAc,EAAdA,EAAgBjI,IAAI,SAAAc,GAAC,OAAIA,EAAE4G,EAAQ,GAAET,WACzCR,aAAU,EAAVA,EAAYzG,IAAI,SAAAc,GAAC,OAAIA,EAAE4G,EAAQ,GAAET,SAK7CkB,GACF,EAAG,CAAEF,EAAgBC,EAAezB,EAAY5G,EAAQgI,eAExD,YAAgB,kBACa,QAAtB,EAAAhI,EAAQgJ,sBAAc,eAAEpJ,SAG7BiJ,EAAY7I,EAAQgJ,eACtB,EAAG,IAsFI,CACL/E,aA/EF,WACE,IAAMgF,GAAYN,IAElB/B,EAAWe,QAAQ,SAAAc,GACbQ,EACFf,EAAM/J,QAAQ4K,IAAIN,EAAKZ,GAAS9F,YAAY,GAE5CmG,EAAM/J,QAAO,OAAQsK,EAAKZ,GAAS9F,WACvC,GAEAoG,GACF,EAqEEe,aAlEF,SAAsB5I,GACpB,IAAM6I,GAAiBjB,EAAM/J,QAAQuK,IAAIpI,EAAGyB,YAExCoH,EACFjB,EAAM/J,QAAQ4K,IAAIzI,EAAGyB,WAAYoH,GAEjCjB,EAAM/J,QAAO,OAAQmC,EAAGyB,YAE1BoG,GACF,EA0DE9D,YA9CF,WACE,OAAOvD,MAAMsI,KAAKlB,EAAM/J,QAAQkL,OAClC,EA6CEb,UAAAA,EACAzE,YAAa4E,IACbW,YA7CF,YACO1C,aAAU,EAAVA,EAAYhH,UAEjBgH,EAAWe,QAAQ,SAAAc,GACjBP,EAAM/J,QAAO,OAAQsK,EAAKZ,GAAS9F,WACrC,GACAoG,IACF,EAuCEhE,kBApCF,WACE,SAAKyC,aAAU,EAAVA,EAAYhH,WAGRgH,EAAW2C,KAAK,SAAAd,GAAI,OAAID,EAAUC,EAAK,EAClD,EAgCEI,YAAAA,EACAW,iBAjBF,WACE,OAAOtB,EAAM/J,QAAQoD,IACvB,EAgBE+G,MAAAA,EACAmB,OAfF,WACE,OAAOvB,EAAM/J,OACf,EAeF,qjEC/KA,SAASuL,EACPC,EACArJ,EACAsJ,GAEA,GAAI,YAAmBD,EAAKrJ,GAAIA,GAC9B,MAAO,CAAEqJ,EAAMC,GAEjB,IAAMtL,EAAWqL,EAAKrL,SAEtB,IAAKA,IAAaA,EAASsB,OACzB,MAAO,CAAE,KAAM,MAEjB,IAAK,IAAIqB,EAAI,EAAGA,EAAI3C,EAASsB,OAAQqB,IAAK,CACxC,IAAiF,IAAjDyI,EAAMpL,EAAS2C,GAASX,EAAI,GAAF,SAAOsJ,GAAO,CAAED,KAAO,GAAzEE,EAAK,KAAEC,EAAY,KAE3B,GAAID,EACF,MAAO,CAAEA,EAAOC,EACnB,CAED,MAAO,CAAE,KAAM,KACjB,CAEO,IAAMC,EAAoB,EAEpBC,EAAa,CACxBT,KAAI,SAAiCU,EAAS3J,GAC5C,GAAK2J,GAASA,EAAK3L,UAAa2L,EAAK3L,SAASsB,OAG9C,IAAK,IAAIsK,EAAI,EAAGA,EAAID,EAAK3L,SAASsB,OAAQsK,IAAK,CAC7C,IAAOL,EAA6C,EAApCH,EAAMO,EAAK3L,SAAS4L,GAAS5J,EAAI,IAAG,GAAxC,GAEZ,GAAIuJ,EACF,OAAOA,CACV,CACH,EAEAM,QAAO,SAAiCF,EAAS3J,GAC/C,GAAK2J,GAASA,EAAK3L,UAAa2L,EAAK3L,SAASsB,OAG9C,IAAK,IAAIsK,EAAI,EAAGA,EAAID,EAAK3L,SAASsB,OAAQsK,IAAK,CAC7C,IAAUE,EAA6C,EAApCV,EAAMO,EAAK3L,SAAS4L,GAAS5J,EAAI,IAAG,GAAzC,GAEd,GAAI8J,aAAI,EAAJA,EAAMxK,OACR,OAAOwK,CACV,CACH,EAEAC,UAAS,SAAiCJ,EAAS3J,GACjD,IAAM8J,EAAOJ,EAAWG,QAAQF,EAAM3J,GAEtC,OAAK8J,aAAI,EAAJA,EAAMxK,QAGJwK,EAAKA,EAAKxK,OAAS,GAFjB,IAGX,EAEA0K,0BAAyB,SAAuBC,SACxCZ,EAAI,+BACLY,EAAarM,MAAI,CACpBI,SAAUiM,EAAajM,WAMzB,OAHiB,QAAb,EAAAqL,EAAKrL,gBAAQ,eAAEsB,UACjB+J,EAAKrL,SAAWqL,EAAKrL,SAAS6B,IAAI6J,EAAWM,4BAExCX,CACT,EAEAa,UAAS,SAA2CC,EAAYC,GAA0C,QAAxBC,EAAA,uDAAuB,EACvG,IAAKF,GAA0B,IAAjBA,EAAM7K,OAClB,OAAO,EAGT,IAEwB,EAFpBgL,EAAQ,EAAE,IAEKH,GAAK,IAAxB,IAAK,EAAL,qBAA0B,KAAfd,EAAI,QACb,IAAiB,QAAb,EAAS,QAAT,EAAAA,EAAKzL,YAAI,eAAEoC,UAAE,eAAEyB,cAAe2I,EAAS3I,WACzC,OAAO4I,EAGT,IAAME,EAAab,EAAWQ,UAAUb,EAAKrL,SAAUoM,EAAUC,EAAe,GAEhF,GAAIE,EAAa,EAAG,CAClBD,EAAQC,EACR,KACD,EACF,+BAED,OAAOD,CACT,EAEAE,kBAAiB,SAAuBL,GAAwD,IAAxBE,EAAA,uDAAuB,EAC7F,IAAKF,GAA0B,IAAjBA,EAAM7K,OAClB,OAAO+K,EAGT,IAEwB,EAFpBI,EAAeJ,EAAa,IAEbF,GAAK,IAAxB,IAAK,EAAL,qBAA0B,KAAfd,EAAI,QACPqB,EAAahB,EAAWc,kBAAkBnB,EAAKrL,SAAUqM,EAAe,GAC9EI,EAAeE,KAAKC,IAAIH,EAAcC,GACvC,+BAED,OAAOD,CACT,EAEAI,eAAc,SAAuBV,EAAgCC,WACnE,IAAKD,GAA0B,IAAjBA,EAAM7K,OAClB,OAAO,KACR,IAEuB,EAFvB,IAEkB6K,GAAK,IAAxB,IAAK,EAAL,qBAA0B,KAAfd,EAAI,QACb,IAAiB,QAAb,EAAS,QAAT,EAAAA,EAAKzL,YAAI,eAAEoC,UAAE,eAAEyB,cAAe2I,EAAS3I,WACzC,OAAO4H,EAGT,IAAMyB,EAASpB,EAAWmB,eAAexB,EAAKrL,SAAUoM,GACxD,GAAe,OAAXU,EACF,OAAOA,EAEV,+BAED,OAAO,IACT,EAEAC,WAAU,SACRZ,EACAa,EACAZ,GACoC,IAApCa,EAAA,uDAAmBxB,EAEbyB,EAAaxB,EAAWmB,eAAeV,EAAOa,GAIpD,OAHsBtB,EAAWc,kBAAkBU,EAAWlN,UAC1C0L,EAAWQ,UAAUC,EAAOC,IAEVa,CACxC,EAEAE,QAAO,SACLxB,GAEA,IAAKA,EACH,MAAO,GAET,IAAMQ,EAAa,GASnB,OAFAR,EAAK3L,SAASqJ,QALd,SAAS+D,EAAS/B,GAChBc,EAAMkB,KAAK,SAAkBhC,EAAM,CAAC,cACpCA,EAAKrL,SAASqJ,QAAQ+D,EACxB,GAIOjB,CACT,oFC5JI,SAAUmB,EAAwBC,GACtC,IAAMC,EAAQ,kBAEd,SAASC,EAAWC,GAClB,OAAO,iBAA6BH,EAAUG,EAChD,CAQA,OAFA,SAAcH,GAAYE,IAAcF,GAJxC,SAAmBG,GACjBF,EAAMC,EAAWC,GACnB,IAIQ,SAA4BH,GAAa,SAACG,GAAe,OAAKD,EAAWC,GAAQ3L,GAAG,EAC9F,wGCLa4L,EAAmB,CAC9BC,OAAM,SAAC5L,EAAY0L,EAAiBrH,GAClC,IAAQwH,EAAmD,qBAAjCC,EAAiC,oBAAhBC,EAAgB,gBAErDC,EAAa,UAAH,OAAaH,EAAgB,8BAAsB,wBAA8B,KAC3FI,EAAY,SAAH,OAAYH,EAAe,oBAAY,cAAwB,KACxEI,EAAmB,gBAAH,OAAmBH,EAAW,qBAAa,cAAwB,YAAI,UAAoB,MAE3GI,EAAQ,IACV9H,aAAU,EAAVA,EAAY/E,SACV+E,EAAWG,SAAS,UACtB2H,EAAMd,KAAKW,GACT3H,EAAWG,SAAS,SACtB2H,EAAMd,KAAKY,GACT5H,EAAWG,SAAS,gBACtB2H,EAAMd,KAAKa,IAEbC,EAAMd,KAAKW,EAAYC,EAAWC,GAGpC,IAAMvH,EAAqB,CACzBwH,MAAO,IAAF,OAAMA,EAAMrF,KAAK,KAAI,4BAC1BsF,uBAAwB,mBAM1B,OAHIV,IACF/G,EAAO+G,OAASA,GAEX,CACL1K,IAAK,eAAqB,wBAAD,OAAyBhB,EAAE,YAAY2E,GAChE5E,IAAK,aAAF,OAAeC,EAAE,YAAI0L,GAAM,OAAGrH,EAAa,IAAH,OAAO7D,MAAM2G,QAAQ9C,GAAcA,EAAWyC,KAAK,KAAOzC,GAAe,IAExH,EAEAgI,wBAAuB,WACrB,MAAO,CAELrL,IAAK,eAAqB,8BAA+B,CACvD2B,KAAM,CAAC,aACP2J,iBAAkB,IAEpBvM,IAAK,oBACLwM,WAAW,EAEf,EAEAC,uBAAsB,WACpB,MAAO,CAELxL,IAAK,eAAqB,8BAA+B,CACvD2B,KAAM,CAAC,YACP2J,iBAAkB,IAEpBvM,IAAK,mBACLwM,WAAW,EAEf,EAEAE,UAAS,SAAC7O,GAER,IAAIoD,EAAM,8BAAH,OAAiCpD,EAAK8O,aAAY,eAKzD,OAHI9O,EAAK+O,mBACP3L,EAAM,eAAqBA,EAAK,CAAE2L,iBAAkB/O,EAAK+O,oBAEpD,CACL3L,IAAAA,EACAjB,IAAK,aACL4C,KAAM,SACN/E,KAAM,CAAE8D,KAAM9D,EAAK8D,MACnBkL,iBAAkB,CAAE,YAAa,UAErC,EAEAC,aAAY,SAAC7M,GACX,MAAO,CACLgB,IAAK,wBAAF,OAA0BhB,GAC7BD,IAAK,gBACL4C,KAAM,WACNiK,iBAAkB,CAAE,YAAa,UAErC,EAEAE,WAAU,SAAClP,GACT,MAAO,CAELoD,IAAK,8BACLjB,IAAK,cACL4C,KAAM,SACN/E,KAAM,CACJmP,UAAW,MACXC,gBAAiBpP,EAAKqP,YACtBC,gBAAiBtP,EAAKuP,YACtBC,UAAW,CAACxP,EAAKyP,eAEnBT,iBAAkB,CAAE,YAAa,UAErC,EAEAU,aAAY,SAACtN,EAAY0B,GACvB,MAAO,CACLV,IAAK,wBAAF,OAA0BhB,GAC7BD,IAAK,gBACL4C,KAAM,QACN/E,KAAM,CAAE8D,KAAAA,GACRkL,iBAAkB,CAAE,YAAa,UAErC,EAEAW,aAAY,SAACC,EAAiBC,GAC5B,MAAO,CAELzM,IAAK,0BAAF,OAA4BwM,EAAO,0CAAkCC,EAAS,KACjF1N,IAAK,iBAAF,OAAmByN,GAE1B,EAEAE,UAAS,SAACC,GACR,IAAM/P,EAAmB,CACvBoP,gBAAiBW,EAAQV,YACzBC,gBAAiBS,EAAQR,YACzBC,UAAWO,EAAQH,SAGrB,MAAO,CACLxM,IAAK,8BACLjB,IAAK,eAAF,OAAiBnC,EAAKwP,UAAUtG,KAAK,MACxCnE,KAAM,SACN/E,KAAAA,EACAgP,iBAAkB,CAAC,SAEvB,EAEAgB,cAAa,SAAChQ,GACZ,MAAO,CACLoD,IAAK,wCACLjB,IAAK,kBACL4C,KAAM,SACN/E,KAAAA,EAEJ,w8ECzIIsF,EAAY,qBADA,kBAGZ,SAAU2K,IACd,IAAMC,GAAS,SACTC,EAAa,uBAEbC,EAAoB,8BACpBC,EAAmB,mBAAqCD,EAAkBjO,KAgBhF,SAAemO,EAAYC,EAAiBC,+GACP,GAA/BjP,EAAU8O,EAAiBrQ,MAE3BqQ,EAAiBI,YAAW,aACpB,OADoB,MACdN,EAAWC,GAAkB,OAA7C7O,EAAU,EAAH,aAEL,eAAsBA,EAASgP,EAAQnO,GAAIoO,EAAYpO,IAAK,CAAF,YAKzD,OAJH,eAA2B,CACzBsO,YAAa,cACbtK,OAAQ,8BACRuK,KAAM,CAAC,OACN,cAWH,OAPIC,EAAkC,CACtCxQ,SAAUmB,EAAQU,IAAI,gCAGlB4O,EAAS,cAAqBD,EAAcL,EAAQnO,IAAG,YAGrD+N,EAAW,eAA4B,CAC3CV,aAAcc,EAAQnO,GACtBiN,YAAamB,EAAYpO,GACzBmN,YAAasB,aAAM,EAANA,EAAQzO,MACpB,OACH8N,EAAOY,QAAQ,CACb/L,KAAM,aACNgM,QAASzL,EAAU,4BACnB0L,QAAS1L,EAAU,oBAAqB,CAAEjD,OAAQkO,EAAQzM,KAAMmN,SAAUT,EAAY1M,KAAMoN,YAAY,IACxGzM,QAAS,CACPiM,YAAa,cACbtK,OAAQ,8BACRuK,KAAM,CAAEH,EAAYpO,GAAIoO,EAAY1M,OAEtCqN,YAAa7L,EAAU,aAAc,CAAEjD,OAAQmO,EAAY1M,KAAMoN,YAAY,IAC7EE,iBAAkB,cACjB,6BAEHlB,EAAOmB,MAAM/L,EAAU,UAAU,yCAEpC,CAED,SAAegM,EAAWf,EAAgCC,EAAqB3Q,qGAE3E,mBAAMsQ,EAAW,cAA2B,CAC1Cd,YAAamB,EAAYpO,GACzBmN,YAAa1P,EAAOuC,GACpBwN,QAAShN,MAAM2G,QAAQgH,GAAWA,EAAU,CAACA,EAAQnO,OACpD,OACCQ,MAAM2G,QAAQgH,GAChBL,EAAOY,QAAQ,CACb/L,KAAM,aACNgM,QAASzL,EAAU,6BACnB0L,QAAS1L,EACP,oBACA,CAAEvD,MAAOwO,EAAQ7O,OAAQ6P,WAAY1R,EAAOiE,KAAMmN,SAAUT,EAAY1M,KAAMoN,YAAY,IAE5FzM,QAAS,CACPiM,YAAa,cACbtK,OAAQ,8BACRuK,KAAM,CAAEH,EAAYpO,GAAIoO,EAAY1M,OAEtCqN,YAAa7L,EAAU,aAAc,CAAEjD,OAAQmO,EAAY1M,KAAMoN,YAAY,IAC7EE,iBAAkB,cAGpBlB,EAAOY,QACL,CACE/L,KAAM,aACNgM,QAASzL,EAAU,4BACnB0L,QAAS1L,EAAU,mBAAoB,CAAEkM,MAAOjB,EAAQzM,KAAMyN,WAAY1R,EAAOiE,KAAMmN,SAAUT,EAAY1M,KAAMoN,YAAY,IAC/HzM,QAAS,CACPiM,YAAa,cACbtK,OAAQ,8BACRuK,KAAM,CAAEH,EAAYpO,GAAIoO,EAAY1M,OAEtCqN,YAAa7L,EAAU,aAAc,CAAEjD,OAAQmO,EAAY1M,KAAMoN,YAAY,IAC7EE,iBAAkB,cAGvB,6BAEDlB,EAAOmB,MAAM/L,EAAU,UAAU,yCAEpC,CAED,MAAO,CACL1F,cAvGF,SAA6BD,EAAqBE,qHAEJ,GADtC0Q,EAAsB,QAAZ,EAAA5Q,EAAMI,cAAM,eAAEC,KAAKC,SAC7BuQ,EAAwB,QAAV,EAAA7Q,EAAM8R,YAAI,eAAEzR,KAAKC,UAEjBsQ,EAAQnO,KAAOoO,EAAYpO,GAAE,qCAE7CmO,EAAQmB,SAAW,aAAmB,aACN,OAAlCpB,EAAYC,EAASC,GAAa,cAIpCc,EAAWf,EAASC,EAAa3Q,GAAQ,4BAC1C,EA6FH,4KC7GM,SAAU8R,EAAe7P,GAC7B,IAAQ8P,GAAmB,EAAAC,EAAA,KAAnBD,eAEFE,EAAc,kBAAkCC,EAAA,iBAChDC,EAAYJ,EAAeK,EAAA,eAM3BC,GAAwB,OAC5BF,GACAG,EAAA,kBAMEC,EClCA,SACJJ,EACAzJ,EACAC,GAEA,IAAM6J,GAAwB,OAAuCL,GAAa,2BAMlF,OAF4C,OAFtB,WAAH,OAASA,EAAYK,aAAqB,EAArBA,EAAuB/J,gBAAkB,IAAI,ED2B/B,iBACpDwJ,EAAY9R,OAAyB,QAAjB,EAAA8B,aAAO,EAAPA,EAASyG,gBAAQ,iBACvC,EC3B2FC,IAEtE,EACvB,CDsBwB8J,CAAqBN,EAAW,EAEnD,CAACF,EAAY9R,OAEhBoS,EAAkBA,aAAe,EAAfA,EAAiBpL,OAAO,SAAAwK,GACxC,OAAK1P,aAAO,EAAPA,EAASyQ,YAGPf,EAAMe,cAAezQ,aAAO,EAAPA,EAASyQ,aAF3Bf,EAAMe,UAGlB,GAOA,IAAMC,EAAgB,cAAkB,SAACjI,GACvC,eAA2B,CACzBmG,YAAa,WACbtK,OAAQ,yBACRuK,KAAM,CAACpG,EAAKnI,IACZ2E,OAAQ,CACNjD,KAAMyG,EAAKzG,KACXqE,OAAQoC,EAAKpC,SAGnB,EAAG,IAEGsK,EAAmB,cAAkB,SAAClI,GAC1C,OAAQA,EAAKpC,QACX,KAAK,YAKH,IAAKoC,EAAKmI,iBACR,OAGF,YADAR,EAAsBS,UAAUpI,GAElC,KAAK,eAMH,YALA,eAA2B,CACzBmG,YAAa,WACbtK,OAAQ,sBACRuK,KAAM,CAACpG,EAAKqF,WAGhB,KAAK,cAEH,YADAsC,EAAsBU,WAAWrI,GAKvC,EAAG,IAEGsI,EAAgBT,aAAe,EAAfA,EAAiBU,OAAO,SAACC,EAAW9S,GAExD,OADA8S,EAAK9S,EAAQ2P,UAAW,EACjBmD,CACT,EAAG,CAAC,GAEJ,MAAO,CACLX,gBAAAA,EACAK,iBAAAA,EACAD,cAAAA,EACAK,cAAAA,EAEJ,+FEhGMvN,EAAY,qBADA,kBAOZ,SAAU0N,IACd,OAAO,SAACC,EAAU5Q,GAChB,IAAMuB,EAAgB,CAAExB,GAAIC,EAAOD,GAAI0B,KAAMzB,EAAOyB,MAC9CE,EAAmB,CACvBE,OAAQ,YACR+O,SAAuB,WAAbA,EAAwB,mBAAgC,cAClEC,cAAe,YAGjB,MAAO,CACL,CACE7M,MAAOf,EAAU,gBACjB6N,OAAqB,SAAbF,EACRlU,UAAwB,SAAbkU,EAAsB,iCAA8BlP,EAC/DjF,QAAsB,SAAbmU,EAAsB,eAAoBlP,EACnDU,QAAS,CACPiM,YAAa,cACbtK,OAAQ,wBACRuK,KAAM,CAACtO,EAAOD,KAEhBwB,cAAAA,EACAI,iBAAkB,OAAF,wBACXA,GAAgB,CACnBC,WAAY,eAGhB,CACEoC,MAAOf,EAAU,cACjB6N,QAAQ,EACR1O,QAAS,CACPiM,YAAa,cACbtK,OAAQ,yBACRuK,KAAM,CAACtO,EAAOD,KAEhBwB,cAAAA,EACAI,iBAAkB,OAAF,wBACXA,GAAgB,CACnBC,WAAY,aAGhB,CACEoC,MAAOf,EAAU,gBACjB6N,QAAQ,EACR1O,QAAS,CACPiM,YAAa,cACbtK,OAAQ,2BACRuK,KAAM,CAACtO,EAAOD,KAEhBwB,cAAAA,EACAI,iBAAkB,OAAF,wBACXA,GAAgB,CACnBC,WAAY,eAGhB,CACEoC,MAAOf,EAAU,gBACjBvG,UAAW,cACXoU,QAAQ,EACR1O,QAAS,CACPiM,YAAa,cACbtK,OAAQ,2BACRuK,KAAM,CAACtO,EAAOD,KAEhBwB,cAAAA,EACAI,iBAAkB,OAAF,wBACXA,GAAgB,CACnBC,WAAY,eAIpB,CACF,mJCxEMqB,EAAY,qBADA,oBAGlB,SAAS8N,EAAc5B,GACrB,OAAI,kBAA0BA,GACrBlM,EAAU,mBAEf,WAAmBkM,GACdlM,EAAU,YAEZA,EAAU,YACnB,CAEM,SAAU+N,EACdxD,EACA0C,GAEA,OAAO,SAACe,GACN,MAAO,CAAC,CACNjN,MAAOf,EAAU,aACjB6N,QAAQ,EACR1O,QAAS,CACPiM,YAAa,cACbtK,OAAQ,wBACRW,OAAQ,CAAE6D,IAAK0I,IAEjB1P,cAAe,CACbgH,IAAK0I,GAEPtP,iBAAkB,CAChBE,OAAQ,WACRD,WAAY,UACZgP,SAAU,mBACVC,cAAe,aAEhB,CACD7M,MAAOf,EAAU,UACjB6N,QAAQ,EACR1O,QAAS,CACPiM,YAAa,WACbtK,OAAQ,wBACRW,OAAQ,CAAE6D,IAAK0I,EAAUzD,UAAAA,EAAW0C,WAAAA,IAEtCxT,UAAW,2BACXiF,iBAAkB,CAChBE,OAAQ,WACRD,WAAY,YACZgP,SAAU,eACVC,cAAe,YAEjBtP,cAAe,CAAEgH,IAAK0I,IAE1B,CACF,CAEM,SAAUC,IACd,IAAQC,GAAoB,OAAY,MAAhCA,gBAEFC,GAAe,OAAgB,CAAER,SAAU,gBA4DjD,OAAO,OAAP,wBACKQ,GAAY,CACfC,gBA5DsB,SAAClC,EAAmB1P,GAM1C,IALuB,qBAA6B0P,GAA5CmC,WAMN,MAAO,CAAC,CACNtN,MAAOf,EAAU,UACjB6N,QAAQ,EACRrU,QAAS,YACT2F,QAAS,CACPiM,YAAa,WACbtK,OAAQ,wBACRW,OAAQ,CAAE6D,IAAK,CAAC4G,EAAMpP,MAExBrD,UAAW,2BACXiF,iBAAkB,CAChBE,OAAQ,WACRD,WAAY,YACZgP,SAAU,mBACVC,cAAe,YAEjBtP,cAAe,CACbxB,GAAIoP,EAAMpP,MAKhB,IAAMuB,EAAU8P,EAAaC,gBAAgBlC,EAAO1P,GA0BpD,OAxBI0R,GACF7P,EAAQ8J,KAAK,CACXmG,MAAO,GACPvN,MAAO+M,EAAc5B,GACrB1S,QAAS,UACTqU,QAAQ,EACR1O,QAAS,CACPiM,YAAa,cACbtK,OAAQ,wBACRW,OAAQ,CAAE6D,IAAK,CAAC4G,EAAMpP,MAExBwB,cAAe,CACbxB,GAAIoP,EAAMpP,IAEZ4B,iBAAkB,CAChBE,OAAQ,cAA8BsN,EAAME,QAC5CzN,WAAY,UACZgP,SAAU,mBACVC,cAAe,YAEjBW,MAAO,SAIJlQ,CACT,GAMF,wIC7HMnD,EAAY,6BACZ8E,EAAY,qBAAiC9E,GAM7C,SAAUsT,EAAmB,GAAsC,IAApC9B,EAAS,EAATA,UACnC,OACE,gBAAC,aAAiC,CAAC+B,MAAOvT,GACxC,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAAC4E,IAAK,0BAAiC4O,QAAS1O,EAAU,UAC3E,gBAAC,YAAkB,KAAC,gBAAC,IAAI,CAACzD,OAAO,aACjC,gBAAC,SAAe,KAAC,gBAAC,IAAI,CAACA,OAAO,UAC7BmQ,GAAa,gBAAC,SAAe,KAAC,gBAAC,IAAI,CAACnQ,OAAO,iBAIpD,CAEM,SAAUoS,IACd,OACE,gBAAC,aAAiC,CAACF,MAAOvT,GACxC,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAAC4E,IAAK,iCAAwC4O,QAAS1O,EAAU,gBAClF,gBAAC,YAAkB,KAAC,gBAAC,IAAI,CAACzD,OAAO,mBACjC,gBAAC,SAAe,KAAC,gBAAC,IAAI,CAACA,OAAO,gBAC9B,gBAAC,QAAc,CACbqS,KAAM,cAA0B1T,EAAW,aAC3CiE,QAAS,CACPiM,YAAa,YACbtK,OAAQ,oBAEVxC,cAAe,CAAC,EAChBI,iBAAkB,CAChBC,WAAY,WACZgP,SAAU,oBACV/O,OAAQ,aACRgP,cAAe,WACfiB,WAAY,KAAAC,WAMxB,gIC9CM5T,EAAY,oBAEZ,SAAU6T,IACd,OACE,uBAAKC,KAAK,QAAQvV,UAAU,0EAC1B,gBAAC,IAAY,CAACD,QAAS,iBAA0BuE,KAAM,EAAAkR,EAAA,QACvD,gBAAC,IAAI,CAAC/T,UAAWA,EAAWqB,OAAO,aAAa,IAChD,gBAAC,IAAO,CACN4C,QAAS,CACPiM,YAAa,YACbtK,OAAQ,6BAEVrH,UAAU,kDACV6E,cAAe,CAAC,EAChBI,iBAAkB,CAChBC,WAAY,WACZgP,SAAU,iBACV/O,OAAQ,aACRiQ,WAAY,uBAGd,gBAAC,IAAI,CAAC3T,UAAWA,EAAWqB,OAAO,eAI3C,2OCZMyD,EAAY,qBADA,wBAGlB,SAASkP,EAAarM,GACpB,OAAQA,GACN,KAAK,cACH,MAAO,eACT,KAAK,eACH,MAAO,YACT,KAAK,YACH,MAAO,cAEb,CAEA,SAASsM,EAAWtM,GAClB,OAAQA,GACN,KAAK,cACH,MAAO,UACT,KAAK,eACH,MAAO,OACT,KAAK,YACH,MAAO,SAEb,CA2CM,SAAUuM,EAAc9V,WAC5B,EAAyEA,EAAM2L,KAAvEpC,EAAM,EAANA,OAAQwM,EAAQ,EAARA,SAAU7Q,EAAI,EAAJA,KAAM8Q,EAAkB,EAAlBA,mBAAoBlC,EAAgB,EAAhBA,iBAE9C/R,GAAc,SAEdkU,EAAmB,OADZ,YAAwBlU,EAAa,MAQ5C8R,EAAmB,cAAkB,WACzC7T,EAAM6T,iBAAiB7T,EAAM2L,KAC/B,EAAG,CAAC3L,EAAM2L,KAAKpC,SAETqK,EAAgB,cAAkB,WACtC5T,EAAM4T,cAAc5T,EAAM2L,KAC5B,EAAG,IAEC9F,EAAwB,MACR,QAAhB,EAAA7F,EAAM2L,KAAKiH,aAAK,eAAErJ,UAAW,gBAC/B1D,EAAU,CACRiM,YAAa,WACbtK,OAAQ,sBACRuK,KAAM,CAAE/R,EAAM2L,KAAKqF,QAAS,YAAmBhR,EAAM2L,KAAKiH,MAAM1N,SAKpE,IAAMgR,EAAgB3M,IAAW,kBAAqDpE,IAArB2O,EAEjE,OACE,uBAAK3T,UAAU,mBACZH,EAAM+G,iBAAmB,uBAAK5G,UAAU,yBACzC,gBAAC,IAAG,CAACA,UAAS,UAAK8V,EAAU,GAAK,OAAM,qBACtC,gBAAC,IAAG,iBAAK,0BAAqC,CAAE9V,UAAS,6CAAwC8V,EAAU,YAAc,eACvH,uBAAK9V,UAAS,4CAAuC8V,EAAU,UAAY,cACzE,gBAAC,IAAO,CAACpQ,QAASA,GAChB,gBAAC,IAAS,CACRzE,KAA6B,QAAvB,EAAApB,EAAM2L,KAAKtH,oBAAY,QAAI,GACjC2B,UAAW,gBACXmQ,aAAc,CAAE1R,KAAM,cAEtB,gBAAC,KAAa,CAAC0B,KAAM,iBAK7B,gBAAC,IAAG,iBAAK,wBAAmC,CAAEhG,UAAW8V,EAAU,OAAS,SAC1E,gBAAC,IAAO,CAACpQ,QAASA,GAChB,sBAAI1F,UAAU,YAAY+E,IAE5B,wBAAM/E,UAAWyV,EAAarM,IAvFxC,SAAyBrG,GACvB,IAAQqG,EAA8DrG,EAA9DqG,OAAQwM,EAAsD7S,EAAtD6S,SAAUC,EAA4C9S,EAA5C8S,mBAAoBI,EAAwBlT,EAAxBkT,oBAExCC,EAAUlI,KAAKmI,MAAMP,IAAa,EAExC,OAAQxM,GACN,KAAK,cACH,MAAO,GAAP,OAAU7C,EAAU,aAAY,YAAI2P,EAAO,KAE7C,KAAK,eACH,OAAgB,IAAZA,EACK,0BAAK3P,EAAU,yBAEpBsP,EACK,0BAAKtP,EAAU,iBAEjB,0BAAKA,EAAU,cAAa,IAAG2P,EAAO,KAE/C,KAAK,YACH,OAAKD,EAGE1P,EAAU,SAFR,0BAAKA,EAAU,mBAI9B,CAgEa6P,CAAgB,CAAEhN,OAAAA,EAAQwM,SAAAA,EAAUC,mBAAAA,EAAoBI,sBAAuBtC,KAElF,uBAAK3T,UAAU,UACb,gBAAC,IAAW,CAACA,UAAU,gCAAgCqW,QAASX,EAAWtM,GAASkN,IAAKV,IACxFG,EACC,gCACE,gBAAC,IAAY,CACX/V,UAAU,oCACVD,QAAS,YACT8C,QAAS4Q,KAIb,gCACE,gBAAC,IAAO,CACN/N,QAAS,CACPiM,YAAa,cACbtK,OAAQ,qCACRuK,KAAM,CAAE/R,EAAM2L,KAAK+K,SAAU1W,EAAM2T,cAGrC,gBAAC,IAAY,CACXxT,UAAU,oCACVD,QAAS,uBAGb,gBAAC,IAAY,CACXC,UAAU,oCACVD,QAASqJ,IAAW,YAA+B,WAAqB,UACxEvG,QAAS6Q,IAEX,gBAAC,IAAY,CACX1T,UAAU,oCACVD,QAAS,YACT8C,QAAS4Q,QAS3B,mHC1LA,SAAgB,YAAc,QAAQ,cAAgB,SCWtD,IAAMhS,EAAY,yBAMZ,SAAU+U,EAAgB3W,SACtBM,EAAmBN,EAAnBM,eAER,OACE,uBAAKH,UAAS,UAAK,cAAkB,uBACnC,uBAAKA,UAAU,4FACZ6D,MAAM2G,QAAQrK,GACb,uBAAKH,UAAU,sBACb,uBAAKA,UAAU,QACb,gBAACF,EAAA,EAAY,CAACC,QAAS,cAEzB,gBAAC0W,EAAA,EAAI,CAAChV,UAAWA,EAAWqB,OAAO,aAAaC,QAAS,CAAEJ,OAAQxC,EAAewC,WAGpF,uBAAK3C,UAAU,UACZG,EAAewS,SAAW+D,EAAA,WACzB,uBAAK1W,UAAU,QACb,gBAACF,EAAA,EAAY,CAACC,QAAS,eAGzB,gBAAC4W,EAAA,EAAS,CACRtQ,IAA6C,QAAxC,EAAAuQ,EAAA,eAAyBzW,UAAe,eAAEkE,IAC/CiC,IAAKnG,EAAe4E,KACpB/E,UAAS,UAAK,gBAAoB,8CAGtC,wBAAMA,UAAU,6BAA6BG,EAAe4E,QAMxE,gICrCMtD,EAAY,4BACZ8E,EAAY,qBAAiC9E,GAW7CoV,EAAmD,CACvD,SAAY,CACVC,cAAe,kBACfC,kBAAmB,sBACnBC,UAAW,cACXC,SAAU,8BAEZ,YAAa,CACXH,cAAe,kBACfC,kBAAmB,sBACnBC,UAAW,cACXC,SAAU,kCAEZ,UAAa,CACXH,cAAe,mBACfC,kBAAmB,uBACnBC,UAAW,eACXC,SAAU,4CAEZ,KAAQ,CACNH,cAAe,cACfC,kBAAmB,kBACnBC,UAAW,UACXC,SAAU,wBASR,SAAUC,EAAmBrX,GACjC,IAAMsX,EAASN,EAAiBhX,EAAMuX,SAEtC,OACE,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAAC/Q,IAAK8Q,EAAOF,WAC9B,gBAAC,YAAkB,KACjB,gBAAC,IAAI,CAACxV,UAAWA,EAAWqB,OAAQqU,EAAOL,iBAE7C,gBAAC,SAAe,CAAC9W,UAAU,QACzB,gBAAC,IAAI,CAACyB,UAAWA,EAAWqB,OAAQqU,EAAOJ,oBAAqB,KAElE,gBAAC,QAAc,CACb5B,KAAM5O,EAAU4Q,EAAOH,WACvBtR,QAAS,CACPiM,YAAa,YACbtK,OAAQ,6BAEVxC,cAAe,CAAC,EAChBI,iBAAkB,CAChBC,WAAY,WACZgP,SAAU,qBACV/O,OAAQ,aACRiQ,WAAY,sBAEdpV,UAAU,sBAEXH,EAAMwX,SAGb,gKCtDM,SAAUC,EAAoBvU,aAClC,EAAkEA,GAAW,CAAC,EAAtEwU,EAAe,EAAfA,gBAAiBC,EAAG,EAAHA,IAAKC,EAAe,EAAfA,gBAAiBC,EAAc,EAAdA,eAE/C,GAA6B,SAArBC,EAAQ,EAARA,SAAU3P,EAAM,EAANA,OAClB,GAAuC,IAAA4P,GAAkBL,EAAiBE,GAAlEI,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aACtB,GAAmD,OAAY,MAAvDC,EAAmB,EAAnBA,oBAAqBC,EAAiB,EAAjBA,kBAC7B,GAA2D,SAAnDnF,EAAc,EAAdA,eAA0BoF,EAAoB,EAA9BC,SAClBC,EAAuBtF,EAAe,uBACtCuF,EAAqBvF,EAAe,qBAEpCsE,EAAS,kBAA6B,cACtCpE,EAAc,kBAAkC,mBAChDsF,EAAa,mBACD,QAAhB,EAAAtF,EAAY9R,YAAI,eAAEqX,kBAAmB,eAA4BvF,EAAY9R,KAAKsX,aA4BpF,MAAO,CACLC,8BARCR,GACDC,GACAd,EAAOsB,cACP1F,EAAY0F,iBACM,QAAhB,EAAA1F,EAAY9R,YAAI,eAAEqX,kBAAmBD,EAAWI,cAKlDC,iBAAkB,CAChBC,YAAa,SACbC,kBA7BJ,SAA2BnG,SACzB,MAAM,WAAYA,EAUdiF,KAAmC,QAAhB,EAAA3E,EAAY9R,YAAI,eAAEqX,iBAChC,KAEF,qBAAqC7F,EAAMoG,OAAQ,CAAErB,IAAAA,IAZnD,IAaX,EAeIG,SAAAA,EACAmB,iBAAiB9Q,aAAM,EAANA,EAAQ+Q,OACzBjB,aAAAA,EACAD,aAAAA,EACAmB,YAAwB,QAAX,EAAA7B,EAAOlW,YAAI,eAAE+X,YAC1BX,WAAYA,EAAWpX,KACvBgY,yBAA0B,6BAC1BC,8BAA+B,kCAC/BC,2BAA4B,+BAC5BC,sBAAuBrB,EACvBsB,uBAAwB,KACxBlB,qBAAAA,EACAC,mBAAAA,GAGN,yECvFakB,EAA2B,WACtC,OAAwD,OAAgB,CAAEC,iBAAiB,IAAnFC,EAAkB,EAAlBA,mBAAoBC,EAAuB,EAAvBA,wBAEtBC,EAAeF,GAAsBC,IAO3C,OALkB,oBACdC,GACF,0BAAuCA,EAAarW,IAIxD,wGCqBA,SAASsW,EAAcrD,EAAKsD,EAAK3L,GAC/B,MAAM4L,GAAcvD,EAAMsD,IAAQ3L,EAAM2L,GAAO,IAC/C,OAAO5L,KAAKmI,MAjCU,IAiCJ0D,GAjCI,GAkCxB,CACA,SAASC,GAAkB,IACzBF,EAAG,IACHtD,EAAG,IACHrI,EAAG,MACH3G,EAAK,eACLyS,EAAc,QACdC,EAAO,SACPC,EAAQ,UACRja,EAAS,MACTka,EAAK,QACL7D,EAAO,SACP8D,KACGta,GACFua,GACD,OAAoB,SAAK,MAAO,CAC9BA,IAAKA,KACFva,EACH0V,KAAM,cACNvV,UAAW,IAAWA,EAAW,GAAGma,QAAgB,CAClD,CAAC,MAAM9D,KAAYA,EACnB,CAAC,GAAG8D,kBAA0BF,EAC9B,CAAC,GAAGE,iBAAyBF,GAAYD,IAE3CE,MAAO,CACLG,MAAO,GAAGV,EAAcrD,EAAKsD,EAAK3L,SAC/BiM,GAEL,gBAAiB5D,EACjB,gBAAiBsD,EACjB,gBAAiB3L,EACjB5M,SAAU0Y,GAA8B,SAAK,OAAQ,CACnD/Z,UAAW,kBACXqB,SAAUiG,IACPA,GAET,CACA,MAAMgT,EAA2B,aAAiB,EAChDC,WAAU,KACPC,GACFJ,KACD,MAAMva,EAAQ,CACZ+Z,IAAK,EACL3L,IAAK,IACLgM,UAAU,EACVF,gBAAgB,EAChBC,SAAS,KACNQ,GAGL,GADA3a,EAAMsa,UAAW,QAAmBta,EAAMsa,SAAU,YAChDI,EACF,OAAOT,EAAkBja,EAAOua,GAElC,MAAM,IACJR,EAAG,IACHtD,EAAG,IACHrI,EAAG,MACH3G,EAAK,eACLyS,EAAc,QACdC,EAAO,SACPC,EAAQ,SACRE,EAAQ,QACR9D,EAAO,UACPrW,EAAS,SACTqB,KACGoZ,GACD5a,EACJ,OAAoB,SAAK,MAAO,CAC9Bua,IAAKA,KACFK,EACHza,UAAW,IAAWA,EAAWma,GACjC9Y,SAAUA,GAAW,QAAIA,EAAUuL,IAAsB,IAAA8N,cAAa9N,EAAO,CAC3E2N,SAAS,KACLT,EAAkB,CACtBF,MACAtD,MACArI,MACA3G,QACAyS,iBACAC,UACAC,WACAE,WACA9D,WACC+D,OAGPE,EAAYK,YAAc,cAC1B","sources":["file:///app/packages/libs/shared/src/components/caret/Caret.tsx","file:///app/packages/libs/shared/src/components/caret/caret.scss","file:///app/packages/libs/shared/src/components/drag-drop-move/DragDropMoveContext.tsx","file:///app/packages/libs/shared/src/components/folder-list/FolderList.tsx","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/partial-folder-list.scss","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx","file:///app/packages/libs/shared/src/components/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.tsx","file:///app/packages/libs/shared/src/components/video-list/video-list-actions/VideoListActions.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseGetCollectionItems.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/utils/TreeHelper.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseFetchAllChildFolders.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useDragDropMove.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useUploadItems.ts","file:///app/packages/projects/lite/src/apps/upload/hooks/useGetUploadingItems.ts","file:///app/packages/projects/lite/src/apps/my-videos/utils/getFolderActions.tsx","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/MyVideosViewUtils.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/empty-state/MyVideosEmptyState.tsx","file:///app/packages/projects/lite/src/apps/sign-up/components/soft-gate-banner/GateBanner.tsx","file:///app/packages/projects/lite/src/apps/upload/components/uploading-item/UploadingItem.tsx","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/drag-drop-overlay.scss","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/DragDropOverlay.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-empty-state/HardGateEmptyState.tsx","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["import React from 'react';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './caret.scss';\n\ntype CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n\nconst getDirectionClass = (direction: CaretDirection) => {\n switch (direction) {\n case 'up':\n return styles.up;\n case 'down':\n return styles.down;\n case 'right':\n return styles.right;\n case 'left':\n return styles.left;\n }\n};\n\ninterface CaretProps {\n direction?: CaretDirection;\n className?: string;\n}\n\nCaret.defaultProps = {\n direction: 'right'\n};\n\nexport function Caret(props: CaretProps): JSX.Element {\n return (\n <SvgContainer\n svgName={cvSvgLibrary.Caret}\n className={`${getDirectionClass(props.direction)} svg-container d-inline-block ${props.className}`}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"up\":\"JAT0R\",\"down\":\"ld41u\",\"left\":\"jZTRR\",\"right\":\"HHkPe\"};","import React from 'react';\nimport {\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors } from '@dnd-kit/core';\nimport { snapCenterToCursor } from '@dnd-kit/modifiers';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Folder } from 'libs/shared/interfaces';\n\ninterface DragDropMoveContextProps extends React.PropsWithChildren {\n handleDragStart?: (event: DragStartEvent) => void;\n handleDragEnd?: (event: DragEndEvent, source: Folder) => void;\n source?: Folder;\n dragOverlayComponent: (active: string | string[] | HashObject | HashObject[]) => JSX.Element\n}\n\nexport function DragDropMoveContext(props: DragDropMoveContextProps) {\n const [ activeDragData, setActiveDragData ] = React.useState<string | string[] | HashObject | HashObject[]>(null);\n const { dragOverlayComponent: DragOverlayComponent } = props;\n \n function handleDragEnd(event: DragEndEvent) {\n setActiveDragData(null);\n\n props.handleDragEnd(event, props.source);\n }\n \n function handleDragStart(event: DragStartEvent) {\n setActiveDragData(event.active.data.current);\n props.handleDragStart?.(event);\n }\n \n const mouseSensor = useSensor(PointerSensor, {\n activationConstraint: {\n distance: 10\n }\n });\n \n const sensors = useSensors(mouseSensor);\n \n return (\n <DndContext\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n sensors={sensors}\n collisionDetection={pointerWithin}\n >\n {props.children}\n\n <DragOverlay dropAnimation={null} modifiers={[snapCenterToCursor]} zIndex={1050}>\n {activeDragData ? (\n <DragOverlayComponent activeDragData={activeDragData} />\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolder(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolder}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolder} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFolderHeading\":\"dhbsL\",\"partialFolderThumbnail\":\"CI9vk\",\"partialFolderName\":\"l0Nll\"};","import React from 'react';\n\nimport styles from './partial-folder-list.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n \n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number; }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}> </div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"ownerLogo\":\"g3JFo\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, EntityType, HashObject, UserAction } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n showOwnerLogo?: boolean;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const owner = props.folder?.libraries?.data?.[0]?.owner;\n const ownerLogoUrl = props.showOwnerLogo && !!owner?.logo?.url\n ? UrlHelper.urlBuilder(owner.logo.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n const analyticsData = props.analyticsData ? {\n id: props.folder.id.toString(),\n name: props.folder.name,\n ...props.analyticsData\n } : undefined;\n\n const analyticsOptions = props.analyticsOptions ? {\n actionType: UserAction.Click,\n entity: EntityType.Folder,\n\n ...props.analyticsOptions\n } : undefined;\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n {!!ownerLogoUrl &&\n <img src={ownerLogoUrl} className={`rounded-circle ${styles.ownerLogo}`} alt={`${owner?.name} logo`} title={owner?.name || ''} />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\n\nconst namespace = 'shared.videoListActions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoListActionsProps {\n allowBulkAction?: boolean;\n allowFilter?: boolean;\n checkboxHelper?: BulkCheckboxManager;\n getVideosBulkAction?: (selected: string[]) => ActionOptions[]\n getAppLink: () => Core.AppLink;\n typeFilter: SearchIndices[];\n locationContext?: LocationContext;\n isVideosLoading?: boolean;\n}\n\nexport function VideoListActions(props: VideoListActionsProps) {\n const { checkboxHelper: CheckboxHelper } = props;\n\n const [ actions, setActions ] = React.useState<ActionOptions[]>([]);\n\n function getVideosBulkActions() {\n setActions(props.getVideosBulkAction?.(CheckboxHelper.getSelected()));\n }\n\n function handleVideoAction(action: ActionOptions) {\n Core.AppLinkHelper.trigger(action.appLink);\n\n AnalyticsHelper.logUserAction(action.analyticsData, action.analyticsOptions);\n }\n\n return (\n <>\n <div className='d-flex align-items-center mb-3'>\n {props.allowBulkAction && (\n <>\n <Checkbox\n id='my-videos'\n name='my-videos'\n className='me-0 me-md-2'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n <div className='btn-group drop-right px-2 ps-sm-0 ps-md-2'>\n <button\n onClick={getVideosBulkActions}\n className={`btn btn-outline-dark dropdown-toggle ${CheckboxHelper.hasSomeSelections() ? '' : 'disabled'}`}\n id='my-videos-action'\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={getPhrase('ariaOptions')}\n >\n <Text namespace={namespace} phrase='options' />\n </button>\n <div\n className='dropdown-menu dropdown-menu-end dropdown-menu-right'\n aria-labelledby='my-videos-action'\n >\n {actions.length && (\n actions.map(action => {\n return (\n <button\n key={action.label as string}\n className={`dropdown-item ${action.className}`}\n onClick={() => handleVideoAction(action)}\n >\n {action.label as string}\n </button>\n );\n })\n )}\n </div>\n </div>\n </>\n )}\n {props.allowFilter && (\n <div className='border-start'>\n <TypeButton type='video' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='interactive' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='clip' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n </div>\n )}\n </div>\n </>\n );\n}\n\ninterface TypeButtonProps {\n type: SearchIndices;\n typeFilter: SearchIndices[];\n appLink: Core.AppLink;\n}\n\nfunction TypeButton(props: TypeButtonProps): JSX.Element {\n const selected = props.typeFilter.includes(props.type);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n let newType: SearchIndices[];\n\n if (selected)\n newType = props.typeFilter.filter(t => t !== props.type);\n else\n newType = [ ...props.typeFilter, props.type ];\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n type: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.type === 'video') return 'videos';\n if (props.type === 'clip') return 'clips';\n if (props.type === 'interactive') return 'interactives';\n }\n\n return (\n <AppLink\n className={`ms-2 btn ${selected ? 'btn-dark' : 'btn-outline-dark'}`}\n appLink={newAppLink}\n ariaLabel={`${getPhrase('ariaFilterBy')}: ${getPhrase(getTypePhrase())}`}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\n/**\n * Hook used to listen to updates on a Backbone Collection\n * and trigger a re-render.\n */\nexport function useGetCollectionItems<T>(\n getCollection: () => Core.Collection,\n onRemove?: () => void,\n dependencies: React.DependencyList = []\n): T[] {\n const [ , setUpdate ] = React.useState(false);\n\n React.useEffect(() => {\n const collection = getCollection();\n\n if (!collection)\n return;\n\n collection.off('add remove change');\n collection.on('add remove change', () => {\n setUpdate(s => !s);\n });\n if (onRemove)\n collection.on('remove', onRemove);\n return () => { collection.off('add remove change'); };\n }, dependencies);\n\n return getCollection()?.toJSON();\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult, useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport function useFetchAllChildFolders(parentId?: string): SelectAllPagesResult<Folder> {\n const fetch = Flight.useGetFetch();\n\n function getRequest(cursor?: string): Flight.Request {\n return LibraryRequests.childFolders(parentId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetch(getRequest(cursor));\n }\n\n useFetchAll(!!parentId && getRequest, !!parentId && fetchNext);\n\n return (useSelectAllPages<Folder>(!!parentId && ((cursor?: string) => getRequest(cursor).key)));\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';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\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: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { BaseTree, Folder, Library, LibraryTree, VideoTypes } from 'libs/shared/interfaces';\nimport { DEFAULT_MAX_DEPTH, TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\n\nconst namespace = 'myVideos.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useDragDropMove() {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const categoriesRequest = MyVideosRequests.workspaceWithCategories();\n const workspaceFolders = Flight.useGetResponse<LibraryTree[]>(categoriesRequest.key);\n\n async function handleDragEnd(event: DragEndEvent, source: Folder) {\n const dragged = event.active?.data.current;\n const destination = event.over?.data.current;\n\n if (!destination || dragged.id === destination.id) return;\n \n if (dragged.typeId === MasterType.Category) {\n moveFolders(dragged, destination);\n return;\n }\n\n moveVideos(dragged, destination, source);\n }\n\n async function moveFolders(dragged: Folder, destination: Folder) {\n let folders = workspaceFolders.data;\n\n if (workspaceFolders.shouldFetch)\n folders = await fetchAsync(categoriesRequest);\n\n if (TreeHelper.isMaxDepth(folders, dragged.id, destination.id)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MAX_FOLDER_DEPTH,\n args: [DEFAULT_MAX_DEPTH]\n });\n return;\n }\n\n const rootBranches: BaseTree<Library> = {\n children: folders.map(TreeHelper.convertNestedObjectToTree)\n };\n\n const parent = TreeHelper.getParent(rootBranches, dragged.id);\n\n try {\n await fetchAsync(MyVideosRequests.moveFolder({\n moveFolderId: dragged.id,\n newFolderId: destination.id,\n oldFolderId: parent?.id\n }));\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveFolderSuccessHeading'),\n message: getPhrase('moveFolderSuccess', { folder: dragged.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-info'\n });\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n async function moveVideos(dragged: VideoTypes | string[], destination: Folder, source: Folder) {\n try {\n await fetchAsync(MyVideosRequests.moveVideo({\n newFolderId: destination.id,\n oldFolderId: source.id,\n videoId: Array.isArray(dragged) ? dragged : [dragged.id]\n }));\n if (Array.isArray(dragged)) {\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveVideosSucccessHeading'),\n message: getPhrase(\n 'moveVideosSuccess',\n { count: dragged.length, fromFolder: source.name, toFolder: destination.name, escapeText: true }\n ),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-info'\n });\n } else {\n alerts.success(\n {\n type: AlertType.Success,\n heading: getPhrase('moveVideoSucccessHeading'),\n message: getPhrase('moveVideoSuccess', { video: dragged.name, fromFolder: source.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-info'\n }\n );\n }\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n return {\n handleDragEnd\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { Services } from 'shared/constants/Services';\n\nimport { useGetUploadingItems } from 'apps/upload/hooks/useGetUploadingItems';\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload, CombineUploadsService } from 'apps/upload/services/CombineUploadsService';\n\ninterface UseDisplayUploadsOptions {\n onRemove?: () => void;\n categoryId?: number;\n}\n\nexport function useUploadItems(options?: UseDisplayUploadsOptions) {\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const canUpload = hasPermissions(PermissionName.UploadVideo);\n\n /**\n * Get reference to the combined service even though useGetUploadingItems does it too\n * so that we can provide the callbacks\n */\n const combinedUploadService = useInstanceSafe<CombineUploadsService>(\n canUpload &&\n Services.CombineUploads\n );\n\n /**\n * Only allow callback to fetch if all required user data is loaded\n */\n let uploadingVideos = useGetUploadingItems(canUpload, () => {\n currentUser.data && options?.onRemove?.();\n }, [currentUser.data]);\n\n uploadingVideos = uploadingVideos?.filter(video => {\n if (!options?.categoryId)\n return !video.categoryId;\n\n return video.categoryId === options?.categoryId;\n });\n\n /**\n * Using React.useCallback because this component will render\n * every time a chunk is loaded and every time the pending items\n * is fetched\n */\n const onClickDelete = React.useCallback((item: CombinedUpload) => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.UPLOAD,\n action: Actions.Upload.CANCEL_UPLOAD,\n args: [item.id],\n params: {\n name: item.name,\n status: item.status\n }\n });\n }, []);\n\n const onClickAlternate = React.useCallback((item: CombinedUpload) => {\n switch (item.status) {\n case CombinedUploadStatus.Errored:\n /**\n * We don't want to retry the upload if it errored and doesn't have a pending process id.\n * This can occur where the /complete call fails.\n */\n if (!item.pendingProcessId)\n return;\n\n combinedUploadService.retryItem(item);\n return;\n case CombinedUploadStatus.Processing:\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [item.videoId]\n });\n return;\n case CombinedUploadStatus.Uploading:\n combinedUploadService.editUpload(item);\n return;\n default:\n // This should never happen\n }\n }, []);\n\n const processingIds = uploadingVideos?.reduce((prev: any, current) => {\n prev[current.videoId] = true;\n return prev;\n }, {});\n\n return {\n uploadingVideos,\n onClickAlternate,\n onClickDelete,\n processingIds\n };\n}","import React from 'react';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { useGetCollectionItems } from 'libs/shared/hooks/UseGetCollectionItems';\n\nimport { CombinedUpload, CombineUploadsService } from '../services/CombineUploadsService';\n\nexport function useGetUploadingItems(\n canUpload: boolean,\n onRemove: () => void,\n dependencies: React.DependencyList\n): CombinedUpload[] {\n const combineUploadsService = useInstanceSafe<CombineUploadsService>(canUpload && 'combine:uploads:service');\n\n const getCollection = () => canUpload ? combineUploadsService?.getCollection() : null;\n\n const collection: CombinedUpload[] | null = useGetCollectionItems(getCollection, onRemove, dependencies);\n\n return collection || [];\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Folder } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myVideos.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * This is a hook, just to make modifying this function to fetch data easier in the future.\n * It also adheres to the paradigm we have with all our video actions - Sha\n */\nexport function useGetFolderActions(): (location: 'folder' | 'page', folder: Folder) => ActionOptions[] {\n return (location, folder) => {\n const analyticsData = { id: folder.id, name: folder.name };\n const analyticsOptions = {\n entity: EntityType.Folder,\n location: location === 'folder' ? LocationContext.SubFolderList : LocationContext.MyVideos,\n workflowPhase: WorkflowPhase.Start\n };\n\n return [\n {\n label: getPhrase('addSubfolder'),\n button: location === 'page',\n className: location === 'page' ? 'btn btn-outline-dark me-2' : undefined,\n svgName: location === 'page' ? cvSvgLibrary.Plus : undefined,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Create\n }\n },\n {\n label: getPhrase('moveFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Move\n }\n },\n {\n label: getPhrase('renameFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.RENAME_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Rename\n }\n },\n {\n label: getPhrase('removeFolder'),\n className: 'text-danger',\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.DELETE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Delete\n }\n }\n ];\n };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoActionsOptions } from 'libs/shared/context/VideoActionsContext';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { AnalyticsTypeHelper } from 'libs/shared/utils/AnalyticsTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\n\nconst namespace = 'default.myVideos';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getMovePhrase(video: VideoTypes): string {\n if (VideoHelper.isInteractive(video))\n return getPhrase('moveInteractive');\n\n if (VideoHelper.isClip(video))\n return getPhrase('moveClip');\n\n return getPhrase('moveVideo');\n}\n\nexport function useMyVideosViewBulkActions(\n libraryId: string,\n categoryId: string\n): (videoIds: string[]) => ActionOptions[] {\n return (videoIds: string[]) => {\n return [{\n label: getPhrase('moveVideo'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: videoIds }\n },\n analyticsData: {\n ids: videoIds\n },\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n label: getPhrase('delete'),\n button: false,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: videoIds, libraryId, categoryId }\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoList,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: { ids: videoIds }\n }];\n };\n}\n\nexport function useMyVideosViewActions() {\n const { myVideosFolders } = useSettings(null);\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const getVideoActions = (video: VideoTypes, options?: VideoActionsOptions) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(video);\n\n /**\n * Where a user has a video they can no longer be access, we will allow them to remove it.\n */\n if (!canConsume) {\n return [{\n label: getPhrase('delete'),\n button: false,\n svgName: cvSvgLibrary.Delete,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: [video.id]}\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n id: video.id\n }\n }];\n }\n\n const actions = videoActions.getVideoActions(video, options);\n\n if (myVideosFolders) {\n actions.push({\n order: 67,\n label: getMovePhrase(video),\n svgName: cvSvgLibrary.Move,\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: [video.id]}\n },\n analyticsData: {\n id: video.id\n },\n analyticsOptions: {\n entity: AnalyticsTypeHelper.mapTypeId(video.typeId),\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n });\n }\n\n return actions;\n };\n\n return {\n ...videoActions,\n getVideoActions\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'default.myVideosEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MyVideosEmptyStateProps {\n canUpload: boolean;\n}\n\nexport function MyVideosEmptyState({ canUpload }: MyVideosEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS} altText={getPhrase('info')} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n {canUpload && <EmptyState.Info><Text phrase='uploadInfo' /></EmptyState.Info>}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function MyVideosPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('publicInfo')} />\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MyVideoLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'signUp.gateBanner';\n\nexport function GateBanner(): JSX.Element {\n return (\n <div role='alert' className='bg-light-indigo text-indigo rounded p-2 mb-4 d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Large} />\n <Text namespace={namespace} phrase='softGate' /> \n <AppLink\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n className='indigo-link text-indigo text-underline d-inline'\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedBanner,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n >\n <Text namespace={namespace} phrase='learnMore' />\n </AppLink>\n </div>\n );\n}","import * as React from 'react';\nimport { Col, ProgressBar, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\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 { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload } from 'apps/upload/services/CombineUploadsService';\n\nconst namespace = 'upload.uploadingItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(status: CombinedUploadStatus): string {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'text-success';\n case CombinedUploadStatus.Processing:\n return 'text-info';\n case CombinedUploadStatus.Errored:\n return 'text-danger';\n }\n}\n\nfunction getVariant(status: CombinedUploadStatus): 'success' | 'info' | 'danger' {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'success';\n case CombinedUploadStatus.Processing:\n return 'info';\n case CombinedUploadStatus.Errored:\n return 'danger';\n }\n}\n\ninterface GetProgressTextOptions {\n status: CombinedUploadStatus;\n progress: number;\n foregroundComplete: boolean;\n hasPendingProcessId: boolean;\n}\n\nfunction getProgressText(options: GetProgressTextOptions): string | JSX.Element {\n const { status, progress, foregroundComplete, hasPendingProcessId } = options;\n\n const rounded = Math.round(progress) || 0;\n\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return `${getPhrase('uploading')} ${rounded}%`;\n\n case CombinedUploadStatus.Processing:\n if (rounded === 0)\n return <em>{getPhrase('waitingToBeProcessed')}</em>;\n\n if (foregroundComplete)\n return <em>{getPhrase('readyToWatch')}</em>;\n\n return <em>{getPhrase('processing')} {rounded}%</em>;\n\n case CombinedUploadStatus.Errored:\n if (!hasPendingProcessId)\n return <em>{getPhrase('uploadingError')}</em>;\n\n return getPhrase('error');\n }\n}\n\ninterface UploadingItemProps {\n item: CombinedUpload;\n allowBulkAction?: boolean;\n onClickDelete: (item: CombinedUpload) => void;\n onClickAlternate: (item: CombinedUpload) => void;\n categoryId: string;\n}\n\nexport function UploadingItem(props: UploadingItemProps): JSX.Element {\n const { status, progress, name, foregroundComplete, pendingProcessId } = props.item;\n\n const breakpoints = useBreakpoints();\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n /**\n * We're using React.useCallback here because this view\n * will get re-rendered many times by it's parent during\n * an upload\n */\n const onClickAlternate = React.useCallback(() => {\n props.onClickAlternate(props.item);\n }, [props.item.status]);\n\n const onClickDelete = React.useCallback(() => {\n props.onClickDelete(props.item);\n }, []);\n\n let appLink: Core.AppLink = null;\n if (props.item.video?.status === CurationStatus.Published) {\n appLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.item.videoId, TextHelper.slugify(props.item.video.name) ]\n };\n }\n \n // If the upload errors before processing has started, the user's only option is to remove the video \n const canOnlyDelete = status === CombinedUploadStatus.Errored && pendingProcessId === undefined;\n \n return (\n <div className='d-flex flex-row'>\n {props.allowBulkAction && <div className='form-check pe-2 mx-2' />}\n <Row className={`${isSmall ? '' : 'py-2'} g-0 flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <div className={`position-relative overflow-hidden ${isSmall ? 'rounded' : 'rounded-3'}`}>\n <AppLink appLink={appLink}>\n <BaseImage\n data={props.item.thumbnailUrl ?? ''}\n imageType={ImageType.Thumbnails}\n imageOptions={{ size: ImageSize.Medium }}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n </BaseImage>\n </AppLink>\n </div>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <AppLink appLink={appLink}>\n <h5 className='m-0 pb-1'>{name}</h5>\n </AppLink>\n <span className={getClassName(status)}>\n {getProgressText({ status, progress, foregroundComplete, hasPendingProcessId: !!pendingProcessId })}\n </span>\n <div className='d-flex'>\n <ProgressBar className='flex-grow-1 align-self-center' variant={getVariant(status)} now={progress} />\n {canOnlyDelete ? (\n <>\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={cvSvgLibrary.Delete}\n onClick={onClickDelete}\n />\n </>\n ) : (\n <>\n <AppLink\n appLink={{\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.ADD_UPLOAD_TO_PLAYLIST,\n args: [ props.item.uploadId, props.categoryId ]\n }}\n >\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={cvSvgLibrary.AddToPlaylists}\n />\n </AppLink>\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={status === CombinedUploadStatus.Errored ? cvSvgLibrary.Retry : cvSvgLibrary.Edit}\n onClick={onClickAlternate}\n />\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={cvSvgLibrary.Delete}\n onClick={onClickDelete}\n />\n </>\n )}\n </div>\n </Col>\n </Row>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"ry0mg\",\"dragThumbnail\":\"soAvD\"};","import React from 'react';\n\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Folder, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './drag-drop-overlay.scss';\n\nconst namespace = 'shared.dragDropOverlay';\n\ninterface DragDropMoveOverlayProps {\n activeDragData: Folder | VideoTypes | string[];\n}\n\nexport function DragDropOverlay(props: DragDropMoveOverlayProps) {\n const { activeDragData } = props;\n\n return (\n <div className={`${styles.dragOverlay} position-relative`}>\n <div className='position-absolute top-0 start-50 ms-n2 bg-white shadow p-2 rounded-3 font-size-md mw-100'>\n {Array.isArray(activeDragData) ? (\n <div className='d-flex fw-semibold'>\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Video} />\n </div>\n <Text namespace={namespace} phrase='bulkVideos' options={{ length: activeDragData.length }} />\n </div>\n ) : (\n <div className='d-flex'>\n {activeDragData.typeId === MasterType.Category ? (\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Folder} />\n </div>\n ) : (\n <LazyImage\n src={VideoHelper.getThumbnail(activeDragData)?.url}\n alt={activeDragData.name}\n className={`${styles.dragThumbnail} partial-loading-background rounded me-2`}\n />\n )}\n <span className='fw-semibold text-truncate'>{activeDragData.name}</span>\n </div>\n )}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGateEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'insights' | 'my-videos' | 'playlists' | 'clip';\n\ninterface FeatureConfig {\n headingPhrase: string;\n descriptionPhrase: string;\n ctaPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'insights': {\n headingPhrase: 'insightsHeading',\n descriptionPhrase: 'insightsDescription',\n ctaPhrase: 'insightsCta',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'my-videos': {\n headingPhrase: 'myVideosHeading',\n descriptionPhrase: 'myVideosDescription',\n ctaPhrase: 'myVideosCta',\n imageUrl: ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC\n },\n 'playlists': {\n headingPhrase: 'playlistsHeading',\n descriptionPhrase: 'playlistsDescription',\n ctaPhrase: 'playlistsCta',\n imageUrl: ImageUrls.EmptyStates.Playlists.PLAYLISTS_PUBLIC\n },\n 'clip': {\n headingPhrase: 'clipHeading',\n descriptionPhrase: 'clipDescription',\n ctaPhrase: 'clipCta',\n imageUrl: ImageUrls.ReverseTrial.CLIP\n }\n};\n\ninterface HardGateEmptyStateProps {\n feature: Feature;\n extraCta?: React.ReactNode;\n}\n\nexport function HardGateEmptyState(props: HardGateEmptyStateProps) {\n const config = featureConfigMap[props.feature];\n\n return (\n <EmptyState>\n <EmptyState.Image src={config.imageUrl} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info className='w-75'>\n <Text namespace={namespace} phrase={config.descriptionPhrase} /> \n </EmptyState.Info>\n <EmptyState.Cta\n text={getPhrase(config.ctaPhrase)}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedEmptyState,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n className='btn btn-dark mb-3'\n />\n {props.extraCta}\n </EmptyState>\n );\n}\n\n","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n const hasGuestExperience = hasPermissions(PermissionName.GuestExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience,\n hasGuestExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;"],"names":["getDirectionClass","direction","Caret","props","SvgContainer","svgName","className","defaultProps","DragDropMoveContext","activeDragData","setActiveDragData","DragOverlayComponent","dragOverlayComponent","mouseSensor","activationConstraint","distance","sensors","onDragEnd","event","handleDragEnd","source","onDragStart","active","data","current","handleDragStart","collisionDetection","children","dropAnimation","modifiers","zIndex","namespace","EXPANDED_FOLDERS_KEY","FolderList","breakpoints","_hasExpandedFolders","setHasExpandedFolders","hasExpandedFolders","expandFolders","folderLimit","xxl","xl","lg","md","onToggleFolder","displayableFolders","folders","slice","canToggleCollapsedView","length","showHeading","onClick","phrase","options","count","extraButtons","map","f","key","id","folder","getAppLink","getFolderActions","drag","drop","PartialFolder","PartialFolderList","Array","fill","_","i","LibraryFolder","thumbnailUrl","thumbnail","UrlHelper","url","size","owner","libraries","ownerLogoUrl","showOwnerLogo","logo","actions","analyticsData","toString","name","undefined","analyticsOptions","actionType","entity","DragDropMoveWrapper","draggable","droppable","dropStye","dragStyle","AppLink","appLink","title","BaseImage","imageType","imageClassName","ImageFallback","type","extraClasses","Actions","actionsDropdownClassName","dropdownToggleSvgSize","src","alt","getPhrase","VideoListActions","CheckboxHelper","checkboxHelper","setActions","allowBulkAction","checked","bulkChecked","onChange","onToggleBulk","indeterminate","hasSomeSelections","getVideosBulkAction","getSelected","action","label","handleVideoAction","allowFilter","TypeButton","typeFilter","newType","selected","includes","currentAppLink","currentParams","params","filter","t","newAppLink","getTypePhrase","ariaLabel","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","useGetCollectionItems","getCollection","onRemove","dependencies","setUpdate","collection","off","on","s","toJSON","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","useBulkCheckboxManager","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","item","get","isBulkChecked","every","setSelected","ids","set","preselectedIds","setValue","onToggleItem","nextItemState","from","keys","deselectAll","find","getSelectedCount","getMap","_find","node","parents","child","foundParents","DEFAULT_MAX_DEPTH","TreeHelper","tree","j","getPath","path","getParent","convertNestedObjectToTree","nestedObject","findDepth","nodes","targetId","currentDepth","depth","childDepth","findMaxChildDepth","deepestLevel","childLevel","Math","max","findTargetNode","result","isMaxDepth","sourceId","maxDepth","sourceTree","flatten","pushNode","push","useFetchAllChildFolders","parentId","fetch","getRequest","cursor","MyVideosRequests","videos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","permissionFilterOption","workspaceWithCategories","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","collectionId","parentCategoryId","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","useDragDropMove","alerts","fetchAsync","categoriesRequest","workspaceFolders","moveFolders","dragged","destination","shouldFetch","application","args","rootBranches","parent","success","heading","message","toFolder","escapeText","appLinkText","appLinkClassName","error","moveVideos","fromFolder","video","over","typeId","useUploadItems","hasPermissions","usePermissions","currentUser","UserRequests","canUpload","PermissionName","combinedUploadService","Services","uploadingVideos","combineUploadsService","useGetUploadingItems","categoryId","onClickDelete","onClickAlternate","pendingProcessId","retryItem","editUpload","processingIds","reduce","prev","useGetFolderActions","location","workflowPhase","button","getMovePhrase","useMyVideosViewBulkActions","videoIds","useMyVideosViewActions","myVideosFolders","videoActions","getVideoActions","canConsume","order","group","MyVideosEmptyState","value","altText","MyVideosPublicEmptyState","text","descriptor","SignUp","GateBanner","role","S","getClassName","getVariant","UploadingItem","progress","foregroundComplete","isSmall","canOnlyDelete","imageOptions","hasPendingProcessId","rounded","round","getProgressText","variant","now","uploadId","DragDropOverlay","Text","MasterType","LazyImage","VideoHelper","featureConfigMap","headingPhrase","descriptionPhrase","ctaPhrase","imageUrl","HardGateEmptyState","config","feature","extraCta","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasLoadedPermissions","isLoaded","hasStudentExperience","hasGuestExperience","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","hasCompleted","commonVideoProps","subTextType","getSubTextAppLink","series","isPluginPopup","popup","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","getPercentage","min","percentage","renderProgressBar","visuallyHidden","striped","animated","style","bsPrefix","ref","width","ProgressBar","isChild","rest","wrapperProps","cloneElement","displayName"],"sourceRoot":""}
|