@clickview/lite 0.82.2 → 0.83.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
- package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
- package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
- package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
- package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
- package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
- package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
- package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
- package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
- package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
- package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
- package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
- package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
- package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
- package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
- package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
- package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
- package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
- package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
- package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
- package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
- package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
- package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
- package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
- package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
- package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
- package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
- package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
- package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
- package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
- package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
- package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
- package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
- package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
- package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
- package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
- package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
- package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
- package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
- package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
- package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
- package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
- package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
- package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
- package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
- package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
- package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
- package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
- package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
- package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
- package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
- package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
- package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
- package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-f926852f33.min.js +3 -0
- package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
- package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
- package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
- package/dist/scripts/1336-1826f6e582-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/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
- package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
- package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
- package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
- package/dist/scripts/289-669c0c8222-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/4177-285ddf9ae3-lite.chunk.js.map +0 -1
- package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
- package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
- package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
- package/dist/scripts/4806-f36469abb7-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/5554-17bb3b86fc-lite.chunk.js.map +0 -1
- package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
- package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
- package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
- package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
- package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
- package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
- package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
- package/dist/scripts/7401-98135f09e8-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 +0 -2
- package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
- package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
- package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
- package/dist/scripts/8077-9fdb522d7e-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/8672-6967ce8a23-lite.chunk.js +0 -2
- package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
- package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
- package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
- package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
- package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
- package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
- package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
- package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
- /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
- /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
- /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
- /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
- /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
- /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
- /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
- /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
- /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8364-ff63447d36-lite.chunk.js","mappings":";mJAEM,SAAUA,IACd,OACE,uBAAKC,QAAQ,aACX,wBAAMC,EAAE,oSAGd,KCIaC,EAAiB,aAAiB,SAC7CC,EACAC,GAEA,IAAQC,EAAiEF,EAAjEE,aAAcC,EAAmDH,EAAnDG,gBAAiBC,EAAkCJ,EAAlCI,eAAmBC,2UAAU,CAAKL,EAAnE,qDAEN,OACE,uBAAKM,UAAU,qBACb,yCACMD,EAAU,CACdJ,IAAKA,EACLK,UAAS,UAAKN,EAAMM,UAAS,YCtBiB,eDwB5CN,EAAMO,OAASJ,IACjB,wBACEG,UAAS,UC1BU,QD0BY,4DAAoDF,GAAkB,IACrGI,KAAK,SACLC,QAASP,EACTQ,UAAW,SAACC,GAAsB,MAAe,UAAVA,EAAEC,KAAmBV,GAAc,EAC1EW,SAAU,GAEV,uBAAKP,UAAU,mCACb,gBAACV,EAAS,QAMtB,mIEvCA,SAAgB,OAAS,QAAQ,QAAU,QAAQ,eAAiB,+GCYpE,IACMkB,EAAYC,EAAA,mBADA,oBAqBZ,SAAUC,EAAUhB,GACxB,QAAqG,KAA7C,WAAeA,EAAMiB,iBAAkB,KAAM,s4BAA7FC,EAAmB,KAAEC,EAAsB,KAEnD,SAASC,IACPC,WAAW,kBAAMF,GAAuB,EAAM,EAAE,IAClD,CAEA,SAASG,IACHtB,EAAMsB,QACRtB,EAAMsB,SAEJJ,IAGJC,GAAuB,GACvBC,IACF,CAEA,YAAgB,WACTpB,EAAMiB,gBAGXG,GACF,EAAG,CAACpB,EAAMiB,iBA2CV,IAAMM,EACJ,uBAAKjB,UAA6B,cAAlBN,EAAMwB,QAA0B,gDAAkD,eAC/FxB,EAAMyB,SACH,4BACAnB,WAAW,OAAW,oCAAqCN,EAAM0B,YAAc,kBAC/EC,YAAY,EACZpB,MAAOP,EAAMO,MACbqB,KAAM,EACNC,UAAQ,IAER,yBACAC,KAAK,OACLC,aAAa,MACbzB,WAAW,OACT,eACkB,WAAlBN,EAAMwB,SAAwBxB,EAAMwB,SAEtCG,YAAY,EACZpB,MAAOP,EAAMO,MACbsB,UAAQ,IAIZ,gBAhEJ,WACE,MAAsB,cAAlB7B,EAAMwB,QAEN,gBAAC,EAAAQ,gBAAe,CAACC,KAAMjC,EAAMO,MAAOe,OAAQA,GAC1C,gBAACY,EAAA,EAAU,CACT1B,KAAMU,EAAsB,SAAW,GACvCiB,QAASjB,EAAsB,WAAqB,UACpDZ,WAAW,OACT,UACA,uBACAY,EAAsB,yBAA2B,oCACjDlB,EAAMoC,wBAGPlB,EACClB,EAAMqC,YAAcvB,EAAU,cAC9Bd,EAAMsC,UAAYxB,EAAU,UAQpC,gBAAC,EAAAkB,gBAAe,CAACC,KAAMjC,EAAMO,MAAOe,OAAQA,GAC1C,0BACEd,KAAMU,EAAsB,SAAW,GACvCZ,WAAW,OACT,gEACAN,EAAMoC,wBAGPlB,EACClB,EAAMqC,YAAcvB,EAAU,UAC9Bd,EAAMsC,UAAYxB,EAAU,SAKtC,EAyBW,OAIX,OAAId,EAAMuC,MAEN,gBAACC,EAAA,QAAU,CAAClC,UAAU,cACpB,gBAACkC,EAAA,QAAU,KAAExC,EAAMuC,OAClBhB,GAKAA,CACT,CA3GAP,EAAUyB,aAAe,CACvBjB,QAAS,0ICXX,SAASkB,EAAY1C,GACnB,OACE,kCACKA,EAAM2C,IAAIR,SACX,uBAAK7B,UAAWN,EAAM2C,IAAIC,KAAO,OAAS,IACxC,gBAAC,IAAY,CAACT,QAASnC,EAAM2C,IAAIR,WAIpCnC,EAAM2C,IAAIC,KAEmB,iBAArB5C,EAAM2C,IAAIE,OACjB,uBAAKvC,UAAU,QACb,gBAAC,IAAK,CAACwB,KAAM,UAAiBgB,KAAM9C,EAAM2C,IAAIE,SAKxD,CA8BM,SAAUE,EAAgB/C,SAW9B,OACE,uBAAKM,UAA0B,QAAf,EAAAN,EAAMM,iBAAS,QAAI,GAAIL,IAAKD,EAAMgD,cAChD,sBAAI1C,UAAS,qDACwB,oBAAsB,qBACvDN,EAAMiD,aAAe,gBAAqB,GAAE,qBAC5CjD,EAAMkD,cAAa,aAEpBlD,EAAMmD,KAAKC,IAAI,SAACT,EAAKU,GACpB,OACE,sBACE/C,UAAS,gCACD,QAAU,YAAIqC,EAAIW,OAAS,eAAiB,uBAAsB,6BACtEX,EAAIC,KAAO,aAAkB,GAAE,YAAID,EAAIrC,UAAS,oBAEpDM,IAAKyC,GAEJV,EAAIY,QACH,gBAAC,IAAO,CACNA,QAASZ,EAAIY,QACbC,cAAeb,EAAIa,cACnBC,iBAAkBd,EAAIc,iBACtBnD,UAAS,sKAE4C,YAAc,yBAGnE,gBAACoC,EAAW,CAACC,IAAKA,KAGpB,gBAAC,IAAS,CACRrC,UAAS,sKAE4C,YAAc,wBAEnEG,QAAS,WAAF,OA5CvB,SAAqBkC,IACfA,EAAIW,QAAWX,EAAIe,WAGvBf,EAAIe,WAEAf,EAAIa,eAAiBb,EAAIc,kBAC3B,kBAA8Bd,EAAIa,cAAeb,EAAIc,kBACzD,CAoC+BE,CAAYhB,EAAI,GAE/B,gBAACD,EAAW,CAACC,IAAKA,KAK5B,IAIR,CA5DAI,EAAgBN,aAAe,CAC7BQ,aAAc,sPC5DHW,EAA0B,CACrCC,OAAM,SACJf,GAEA,MAAO,CACLgB,IAAK,6BACLlD,IAAK,oBACLmD,WAAW,EACXjC,KAAMkC,EAAA,OACNlB,KAAAA,EACAmB,iBAAkB,CAAC,WAEvB,EAEAC,aAAY,WACV,MAAO,CACLtD,IAAK,UACLkD,IAAK,mDACLC,WAAW,EAEf,EAEAI,aAAY,SAACC,GACX,MAAO,CACLxD,IAAK,iBACLkD,IAAK,8BAAF,OAAgCM,GACnCtC,KAAMkC,EAAA,SACND,WAAW,EACXE,iBAAkB,CAAC,WAEvB,EAEAI,aAAY,SAACD,GACX,MAAO,CACLxD,IAAK,WAAF,OAAawD,EAAE,WAClBN,IAAK,uCAAF,OAAyCM,GAC5CtC,KAAMkC,EAAA,OACND,WAAW,EAEf,EAEAO,iBAAgB,WACd,MAAO,CACL1D,IAAK,iBACLkD,IAAK,mCACLhC,KAAMkC,EAAA,OACND,WAAW,EACXE,iBAAkB,CAAC,WAEvB,iuBC/CF,IAAMM,EAA6D,CACjE,eAAgB,aAChB,gBAAiB,gBAIbzD,EAAYC,EAAA,mBADA,kBAGLyD,EAAmB,CAC9BC,kBAAiB,SACfpB,EACAqB,EACAC,EACAC,GAGA,IAAMC,EAAcC,KAAKD,YAAYH,GAGrC,IAAKG,EAAYE,OACf,OAAOD,KAAKE,YAAY3B,EAAOqB,EAAaC,GAE9C,IAAMM,EAAiBJ,EAAYA,EAAYE,OAAS,GAGlDG,IACJ7B,IAAUwB,EAAYE,OAAS,IAC9BF,EAAYxB,GAAOP,KAAKqC,UAAUJ,SAAUF,EAAYxB,GAAOP,KAAKsC,MAAML,QAIvEM,KACJR,EAAYE,OAASH,IACpBK,EAAenC,KAAKqC,UAAUJ,QAAUE,EAAenC,KAAKsC,MAAML,SAIrE,OAAIG,GAA0BG,EACrBP,KAAKQ,SAAST,EAAaD,QADpC,CAIF,EAEAW,mBAAkB,SAACC,GACjB,OAAOA,EAAOC,OAAO,SAACC,EAAUC,GAC9B,OAAIA,EAAQ7C,KAAKsC,MAAML,OACd,GAAP,SAAYW,GAAQ,CAAEC,EAAQ7C,OAEzB4C,CACT,EAAG,GACL,EAEAE,mBAAkB,SAACJ,EAA2BK,SACtCC,EAAmB,EAAIN,GAEvBO,EAA6B,QAAlB,EAAAF,EAAMG,oBAAY,eAAED,SAarC,OAXAD,EAAiBG,QAAQ,SAAC1E,EAAO8B,GAC/B,IAAMwC,EAAQE,EAASG,KAAK,SAAAC,GAAI,OAAIA,EAAKf,QAAU7D,EAAMuB,KAAKsC,KAAK,GAC9DS,IACLC,EAAiBzC,GAAS,OAAH,wBAClB9B,GAAK,CACRsE,MAAO,CACLT,MAAOtE,EAAUyD,EAAesB,EAAMO,eAG5C,GAEON,CACT,EAEAjB,YAAW,SAACH,GACV,OAAOA,EAAY2B,OACjB,SAAAF,GAAI,OAAMA,EAAKrD,KAAKqC,UAAUJ,QAAUoB,EAAKrD,KAAKsC,MAAML,MAAM,EAElE,EAEAC,YAAW,SAAC3B,EAAeqB,EAAgCC,GACzD,OAAID,EAAYK,SAAWJ,GAAcD,EAAYrB,GAG9CqB,EAAY2B,OAAO,SAACC,EAAGC,GAAG,OAAKA,IAAQlD,CAAK,GAF1CqB,CAGX,EAEAY,SAAQ,SAACZ,EAAgCE,GACvC,OAAIF,EAAYK,QAAUH,EACjBF,EAEF,GAAP,SAAYA,GAAW,CAAEI,KAAK0B,oBAChC,EAEAA,iBAAgB,WACd,MAAO,CACL1D,KAAM,CACJqC,UAAW,GACXC,MAAO,IAGb,yGCrGF,IACM,EAAYrE,EAAA,mBADA,kBAGZ0F,EAAa,IAAIC,OAAO,8BACxBC,EAAiB,uDAEVC,EAAyB,CACpCC,SAAQ,SAACrB,GAAyB,aAC1BsB,iDAAuBtB,sjBACzBuB,GAAY,EAwBhB,OAtBAD,EAAiBb,QAAQ,SAACE,EAAM9C,GAO9B,GALEA,IAAUyD,EAAiB/B,OAAS,GAC1B,IAAV1B,GACE8C,EAAKrD,KAAKsC,MAAML,QAAWoB,EAAKrD,KAAKqC,UAAUJ,OAGnD,CAGA,IAAMiC,EAAyC,CAC7C7B,UAAW,EAAK8B,kBAAkBd,EAAKrD,KAAKqC,WAC5CC,MAAO,EAAK8B,cAAcf,EAAKrD,KAAKsC,SAGlC4B,EAAiB7B,WAAa6B,EAAiB5B,SACjDe,EAAKN,MAAQmB,EAERD,IAAWA,GAAY,GAVtB,CAYV,GAEO,CAAED,iBAAAA,EAAkBC,UAAAA,EAC7B,EAEAG,cAAa,SAAC9B,GACZ,OAAKA,EAAML,OAIN0B,EAAWU,KAAK/B,QAArB,EACS,EAAU,oBAJV,EAAU,kBAMrB,EAEA6B,kBAAiB,SAAC9B,GAChB,GAAKA,EAAUJ,OAIf,OAAK4B,EAAeQ,KAAKhC,QAAzB,EACS,EAAU,mBAErB,GCnDI,EAAYpE,EAAA,mBADA,+BAQZ,SAAUqG,EAAqBpH,GACnC,IAAQqH,EAA4CrH,EAA5CqH,aAAcC,EAA8BtH,EAA9BsH,0BAEtB,OACE,uBAAKhH,UAAU,QACb,uBAAKE,KAAK,QAAQF,UAAU,gDACzB,EAAU,eAAc,IAAE,8BAAS,EAAU,kBAC7C+G,EAAaE,SAASC,cACrB,uBAAKlH,UAAU,eACb,6BACG,EAAU,qBAAsB,CAAEuC,MAAOyE,QAAAA,EAA6B,EAAGG,IAAKJ,EAAaE,SAASC,kBAOnH,iSCzBA,IACM,EAAYzG,EAAA,mBADA,sCAsBZ,SAAU2G,EAAoB1H,GAClC,MAAwBA,EAAMuB,MAAtBuB,EAAI,EAAJA,KAAM+C,EAAK,EAALA,MAEd,SAAS8B,EAA8CC,EAAUrH,GAC/D,UAAMsH,EAAO,+BACR/E,MAAI,KACEvC,yRAARqH,kGAEH5H,EAAM2H,SAASC,EAAOC,EACxB,CAYA,OACE,uBAAKvH,UAAU,YACb,uBAAKA,UAAU,SACb,yBACEwB,KAAK,OACLc,KAAI,mBAAc5C,EAAMqD,OACxB/C,UAAU,+BACVwH,YAAa,EAAU,aACvBvH,MAAOuC,EAAKqC,UACZwC,SAnBR,SAA2BI,GACzBA,EAAMC,iBACNL,EAAS,YAAaI,EAAME,OAAO1H,MACrC,EAiBQwB,aAAa,QAEd8D,IAASA,aAAK,EAALA,EAAOV,YACf,qBAAG7E,UAAU,oBAAoBuF,EAAMV,YAG3C,uBAAK7E,UAAU,cACb,gBAACP,EAAA,EAAc,CACb+B,KAAK,OACLc,KAAI,wBAAmB5C,EAAMqD,OAC7B/C,UAAU,+BACVwH,YAAa,EAAU,eAAgB,CAAEjF,MAAO7C,EAAMqD,MAAQ,IAC9D9C,MAAOuC,EAAKsC,MACZuC,SA5BR,SAA2BI,GACzBA,EAAMC,iBACNL,EAAS,QAASI,EAAME,OAAO1H,MACjC,EA0BQL,aAAcF,EAAMkI,YACpBnG,aAAa,MACb5B,mBAAoB2C,EAAKqC,YAAarC,EAAKsC,SAE5CS,IAASA,aAAK,EAALA,EAAOT,QACf,qBAAG9E,UAAU,mBAAmB6H,wBAAyB,CAAEC,OAAQvC,EAAMT,UAKnF,+tBCxEA,IAAM,EAAY,qCAcZ,SAAUiD,EAAqBrI,GACnC,IAAQwF,EAAwDxF,EAAxDwF,OAAQ8C,EAAgDtI,EAAhDsI,UAAW3D,EAAqC3E,EAArC2E,UAAWC,EAA0B5E,EAA1B4E,UAAW2D,EAAevI,EAAfuI,WAE3CC,EAAa,UAAc,kBAAMhD,EAAOa,OAAO,SAAAoC,GAAC,QAAMA,EAAE3F,KAAKsC,KAAK,GAAEL,MAAM,EAAE,CAACS,IAqCnF,OACE,uBAAKlF,UAAU,QACb,gBAACoI,EAAA,QAAgB,CACfC,IAAKC,EAAA,0BACLtI,UAAU,oBAEZ,sBAAIA,UAAU,kBACZ,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAQR,EAAa,wBAA0B,mBAE7E,qBAAGjI,UAAU,eACX,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,sBAErC,uBAAKzI,UAAU,oBACb,uBAAKA,UAAU,SACb,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,eAErC,uBAAKzI,UAAU,cACb,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,qBACnC,wBAAMzI,UAAU,eAAa,OAGhCkF,EAAOpC,IAAI,SAAC+C,EAAM9C,GAAK,OACtB,gBAACqE,EAAmB,CAClBnG,MAAO4E,EACPvF,IAAKyC,EACLA,MAAOA,EACPsE,SAAU,SAACC,EAAOC,GAAO,OA7DjC,SAA2BxE,EAAeuE,EAAkC9E,GACtEO,EAAQmC,EAAOT,QAGnBuD,EAAU,SAAA9C,WACFqC,EAAU,EAAIrC,GAUpB,OATAqC,EAAQxE,GAAOP,KAAOA,GAGJ,QAAd,EAAA+E,EAAQxE,UAAM,eAAEwC,SAAuB,QAAd,EAAAgC,EAAQxE,UAAM,eAAEwC,MAAM+B,YAC1CC,EAAQxE,GAAOwC,MAAM+B,GAGHpD,EAAiBC,kBAAkBpB,EAAOwE,EAASlD,EAAWC,IAE5DiD,CAC/B,EACF,CA4CsCmB,CAAkB3F,EAAOuE,EAAOC,EAAQ,EACtEK,YAAa,WAAF,OA3CnB,SAAqB7E,GACfA,EAAQmC,EAAOT,QAGnBuD,EAAU,SAAA9C,GACR,IAAMqC,EAAU,EAAIrC,GAOpB,OANAqC,EAAQxE,GAAOP,KAAKqC,UAAY,GAChC0C,EAAQxE,GAAOP,KAAKsC,MAAQ,GAGDZ,EAAiBC,kBAAkBpB,EAAOwE,EAASlD,EAAWC,IAE5DiD,CAC/B,EACF,CA6B2B,CAAYxE,EAAM,GACrC,GAEJ,uBAAK/C,UAAU,aACb,gBAAC2I,EAAA,EAAa,CAACC,YAAalJ,EAAMkJ,YAAaC,QAAQ,OAAO7I,UAAU,eAAeG,QAAST,EAAMoJ,UACpG,gBAACP,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,YAAYM,QAAS,CAAEC,WAAYd,GAAc,OAK9F,CC7FA,IAAM,EAAY,kCAOZ,SAAUe,EAAkBvJ,SAChC,GAAiB,QAAZ,EAAAA,EAAMwF,cAAM,eAAET,OAGnB,OACE,uBAAKzE,UAAU,oBACb,gBAACoI,EAAA,QAAgB,CACfC,IAAKC,EAAA,kCACLtI,UAAU,oBAEZ,sBAAIA,UAAU,MAAK,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,gBACtD,qBAAGzI,UAAU,QAAO,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,iBACvD,uBAAKzI,UAAU,QACZN,EAAMwF,OAAOpC,IAAI,SAAC+C,EAAM9C,GACvB,MAA6B8C,EAAKrD,KAA1BqC,EAAS,EAATA,UAAWC,EAAK,EAALA,MAEnB,GAAKA,EAGL,OACE,qBAAG9E,UAAU,OAAOM,IAAKyC,KACpB8B,EAAUJ,QACX,8BAASI,GAAmB,MAGxBC,EAAK,IAGjB,IAEF,yBACE,gBAACyD,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,eAAe,IAClD,qBACEtI,QAAST,EAAMwJ,aACflJ,UAAU,iBAEV,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,iBAK7C,CCvCM,SAAUU,EAAWzJ,GACzB,IAAQwF,EAA6CxF,EAA7CwF,OAAQ8C,EAAqCtI,EAArCsI,UAAWY,EAA0BlJ,EAA1BkJ,YAAaE,EAAapJ,EAAboJ,SAOxC,OAAK5D,EAAOT,OAGR/E,EAAM0J,UACD,gBAACH,EAAiB,CAAC/D,OAAQA,EAAQgE,aAT5C,SAAsBzB,GACpBA,EAAMC,iBACNhI,EAAMwJ,cACR,IAUE,gBAACnB,EAAoB,CACnB7C,OAAQA,EACR8C,UAAWA,EACXY,YAAaA,EACbE,SAAUA,EACVxE,UAAW5E,EAAM4E,UACjBD,UAAW3E,EAAM2E,UACjB4D,WAAYvI,EAAMuI,aAdb,gCAiBX,gBCnCM,EAAYxH,EAAA,mBADA,4BAUZ,SAAU4I,EAAW3J,GACzB,IAAMmD,EAAkB,CAAC,CACvBP,KAAM,EAAU,UAChBc,SAAU,WAAF,OAAQ1D,EAAM4J,YAAY,aAAa,EAC/CtG,OAA4B,eAApBtD,EAAM6J,UACdrG,cAAe,CACbZ,KAAM,EAAU,WAElBa,iBAAkB,CAChBqG,WAAY,WACZC,OAAQ,SACRC,SAAU,iBAEX,CACDpH,KAAM,EAAU,WAChBc,SAAU,WAAF,OAAQ1D,EAAM4J,YAAY,iBAAiB,EACnDtG,OAA4B,mBAApBtD,EAAM6J,UACdrG,cAAe,CACbZ,KAAM,EAAU,YAElBa,iBAAkB,CAChBqG,WAAY,WACZC,OAAQ,SACRC,SAAU,kBAId,OACE,gBAACjH,EAAA,EAAe,CACdzC,UAAU,qCACV6C,KAAMA,GAGZ,gBC5CM,EAAY,+BAMZ,SAAU8G,EAAoBjK,GAMlC,OACE,uBAAKM,UAAU,yBACb,gBAACoI,EAAA,QAAgB,CACfC,IAAKC,EAAA,+BACLtI,UAAU,oBAEZ,sBAAIA,UAAU,WACZ,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,gBAErC,yBACE,gBAACF,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,qBAAqB,IAExD,qBAAGtI,QAjBT,SAAsBsH,GACpBA,EAAMC,iBACNhI,EAAMwJ,cACR,EAcgClJ,UAAU,aAClC,gBAACuI,EAAA,EAAI,CAACC,UAAW,EAAWC,OAAO,kBAK7C,CCpCA,SAAgB,OAAS,QAAQ,QAAU,QAAQ,QAAU,QAAQ,iBAAmB,SCGxF,SAASmB,IACP,OACE,uBAAK5J,UAAU,uCACb,uBAAKA,UAAU,mCACb,uBAAKA,UAAS,oDAA+C,YAC7D,uBAAKA,UAAU,cACb,uBAAKA,UAAS,+CAA0C,aACxD,uBAAKA,UAAS,2CAAsC,eAGxD,uBAAKA,UAAU,qDACb,uBAAKA,UAAS,2CAAsC,cAI5D,CAEM,SAAU6J,KACd,OACE,uBAAK7J,UAAU,QACb,uBAAKA,UAAS,8CAAyC,aACtD8J,MAAM,GAAGC,KAAK,MAAMjH,IAAI,SAAC+C,EAAM9C,GAAK,OAAK,gBAAC6G,EAAyB,CAACtJ,IAAKyC,GAAS,GAGzF,KC5BYiH,oDAAZ,SAAYA,GACV,kBACA,sBACA,mBACD,CAJD,CAAYA,KAAAA,GAAY,KCMxB,IACM,GAAYvJ,EAAA,mBADA,kBASLwJ,GAAuB,CAClCC,eAAc,SAACnB,GACb,IAAQoB,EAAuCpB,EAAvCoB,OAAQpG,EAA+BgF,EAA/BhF,aAAcqG,EAAiBrB,EAAjBqB,aAE9B,OAAID,IAAWH,GAAaK,SAAiB,GAEJ,CACvC,CACEpI,MAAO,GAAU,gBACjB9B,QAAS4D,GAEX,CACE9B,MAAO,GAAU,gBACjB9B,QAASiK,EACTpK,UAAW,eAKjB,GCxBI,GAAYS,EAAA,mBADA,kCAOZ,SAAU6J,GAAiB5K,GAC/B,OAAIA,EAAMyK,SAAWH,GAAaK,SAE9B,gBAACE,GAAqB,CACpBC,oBAAoB,eACpBC,UAAW,WAAF,OACP,gBAACC,GAAA,EAAY,CACXC,KAAMD,GAAAE,EAAA,MACN/I,QAAS,aACT,EAEJF,KAAM,GAAU,cAKlBjC,EAAMyK,SAAWH,GAAaa,OAE9B,gBAACN,GAAqB,CACpBE,UAAW,WAAF,OACP,gBAACC,GAAA,EAAY,CACXC,KAAMD,GAAAE,EAAA,MACN/I,QAAS,oBACT7B,UAAU,0CACV,EAEJ8K,eAAe,iBACfnJ,KAAM,GAAU,YAKlBjC,EAAMyK,SAAWH,GAAae,QAE9B,gBAACR,GAAqB,CACpBC,oBAAoB,cACpBC,UAAW,WAAF,OACP,gBAACC,GAAA,EAAY,CACXC,KAAMD,GAAAE,EAAA,MACN/I,QAAS,YACT7B,UAAU,gCACV,EAEJ2B,KAAM,GAAU,aAKf,gCACT,CAUA,SAAS4I,GAAsB7K,GAC7B,SAASsL,EAAgBC,EAAmBC,GAC1C,OAAIA,EACK,GAAP,OAAUD,EAAS,YAAIC,GAElBD,CACT,CAEA,IAAME,EAAiBH,EAAgB,4BAA6BtL,EAAM8K,qBACpEY,EAAYJ,EAAgB,OAAQtL,EAAMoL,gBAEhD,OACE,uBAAK9K,UAAWmL,GACbzL,EAAM+K,WAAa/K,EAAM+K,YAC1B,yBAAOzK,UAAWoL,GACf1L,EAAMiC,MAIf,CC7FA,UAAgB,OAAS,QAAQ,MAAQ,SCyBzC,SAAS0J,GAAa3L,GACpB,OAAIA,EAAM4L,QAEN,gBAACC,GAAA,EAAM,CACLC,YAAa9L,EAAM8L,YACnBC,SAAU/L,EAAM4L,UAMpB,uBAAKtL,UAAU,kGACb,gBAAC0K,GAAA,EAAY,CAAC7I,QAAS,YAAoB8I,KAAMD,GAAAE,EAAA,QAGvD,CAEM,SAAUc,GAAmBhM,WACjC,EAA4BA,EAAM6D,OAA1BoI,EAAO,EAAPA,QAASxB,EAAM,EAANA,OACXrF,EAAsB,QAAd,EAAA6G,aAAO,EAAPA,EAAS7G,aAAK,QAAIpF,EAAM6D,OAAO0D,SAASnC,MAChD8G,EAAU3B,GAAqBC,eAAe,CAClDC,OAAAA,EACApG,aAAc,WAAF,OAAQrE,EAAMqE,aAAarE,EAAM6D,OAAOO,GAAG,EACvDsG,aAAc,WAAF,OAAQ1K,EAAM0K,aAAa1K,EAAM6D,OAAOO,GAAG,IAEnDe,EAAiC,QAArB,EAAAnF,EAAM6D,OAAO0D,gBAAQ,eAAEpC,UACnCyG,EAAUzG,aAAS,EAATA,EAAWgH,OAAO,EAAG,GAErC,OACE,uBAAK7L,UAAU,4CACb,uBAAKA,UAAU,kCACb,uBAAKA,UAAW,WACd,gBAACqL,GAAY,CACXC,QAASA,EACTQ,OAAQH,aAAO,EAAPA,EAASG,OACjBN,YAAa9L,EAAM8L,eAGvB,uBAAKxL,UAAU,UACV6E,GACD,sBAAI7E,UAAU,WAAW6E,GAE3B,qBACE7E,UAAS,kDAA6C,UACtD+L,MAAOjH,GAENA,KAIP,uBAAK9E,UAAU,0DACb,gBAACsK,GAAgB,CAACH,OAAQA,MACvByB,EAAQnH,QACT,gBAACuH,GAAA,EAAe,CACdC,wBAAwB,oBACxBL,QAASA,KAMrB,CC3EA,IAAM,GAAY,+BAWZ,SAAUM,GAAexM,SAC7B,OAAIA,EAAMyM,UACD,gBAACtC,GAAqB,OAGZ,QAAd,EAAAnK,aAAK,EAALA,EAAO0M,eAAO,eAAE3H,QAKnB,uBAAKzE,UAAU,QACb,sBAAIA,UAAU,WACZ,gBAACuI,EAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,aAErC,gBAAC,KAAU,CACTzI,UAAS,UAAK,qBAEbN,EAAM0M,QAAQtJ,IAAI,SAAC+C,EAAM9C,GAAK,OAC7B,gBAAC2I,GAAkB,CACjBpL,IAAKyC,EACLQ,OAAQsC,EACR2F,YAAa9L,EAAM8L,YACnBpB,aAAc1K,EAAM0K,aACpBrG,aAAcrE,EAAMqE,cACpB,KAlBD,gBAAC4F,EAAmB,CAACT,aAAcxJ,EAAMwJ,cAuBpD,6BC5CM,GAAY,gCASZ,SAAUmD,GAAgB3M,GAC9B,OAAIA,EAAMkJ,YAEN,uBAAK5I,UAAU,qBACb,gBAACsM,GAAA,EAAO,CAACC,GAAG,MAAMC,UAAU,SAAStM,KAAK,YAM9C,uBAAKF,UAAU,SACb,uBAAKA,UAAU,kCACb,sBAAIA,UAAU,MAAK,gBAACuI,EAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,WACrD/I,EAAM+M,MACL,0BAAQzM,UAAU,kCAAkCG,QAAST,EAAMgN,eACjE,gBAACnE,EAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,aAKxC/I,EAAM+M,KACH,gBAAC/L,GAAA,EAAS,CAACT,MAAOP,EAAM+M,OACxB,uBAAKzM,UAAU,wCACf,2BACE,gBAAC0K,GAAA,EAAY,CAAC7I,QAAS,WAAmB7B,UAAU,sCACpD,gBAACuI,EAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,cAErC,0BAAQzI,UAAU,oBAAoBG,QAAST,EAAMiN,eACnD,gBAACpE,EAAA,EAAI,CAACC,UAAW,GAAWC,OAAO,aAM/C,KC9CYmE,uCCQN,GAAYnM,EAAA,mBADA,+BAQZ,SAAUoM,GAAqBnN,GACnC,IAAQqH,EAA4CrH,EAA5CqH,aAAcC,EAA8BtH,EAA9BsH,0BAEtB,OACE,uBAAKhH,UAAU,QACb,uBAAKE,KAAK,QAAQF,UAAU,4DAC1B,uBAAKA,UAAU,oDACb,gBAAC0K,GAAA,EAAY,CAAC7I,QAAS,kBAA0B8I,KAAMD,GAAAE,EAAA,SACvD,2BACG,GAAU,eAAc,IAEzB,gBAACkC,GAAA,EAAO,CACN7J,QAAS,CACP8J,YAAa,aACbC,OAAQ,8BAEVhN,UAAU,mDAEV,8BAAS,GAAU,gBAAiB,CAAEiN,UAAWlG,EAAaE,SAASiG,kBAAkBC,MAAM,KAAK,SAIzGpG,EAAaE,SAASC,cACvB,2BACE,6BACG,GAAU,qBAAsB,CAAE3E,MAAOyE,QAAAA,EAA6B,EAAGG,IAAKJ,EAAaE,SAASC,kBAOjH,ED/CA,SAAY0F,GACV,cACA,iBACD,CAHD,CAAYA,KAAAA,GAAU,KEJtB,UAAgB,UAAY,k1GCmCtB,GAAYnM,EAAA,mBADA,yBAGZ2M,GAAa,EACbC,GAAa,EAWb,SAAUC,GAAoB5N,WAC2B,KAArC,WAA2BA,EAAM2C,KAAI,GAArDA,EAAG,KAAEkL,EAAM,KACqE,KAA9B,YAAwB,GAAM,GAAhFC,EAAoB,KAAEC,EAAuB,KACY,KAArB,YAAe,GAAM,GAAzDC,EAAa,KAAEC,EAAgB,KAE8B,KAArB,YAAe,GAAM,GAA7DC,EAAe,KAAEC,EAAkB,KACiE,KAA9E,WAAkC,iBAAM,CAAC3J,EAAiBgC,mBAAmB,GAAC,GAApGhB,EAAM,KAAE8C,EAAS,KAEjBjB,GAAiB,EAAA+G,EAAA,MAAjB/G,aACAC,GAA8B,EAAA+G,EAAA,GAAY,MAA1C/G,0BAEFgH,EAAa,uBAEbC,GAAS,SACThG,GAAa,EAAAiG,EAAA,KAEbC,EAAc,kBAAkCC,EAAA,iBAChDC,EAAS,kBAA6BC,EAAA,YACtClC,EAAU,kBAAmC9I,EAAwBM,gBAE3E,ECjEI,SAA0BwI,GAC9B,OAAO,UAAc,WACnB,OAAKA,EAIEA,EAAQjH,OAAO,SAACoJ,EAAMC,GAC3B,OAAIA,EAAKhN,OAASoL,GAAW6B,QAC3BF,EAAKG,cAAcC,KAAKH,GACjBD,IAGTA,EAAKK,MAAMD,KAAKH,GACTD,EACT,EAAG,CACDG,cAAe,GACfE,MAAO,KAbA,CAAEF,cAAe,KAAME,MAAO,KAezC,EAAG,CAACxC,GACN,CD8CmCyC,CAAgBzC,EAAQ5J,MAAjDkM,EAAa,EAAbA,cAAeE,EAAK,EAALA,MACjBnC,EAAOmC,aAAK,EAALA,EAAQ,GAuDrB,SAASE,EAAWC,GAClBC,EAAA,gBAA8B,CAAED,WAAAA,GAAc,CAC5CvF,WAAY,eACZE,SAAU,iBACVD,OAAQ,UACRwF,WAAY,qBACZC,cAAe,eAEnB,CAEA,SAASC,IACPxB,GAAiB,GACjB3F,EAAU,CAAC9D,EAAiBgC,qBAChB,eAAR7D,IACFkL,EAAO,cACPM,GAAmB,GAEvB,CAoBA,IAAMuB,EAAajB,EAAYkB,cAAgBhB,EAAOgB,cAAgBjD,EAAQiD,aAE9E,OACE,gBAACC,EAAA,EAAK,CACJvD,MAAO,GAAU,SACjBwD,WAAY7P,EAAM6P,WAClBC,cAAc,kBACdC,oBAAqBL,GAEpBA,GACC,gCACE,uBAAKpP,UAAW,eACS,QAAtB,EAAA+G,aAAY,EAAZA,EAAcE,gBAAQ,eAAEiG,oBACvB,gBAACL,GAAoB,CAAC9F,aAAcA,EAAcC,0BAA2BA,KAExD,QAAtB,EAAAD,aAAY,EAAZA,EAAcE,gBAAQ,eAAEyI,6BACvB,gBAAC5I,EAAoB,CAACC,aAAcA,EAAcC,0BAA2BA,KAG7E0G,GACA,gBAACrE,EAAU,CAACE,UAAWlH,EAAKiH,YAAa,SAAAjH,GAAG,OAAIkL,EAAOlL,EAAI,IAI/C,mBAARA,EAEA,gBAAC6J,GAAc,CACbV,YAAa6C,EAAO7L,KAAKgJ,YACzBY,QAASsC,EACTxF,aAAciG,EACd/E,aAhDlB,SAAkCtG,8GAE9B,mBAAMkK,EAAW1K,EAAwBO,aAAaC,IAAI,OAC1DmK,EAAO0B,QAAQ,GAAU,kBAAkB,+BAE3C1B,EAAO1I,MAAMqK,EAAA,uBAAwC,IAAM,yCAE9D,EA0CiB7L,aAxClB,SAAkCD,8GAE9B,mBAAMkK,EAAW1K,EAAwBS,aAAaD,IAAI,OAC1DmK,EAAO0B,QAAQ,GAAU,kBAAkB,+BAE3C1B,EAAO1I,MAAMqK,EAAA,uBAAwC,IAAM,yCAE9D,EAkCiBzD,WAAYC,EAAQiD,eAKxB,gBAAClG,EAAU,CACTjE,OAAQA,EACR8C,UAAWA,EACXY,YAAagF,EACbxE,UAAWsE,EACX5E,SA/GhB,0IACM8E,EAAiB,CAAF,iCAEgB,GAFhB,EAEqBtH,EAAuBC,SAASrB,GAAhEsB,EAAgB,EAAhBA,kBAA2B,EAATC,UACX,CAAF,YACiB,OAA5BuB,EAAUxB,GAAkB,cAO5B,OAP4B,MAK5BqH,GAAmB,GACbgC,EAAyC3L,EAAiBe,mBAAmBC,GAAO,MACpF8I,EAAW1K,EAAwBC,OAAOsM,IAAiB,OAE9B,OADnClC,GAAiB,GACjBmB,EAAWe,EAAgBpL,QAAQ,cAGxB,GAHwB,YAKF,8BAAX,QAAlB,GAFEc,EAAQ,GAEJG,oBAAY,eAAElE,MAAmC,aACI,OAA7DyM,EAAO1I,MAAMqK,EAAA,uBAAwCrK,IAAQ,cAIzDC,EAAmBtB,EAAiBoB,mBAAmBJ,EAAQK,GAErEyC,EAAUxC,GAAkB,OAEF,OAFE,MAE5BqI,GAAmB,GAAO,oDAE7B,EAkFe3E,aAAciG,EACd7K,UAAW+I,GACXhJ,UAAW+I,GACXnF,WAAYA,MAKlByF,GACA,uBAAK1N,UAAU,QACb,gBAAC8P,EAAA,EAAY,KACX,gBAACzD,GAAe,CACdM,cAjJhB,gHAII,OAHFc,GAAwB,GAAM,YAGtBO,EAAW1K,EAAwBU,oBAAmB,oCAE5DiK,EAAO1I,MAAM,GAAU,UAAU,OAEF,OAFE,MAEjCkI,GAAwB,GAAO,oDAElC,EAwIef,cAtIhB,sHAEI,mBAAMsB,EAAW1K,EAAwBO,aAAa4I,EAAK3I,KAAI,OAC/DmK,EAAO0B,QAAQ,GAAU,sBAAsB,+BAE/C1B,EAAO1I,MAAMqK,EAAA,uBAAwC,IAAM,yCAE9D,EAgIenD,KAAMA,aAAI,EAAJA,EAAMsD,UACZnH,YAAa4E,OAS/B,gCEpOA,IAAIwC,EAAkB,EAAQ,OAE1BC,EAA4B,CAC9B,aAAc,OACd,YAAa,MACb,QAAW,QA2GbC,EAAOC,QAjGP,SAAcxO,EAAMoH,GAClB,IAAIqH,EACFC,EACAC,EACAC,EACAC,EACAC,EACAd,GAAU,EACP5G,IACHA,EAAU,CAAC,GAEbqH,EAAQrH,EAAQqH,QAAS,EACzB,IAkDE,GAjDAE,EAAmBN,IAEnBO,EAAQG,SAASC,cACjBH,EAAYE,SAASE,gBAErBH,EAAOC,SAASG,cAAc,SACzBC,YAAcnP,EAEnB8O,EAAKM,WAAa,OAElBN,EAAKO,MAAMC,IAAM,QAEjBR,EAAKO,MAAME,SAAW,QACtBT,EAAKO,MAAMG,IAAM,EACjBV,EAAKO,MAAMI,KAAO,mBAElBX,EAAKO,MAAMK,WAAa,MAExBZ,EAAKO,MAAMM,iBAAmB,OAC9Bb,EAAKO,MAAMO,cAAgB,OAC3Bd,EAAKO,MAAMQ,aAAe,OAC1Bf,EAAKO,MAAMS,WAAa,OACxBhB,EAAKiB,iBAAiB,OAAQ,SAASrR,GAErC,GADAA,EAAEsR,kBACE5I,EAAQ6I,OAEV,GADAvR,EAAEqH,sBAC6B,IAApBrH,EAAEwR,cAA+B,CAC1CzB,GAAS0B,QAAQC,KAAK,iCACtB3B,GAAS0B,QAAQC,KAAK,4BACtBC,OAAOH,cAAcI,YACrB,IAAIL,EAAS3B,EAA0BlH,EAAQ6I,SAAW3B,EAAmC,QAC7F+B,OAAOH,cAAcK,QAAQN,EAAQjQ,EACvC,MACEtB,EAAEwR,cAAcI,YAChB5R,EAAEwR,cAAcK,QAAQnJ,EAAQ6I,OAAQjQ,GAGxCoH,EAAQ/H,SACVX,EAAEqH,iBACFqB,EAAQ/H,OAAOX,EAAEwR,eAErB,GAEAnB,SAASyB,KAAKC,YAAY3B,GAE1BF,EAAM8B,mBAAmB5B,GACzBD,EAAU8B,SAAS/B,IAEFG,SAAS6B,YAAY,QAEpC,MAAM,IAAIC,MAAM,iCAElB7C,GAAU,CACZ,CAAE,MAAO8C,GACPrC,GAAS0B,QAAQvM,MAAM,qCAAsCkN,GAC7DrC,GAAS0B,QAAQC,KAAK,4BACtB,IACEC,OAAOH,cAAcK,QAAQnJ,EAAQ6I,QAAU,OAAQjQ,GACvDoH,EAAQ/H,QAAU+H,EAAQ/H,OAAOgR,OAAOH,eACxClC,GAAU,CACZ,CAAE,MAAO8C,GACPrC,GAAS0B,QAAQvM,MAAM,uCAAwCkN,GAC/DrC,GAAS0B,QAAQvM,MAAM,0BACvB8K,EAjFN,SAAgBA,GACd,IAAIqC,GAAW,YAAY7L,KAAK8L,UAAUC,WAAa,IAAM,QAAU,KACvE,OAAOvC,EAAQwC,QAAQ,gBAAiBH,EAC1C,CA8EgBd,CAAO,YAAa7I,EAAUA,EAAQsH,QAnFjC,oCAoFf2B,OAAOc,OAAOzC,EAAS1O,EACzB,CACF,CAAE,QACI6O,IACkC,mBAAzBA,EAAUuC,YACnBvC,EAAUuC,YAAYxC,GAEtBC,EAAUwC,mBAIVvC,GACFC,SAASyB,KAAKc,YAAYxC,GAE5BH,GACF,CAEA,OAAOX,CACT,iDC/GA,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,uCCC3G,SAASuD,EAAQC,GAAkC,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAAO,cAAcA,CAAK,EAAI,SAAUA,GAAO,OAAOA,GAAO,mBAAqBC,QAAUD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,CAAK,EAAGD,EAAQC,EAAM,CAE/UK,OAAOC,eAAetD,EAAS,aAAc,CAC3ClQ,OAAO,IAETkQ,EAAQzO,qBAAkB,EAE1B,IAAIgS,EAASC,EAAuB,EAAQ,QAExCC,EAAmBD,EAAuB,EAAQ,QAElDE,EAAY,CAAC,OAAQ,SAAU,UAAW,YAE9C,SAASF,EAAuBR,GAAO,OAAOA,GAAOA,EAAIW,WAAaX,EAAM,CAAE,QAAWA,EAAO,CAEhG,SAASY,EAAQC,EAAQC,GAAkB,IAAIC,EAAOV,OAAOU,KAAKF,GAAS,GAAIR,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsBH,GAASC,IAAmBG,EAAUA,EAAQrO,OAAO,SAAUsO,GAAO,OAAOb,OAAOc,yBAAyBN,EAAQK,GAAKE,UAAY,IAAKL,EAAKvF,KAAK6F,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAEpV,SAASO,EAAc9M,GAAU,IAAK,IAAI+M,EAAI,EAAGA,EAAIC,UAAUlQ,OAAQiQ,IAAK,CAAE,IAAIE,EAAS,MAAQD,UAAUD,GAAKC,UAAUD,GAAK,CAAC,EAAGA,EAAI,EAAIX,EAAQP,OAAOoB,IAAS,GAAIjP,QAAQ,SAAUrF,GAAOuU,EAAgBlN,EAAQrH,EAAKsU,EAAOtU,GAAO,GAAKkT,OAAOsB,0BAA4BtB,OAAOuB,iBAAiBpN,EAAQ6L,OAAOsB,0BAA0BF,IAAWb,EAAQP,OAAOoB,IAASjP,QAAQ,SAAUrF,GAAOkT,OAAOC,eAAe9L,EAAQrH,EAAKkT,OAAOc,yBAAyBM,EAAQtU,GAAO,EAAI,CAAE,OAAOqH,CAAQ,CAQzf,SAASqN,EAAkBrN,EAAQjI,GAAS,IAAK,IAAIgV,EAAI,EAAGA,EAAIhV,EAAM+E,OAAQiQ,IAAK,CAAE,IAAIzF,EAAavP,EAAMgV,GAAIzF,EAAWsF,WAAatF,EAAWsF,aAAc,EAAOtF,EAAWgG,cAAe,EAAU,UAAWhG,IAAYA,EAAWiG,UAAW,GAAM1B,OAAOC,eAAe9L,EAAQsH,EAAW3O,IAAK2O,EAAa,CAAE,CAM5T,SAASkG,EAAgBC,EAAGC,GAA+G,OAA1GF,EAAkB3B,OAAO8B,gBAAkB,SAAyBF,EAAGC,GAAsB,OAAjBD,EAAEG,UAAYF,EAAUD,CAAG,EAAUD,EAAgBC,EAAGC,EAAI,CAMzK,SAASG,EAAuBC,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIC,eAAe,6DAAgE,OAAOD,CAAM,CAIrK,SAASE,EAAgBP,GAAwJ,OAAnJO,EAAkBnC,OAAO8B,eAAiB9B,OAAOoC,eAAiB,SAAyBR,GAAK,OAAOA,EAAEG,WAAa/B,OAAOoC,eAAeR,EAAI,EAAUO,EAAgBP,EAAI,CAE5M,SAASP,EAAgB1B,EAAK7S,EAAKL,GAAiK,OAApJK,KAAO6S,EAAOK,OAAOC,eAAeN,EAAK7S,EAAK,CAAEL,MAAOA,EAAOsU,YAAY,EAAMU,cAAc,EAAMC,UAAU,IAAkB/B,EAAI7S,GAAOL,EAAgBkT,CAAK,CAEhN,IAAIzR,EAA+B,SAAUmU,IAhB7C,SAAmBC,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIC,UAAU,sDAAyDF,EAASvC,UAAYC,OAAOyC,OAAOF,GAAcA,EAAWxC,UAAW,CAAED,YAAa,CAAErT,MAAO6V,EAAUZ,UAAU,EAAMD,cAAc,KAAWzB,OAAOC,eAAeqC,EAAU,YAAa,CAAEZ,UAAU,IAAca,GAAYZ,EAAgBW,EAAUC,EAAa,CAiBjcG,CAAUxU,EAAiBmU,GAE3B,IArBoBM,EAAaC,EAMbC,EAAeC,EAe/BC,GAfgBF,EAeM3U,EAfS4U,EAMrC,WAAuC,GAAuB,oBAAZE,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,mBAAVC,MAAsB,OAAO,EAAM,IAAsF,OAAhFC,QAAQrD,UAAUsD,QAAQC,KAAKN,QAAQC,UAAUG,QAAS,GAAI,WAAa,KAAY,CAAM,CAAE,MAAOvW,GAAK,OAAO,CAAO,CAAE,CANvQ0W,GAAoC,WAAkC,IAAsCC,EAAlCC,EAAQtB,EAAgBU,GAAkB,GAAIC,EAA2B,CAAE,IAAIY,EAAYvB,EAAgBnR,MAAM8O,YAAa0D,EAASR,QAAQC,UAAUQ,EAAOtC,UAAWuC,EAAY,MAASF,EAASC,EAAMzC,MAAMhQ,KAAMmQ,WAAc,OAEpX,SAAoCc,EAAMqB,GAAQ,GAAIA,IAA2B,WAAlB5D,EAAQ4D,IAAsC,mBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAId,UAAU,4DAA+D,OAAOR,EAAuBC,EAAO,CAF4F0B,CAA2B3S,KAAMwS,EAAS,GAiBna,SAAStV,IACP,IAAI0V,GA5BR,SAAyBC,EAAUlB,GAAe,KAAMkB,aAAoBlB,GAAgB,MAAM,IAAIH,UAAU,oCAAwC,CA8BpJsB,CAAgB9S,KAAM9C,GAEtB,IAAK,IAAI6V,EAAO5C,UAAUlQ,OAAQ+S,EAAO,IAAI1N,MAAMyN,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQ9C,UAAU8C,GA0BzB,OArBA5C,EAAgBW,EAFhB4B,EAAQb,EAAOO,KAAKtC,MAAM+B,EAAQ,CAAC/R,MAAMkT,OAAOF,KAED,UAAW,SAAU/P,GAClE,IAAIkQ,EAAcP,EAAM1X,MACpBiC,EAAOgW,EAAYhW,KACnBX,EAAS2W,EAAY3W,OACrB4W,EAAWD,EAAYC,SACvB7O,EAAU4O,EAAY5O,QAEtB8O,EAAOnE,EAAgB,QAAEoE,SAASC,KAAKH,GAEvCZ,GAAS,EAAIpD,EAA0B,SAAGjS,EAAMoH,GAEhD/H,GACFA,EAAOW,EAAMqV,GAIXa,GAAQA,EAAKnY,OAAuC,mBAAvBmY,EAAKnY,MAAMS,SAC1C0X,EAAKnY,MAAMS,QAAQsH,EAEvB,GAEO2P,CACT,CAoBA,OA5EoBjB,EA0DPzU,GA1DoB0U,EA0DH,CAAC,CAC7B9V,IAAK,SACLL,MAAO,WACL,IAAI+X,EAAexT,KAAK9E,MAIpBkY,GAHQI,EAAarW,KACXqW,EAAahX,OACZgX,EAAajP,QACbiP,EAAaJ,UACxBlY,EA1EV,SAAkCkV,EAAQqD,GAAY,GAAc,MAAVrD,EAAgB,MAAO,CAAC,EAAG,IAAkEtU,EAAKoU,EAAnE/M,EAEzF,SAAuCiN,EAAQqD,GAAY,GAAc,MAAVrD,EAAgB,MAAO,CAAC,EAAG,IAA2DtU,EAAKoU,EAA5D/M,EAAS,CAAC,EAAOuQ,EAAa1E,OAAOU,KAAKU,GAAqB,IAAKF,EAAI,EAAGA,EAAIwD,EAAWzT,OAAQiQ,IAAOpU,EAAM4X,EAAWxD,GAAQuD,EAASE,QAAQ7X,IAAQ,IAAaqH,EAAOrH,GAAOsU,EAAOtU,IAAQ,OAAOqH,CAAQ,CAFhNyQ,CAA8BxD,EAAQqD,GAAuB,GAAIzE,OAAOW,sBAAuB,CAAE,IAAIkE,EAAmB7E,OAAOW,sBAAsBS,GAAS,IAAKF,EAAI,EAAGA,EAAI2D,EAAiB5T,OAAQiQ,IAAOpU,EAAM+X,EAAiB3D,GAAQuD,EAASE,QAAQ7X,IAAQ,GAAkBkT,OAAOD,UAAU+E,qBAAqBxB,KAAKlC,EAAQtU,KAAgBqH,EAAOrH,GAAOsU,EAAOtU,GAAQ,CAAE,OAAOqH,CAAQ,CA0Ezd4Q,CAAyBP,EAAcnE,GAE/CgE,EAAOnE,EAAgB,QAAEoE,SAASC,KAAKH,GAE3C,OAAoBlE,EAAgB,QAAE8E,aAAaX,EAAMpD,EAAcA,EAAc,CAAC,EAAG/U,GAAQ,CAAC,EAAG,CACnGS,QAASqE,KAAKrE,UAElB,MAzE0E6U,EAAkBmB,EAAY5C,UAAW6C,GAA2E5C,OAAOC,eAAe0C,EAAa,YAAa,CAAEjB,UAAU,IA4ErPxT,CACT,CA3DmC,CA2DjCgS,EAAgB,QAAE+E,eAEpBtI,EAAQzO,gBAAkBA,EAE1BmT,EAAgBnT,EAAiB,eAAgB,CAC/CV,YAAQ0X,EACR3P,aAAS2P,kCC9GX,IACIhX,EADW,EAAQ,OACQA,gBAE/BA,EAAgBA,gBAAkBA,EAClCwO,EAAOC,QAAUzO,aCLjBwO,EAAOC,QAAU,WACf,IAAIK,EAAYE,SAASE,eACzB,IAAKJ,EAAUmI,WACb,OAAO,WAAa,EAKtB,IAHA,IAAI3V,EAAS0N,SAASkI,cAElBC,EAAS,GACJnE,EAAI,EAAGA,EAAIlE,EAAUmI,WAAYjE,IACxCmE,EAAOlK,KAAK6B,EAAUsI,WAAWpE,IAGnC,OAAQ1R,EAAO+V,QAAQC,eACrB,IAAK,QACL,IAAK,WACHhW,EAAOiW,OACP,MAEF,QACEjW,EAAS,KAKb,OADAwN,EAAUwC,kBACH,WACc,UAAnBxC,EAAUhP,MACVgP,EAAUwC,kBAELxC,EAAUmI,YACbE,EAAOlT,QAAQ,SAAS4K,GACtBC,EAAU8B,SAAS/B,EACrB,GAGFvN,GACAA,EAAOkW,OACT,CACF","sources":["file:///app/packages/libs/shared/src/images/components/CloseIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.scss","file:///app/packages/libs/shared/src/components/copy-input/copy-input.scss","file:///app/packages/libs/shared/src/components/copy-input/CopyInput.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/projects/lite/src/apps/sign-up/flight-requests/InviteColleagueRequests.ts","file:///app/packages/projects/lite/src/apps/sign-up/helpers/InputGroupHelper.ts","file:///app/packages/projects/lite/src/apps/sign-up/helpers/InviteValidationHelper.ts","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/hard-gate-invite-banner/HardGateInviteBanner.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputGroup.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-form-success/InviteFormSuccess.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-form/InviteForm.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-tabs/InviteTabs.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites/EmptyPendingInvites.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites/pending-invites.scss","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites/PartialPendingInvites.tsx","file:///app/packages/projects/lite/src/apps/sign-up/enums/InviteStatus.ts","file:///app/packages/projects/lite/src/apps/sign-up/helpers/PendingInvitesHelper.ts","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/invite-status-info/InviteStatusInfo.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites-item/pending-invites-item.scss","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites-item/PendingInvitesItem.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/pending-invites/PendingInvites.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/share-invite-link/ShareInviteLink.tsx","file:///app/packages/projects/lite/src/apps/sign-up/enums/InviteType.ts","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/components/invite/soft-gate-invite-banner/SoftGateInviteBaner.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/invite-colleague.scss","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/InviteColleagueView.tsx","file:///app/packages/projects/lite/src/apps/sign-up/views/invite-colleague/useSplitInvites.ts","file:///app/node_modules/copy-to-clipboard/index.js","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/react-copy-to-clipboard/lib/Component.js","file:///app/node_modules/react-copy-to-clipboard/lib/index.js","file:///app/node_modules/toggle-selection/index.js"],"sourcesContent":["import React from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z'/>\n </svg>\n );\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n clearClassName?: string;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, clearClassName, ...inputProps } = props;\n\n return (\n <div className='position-relative'>\n <input\n {...inputProps}\n ref={ref}\n className={`${props.className} ${styles.clearableInput}`}\n />\n {(!!props.value || showClearButton) &&\n <span\n className={`${styles.clearInput} position-absolute cursor-pointer text-secondary ${clearClassName || ''}`}\n role='button'\n onClick={onClickClear}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClickClear()}\n tabIndex={0}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"clearInput\":\"ygMgF\",\"clearableInput\":\"aYpO7\"};","// extracted by mini-css-extract-plugin\nexport default {\"normal\":\"Q1UGv\",\"copyBtn\":\"J3fBx\",\"embedHtmlInput\":\"RcwAD\"};","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { IconButton } from '../icon-button/IconButton';\n\nimport styles from './copy-input.scss';\n\nconst namespace = 'shared.copyInput';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInputProps {\n value: string;\n label?: string;\n // Greyed means the input will be greyed out. Normal means it will appear like a normal input\n styling?: 'greyed' | 'normal' | 'normal-v2';\n onCopy?: () => void;\n copyText?: string;\n copiedText?: string;\n showCopiedText?: boolean;\n extraButtonClassNames?: string;\n textarea?: boolean;\n hasInputBg?: boolean;\n}\n\nCopyInput.defaultProps = {\n styling: 'normal'\n};\n\nexport function CopyInput(props: CopyInputProps): JSX.Element {\n const [ localShowCopiedText, setLocalShowCopiedText ] = React.useState(props.showCopiedText || false);\n\n function revertLocalShowCopiedText() {\n setTimeout(() => setLocalShowCopiedText(false), 2000);\n }\n\n function onCopy(): void {\n if (props.onCopy)\n props.onCopy();\n\n if (localShowCopiedText)\n return;\n\n setLocalShowCopiedText(true);\n revertLocalShowCopiedText();\n }\n\n React.useEffect(() => {\n if (!props.showCopiedText)\n return;\n \n revertLocalShowCopiedText();\n }, [props.showCopiedText]);\n\n function Button() {\n if (props.styling === 'normal-v2') {\n return (\n <CopyToClipboard text={props.value} onCopy={onCopy}>\n <IconButton\n role={localShowCopiedText ? 'status' : ''}\n svgName={localShowCopiedText ? cvSvgLibrary.Check : cvSvgLibrary.Copy}\n className={classNames(\n styles.copyBtn,\n 'btn py-0 text-nowrap',\n localShowCopiedText ? 'btn-success text-white' : 'btn-outline-dark border-secondary',\n props.extraButtonClassNames\n )}\n >\n {localShowCopiedText ?\n props.copiedText || getPhrase('copiedLink') :\n props.copyText || getPhrase('copy')\n }\n </IconButton>\n </CopyToClipboard>\n );\n }\n\n return (\n <CopyToClipboard text={props.value} onCopy={onCopy}>\n <button\n role={localShowCopiedText ? 'status' : ''}\n className={classNames(\n 'btn btn-outline-dark border border-secondary py-0 text-nowrap',\n props.extraButtonClassNames\n )}\n >\n {localShowCopiedText ?\n props.copiedText || getPhrase('copied') :\n props.copyText || getPhrase('copy')\n }\n </button>\n </CopyToClipboard>\n );\n }\n\n const input = (\n <div className={props.styling === 'normal-v2' ? 'd-flex flex-row gap-2 position-relative w-100' : 'input-group'}>\n {props.textarea\n ? <textarea\n className={classNames('form-control rounded w-100 h-100', !props.hasInputBg && styles.embedHtmlInput)}\n spellCheck={false}\n value={props.value}\n rows={7}\n readOnly\n />\n : <input\n type='text'\n autoComplete='off'\n className={classNames(\n 'form-control',\n props.styling === 'normal' && props.styling\n )}\n spellCheck={false}\n value={props.value}\n readOnly\n />\n }\n \n <Button />\n </div>\n );\n\n if (props.label) {\n return (\n <Form.Group className='form-group'>\n <Form.Label>{props.label}</Form.Label>\n {input}\n </Form.Group>\n );\n }\n\n return input;\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { InviteFormInputData } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\n\nexport const InviteColleagueRequests = {\n invite(\n data: InviteFormInputData[]\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/invites',\n key: 'invites:colleague',\n normalize: false,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['invites']\n };\n },\n\n inviteByType(): Flight.Request {\n return {\n key: `invites`,\n url: `{gateway}/v1/users/invites?type=link&type=direct`,\n normalize: false\n };\n },\n\n deleteInvite(id: string): Flight.Request {\n return {\n key: `invites:delete`,\n url: `{gateway}/v1/users/invites/${id}`,\n type: HttpVerbs.DELETE,\n normalize: false,\n invalidationKeys: ['invites']\n };\n },\n\n resendInvite(id: string): Flight.Request {\n return {\n key: `invites:${id}:resend`,\n url: `{gateway}/v1/users/invites/email?id=${id}`,\n type: HttpVerbs.POST,\n normalize: false\n };\n },\n\n createInviteLink(): Flight.Request {\n return {\n key: `invites:create`,\n url: `{gateway}/v1/users/invites/links`,\n type: HttpVerbs.POST,\n normalize: false,\n invalidationKeys: ['invites']\n };\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InviteColleagueProblems, InviteColleagueXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nimport { InviteFormInput, InviteFormInputData } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\n\n\nconst ErrorPhraseMap: {[key in InviteColleagueProblems]: string} = {\n 'email-in-use': 'emailInUse',\n 'invalid-email': 'invalidEmail'\n};\n\nconst namespace = 'signUp.helpers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const InputGroupHelper = {\n recalculateFields(\n index: number,\n inputFields: InviteFormInput[],\n minFields: number,\n maxFields: number\n ): InviteFormInput[] {\n // Remove any fields that have empty inputs\n const cleanFields = this.cleanFields(inputFields);\n\n // If all the fields are empty then just remove the current field\n if (!cleanFields.length)\n return this.removeField(index, inputFields, minFields);\n\n const lastInviteData = cleanFields[cleanFields.length - 1];\n\n // Add new empty field if we are entering data in any of the inputs on the last field\n const enteredDataOnLastField = !!(\n index === cleanFields.length - 1 &&\n (cleanFields[index].data.firstName.length || cleanFields[index].data.email.length)\n );\n\n // Add new empty field if the last field currently has data in any of the inputs but is less than max allowed field size\n const shouldAddField = !!(\n cleanFields.length < maxFields &&\n (lastInviteData.data.firstName.length || lastInviteData.data.email.length)\n );\n\n \n if (enteredDataOnLastField || shouldAddField)\n return this.addField(cleanFields, maxFields);\n\n return;\n },\n\n getValidFieldsData(fields: InviteFormInput[]) {\n return fields.reduce((previous, current) => {\n if (current.data.email.length) {\n return [ ...previous, current.data ];\n }\n return previous;\n }, [] as InviteFormInputData[]);\n },\n\n getInputWithErrors(fields: InviteFormInput[], error: InviteColleagueXhr) {\n const inputsWithErrors = [...fields];\n\n const problems = error.responseJSON?.problems;\n\n inputsWithErrors.forEach((input, index) => {\n const error = problems.find(item => item.email === input.data.email);\n if (!error) return;\n inputsWithErrors[index] = {\n ...input,\n error: {\n email: getPhrase(ErrorPhraseMap[error.errorCode])\n }\n };\n });\n\n return inputsWithErrors;\n },\n\n cleanFields(inputFields: InviteFormInput[]): InviteFormInput[] {\n return inputFields.filter(\n item => ((item.data.firstName.length || item.data.email.length))\n );\n },\n\n removeField(index: number, inputFields: InviteFormInput[], minFields: number): InviteFormInput[] {\n if (inputFields.length === minFields || !inputFields[index])\n return inputFields;\n\n return inputFields.filter((_, idx) => idx !== index);\n },\n\n addField(inputFields: InviteFormInput[], maxFields: number): InviteFormInput[] {\n if (inputFields.length >= maxFields)\n return inputFields;\n\n return [ ...inputFields, this.getNewEmptyField() ];\n },\n\n getNewEmptyField(): InviteFormInput {\n return {\n data: {\n firstName: '',\n email: ''\n }\n };\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InviteFormInput, InviteFormInputError } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\n\nconst namespace = 'signUp.helpers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst emailRegex = new RegExp(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/);\nconst firstNameRegex = /^[\\w0-9'\\-,.():;&][^_!¡?÷¿/\\\\+=@#$%ˆ*{}|~<>[\\]]{0,}$/;\n\nexport const InviteValidationHelper = {\n validate(fields: InviteFormInput[]): { fieldsWithErrors: InviteFormInput[], hasErrors: boolean } {\n const fieldsWithErrors = [...fields];\n let hasErrors = false;\n \n fieldsWithErrors.forEach((item, index) => {\n const shouldNotValidate = (\n index === fieldsWithErrors.length - 1 &&\n index !== 0 &&\n (!item.data.email.length && !item.data.firstName.length)\n );\n\n if (shouldNotValidate)\n return;\n \n const currentItemError: InviteFormInputError = {\n firstName: this.validateFirstName(item.data.firstName),\n email: this.validateEmail(item.data.email)\n };\n \n if (currentItemError.firstName || currentItemError.email) {\n item.error = currentItemError;\n\n if (!hasErrors) hasErrors = true;\n }\n });\n\n return { fieldsWithErrors, hasErrors };\n },\n\n validateEmail(email: string): string {\n if (!email.length) {\n return getPhrase('enterValidEmail');\n }\n\n if (!emailRegex.test(email)) {\n return getPhrase('validSchoolEmail');\n }\n },\n \n validateFirstName(firstName: string): string {\n if (!firstName.length) {\n return;\n }\n\n if (!firstNameRegex.test(firstName)) {\n return getPhrase('invalidFirstname');\n }\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AccessPolicy } from 'libs/shared/interfaces/models/AccessPolicy';\n\nconst namespace = 'signUp.hardGateInviteBanner';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface HardGateInviteBannerProps {\n accessPolicy: AccessPolicy;\n reverseTrialReferralCount: number;\n}\n\nexport function HardGateInviteBanner(props: HardGateInviteBannerProps): JSX.Element {\n const { accessPolicy, reverseTrialReferralCount } = props;\n \n return (\n <div className='px-3'>\n <div role='alert' className='bg-light-indigo rounded p-2 mb-4 text-indigo'>\n {getPhrase('titlePrefix')} <strong>{getPhrase('titleEmphasis')}</strong>\n {accessPolicy.metadata.maxReferrals &&\n <div className='text-center'>\n <small>\n {getPhrase('extensionsRedeemed', { count: reverseTrialReferralCount ?? 0, max: accessPolicy.metadata.maxReferrals })}\n </small>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\n\nconst namespace = 'signUp.invite.inviteFormInputGroup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface InviteFormInputData {\n firstName: string;\n email: string;\n}\n\nexport interface InviteFormInputError extends Partial<InviteFormInputData> {}\n\nexport interface InviteFormInput {\n data: InviteFormInputData,\n error?: InviteFormInputError\n}\n\ninterface InviteFormInputItemProps {\n index: number;\n input: InviteFormInput;\n onChange: (field: keyof InviteFormInputData, data: InviteFormInputData) => void;\n clearInputs: () => void;\n}\n\nexport function InviteFormInputItem(props: InviteFormInputItemProps): JSX.Element {\n const { data, error } = props.input;\n\n function onChange<T extends keyof InviteFormInputData>(field: T, value: InviteFormInputData[T]) {\n const newData: InviteFormInputData = {\n ...data,\n [field]: value\n };\n props.onChange(field, newData);\n }\n\n function onChangeFirstName(event: React.ChangeEvent<HTMLInputElement>): void {\n event.preventDefault();\n onChange('firstName', event.target.value);\n }\n\n function onChangeWorkEmail(event: React.ChangeEvent<HTMLInputElement>): void {\n event.preventDefault();\n onChange('email', event.target.value);\n }\n \n return (\n <div className='row mb-2'>\n <div className='col-4'>\n <input\n type='text'\n name={`firstName${props.index}`}\n className='form-control form-control-lg'\n placeholder={getPhrase('firstName')}\n value={data.firstName}\n onChange={onChangeFirstName}\n autoComplete='off'\n />\n {error && error?.firstName &&\n <p className='mb-0 text-danger'>{error.firstName}</p>\n }\n </div>\n <div className='col-8 ps-0'>\n <ClearableInput\n type='text'\n name={`electronicMail${props.index}`}\n className='form-control form-control-lg'\n placeholder={getPhrase('emailAddress', { count: props.index + 1 })}\n value={data.email}\n onChange={onChangeWorkEmail}\n onClickClear={props.clearInputs}\n autoComplete='off'\n showClearButton={!!(data.firstName || data.email)}\n />\n {error && error?.email &&\n <p className='mb-0 text-danger' dangerouslySetInnerHTML={{ __html: error.email }}></p>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { InputGroupHelper } from 'apps/sign-up/helpers/InputGroupHelper';\nimport { InviteFormInput, InviteFormInputData, InviteFormInputItem } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\n\nconst namespace = 'signUp.invite.inviteFormInputGroup';\n\n\ninterface InviteFormInputGroupProps {\n fields: InviteFormInput[];\n setFields: React.Dispatch<React.SetStateAction<InviteFormInput[]>>\n showSpinner: boolean;\n onSubmit: () => void;\n \n minFields: number;\n maxFields: number;\n isTertiary: boolean;\n}\n\nexport function InviteFormInputGroup(props: InviteFormInputGroupProps): JSX.Element {\n const { fields, setFields, minFields, maxFields, isTertiary } = props;\n\n const fieldCount = React.useMemo(() => fields.filter(f => !!f.data.email).length, [fields]);\n\n function onChangeFieldData(index: number, field: keyof InviteFormInputData, data: InviteFormInputData): void {\n if (index > fields.length)\n return;\n\n setFields(fields => {\n const newData = [...fields];\n newData[index].data = data;\n\n // remove any errors for the field\n if (newData[index]?.error && newData[index]?.error[field]) {\n delete newData[index].error[field];\n }\n\n const recalculatedFields = InputGroupHelper.recalculateFields(index, newData, minFields, maxFields);\n\n return recalculatedFields || newData;\n });\n }\n\n function clearInputs(index: number): void {\n if (index > fields.length)\n return;\n\n setFields(fields => {\n const newData = [...fields];\n newData[index].data.firstName = '';\n newData[index].data.email = '';\n\n // remove any errors for the field\n const recalculatedFields = InputGroupHelper.recalculateFields(index, newData, minFields, maxFields);\n\n return recalculatedFields || newData;\n });\n }\n\n return (\n <div className='px-3'>\n <EmptyState.Image\n src={ImageUrls.SignUp.INVITE_COLLEAGUE}\n className='d-block mx-auto'\n />\n <h2 className='h5 text-center'>\n <Text namespace={namespace} phrase={isTertiary ? 'inviteHeadingTertiary' : 'inviteHeading'} />\n </h2>\n <p className='text-center'>\n <Text namespace={namespace} phrase='inviteSubheading' />\n </p>\n <div className='row fw-bold mb-2'>\n <div className='col-4'>\n <Text namespace={namespace} phrase='firstName' />\n </div>\n <div className='col-8 ps-0'>\n <Text namespace={namespace} phrase='workEmailAddress' />\n <span className='text-danger'>*</span>\n </div>\n </div>\n {fields.map((item, index) => (\n <InviteFormInputItem\n input={item}\n key={index}\n index={index}\n onChange={(field, newData) => onChangeFieldData(index, field, newData)}\n clearInputs={() => clearInputs(index)}\n />\n ))}\n <div className='pt-2 pb-3'>\n <SpinnerButton showSpinner={props.showSpinner} variant='dark' className='btn-lg w-100' onClick={props.onSubmit}>\n <Text namespace={namespace} phrase='btnInvite' options={{ smartCount: fieldCount || 1 }} />\n </SpinnerButton>\n </div>\n </div>\n );\n}","import React from 'react';\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';\n\nimport { InviteFormInput } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\n\nconst namespace = 'signUp.invite.inviteFormSuccess';\n\ninterface InviteFormSuccessProps {\n fields: InviteFormInput[];\n onInviteMore: (event: React.MouseEvent) => void;\n}\n\nexport function InviteFormSuccess(props: InviteFormSuccessProps): JSX.Element {\n if (!props.fields?.length)\n return;\n\n return (\n <div className='text-center px-3'>\n <EmptyState.Image\n src={ImageUrls.SignUp.INVITE_COLLEAGUE_SUCCESS}\n className='d-block mx-auto'\n />\n <h2 className='h4'><Text namespace={namespace} phrase='inviteSent' /></h2>\n <p className='mb-0'><Text namespace={namespace} phrase='emailSentTo' /></p>\n <div className='mb-3'>\n {props.fields.map((item, index) => {\n const { firstName, email } = item.data;\n\n if (!email)\n return;\n\n return (\n <p className='mb-0' key={index}>\n {!!firstName.length &&\n <strong>{firstName}</strong>\n }\n \n ({email})\n </p>\n );\n })}\n </div>\n <p>\n <Text namespace={namespace} phrase='moreInvite' /> \n <a\n onClick={props.onInviteMore}\n className='info-link p-0'\n >\n <Text namespace={namespace} phrase='inviteMore' />\n </a>\n </p>\n </div>\n );\n}","import React from 'react';\n\nimport { InviteFormInputGroup } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputGroup';\nimport { InviteFormInput } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\nimport { InviteFormSuccess } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-success/InviteFormSuccess';\n\ninterface InviteFormProps {\n maxFields: number;\n minFields: number;\n fields: InviteFormInput[];\n setFields: React.Dispatch<React.SetStateAction<InviteFormInput[]>>\n showSpinner: boolean;\n completed: boolean;\n onSubmit: () => Promise<void>;\n onInviteMore: () => void;\n isTertiary: boolean;\n}\n\nexport function InviteForm(props: InviteFormProps): JSX.Element {\n const { fields, setFields, showSpinner, onSubmit } = props;\n\n function onInviteMore(event: React.MouseEvent) {\n event.preventDefault();\n props.onInviteMore();\n }\n \n if (!fields.length)\n return <></>;\n\n if (props.completed) {\n return <InviteFormSuccess fields={fields} onInviteMore={onInviteMore} />;\n }\n \n return (\n <InviteFormInputGroup\n fields={fields}\n setFields={setFields}\n showSpinner={showSpinner}\n onSubmit={onSubmit}\n maxFields={props.maxFields}\n minFields={props.minFields}\n isTertiary={props.isTertiary}\n />\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nconst namespace = 'signUp.invite.inviteTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type InviteTabs = 'inviteForm' | 'pendingInvites';\n\ninterface InviteTabsProps {\n activeTab: InviteTabs;\n onChangeTab: (tab: InviteTabs) => void;\n}\n\nexport function InviteTabs(props: InviteTabsProps): JSX.Element {\n const tabs: PillTab[] = [{\n name: getPhrase('invite'),\n onSelect: () => props.onChangeTab('inviteForm'),\n active: props.activeTab === 'inviteForm',\n analyticsData: {\n name: getPhrase('invite')\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('pending'),\n onSelect: () => props.onChangeTab('pendingInvites'),\n active: props.activeTab === 'pendingInvites',\n analyticsData: {\n name: getPhrase('pending')\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n \n return (\n <PillTabSelector\n className='d-flex justify-content-center mb-3'\n tabs={tabs}\n />\n );\n}","import React from 'react';\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';\n\nconst namespace = 'signUp.invite.pendingInvites';\n\ninterface EmptyPendingInvitesProps {\n onInviteMore: () => void;\n}\n\nexport function EmptyPendingInvites(props: EmptyPendingInvitesProps): JSX.Element {\n function onInviteMore(event: React.MouseEvent): void {\n event.preventDefault();\n props.onInviteMore();\n }\n \n return (\n <div className='text-center py-4 px-3'>\n <EmptyState.Image\n src={ImageUrls.SignUp.EMPTY_PENDING_INVITES}\n className='d-block mx-auto'\n />\n <h2 className='h5 mb-0'>\n <Text namespace={namespace} phrase='emptyTitle' />\n </h2>\n <p>\n <Text namespace={namespace} phrase='emptyDescription' />\n \n <a onClick={onInviteMore} className='info-link'>\n <Text namespace={namespace} phrase='emptyAction' />\n </a>\n </p>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"cin_G\",\"oneLine\":\"FrlTw\",\"twoLine\":\"rBQWR\",\"minPendingHeight\":\"LMnOk\"};","import React from 'react';\n\nimport styles from './pending-invites.scss';\n\nfunction PartialPendingInvitesItem() {\n return (\n <div className='d-flex mb-2 justify-content-between'>\n <div className='col-8 d-flex align-items-center'>\n <div className={`partial-loading-background rounded-circle ${styles.avatar}`}></div>\n <div className='ms-2 w-100'>\n <div className={`partial-loading-background mb-1 w-50 ${styles.oneLine}`}></div>\n <div className={`partial-loading-background w-100 ${styles.oneLine}`}></div>\n </div>\n </div>\n <div className='col d-flex align-items-center justify-content-end'>\n <div className={`partial-loading-background w-100 ${styles.twoLine}`}></div>\n </div>\n </div>\n );\n}\n\nexport function PartialPendingInvites() {\n return (\n <div className='px-3'>\n <div className={`partial-loading-background w-25 m-2 ${styles.oneLine}`}></div>\n {Array(6).fill(null).map((item, index) => <PartialPendingInvitesItem key={index} />)}\n </div>\n );\n}","export enum InviteStatus {\n Active = 'Active',\n Accepted = 'Accepted',\n Expired = 'Expired'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\n\nimport { InviteStatus } from 'apps/sign-up/enums/InviteStatus';\n\nconst namesapce = 'signUp.helpers';\nconst getPhrase = LanguageService.encloseNamespace(namesapce);\n\ninterface ItemActionsOptions {\n status: InviteStatus,\n resendInvite: () => void,\n removeInvite: () => void\n}\n\nexport const PendingInvitesHelper = {\n getItemActions(options: ItemActionsOptions): DropdownActionOptions[] {\n const { status, resendInvite, removeInvite } = options;\n\n if (status === InviteStatus.Accepted) return [];\n \n const actions: DropdownActionOptions[] = [\n {\n label: getPhrase('resendInvite'),\n onClick: resendInvite\n },\n {\n label: getPhrase('removeInvite'),\n onClick: removeInvite,\n className: 'text-danger'\n }\n ];\n \n return actions;\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { InviteStatus } from 'apps/sign-up/enums/InviteStatus';\n\nconst namespace = 'signUp.invite.inviteStatusInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InviteStatusInfoProps {\n status: InviteStatus;\n}\n\nexport function InviteStatusInfo(props: InviteStatusInfoProps): JSX.Element {\n if (props.status === InviteStatus.Accepted) {\n return (\n <InviteStatusInfoFrame\n extraContainerClass='text-success'\n renderSvg={() => (\n <SvgContainer\n size={SvgContainerSize.Small}\n svgName={cvSvgLibrary.Check}\n />\n )}\n text={getPhrase('accepted')}\n />\n );\n }\n\n if (props.status === InviteStatus.Active) {\n return (\n <InviteStatusInfoFrame\n renderSvg={() => (\n <SvgContainer\n size={SvgContainerSize.Small}\n svgName={cvSvgLibrary.PendingCircle}\n className='d-inline-block svg-container text-info'\n />\n )}\n extraTextClass='text-secondary'\n text={getPhrase('active')}\n />\n );\n }\n\n if (props.status === InviteStatus.Expired) {\n return (\n <InviteStatusInfoFrame\n extraContainerClass='text-danger'\n renderSvg={() => (\n <SvgContainer\n size={SvgContainerSize.Small}\n svgName={cvSvgLibrary.Close}\n className='d-inline-block svg-container'\n />\n )}\n text={getPhrase('expired')}\n />\n );\n }\n\n return <></>;\n}\n\ninterface InviteStatusInfoFrameProps {\n text: string;\n\n renderSvg?: () => React.ReactElement;\n extraContainerClass?: string;\n extraTextClass?: string;\n}\n\nfunction InviteStatusInfoFrame(props: InviteStatusInfoFrameProps): JSX.Element {\n function mergeClassNames(baseClass: string, extraClass: string): string {\n if (extraClass)\n return `${baseClass} ${extraClass}`;\n\n return baseClass;\n }\n\n const containerClass = mergeClassNames('d-flex align-items-center', props.extraContainerClass);\n const textClass = mergeClassNames('ps-1', props.extraTextClass);\n \n return (\n <div className={containerClass}>\n {props.renderSvg && props.renderSvg()}\n <small className={textClass}>\n {props.text}\n </small>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"VsdKR\",\"email\":\"L65Cs\"};","import React from 'react';\n\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PendingInvitesHelper } from 'apps/sign-up/helpers/PendingInvitesHelper';\nimport { Invitation } from 'apps/sign-up/models/Invitation';\nimport { InviteStatusInfo } from 'apps/sign-up/views/invite-colleague/components/invite/invite-status-info/InviteStatusInfo';\n\nimport styles from './pending-invites-item.scss';\n\ninterface PendingInvitesItemProps {\n imageCdnUrl: string;\n invite: Invitation;\n removeInvite: (id: string) => void;\n resendInvite: (id: string) => void;\n}\n\ninterface InviteAvatarProps {\n imageCdnUrl: string;\n initial: string;\n userId: string;\n}\n\nfunction InviteAvatar(props: InviteAvatarProps): JSX.Element {\n if (props.initial) {\n return (\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.initial}\n />\n );\n }\n\n return (\n <div className='d-flex align-items-center justify-content-center rounded-circle bg-dark text-white w-100 h-100'>\n <SvgContainer svgName={cvSvgLibrary.Email} size={SvgContainerSize.Large} />\n </div>\n );\n}\n\nexport function PendingInvitesItem(props: PendingInvitesItemProps): JSX.Element {\n const { invitee, status } = props.invite;\n const email = invitee?.email ?? props.invite.metadata.email;\n const actions = PendingInvitesHelper.getItemActions({\n status,\n resendInvite: () => props.resendInvite(props.invite.id),\n removeInvite: () => props.removeInvite(props.invite.id)\n });\n const firstName = props.invite.metadata?.firstName;\n const initial = firstName?.substr(0, 1);\n \n return (\n <div className='d-flex mb-2 justify-content-between px-3'>\n <div className='d-flex align-items-center ps-0'>\n <div className={styles.avatar}>\n <InviteAvatar\n initial={initial}\n userId={invitee?.userId}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n <div className='ms-2'>\n {!!firstName &&\n <h3 className='h6 mb-0'>{firstName}</h3>\n }\n <p\n className={`mb-0 text-secondary w-100 text-truncate ${styles.email}`}\n title={email}\n >\n {email}\n </p>\n </div>\n </div>\n <div className='d-flex align-items-center justify-content-between pe-0'>\n <InviteStatusInfo status={status} />\n {!!actions.length &&\n <ActionsDropdown\n dropdownToggleClassName='btn btn-link ms-1'\n actions={actions}\n />\n }\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { Invitation } from 'apps/sign-up/models/Invitation';\nimport { EmptyPendingInvites } from 'apps/sign-up/views/invite-colleague/components/invite/pending-invites/EmptyPendingInvites';\nimport { PartialPendingInvites } from 'apps/sign-up/views/invite-colleague/components/invite/pending-invites/PartialPendingInvites';\nimport { PendingInvitesItem } from 'apps/sign-up/views/invite-colleague/components/invite/pending-invites-item/PendingInvitesItem';\n\nimport styles from './pending-invites.scss';\n\nconst namespace = 'signUp.invite.pendingInvites';\n\ninterface PendingInvitesProps {\n imageCdnUrl: string;\n invites: Invitation[];\n isLoading: boolean;\n removeInvite: (id: string) => void;\n resendInvite: (id: string) => void;\n onInviteMore: () => void;\n}\n\nexport function PendingInvites(props: PendingInvitesProps): JSX.Element {\n if (props.isLoading) {\n return <PartialPendingInvites />;\n }\n \n if (!props?.invites?.length) {\n return <EmptyPendingInvites onInviteMore={props.onInviteMore} />;\n }\n\n return (\n <div className='px-1'>\n <h3 className='h6 px-3'>\n <Text namespace={namespace} phrase='heading' />\n </h3>\n <Scrollbars\n className={`${styles.minPendingHeight}`}\n >\n {props.invites.map((item, index) => (\n <PendingInvitesItem\n key={index}\n invite={item}\n imageCdnUrl={props.imageCdnUrl}\n removeInvite={props.removeInvite}\n resendInvite={props.resendInvite}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { CopyInput } from 'libs/shared/components/copy-input/CopyInput';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'signUp.invite.shareInviteLink';\n\ninterface ShareInviteLinkProps {\n link: string;\n showSpinner: boolean;\n onClickCreate: () => void;\n onClickDelete: () => void;\n}\n\nexport function ShareInviteLink(props: ShareInviteLinkProps): JSX.Element {\n if (props.showSpinner) {\n return (\n <div className='text-center w-100'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n \n return (\n <div className='w-100'>\n <div className='d-flex justify-content-between'>\n <h2 className='h6'><Text namespace={namespace} phrase='title' /></h2>\n {props.link &&\n <button className='btn btn-link info-link p-0 mb-2' onClick={props.onClickDelete}>\n <Text namespace={namespace} phrase='delete' />\n </button>\n }\n </div>\n \n {props.link\n ? <CopyInput value={props.link} />\n : <div className='d-flex w-100 justify-content-between'>\n <div>\n <SvgContainer svgName={cvSvgLibrary.Link} className='me-2 d-inline-block svg-container' />\n <Text namespace={namespace} phrase='generate' />\n </div>\n <button className='btn info-link p-0' onClick={props.onClickCreate}>\n <Text namespace={namespace} phrase='create' />\n </button>\n </div>\n }\n </div>\n );\n}","/**\n * Differe ways we can invite prospects.\n * @readonly\n * @enum {string}\n */\nexport enum InviteType {\n Link = 'link',\n Direct = 'direct'\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { AccessPolicy } from 'libs/shared/interfaces/models/AccessPolicy';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'signUp.softGateInviteBanner';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SoftGateInviteBannerProps {\n accessPolicy: AccessPolicy;\n reverseTrialReferralCount: number;\n}\n\nexport function SoftGateInviteBanner(props: SoftGateInviteBannerProps): JSX.Element {\n const { accessPolicy, reverseTrialReferralCount } = props;\n \n return (\n <div className='px-3'>\n <div role='alert' className='bg-light-indigo rounded p-2 mb-4 text-indigo text-center'>\n <div className='d-flex align-items-center justify-content-center'>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <div>\n {getPhrase('titlePrefix')}\n \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 >\n <strong>{getPhrase('titleEmphasis', { bonusDays: accessPolicy.metadata.referralBonusTime.split('.')[0] })}</strong>\n </AppLink>\n </div>\n </div>\n {accessPolicy.metadata.maxReferrals &&\n <div>\n <small>\n {getPhrase('extensionsRedeemed', { count: reverseTrialReferralCount ?? 0, max: accessPolicy.metadata.maxReferrals })}\n </small>\n </div>\n }\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"minHeight\":\"tWSzO\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\nimport { InviteColleagueXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\nimport { ErrorMessageHelper } from 'libs/shared/utils/error-message-helper/ErrorMessageHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { InviteColleagueRequests } from 'apps/sign-up/flight-requests/InviteColleagueRequests';\nimport { InputGroupHelper } from 'apps/sign-up/helpers/InputGroupHelper';\nimport { InviteValidationHelper } from 'apps/sign-up/helpers/InviteValidationHelper';\nimport { Invitation } from 'apps/sign-up/models/Invitation';\nimport { HardGateInviteBanner } from 'apps/sign-up/views/invite-colleague/components/invite/hard-gate-invite-banner/HardGateInviteBanner';\nimport { InviteForm } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form/InviteForm';\nimport { InviteFormInput, InviteFormInputData } from 'apps/sign-up/views/invite-colleague/components/invite/invite-form-input-group/InviteFormInputItem';\nimport { InviteTabs } from 'apps/sign-up/views/invite-colleague/components/invite/invite-tabs/InviteTabs';\nimport { PendingInvites } from 'apps/sign-up/views/invite-colleague/components/invite/pending-invites/PendingInvites';\nimport { ShareInviteLink } from 'apps/sign-up/views/invite-colleague/components/invite/share-invite-link/ShareInviteLink';\nimport { SoftGateInviteBanner } from 'apps/sign-up/views/invite-colleague/components/invite/soft-gate-invite-banner/SoftGateInviteBaner';\nimport { useSplitInvites } from 'apps/sign-up/views/invite-colleague/useSplitInvites';\n\nimport styles from './invite-colleague.scss';\n\nconst namespace = 'signUp.inviteColleage';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MIN_FIELDS = 1;\nconst MAX_FIELDS = 5;\n\ninterface InviteColleagueViewProps extends PopupViewProps {\n tab: InviteTabs;\n}\n\nexport interface FormSubmitResponse {\n data: InviteFormInput[];\n hasErrors: boolean;\n}\n\nexport function InviteColleagueView(props: InviteColleagueViewProps): JSX.Element {\n const [ tab, setTab ] = React.useState<InviteTabs>(props.tab);\n const [ showShareLinkSpinner, setShowShareLinkSpinner ] = React.useState<boolean>(false);\n const [ formCompleted, setFormCompleted ] = React.useState(false);\n\n const [ showFormSpinner, setShowFormSpinner ] = React.useState(false);\n const [ fields, setFields ] = React.useState<InviteFormInput[]>(() => [InputGroupHelper.getNewEmptyField()]);\n\n const { accessPolicy } = useAccessPolicy();\n const { reverseTrialReferralCount } = useSettings(null);\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n const isTertiary = useIsTertiary();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const invites = Flight.useBasicFetch<Invitation[]>(InviteColleagueRequests.inviteByType());\n\n const { directInvites, links } = useSplitInvites(invites.data);\n const link = links?.[0];\n\n async function onClickCreateLink(): Promise<void> {\n setShowShareLinkSpinner(true);\n\n try {\n await fetchAsync(InviteColleagueRequests.createInviteLink());\n } catch {\n alerts.error(getPhrase('error'));\n } finally {\n setShowShareLinkSpinner(false);\n }\n }\n\n async function onClickDeleteLink(): Promise<void> {\n try {\n await fetchAsync(InviteColleagueRequests.deleteInvite(link.id));\n alerts.success(getPhrase('deleteLinkSuccess'));\n } catch (err) {\n alerts.error(ErrorMessageHelper.inviteColleagueError(err));\n }\n }\n\n async function onFormSubmit() {\n if (showFormSpinner) return;\n \n const { fieldsWithErrors, hasErrors } = InviteValidationHelper.validate(fields);\n if (hasErrors) {\n setFields(fieldsWithErrors);\n return;\n }\n \n try {\n setShowFormSpinner(true);\n const validFieldsData: InviteFormInputData[] = InputGroupHelper.getValidFieldsData(fields);\n await fetchAsync(InviteColleagueRequests.invite(validFieldsData));\n setFormCompleted(true);\n logSuccess(validFieldsData.length);\n return;\n } catch (err) {\n const error = err as InviteColleagueXhr;\n\n if (error.responseJSON?.type !== 'create-invitation-failed') {\n alerts.error(ErrorMessageHelper.inviteColleagueError(error));\n return;\n }\n\n const inputsWithErrors = InputGroupHelper.getInputWithErrors(fields, error);\n\n setFields(inputsWithErrors);\n } finally {\n setShowFormSpinner(false);\n }\n }\n\n function logSuccess(emailCount: number) {\n AnalyticsHelper.logUserAction({ emailCount }, {\n actionType: UserAction.SendEmail,\n location: LocationContext.TrialBanner,\n entity: EntityType.User,\n descriptor: SignUpDescriptors.InviteColleague,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n function handleInviteMore() {\n setFormCompleted(false);\n setFields([InputGroupHelper.getNewEmptyField()]);\n if (tab !== 'inviteForm') {\n setTab('inviteForm');\n setShowFormSpinner(false);\n }\n }\n\n async function handleRemoveInvite(id: string): Promise<void> {\n try {\n await fetchAsync(InviteColleagueRequests.deleteInvite(id));\n alerts.success(getPhrase('removeSuccess'));\n } catch (err) {\n alerts.error(ErrorMessageHelper.inviteColleagueError(err));\n }\n }\n\n async function handleResendInvite(id: string): Promise<void> {\n try {\n await fetchAsync(InviteColleagueRequests.resendInvite(id));\n alerts.success(getPhrase('resendSuccess'));\n } catch (err) {\n alerts.error(ErrorMessageHelper.inviteColleagueError(err));\n }\n }\n\n const hasLoaded = (currentUser.hasCompleted && config.hasCompleted && invites.hasCompleted);\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n bodyClassName='modal-body px-0'\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded &&\n <>\n <div className={styles.minHeight}>\n {accessPolicy?.metadata?.referralBonusTime &&\n <SoftGateInviteBanner accessPolicy={accessPolicy} reverseTrialReferralCount={reverseTrialReferralCount} />\n }\n {accessPolicy?.metadata?.referralReactivationPolicy &&\n <HardGateInviteBanner accessPolicy={accessPolicy} reverseTrialReferralCount={reverseTrialReferralCount} />\n }\n \n {!formCompleted &&\n <InviteTabs activeTab={tab} onChangeTab={tab => setTab(tab)} />\n }\n\n {(() => {\n if (tab === 'pendingInvites')\n return (\n <PendingInvites\n imageCdnUrl={config.data.imageCdnUrl}\n invites={directInvites}\n onInviteMore={handleInviteMore}\n removeInvite={handleRemoveInvite}\n resendInvite={handleResendInvite}\n isLoading={!invites.hasCompleted}\n />\n );\n\n return (\n <InviteForm\n fields={fields}\n setFields={setFields}\n showSpinner={showFormSpinner}\n completed={formCompleted}\n onSubmit={onFormSubmit}\n onInviteMore={handleInviteMore}\n maxFields={MAX_FIELDS}\n minFields={MIN_FIELDS}\n isTertiary={isTertiary}\n />\n );\n })()}\n </div>\n {!formCompleted &&\n <div className='px-3'>\n <PopupButtons>\n <ShareInviteLink\n onClickCreate={onClickCreateLink}\n onClickDelete={onClickDeleteLink}\n link={link?.inviteUrl}\n showSpinner={showShareLinkSpinner}\n />\n </PopupButtons>\n </div>\n }\n </>\n }\n </Popup>\n );\n}","import React from 'react';\n\nimport { InviteType } from 'apps/sign-up/enums/InviteType';\nimport { Invitation } from 'apps/sign-up/models/Invitation';\n\nexport function useSplitInvites(invites: Invitation[]) {\n return React.useMemo(() => {\n if (!invites) {\n return { directInvites: null, links: null };\n }\n\n return invites.reduce((prev, curr) => {\n if (curr.type === InviteType.Direct) {\n prev.directInvites.push(curr);\n return prev;\n }\n\n prev.links.push(curr);\n return prev;\n }, {\n directInvites: [] as Invitation[],\n links: [] as Invitation[]\n });\n }, [invites]);\n}","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["CloseIcon","viewBox","d","ClearableInput","props","ref","onClickClear","showClearButton","clearClassName","inputProps","className","value","role","onClick","onKeyDown","e","key","tabIndex","getPhrase","LanguageService","CopyInput","showCopiedText","localShowCopiedText","setLocalShowCopiedText","revertLocalShowCopiedText","setTimeout","onCopy","input","styling","textarea","hasInputBg","spellCheck","rows","readOnly","type","autoComplete","CopyToClipboard","text","IconButton","svgName","extraButtonClassNames","copiedText","copyText","label","Form","defaultProps","TabContents","tab","name","count","data","PillTabSelector","containerRef","borderRadius","listClassName","tabs","map","index","active","appLink","analyticsData","analyticsOptions","onSelect","onSelectTab","InviteColleagueRequests","invite","url","normalize","HttpVerbs","invalidationKeys","inviteByType","deleteInvite","id","resendInvite","createInviteLink","ErrorPhraseMap","InputGroupHelper","recalculateFields","inputFields","minFields","maxFields","cleanFields","this","length","removeField","lastInviteData","enteredDataOnLastField","firstName","email","shouldAddField","addField","getValidFieldsData","fields","reduce","previous","current","getInputWithErrors","error","inputsWithErrors","problems","responseJSON","forEach","find","item","errorCode","filter","_","idx","getNewEmptyField","emailRegex","RegExp","firstNameRegex","InviteValidationHelper","validate","fieldsWithErrors","hasErrors","currentItemError","validateFirstName","validateEmail","test","HardGateInviteBanner","accessPolicy","reverseTrialReferralCount","metadata","maxReferrals","max","InviteFormInputItem","onChange","field","newData","placeholder","event","preventDefault","target","clearInputs","dangerouslySetInnerHTML","__html","InviteFormInputGroup","setFields","isTertiary","fieldCount","f","EmptyState","src","ImageUrls","Text","namespace","phrase","onChangeFieldData","SpinnerButton","showSpinner","variant","onSubmit","options","smartCount","InviteFormSuccess","onInviteMore","InviteForm","completed","InviteTabs","onChangeTab","activeTab","actionType","entity","location","EmptyPendingInvites","PartialPendingInvitesItem","PartialPendingInvites","Array","fill","InviteStatus","PendingInvitesHelper","getItemActions","status","removeInvite","Accepted","InviteStatusInfo","InviteStatusInfoFrame","extraContainerClass","renderSvg","SvgContainer","size","S","Active","extraTextClass","Expired","mergeClassNames","baseClass","extraClass","containerClass","textClass","InviteAvatar","initial","Avatar","imageCdnUrl","initials","PendingInvitesItem","invitee","actions","substr","userId","title","ActionsDropdown","dropdownToggleClassName","PendingInvites","isLoading","invites","ShareInviteLink","Spinner","as","animation","link","onClickDelete","onClickCreate","InviteType","SoftGateInviteBanner","AppLink","application","action","bonusDays","referralBonusTime","split","MIN_FIELDS","MAX_FIELDS","InviteColleagueView","setTab","showShareLinkSpinner","setShowShareLinkSpinner","formCompleted","setFormCompleted","showFormSpinner","setShowFormSpinner","useAccessPolicy","useSettings","fetchAsync","alerts","useIsTertiary","currentUser","UserRequests","config","ConfigRequests","prev","curr","Direct","directInvites","push","links","useSplitInvites","logSuccess","emailCount","AnalyticsHelper","descriptor","workflowPhase","handleInviteMore","hasLoaded","hasCompleted","Popup","closePopup","bodyClassName","showLoadingSpinner","referralReactivationPolicy","success","ErrorMessageHelper","validFieldsData","PopupButtons","inviteUrl","deselectCurrent","clipboardToIE11Formatting","module","exports","debug","message","reselectPrevious","range","selection","mark","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","clipboardData","console","warn","window","clearData","setData","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","copyKey","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","i","arguments","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_defineProperties","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_assertThisInitialized","self","ReferenceError","_getPrototypeOf","getPrototypeOf","_React$PureComponent","subClass","superClass","TypeError","create","_inherits","Constructor","protoProps","Derived","hasNativeReflectConstruct","_super","Reflect","construct","sham","Proxy","Boolean","valueOf","call","_isNativeReflectConstruct","result","Super","NewTarget","_possibleConstructorReturn","_this","instance","_classCallCheck","_len","args","_key","concat","_this$props","children","elem","Children","only","_this$props2","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","cloneElement","PureComponent","undefined","rangeCount","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8672],{26136:(e,t,a)=>{a.d(t,{B:()=>s});var n=a(76198),r=a(23481),i=a(64818),c=r.T.encloseNamespace("shared.analyticsUtils");function s(e,t){return e?t?(0,n._8)((a=e.id,r=e.sessionId,s=+"".concat(a||function(e){if(!e)return 0;for(var t=0,a=0;a<e.length;a++)t=(t<<5)-t+e.charCodeAt(a),t|=0;return Math.abs(t)}(r)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:s})):e.deleted?c("deleted"):i.l.getFullName(e)||c("anonUser"):c("anonUser");var a,r,s}},40782:(e,t,a)=>{a.d(t,{I:()=>n,O:()=>o});var n,r=a(32735),i=a(2606),c=a(362);function s(e){var t=r.useCallback(function(t){if(t){var a=t.r.baseVal.value,n=2*Math.PI*a,r=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=r.toString()}},[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:c.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function o(e){var t,a=(0,i.Ki)(e.percentage),o=e.size||(e.layout===n.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(a);return e.layout===n.LabelOnly?r.createElement("span",{className:(0,i.IA)(a)},l):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&r.createElement("span",{className:"me-2"},l),r.createElement("div",{className:(0,i.tw)(o,a)},r.createElement(s,{percentage:a,size:o,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&r.createElement("span",{className:c.Z.centredPercentageText},l)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),o.defaultProps={layout:n.CircleOnly}},2606:(e,t,a)=>{a.d(t,{DV:()=>y,IA:()=>g,Ki:()=>p,Mk:()=>s,V4:()=>m,pu:()=>d,tw:()=>v,zR:()=>f});var n=a(94892),r=a(362);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function c(e,t,a){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var s,o=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(s||(s={}));var u=c(c(c({},s.ExtraSmall,{size:2}),s.Small,{size:2}),s.Large,{size:5.8});function d(e){var t=u[e].size,a=e===s.Large?l:o;return"".concat(t/2-2*a,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?r.Z.circleSuccess:e>=t.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function v(e,t){var a="d-inline-block ".concat(r.Z.circleContainer);return e===s.Large&&(a+=" ".concat(r.Z.lgCircleContainer)),e===s.ExtraSmall&&(a+=" ".concat(r.Z.xsCircleContainer)),f(t)&&(a+=" ".concat(r.Z.pendingCircle)),a}function p(e){if(!f(e))return+e.toFixed(2)}function y(e){return f(e)?"--%":"".concat(Math.round(100*e),"%")}function f(e){return"number"!=typeof e}},94892:(e,t,a)=>{a.d(t,{T:()=>r,i:()=>n});var n={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},18006:(e,t,a)=>{a.d(t,{A:()=>n});var n="GRWx6w"},9566:(e,t,a)=>{a.d(t,{$Z:()=>p,G6:()=>m,GJ:()=>v,VE:()=>h,_w:()=>g,po:()=>f,vJ:()=>y});var n=a(23481),r=a(110),i=a(33518),c=a(2510),s=a(4594),o=a(35223),l=a(14070),u=a(97291),d=n.T.encloseNamespace("myShares.demoInsights"),m={type:c.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:s.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},g=Object.assign(Object.assign({},m),{type:c.y.Open,expireDate:r.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),v={share:m,sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString()},p=Object.assign(Object.assign({},v),{share:g}),y={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},f={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},h={svgName:o.vn.Analytics,label:d("demoInsights"),appLink:y,group:"insights",className:"btn btn-outline-dark"}},44183:(e,t,a)=>{a.r(t),a.d(t,{InsightsHeatmapDemoView:()=>I});var n=a(32735),r=a(23481),i=a(2948),c=a(20354),s=a(26025),o=a(2510),l=a(60051),u=a(39151),d=a(54405),m=a(47812),g=a(31949),v=a(93322),p=a(79612),y=a(86702),f=a(74049),h=a(17132),b=a(18006),S=a(9566),E=a(10447);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var k=r.T.encloseNamespace("shared.insightsHeatmap");function I(e){var t,a,r,I,w,C,j,D,A=(j=(0,i.D)(y.y.ANONYMISE_USERS),D=1,function(e){if(Array.isArray(e))return e}(j)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,c,s=[],o=!0,l=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){l=!0,r=e}finally{try{if(!o&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(l)throw r}}return s}}(j,D)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?O(e,t):void 0}}(j,D)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];(0,v.F)();var M=c.a.useBasicFetch(g.N.currentUser()),R=c.a.useBasicFetch(d.X.interactiveMetadata()),L=c.a.useBasicFetch(u.L.config()),N=s.B.getAudienceAppLinkParams(),T=s.B.getDateRangeAppLinkParams(),_=c.a.useBasicFetch(d.X.aggregateHeatmap()),x=c.a.useBasicFetch(d.X.individualHeatmap()),z=c.a.useBasicFetch(d.X.users()),V=c.a.useBasicFetch(d.X.videoViews()),H=c.a.useBasicFetch(R.data&&m.k.createViewKey(b.A,l.f.Share));(0,p.M)({title:R.data?k("pageTitle",{video:null===(t=R.data)||void 0===t?void 0:t.name}):null});var B=!!(M.data&&V.data&&R.data&&_.data&&H.data&&z.data),P=!!x.data,G=Object.assign(Object.assign({},N),T),Z=e.type===o.y.Open?S._w:S.G6;return n.createElement("div",{className:"px-3"},n.createElement(f.j,{video:R.data,tabs:(0,E.aq)(null===(a=R.data)||void 0===a?void 0:a.id,"heatmap",G,e.type),dateRangeAppLinkParams:T,share:Object.assign(Object.assign({},Z),{objectId:null!==(I=null===(r=R.data)||void 0===r?void 0:r.id)&&void 0!==I?I:"0"}),yearGroups:[],markingRequired:e.type!==o.y.Open,isDemo:!0,hasData:!0}),n.createElement(h.w,{aggregateEngagement:_.data,individualEngagement:null===(w=x.data)||void 0===w?void 0:w.data,yearGroups:null===(C=V.data)||void 0===C?void 0:C.yearGroupCount,config:L.data,users:z.data,viewKey:H.data,hasDataLoaded:B,tableDataLoaded:P,anonymiseUsers:A,hideStaffResults:!1}))}},362:(e,t,a)=>{a.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
|
|
2
|
-
//# sourceMappingURL=8672-6967ce8a23-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8672-6967ce8a23-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/views/demo/heatmap/InsightsHeatmapDemoView.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\n};","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","export const DEMO_INTERACTIVE_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n dateShared: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapDemoViewProps {\n type?: ShareType;\n}\n\nexport function InsightsHeatmapDemoView(props: InsightsHeatmapDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(DEMO_INTERACTIVE_ID, MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: video.data?.id ?? '0'\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n hideStaffResults={false}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","PercentageIndicatorLayout","ProgressCircle","props","ref","circle","radius","r","baseVal","value","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","className","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","ScoreThresholdDefaults","ScoreThresholdInsights","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_ID","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","svgName","appLink","group","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","title","name","hasDataLoaded","tableDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","yearGroupCount","hideStaffResults"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9295,9149,4519],{57724:(e,t,n)=>{n.d(t,{g:()=>l});var r=n(32735),a=n(31453),s=n(83345),o="shared.newBadge";function l(e){return r.createElement("span",{className:(0,a.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-blue","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-blue",e.className)},e.text||r.createElement(s.x,{phrase:"new",namespace:o}))}},35690:(e,t,n)=>{n.d(t,{QD:()=>T,Qv:()=>S,__:()=>A});var r=n(32735),a=n(68050),s=n(69111),o=n(42648),l=n(82602),i=n(31453),c=n(1619),m=n(83345),u=n(4594),d="sharev2.shareViewCount";function p(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement(m.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var g=n(2510),f=n(83914),v=n(35223);function h(e){return[u.E.Playlist,u.E.Series].includes(e.share.objectTypeId)?r.createElement("span",null,"-"):r.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},r.createElement(f.x,{svgName:v.vn.User}),r.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===g.y.Open)return"".concat(t);if(e.share.type===g.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var y=n(21789),b=n(15611),C=n(91693);const x={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var E="assign.previousAssignments";function w(e){return r.createElement("div",{className:(0,i.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},r.createElement("h3",{className:"h6 m-0 p-0"},r.createElement(m.x,{namespace:E,phrase:"heading",options:{count:e.count}})),r.createElement(C.h,{svgName:e.show?v.vn.ChevronUp:v.vn.ChevronDown,onClick:e.onToggle}))}function A(){var e="d-flex align-items-end justify-content-start fw-medium";return r.createElement(m.D.Provider,{value:E},r.createElement(a.Z,{className:"gx-2 px-3 mb-2"},r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"assignedTo"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"views"})),r.createElement(s.Z,{xs:2,className:e},r.createElement(m.x,{phrase:"viewedBy"})),r.createElement(s.Z,{xs:4,className:e},r.createElement(m.x,{phrase:"dateCreated"}))))}function N(e){var t,n,o=y.x.getClassroomForShare(e.share,e.classrooms),u=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return r.createElement(b.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==u?void 0:u.data,analyticsOptions:null==u?void 0:u.options,className:(0,i.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",x.shareListItem,e.className)},r.createElement(a.Z,{className:"gx-2"},r.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},r.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==o?void 0:o.name,svgSize:f.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,i.A)(x.shareAvatar),titleClassName:(0,i.A)("text-truncate",x.shareAvatarTitle),hideSubtitle:!0})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(p,{share:e.share})),r.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},r.createElement(h,{share:e.share})),r.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},r.createElement("span",null,(0,l.WU)(e.share.dateCreated))),r.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},r.createElement("span",{className:(0,i.A)("cursor-pointer text-info hover-text-underline",x.visibleOnHover)},r.createElement(m.x,{namespace:E,phrase:"view"})))))}function S(e){var t;return r.createElement("div",{className:(0,i.A)("d-flex flex-column border-top rounded-top overflow-hidden")},r.createElement(o.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return r.createElement(N,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var r;return null===(r=e.getItemAnalytics)||void 0===r?void 0:r.call(e,t,n)},className:(0,i.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function T(e){if(!e.assignments.length)return r.createElement(r.Fragment,null);var t=e.show&&e.assignments.length>3;return r.createElement("div",{className:(0,i.A)("bg-white rounded-3 p-3",t&&"pb-0")},r.createElement(w,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&r.createElement(r.Fragment,null,r.createElement(A,null),r.createElement(S,Object.assign({},e))))}},7908:(e,t,n)=>{n.r(t),n.d(t,{AssignFlowView:()=>Q});var r=n(32735),a=n(89067),s=n(72985),o=n(23481),l=n(31453),i=n(65858),c=n(9111),m=n(99998),u=n(35690),d=n(7786),p=n(57724),g=n(53172),f=n(83345),v="shared.recommendedBadge";function h(e){var t;return r.createElement("span",{className:(0,l.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium text-teal","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-teal",e.className)},null!==(t=e.text)&&void 0!==t?t:r.createElement(f.x,{phrase:"recommended",namespace:v}))}function y(e){return"existing-classroom"===e.type?e.hasClassrooms?r.createElement(h,{size:"sm",invert:e.hovered}):null:"open-classroom"===e.type?e.hasClassrooms?r.createElement(p.g,{size:"sm",invert:e.hovered}):"soft-gate"===e.openClassroomGatedPermission||"hard-gate"===e.openClassroomGatedPermission?r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement(p.g,{size:"sm",invert:e.hovered}),r.createElement(g.l,{size:"sm",invert:e.hovered})):r.createElement("div",{className:"d-flex align-items-center gap-2"},r.createElement(p.g,{size:"sm",invert:e.hovered}),r.createElement(h,{size:"sm",invert:e.hovered})):null}var b=n(11607),C=n(12528),x=n(83914),E=n(37963),w=n(35223);const A={optionItem:"Lu2bY"};function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var S={"flow-selector":"purple","existing-classroom":"purple","open-classroom":"blue"};function T(e){var t,n,a=(t=(0,E.X)(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?N(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],o=a[1],i=e.item.badgeComponent;return r.createElement(b.L,{onClick:function(){return e.onClick(e.item)},className:(0,l.A)("d-flex flex-column gap-4 align-items-start align-self-stretch justify-content-center","text-left cursor-pointer p-3 border rounded-3 user-select-none hover-bg-light-blue",A.optionItem),ref:s},r.createElement("div",{className:"d-flex flex-column gap-2 w-100"},r.createElement("div",{className:"d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center gap-2"},r.createElement("div",{className:"d-flex align-items-center gap-2 order-2 order-md-0"},r.createElement("div",null,r.createElement(C.f,{svgName:w.vn.Classrooms,svgSize:x.S.Standard,variant:S[e.item.id],textVariant:"white",svgWrapperClassName:"p-1"})),r.createElement("h3",{className:"h6 m-0"},e.item.title)),!!i&&r.createElement(i,{hovered:o})),e.item.subTitle&&r.createElement("p",{className:"mb-0 text-gray-900"},e.item.subTitle)))}function I(e){return r.createElement("div",{className:"bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center"},!!e.title&&r.createElement("h2",{className:"h4 m-0"},e.title),r.createElement("div",{className:"d-flex flex-column justify-content-center align-items-center gap-3 w-100"},e.options.map(function(t){return r.createElement(T,{item:t,onClick:e.onClick,key:t.id})})))}var j=n(2948),P=n(20354),O=n(75896),k=n(2510),F=n(18488),D=n(21789),L=n(37802),Z=n(86099),z=n(95890),G=n(88630);function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var M="show:previous:assignments",H=o.T.encloseNamespace("assign.flowSelectorView");function _(e){var t=function(e){var t,n,r,a,s,o,l=(s=(0,j.D)(M,!1),o=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(s,o)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?U(e,t):void 0}}(s,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=l[0],c=l[1],m=(0,z._)({entityType:e.entityType,objectId:e.objectId}),u=(0,L.r)(null),d=u.isLoadingSettings,p=u.hasClassrooms,g=P.a.useBasicFetch(F.o.getSharesByObjectId(e.objectId)),f=(null===(t=g.data)||void 0===t?void 0:t.filter(function(e){return[k.y.Classroom,k.y.Open].includes(e.type)}))||[],v=O.m.uniq(f.map(D.x.getClassroomIdFromShare).filter(function(e){return!!e})),h=P.a.useBasicFetch(g.hasCompleted&&G.F.getClassroomsByIds(v,null===(n=m.currentUser.data)||void 0===n?void 0:n.customerId)),y=P.a.useBasicFetch(p&&G.F.getPublished(null===(r=m.currentUser.data)||void 0===r?void 0:r.customerId));return{data:{loaded:m.loaded&&!d&&!!g.data&&!!h.data&&!!y.data,previousAssignments:f,previousAssignmentClassrooms:h},showPreviousAssignments:i,hasClassrooms:p&&!!(null===(a=y.data)||void 0===a?void 0:a.data.length),canCreateClassrooms:m.canCreateClassrooms,openClassroomGatedPermission:m.openClassroomGatedPermission,getPreviousAssignItemAppLink:function(e){var t=(0,Z.pY)(e);if(t)return t},onTogglePreviousAssignment:function(){c(!i)}}}({entityType:e.entityType,objectId:e.objectId}),n=(0,m.R)().experience;r.useEffect(function(){"soft-gate"===t.openClassroomGatedPermission&&e.goToOpenClassroomFlow(),"hard-gate"===t.openClassroomGatedPermission&&e.goToHardGateOpenClassroomPrompt()},[]);var a=t.data,s=a.loaded,o=a.previousAssignmentClassrooms,p=a.previousAssignments,g=(0,d.y)({data:{entity:{id:e.objectId,type:e.entityType}},analyticsOptions:{location:i.LZ.Popup,entity:i.py.Assign}}),f=g.log,v=g.getData,h=[{id:"existing-classroom",title:H("existingClassroomTitle"),subTitle:H("existingClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(y,{type:"existing-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n,openClassroomGatedPermission:t.openClassroomGatedPermission})}},{id:"open-classroom",title:H("openClassroomTitle"),subTitle:H("openClassroomDescription"),badgeComponent:function(e){var n=e.hovered;return r.createElement(y,{type:"open-classroom",hasClassrooms:t.hasClassrooms&&t.canCreateClassrooms,hovered:n,openClassroomGatedPermission:t.openClassroomGatedPermission})}}];return r.createElement(c.G,{size:"lg",animation:e.animate,title:H("title"),closePopup:e.closePopup,bodyClassName:"d-flex flex-column gap-3 p-0",contentClassName:(0,l.A)(s&&"bg-transparent border-0"),showLoadingSpinner:!s||e.loading},r.createElement(I,{options:h,onClick:function(r){if("existing-classroom"===r.id){if("minimal"===n)return e.goToNoClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-classroom"});if(!t.hasClassrooms&&t.canCreateClassrooms)return e.goToCreateClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"create-classroom"});if(!t.hasClassrooms&&!t.canCreateClassrooms)return e.goToNoExistingClassroomPrompt(),void f({type:"select-existing-classroom-flow",initialStep:"no-existing-classroom"});e.goToExistingClassroomFlow(),f({type:"select-existing-classroom-flow"})}else"open-classroom"===r.id&&(e.goToOpenClassroomFlow(),f({type:"select-open-classroom-flow"}))}}),r.createElement(u.QD,{assignments:p,show:t.showPreviousAssignments,classrooms:o.data,onToggle:t.onTogglePreviousAssignment,getItemAppLink:t.getPreviousAssignItemAppLink,getItemAnalytics:function(e,t){var n=v({type:"view-previous-assignment",share:e,yIndex:t}),r=n.analyticsOptions;return{data:n.data,options:r}}}))}var B=n(14006);function $(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,s,o,l=[],i=!0,c=!1;try{if(s=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(r=s.call(n)).done)&&(l.push(r.value),l.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{if(!i&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?V(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Q(e){var t,n=$(r.useState(null!==(t=e.selectedFlow)&&void 0!==t?t:"flow-selector"),2),o=n[0],l=n[1],i=$(r.useState(null),2),c=i[0],m=i[1],u=$(r.useState("settings"),2),d=u[0],p=u[1],g=$(r.useState(!0),2),f=g[0],v=g[1];function h(e){v(!1),l(e)}var y={objectId:e.objectId,entityType:e.entityType,closePopup:e.closePopup,initialStep:c,openClassroomInitialStep:d,goToCreateClassroomPrompt:function(){m("create-classroom"),h("existing-classroom")},goToNoClassroomPrompt:function(){m("no-classroom"),h("existing-classroom")},goToNoExistingClassroomPrompt:function(){m("no-existing-classroom"),h("existing-classroom")},goToHardGateOpenClassroomPrompt:function(){p("hard-gate"),h("open-classroom")},goToExistingClassroomFlow:function(){return h("existing-classroom")},goToFlowSelector:function(){return h("flow-selector")},goToOpenClassroomFlow:function(){return h("open-classroom")}};return r.createElement(a.r,{data:y,step:o,setStep:h,closePopup:e.closePopup,animate:f,steps:{"flow-selector":{view:_},"open-classroom":{view:B.OpenClassroomFlowView},"existing-classroom":{view:s.ExistingClassroomFlowView}}})}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var r=["second","minute","hour","day","week","month","year"],a=["秒","分钟","小时","天","周","个月","年"],s={},o=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function i(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var r=function(e,t){return(+(t?i(t):new Date)-+i(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,r=e=Math.abs(e),a=0;e>=l[a]&&a<l.length;a++)e/=l[a];return(e=Math.floor(e))>(0==(a*=2)?9:1)&&(a+=1),t(e,a,r)[n].replace("%s",e.toString())}(r,function(e){return s[e]||s.en_US}(t))};o("en_US",function(e,t){if(0===t)return["just now","right now"];var n=r[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),o("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=a[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
|
|
2
|
-
//# sourceMappingURL=9295-4242401e60-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9295-4242401e60-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/new-badge/NewBadge.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-view-count/ShareViewCount.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount.tsx","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/previous-assignments.scss","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/PreviousAssignments.tsx","file:///app/packages/libs/shared/src/components/recommended-badge/RecommendedBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-option-badge/FlowOptionBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-selector-options/flow-selector-options.scss","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/components/flow-selector-options/FlowSelectorOptions.tsx","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/hooks/useFlowSelectorData.ts","file:///app/packages/projects/lite/src/apps/assign/views/flow-selector-view/FlowSelectorView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/assign-flow-view/AssignFlowView.tsx","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.newBadge';\n\ninterface NewBadgeProps {\n size: 'sm' | 'std';\n invert?: boolean;\n text?: string;\n className?: string;\n}\n\nexport function NewBadge(props: NewBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium text-blue',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-blue',\n props.className\n )}>\n {props.text || <Text phrase='new' namespace={namespace} />}\n </span>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nconst namespace = 'sharev2.shareViewCount';\n\ninterface ShareViewCountProps {\n share: Share;\n}\n\nexport function ShareViewCount(props: ShareViewCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n \n if (isCollection)\n return <span>-</span>;\n\n return <Text namespace={namespace} phrase='viewCount' options={{ smartCount: props.share.viewCount || 0 }} />;\n}","import React from 'react';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface ShareViewedByCountProps {\n share: Share;\n}\n\nexport function ShareViewedByCount(props: ShareViewedByCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n\n if (isCollection)\n return <span>-</span>;\n \n function getViewCount(): string {\n const shareAccessCount = props.share.accessCount || 0;\n if (props.share.type === ShareType.Open)\n return `${shareAccessCount}`;\n\n if (props.share.type === ShareType.Classroom) {\n const totalRecipients = props.share.recipients.length;\n return `${shareAccessCount}/${totalRecipients}`;\n }\n\n return `${shareAccessCount}`;\n }\n \n return (\n <span className='d-inline-flex flex-row gap-2 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} />\n <span>{getViewCount()}</span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareListItem\":\"vLROV\",\"visibleOnHover\":\"o2KJH\",\"shareAvatar\":\"zDcMp\",\"shareAvatarTitle\":\"U8yMQ\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareViewCount } from 'libs/shared/apps/share-v2/components/share-view-count/ShareViewCount';\nimport { ShareViewedByCount } from 'libs/shared/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './previous-assignments.scss';\n\nconst namespace = 'assign.previousAssignments';\n\ninterface PreviousAssignmentsHeaderProps {\n count: number;\n show: boolean;\n onToggle: () => void;\n}\n\nfunction PreviousAssignmentsHeader(props: PreviousAssignmentsHeaderProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-between', props.show && 'mb-3')}>\n <h3 className='h6 m-0 p-0'><Text namespace={namespace} phrase='heading' options={{ count: props.count }} /></h3>\n <IconButton\n svgName={props.show ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={props.onToggle}\n />\n </div>\n );\n}\n\nexport function PreviousAssignmentsListHeader(): JSX.Element {\n const columnClassNames = 'd-flex align-items-end justify-content-start fw-medium';\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Row className='gx-2 px-3 mb-2'>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='assignedTo' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='views' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='viewedBy' />\n </Col>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='dateCreated' />\n </Col>\n </Row>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ntype ItemAnalytics = {\n data: HashObject;\n options: AnalyticsOptions;\n}\ninterface PreviousAssignmentListItemProps {\n share: Share;\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n\n getItemAnalytics?: (share: Share) => ItemAnalytics;\n className?: string;\n}\n\nfunction PreviousAssignmentListItem(props: PreviousAssignmentListItemProps): JSX.Element {\n const shareClassroom = ShareHelper.getClassroomForShare(props.share, props.classrooms);\n\n const analytics = props.getItemAnalytics?.(props.share);\n\n return (\n <AppLink\n key={props.share.shareId}\n appLink={props.getItemAppLink(props.share)}\n analyticsData={analytics?.data}\n analyticsOptions={analytics?.options}\n className={classNames('d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline', styles.shareListItem, props.className)}\n >\n <Row className='gx-2'>\n <Col xs={4} className='d-flex align-items-center'>\n <ShareAvatar\n type={props.share.type}\n privacy={props.share.privacy}\n classroomName={shareClassroom?.name}\n svgSize={SvgContainerSize.Small}\n openClassroomName={props.share.options?.openClassroomName}\n className={classNames(styles.shareAvatar)}\n titleClassName={classNames('text-truncate', styles.shareAvatarTitle)}\n hideSubtitle\n />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewCount share={props.share} />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewedByCount share={props.share} />\n </Col>\n <Col xs={4} lg={3} className='d-flex align-items-center justify-content-start'>\n <span>{formatDate(props.share.dateCreated)}</span>\n </Col>\n <Col lg={1} className='align-items-center justify-content-end d-none d-lg-flex'>\n <span className={classNames('cursor-pointer text-info hover-text-underline', styles.visibleOnHover)}>\n <Text namespace={namespace} phrase='view' />\n </span>\n </Col>\n </Row>\n </AppLink>\n );\n}\n\ninterface PreviousAssignmentsListProps {\n assignments: Share[];\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n scrollHeightMax?: number;\n}\n\nexport function PreviousAssignmentsList(props: PreviousAssignmentsListProps): JSX.Element {\n return (\n <div className={classNames(\n 'd-flex flex-column border-top rounded-top overflow-hidden'\n )}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={props.scrollHeightMax ?? 215}\n autoHide\n >\n {props.assignments.map((share, idx) => (\n <PreviousAssignmentListItem\n share={share}\n classrooms={props.classrooms}\n getItemAppLink={props.getItemAppLink}\n getItemAnalytics={share => props.getItemAnalytics?.(share, idx)}\n className={classNames(idx % 2 === 0 && 'bg-gray-100')}\n key={share.shareId}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}\n\ninterface PreviousAssignmentsProps {\n show: boolean;\n assignments: Share[];\n classrooms: Classroom[];\n onToggle: () => void;\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n}\n\nexport function PreviousAssignments(props: PreviousAssignmentsProps): JSX.Element {\n if (!props.assignments.length)\n return <></>;\n \n const noBottomPadding = props.show && props.assignments.length > 3;\n \n return (\n <div className={classNames('bg-white rounded-3 p-3', noBottomPadding && 'pb-0')}>\n <PreviousAssignmentsHeader count={props.assignments.length} onToggle={props.onToggle} show={props.show} />\n {props.show && (\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList {...props} />\n </>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.recommendedBadge';\n\ninterface RecommendedBadgeProps {\n invert?: boolean;\n text?: string;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function RecommendedBadge(props: RecommendedBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium text-teal',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-teal',\n props.className\n )}>\n {props.text ??\n <Text phrase='recommended' namespace={namespace} />\n }\n </span>\n );\n}","import React from 'react';\n\nimport { NewBadge } from 'libs/shared/components/new-badge/NewBadge';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { RecommendedBadge } from 'libs/shared/components/recommended-badge/RecommendedBadge';\nimport { GatedPermission } from 'libs/shared/enums/PermissionName';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\n\ninterface FlowOptionBadgeProps {\n hovered: boolean;\n hasClassrooms: boolean;\n type: AssignFlowSteps;\n openClassroomGatedPermission: GatedPermission;\n}\n\n// TODO: Clean up the premiums stuff in this file if we don't need it anymore - Sha\nexport function FlowOptionBadge(props: FlowOptionBadgeProps): JSX.Element {\n if (props.type === 'existing-classroom') {\n if (props.hasClassrooms)\n return <RecommendedBadge size='sm' invert={props.hovered} />;\n return null;\n }\n\n if (props.type === 'open-classroom') {\n if (props.hasClassrooms)\n return <NewBadge size='sm' invert={props.hovered} />;\n\n if (props.openClassroomGatedPermission === 'soft-gate' || props.openClassroomGatedPermission === 'hard-gate') {\n return (\n <div className='d-flex align-items-center gap-2'>\n <NewBadge size='sm' invert={props.hovered} />\n <PremiumBadge size='sm' invert={props.hovered} />\n </div>\n );\n }\n\n return (\n <div className='d-flex align-items-center gap-2'>\n <NewBadge size='sm' invert={props.hovered} />\n <RecommendedBadge size='sm' invert={props.hovered} />\n </div>\n );\n }\n\n return null;\n}","// extracted by mini-css-extract-plugin\nexport default {\"optionItem\":\"Lu2bY\"};","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\n\nimport styles from './flow-selector-options.scss';\n\nexport interface FlowOptionItem {\n id: AssignFlowSteps;\n title: string;\n subTitle?: string;\n badgeComponent?: ({ hovered }: {hovered: boolean}) => JSX.Element;\n}\n\nconst IdVariantMap: {[key in AssignFlowSteps]: ButtonProps['variant']} = {\n 'flow-selector': 'purple',\n 'existing-classroom': 'purple',\n 'open-classroom': 'blue'\n};\n\ninterface FlowSelectorOptionItemProps {\n item: FlowOptionItem;\n onClick: (option: FlowOptionItem) => void;\n}\n\nfunction FlowSelectorOptionItem(props: FlowSelectorOptionItemProps): JSX.Element {\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const BadgeComponent = props.item.badgeComponent;\n\n return (\n <DivButton\n onClick={() => props.onClick(props.item)}\n className={classNames(\n 'd-flex flex-column gap-4 align-items-start align-self-stretch justify-content-center',\n 'text-left cursor-pointer p-3 border rounded-3 user-select-none hover-bg-light-blue',\n styles.optionItem\n )}\n ref={hoverRef}\n >\n <div className='d-flex flex-column gap-2 w-100'>\n <div className='d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center gap-2'>\n <div className='d-flex align-items-center gap-2 order-2 order-md-0'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant={IdVariantMap[props.item.id]}\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n <h3 className='h6 m-0'>\n {props.item.title}\n </h3>\n </div>\n {!!BadgeComponent && <BadgeComponent hovered={hovered} />}\n </div>\n {props.item.subTitle && <p className='mb-0 text-gray-900'>{props.item.subTitle}</p>}\n </div>\n </DivButton>\n );\n}\n\ninterface FlowSelectorOptions {\n title?: string;\n options: [FlowOptionItem, FlowOptionItem];\n onClick: (option: FlowOptionItem) => void;\n}\n\nexport function FlowSelectorOptions(props: FlowSelectorOptions): JSX.Element {\n return (\n <div className='bg-white rounded-bottom-3 p-3 d-flex flex-column gap-3 justify-content-center align-items-center'>\n {!!props.title &&\n <h2 className='h4 m-0'>{props.title}</h2>\n }\n <div className='d-flex flex-column justify-content-center align-items-center gap-3 w-100'>\n {props.options.map(option => (\n <FlowSelectorOptionItem item={option} onClick={props.onClick} key={option.id} />\n ))}\n </div>\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Classroom } from 'libs/shared/interfaces';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst SHOW_PREVIOUS_ASSIGNMENTS = 'show:previous:assignments';\n\ninterface UseAssignDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function useFlowSelectorData(options: UseAssignDataOptions) {\n /**\n * We want to persist if the user has opened previous shares accordion\n * when they hit back or re-open the modal\n */\n const [ showPreviousAssignments, setShowPreviousAssignments ] =\n useViewModel<boolean>(SHOW_PREVIOUS_ASSIGNMENTS, false);\n\n const assignData = useAssignSharedData({\n entityType: options.entityType,\n objectId: options.objectId\n });\n\n const { isLoadingSettings, hasClassrooms } = useSettings(null);\n\n const previousShares = Flight.useBasicFetch<Share[]>(ShareRequests.getSharesByObjectId(options.objectId));\n // @todo Replace with backend filters\n const previousAssignments = previousShares.data?.filter(\n share => [ ShareType.Classroom, ShareType.Open ].includes(share.type)\n ) || [];\n const previousAssignmentClassroomIds = ArrayHelper.uniq(\n previousAssignments.map(ShareHelper.getClassroomIdFromShare).filter(x => !!x)\n );\n const previousAssignmentClassrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted &&\n ClassroomRequests.getClassroomsByIds(previousAssignmentClassroomIds, assignData.currentUser.data?.customerId)\n );\n const userClassrooms = Flight.useBasicFetch<BasePaginatedCollection<Classroom>>(\n hasClassrooms && ClassroomRequests.getPublished(assignData.currentUser.data?.customerId)\n );\n\n function getPreviousAssignItemAppLink(share: Share): Core.AppLink {\n const appLink = getInsightsOverviewAppLink(share);\n\n if (!appLink)\n return;\n\n return appLink;\n }\n\n function onTogglePreviousAssignment() {\n setShowPreviousAssignments(!showPreviousAssignments);\n }\n\n const dataLoaded = (\n assignData.loaded &&\n !isLoadingSettings &&\n !!previousShares.data &&\n !!previousAssignmentClassrooms.data &&\n !!userClassrooms.data\n );\n\n return {\n data: {\n loaded: dataLoaded,\n previousAssignments,\n previousAssignmentClassrooms\n },\n showPreviousAssignments,\n hasClassrooms: (hasClassrooms && !!userClassrooms.data?.data.length),\n canCreateClassrooms: assignData.canCreateClassrooms,\n openClassroomGatedPermission: assignData.openClassroomGatedPermission,\n getPreviousAssignItemAppLink,\n onTogglePreviousAssignment\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { PreviousAssignments } from 'apps/assign/components/previous-assignments/PreviousAssignments';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { FlowOptionBadge } from './components/flow-option-badge/FlowOptionBadge';\nimport { FlowOptionItem, FlowSelectorOptions } from './components/flow-selector-options/FlowSelectorOptions';\nimport { useFlowSelectorData } from './hooks/useFlowSelectorData';\n\nconst namespace = 'assign.flowSelectorView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface FlowSelectorViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToCreateClassroomPrompt: () => void;\n goToOpenClassroomFlow: () => void;\n goToExistingClassroomFlow: () => void;\n goToNoClassroomPrompt: () => void;\n goToNoExistingClassroomPrompt: () => void;\n goToHardGateOpenClassroomPrompt: () => void;\n}\n\nexport function FlowSelectorView(props: FlowSelectorViewProps): JSX.Element {\n const viewModel = useFlowSelectorData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { experience } = useClassroomExperience();\n\n React.useEffect(() => {\n /**\n * When open classroom is gated, we always go to the \n */\n if (viewModel.openClassroomGatedPermission === 'soft-gate')\n props.goToOpenClassroomFlow();\n\n if (viewModel.openClassroomGatedPermission === 'hard-gate')\n props.goToHardGateOpenClassroomPrompt();\n }, []);\n\n const {\n loaded,\n previousAssignmentClassrooms,\n previousAssignments\n } = viewModel.data;\n\n const { log, getData } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n entity: EntityType.Assign\n }\n });\n \n const choices: [FlowOptionItem, FlowOptionItem] = [\n {\n id: 'existing-classroom',\n title: getPhrase('existingClassroomTitle'),\n subTitle: getPhrase('existingClassroomDescription'),\n badgeComponent: ({ hovered }) => (\n <FlowOptionBadge\n type='existing-classroom'\n hasClassrooms={viewModel.hasClassrooms && viewModel.canCreateClassrooms}\n hovered={hovered}\n openClassroomGatedPermission={viewModel.openClassroomGatedPermission}\n />\n )\n },\n {\n id: 'open-classroom',\n title: getPhrase('openClassroomTitle'),\n subTitle: getPhrase('openClassroomDescription'),\n badgeComponent: ({ hovered }) => (\n <FlowOptionBadge\n type='open-classroom'\n hasClassrooms={viewModel.hasClassrooms && viewModel.canCreateClassrooms}\n hovered={hovered}\n openClassroomGatedPermission={viewModel.openClassroomGatedPermission}\n />\n )\n }\n ];\n\n function onClickFlowOption(option: FlowOptionItem) {\n if (option.id === 'existing-classroom') {\n if (experience === 'minimal') {\n props.goToNoClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'no-classroom'\n });\n return;\n }\n /** \n * If a user clicks 'existing-classroom' flow and they dont have classrooms but can create classrooms then\n * We take them through the 'existing-classroom' flow with 'create-classroom-prompt' as initial step\n */\n if (!viewModel.hasClassrooms && viewModel.canCreateClassrooms) {\n props.goToCreateClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'create-classroom'\n });\n return;\n }\n\n if (!viewModel.hasClassrooms && !viewModel.canCreateClassrooms) {\n props.goToNoExistingClassroomPrompt();\n log({\n type: 'select-existing-classroom-flow',\n initialStep: 'no-existing-classroom'\n });\n return;\n }\n \n props.goToExistingClassroomFlow();\n log({\n type: 'select-existing-classroom-flow'\n });\n } else if (option.id === 'open-classroom') {\n props.goToOpenClassroomFlow();\n log({\n type: 'select-open-classroom-flow'\n });\n }\n }\n\n function getItemAnalytics(share: Share, yIndex: number) {\n const { analyticsOptions, data } = getData({\n type: 'view-previous-assignment',\n share,\n yIndex\n });\n\n return {\n data,\n options: analyticsOptions\n };\n }\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n title={getPhrase('title')}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3 p-0'\n contentClassName={classNames(loaded && 'bg-transparent border-0')}\n showLoadingSpinner={!loaded || props.loading}\n >\n <FlowSelectorOptions\n options={choices}\n onClick={onClickFlowOption}\n />\n\n <PreviousAssignments\n assignments={previousAssignments}\n show={viewModel.showPreviousAssignments}\n classrooms={previousAssignmentClassrooms.data}\n onToggle={viewModel.onTogglePreviousAssignment}\n getItemAppLink={viewModel.getPreviousAssignItemAppLink}\n getItemAnalytics={getItemAnalytics}\n />\n </Popup>\n );\n}","import React from 'react';\n\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopup } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AssignFlowSteps } from 'apps/assign/interfaces/Assign';\nimport { ExistingClassroomFlowView, ExistingClassroomFlowViewProps } from 'apps/assign/views/existing-classroom-flow-view/ExistingClassroomFlowView';\nimport { FlowSelectorView, FlowSelectorViewProps } from 'apps/assign/views/flow-selector-view/FlowSelectorView';\nimport { OpenClassroomFlowView, OpenClassroomFlowViewProps } from 'apps/assign/views/open-classroom-flow-view/OpenClassroomFlowView';\n\ntype AllAssignFlowViewProps = FlowSelectorViewProps\n & ExistingClassroomFlowViewProps\n & OpenClassroomFlowViewProps;\n\ninterface AssignViewProps extends PopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n selectedFlow?: AssignFlowSteps\n}\n\nexport function AssignFlowView(props: AssignViewProps): JSX.Element {\n const [ selectedFlow, setSelectedFlow ] = React.useState<AssignFlowSteps>(props.selectedFlow ?? 'flow-selector');\n const [ existingClassroomInitialStep, setExistingClassroomInitialStep ] = React.useState<'create-classroom' | 'no-classroom' | 'no-existing-classroom'>(null);\n const [ openClassroomInitialStep, setOpenClassroomInitialStep ] = React.useState<'settings' | 'hard-gate'>('settings');\n const [ animate, setAnimate ] = React.useState(true);\n\n function setFlow(flow: AssignFlowSteps) {\n setAnimate(false);\n setSelectedFlow(flow);\n }\n\n function goToCreateClassroomPrompt() {\n setExistingClassroomInitialStep('create-classroom');\n setFlow('existing-classroom');\n }\n\n function goToNoClassroomPrompt() {\n setExistingClassroomInitialStep('no-classroom');\n setFlow('existing-classroom');\n }\n\n function goToHardGateOpenClassroomPrompt() {\n setOpenClassroomInitialStep('hard-gate');\n setFlow('open-classroom');\n }\n\n function goToNoExistingClassroomPrompt() {\n setExistingClassroomInitialStep('no-existing-classroom');\n setFlow('existing-classroom');\n }\n\n const data: AllAssignFlowViewProps = {\n objectId: props.objectId,\n entityType: props.entityType,\n closePopup: props.closePopup,\n initialStep: existingClassroomInitialStep,\n openClassroomInitialStep,\n goToCreateClassroomPrompt,\n goToNoClassroomPrompt,\n goToNoExistingClassroomPrompt,\n goToHardGateOpenClassroomPrompt,\n goToExistingClassroomFlow: () => setFlow('existing-classroom'),\n goToFlowSelector: () => setFlow('flow-selector'),\n goToOpenClassroomFlow: () => setFlow('open-classroom')\n };\n \n return (\n <MultiStepPopup<AllAssignFlowViewProps, AssignFlowSteps>\n data={data}\n step={selectedFlow}\n setStep={setFlow}\n closePopup={props.closePopup}\n animate={animate}\n steps={{\n 'flow-selector': { view: FlowSelectorView },\n 'open-classroom': { view: OpenClassroomFlowView },\n 'existing-classroom': { view: ExistingClassroomFlowView }\n }}\n />\n );\n}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["namespace","NewBadge","props","className","size","invert","text","phrase","ShareViewCount","MasterType","includes","share","objectTypeId","Text","options","smartCount","viewCount","ShareViewedByCount","SvgContainer","svgName","shareAccessCount","accessCount","type","ShareType","totalRecipients","recipients","length","getViewCount","PreviousAssignmentsHeader","show","count","IconButton","onClick","onToggle","PreviousAssignmentsListHeader","columnClassNames","value","Row","Col","xs","PreviousAssignmentListItem","shareClassroom","ShareHelper","classrooms","analytics","getItemAnalytics","AppLink","key","shareId","appLink","getItemAppLink","analyticsData","data","analyticsOptions","ShareAvatar","privacy","classroomName","name","svgSize","S","openClassroomName","titleClassName","hideSubtitle","lg","dateCreated","PreviousAssignmentsList","autoHeight","autoHeightMin","autoHeightMax","scrollHeightMax","autoHide","assignments","map","idx","PreviousAssignments","noBottomPadding","RecommendedBadge","FlowOptionBadge","hasClassrooms","hovered","openClassroomGatedPermission","PremiumBadge","IdVariantMap","FlowSelectorOptionItem","hoverRef","BadgeComponent","item","badgeComponent","DivButton","ref","IconCircle","variant","id","textVariant","svgWrapperClassName","title","subTitle","FlowSelectorOptions","option","SHOW_PREVIOUS_ASSIGNMENTS","getPhrase","LanguageService","FlowSelectorView","viewModel","showPreviousAssignments","setShowPreviousAssignments","assignData","useAssignSharedData","entityType","objectId","useSettings","isLoadingSettings","previousShares","ShareRequests","previousAssignments","filter","previousAssignmentClassroomIds","ArrayHelper","x","previousAssignmentClassrooms","hasCompleted","ClassroomRequests","currentUser","customerId","userClassrooms","loaded","canCreateClassrooms","getPreviousAssignItemAppLink","onTogglePreviousAssignment","useFlowSelectorData","experience","useClassroomExperience","goToOpenClassroomFlow","goToHardGateOpenClassroomPrompt","getAssignEventLogger","entity","location","log","getData","choices","Popup","animation","animate","closePopup","bodyClassName","contentClassName","showLoadingSpinner","loading","goToNoClassroomPrompt","initialStep","goToCreateClassroomPrompt","goToNoExistingClassroomPrompt","goToExistingClassroomFlow","yIndex","AssignFlowView","selectedFlow","setSelectedFlow","existingClassroomInitialStep","setExistingClassroomInitialStep","openClassroomInitialStep","setOpenClassroomInitialStep","setAnimate","setFlow","flow","goToFlowSelector","MultiStepPopup","step","setStep","steps","view","OpenClassroomFlowView","ExistingClassroomFlowView","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}
|